摘要

  • draft-fedyk-netmod-yang-normal-form-00 提议保留字符串收到时的词法写法,同时为相等比较、列表键与配置型 leaf-list 推导一个确定性的规范化形式。
  • 在 MAC 示例中,冒号或连字符、十六进制字母的大写或小写,都会归并为同一个 12 位比较值。pattern 仍只负责语法准入,并不会让两个合法字符串自动相等。
  • Datatracker 将它列为活跃的个人 Internet-Draft,预期 RFC 状态为空,IESG 状态为 I-D Exists;正文页眉却写着 Intended status: Standards Track。这不构成 NETMOD 采纳或 IETF 背书。

保留写法,同时换一把比较尺

管理系统可能用不同文本表达同一个 48 位地址。RFC 6991 及其现行修订版 RFC 9911 中的 IETF 常用 YANG 类型采用六组冒号分隔的八位组,并把小写描述为规范写法;IETF 会议材料展示的 IEEE 类型使用连字符,并把大写描述为规范写法。工程师眼中相同的地址,在字符串键中仍可能是两个不同值。

第 00 版草案试图拆开“如何呈现”和“如何比较”。收到的词法值继续用于编码与读取;可选的 normalized-form 扩展则指定一个确定性算法,供相等判断、列表键唯一性和配置型 leaf-list 唯一性使用。

草案的 mac-48 算法先按各自类型验证输入,再移除分隔符,把十六进制字母转成大写,留下 12 位数字。因此 aa:bb:cc:dd:ee:ff、AA:BB:CC:DD:EE:FF、aa-bb-cc-dd-ee-ff 与 AA-BB-CC-DD-EE-FF 都得到 AABBCCDDEEFF。正文以 0xAABBCCDDEEFF 显示结果,其中 12 位身份值本身不含前缀。

这也说明为什么放宽正则表达式不够。RFC 7950 中,pattern 是字符串的准入约束;内建 string 的规范形式就是其词法形式,而且不会进行 Unicode 规范化。正则可以同时接受大小写,却不会命令比较器折叠大小写;可以同时接受两种分隔符,也不会声明两者等价。

同一份模型可能产生两种重复结论

该扩展是选择性支持的。支持它的实现必须采用规范化形式;不支持的实现继续按普通词法类型处理。这与 YANG 现有扩展规则一致:不认识的扩展可以整体忽略,声称支持的扩展则必须按其规范执行。

差异因此会进入配置结果。假设已有 aa:bb:cc:dd:ee:ff,随后又提交 AA-BB-CC-DD-EE-FF。在两处类型分别允许该写法的前提下,支持扩展的实现可把后者拒绝为同一规范化键;不支持的实现可能把它们视为两个字符串。=、!=、带键列表以及配置型 leaf-list 都可能出现这种分叉。

一张合格的拒绝凭证不能只保存两个字符串。它还应包括模块版本、模式节点与基础类型、声明的规范化身份、实现及版本、扩展支持证据,以及实际使用的规范化值。缺少这些字段,“重复”只是一句结论,看不出是哪条规则得出的。

草案状态必须同时说清三件事

Datatracker 当前页面显示:活跃个人 Internet-Draft、没有 RFC stream、没有预期 RFC 状态、IESG 状态为 I-D Exists。页面还明确提醒,任何人都可以提交 Internet-Draft,该文档没有 IETF 背书或标准流程中的正式地位。与此并列的是,固定的第 00 版正文页眉写有 Intended status: Standards Track,到期日为 2027 年 1 月 2 日。

两组信息不能互相替代。页眉记录作者在文本中写下的目标,Datatracker 记录文档实际所处的流程。即使草案内嵌模块的 organization 字段写着 IETF NETMOD Working Group,当前记录也没有提供工作组采纳证据。

作者是 LabN Consulting 的 Don Fedyk 和 Ericsson 的 Scott Mansfield。Fedyk 的 Datatracker 页面列出 24 份 RFC;Mansfield 的页面列出五份 RFC及多项 IETF—ITU-T 联络角色。经验说明提案值得认真审阅,却不能替代机构批准。

问题的公开讨论更早出现。Mansfield 在 IETF 124 NETMOD 演示中比较过 IETF 与 IEEE 写法,并列出迁移到单一文本、扩大 pattern、增加等价比较机制、改变存储或维持现状等路径。第 00 版选择的是“保留旧写法、另加比较机制”。

相等只是一张有边界的凭证

规范化值相等,证明两个已获准输入通过了同一个已声明转换。XPath 返回相等,证明某个实现在特定模式环境中作出了该判断。服务器拒绝第二个键,证明一次本地配置约束被触发。

它们都不能证明两条记录对应同一台真实设备,也不能证明未来所有规范化身份都无碰撞、两端算法实现完全一致、双方都支持扩展、模式与 XPath 可见树相同,或旧数据已经迁移。它同样不证明操作者意图、授权、转发表去重、报文路径或客户结果。

这与普通规范化不同。XDR 一类机制把值发成唯一的外部字节形式;本草案保留多种词法文本,仅为若干比较另设身份。它也不等同于模块版本与模式差异:加载正确文件只是前提,不能证明算法确实运行。

真正需要回答的问题很具体:当两个字符串进入 YANG 控制的决策时,什么证据能说明系统比较的是声明的值,而不是排版差异?