RFC Errata
RFC 7950, "The YANG 1.1 Data Modeling Language", August 2016
Note: This RFC has been updated by RFC 8342, RFC 8526
Source of RFC: netmod (ops)See Also: RFC 7950 w/ inline errata
Errata ID: 5698
Status: Verified
Type: Editorial
Publication Format(s) : TEXT
Reported By: Andy Bierman
Date Reported: 2019-04-18
Verifier Name: Ignas Bagdonas
Date Verified: 2019-04-24
Section 7.5.4.3 says:
container interface { leaf ifType { type enumeration { enum ethernet; enum atm; } } leaf ifMTU { type uint32; } must 'ifType != "ethernet" or ifMTU = 1500' { error-message "An Ethernet MTU must be 1500"; } must 'ifType != "atm" or' + ' (ifMTU <= 17966 and ifMTU >= 64)' { error-message "An ATM MTU must be 64 .. 17966"; } }
It should say:
container interface { leaf ifType { type enumeration { enum ethernet; enum atm; } } leaf ifMTU { type uint32; } must 'string(ifType) != "ethernet" or ifMTU = 1500' { error-message "An Ethernet MTU must be 1500"; } must 'string(ifType) != "atm" or' + ' (ifMTU <= 17966 and ifMTU >= 64)' { error-message "An ATM MTU must be 64 .. 17966"; } }
Notes:
The intent of the example is for each must-stmt to be false if the ifType leaf does not exist.
However the XPath is incorrect.
From the XPath 1.0 spec, section 3.4, para 5
If one object to be compared is a node-set and the other is a string, then the comparison will be true if and only if there is a node in the node-set such that the result of performing the comparison on the string-value of the node and the other string is true.
The empty node-set is not implicitly converted to an empty string for a = or != comparison.
Instead the string() function must explicitly convert the node-set to a string