I notice that draft-ietf-6man-rfc6874bis has expired. What is the plan with 
that document? Was there any consensus on the zone identifier?

I ask, because I am interested in moving rfc6991-bis forward. Can we close on 
this thread with lowercase and % encoding of special characters as the 
consensus?

Thanks.

> On Mar 31, 2023, at 3:43 PM, Brian E Carpenter <brian.e.carpen...@gmail.com> 
> wrote:
> 
> I just put two and two together and got five. There are so many threads that 
> I can't remember who brought this point up, but the editor's copy of 
> draft-ietf-6man-rfc6874bis now includes this:
> 
> "The mapping
> between the human-readable zone identifier string and the numeric value is a 
> host-specific
> function that varies between operating systems. The present document is 
> concerned only
> with the human-readable string. However, in some operating systems it is 
> possible
> to use the underlying interface number, represented as a decimal integer, as 
> an alternative
> to the human-readable string. For example, on Linux, a user can determine 
> interface
> numbers simply by issuing the command "ip link show" and then, for example,
> use "fe80::1%5" instead of "fe80::1%Ethernet1/0/1", if the interface number
> happens to be 5."
> 
> I don't know whether this work-around will apply in every type of device, but 
> I certainly can't see any other solution, since the URI syntax is very 
> insistent on lowercase normalization and special characters.
> 
> Comments?
> 
> Regards
>   Brian Carpenter
> 
> On 23-Mar-23 14:48, Brian E Carpenter wrote:
>> Hi Rob,
>> On 23-Mar-23 02:32, Rob Wilton (rwilton) wrote:
>>> Hi Jürgen, Netmod, & rfc6874bis interested parties,
>>> 
>>> In my AD review of draft-ietf-netmod-rfc6991-bis-15, Jurgen has proposed a 
>>> change to definition of the zone-id in the ip-address, ipv4-address, and 
>>> ipv6-address types.  These changes move the definition somewhat closer to 
>>> what is in rfc6874bis, but they are still different enough that we don't 
>>> have wide compatibility.
>>> 
>>> I think that it may be useful to have a discussion to see if we can find a 
>>> technical solution that works both for YANG models and that is compatible 
>>> with being used in URIs.  Hence, I've separated my AD review comments for 
>>> these two specific issues into this separate thread to try and ensure that 
>>> interested parties can be involved in the discussion:
>>> 
>>> (2) In RFC 6991:
>>>       typedef ipv6-address {
>>>         type string {
>>>           pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
>>>                 + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
>>>                 + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
>>>                 + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
>>>                 + '(%[\p{N}\p{L}]+)?';
>>> 
>>> In draft-ietf-netmod-rfc6991-bis-15, p 27, sec 4.  Internet Protocol Suite 
>>> Types
>>>       typedef ipv6-address {
>>>         type string {
>>>           pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
>>>                 + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
>>>                 + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
>>>                 + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
>>>                 + '(%[A-Za-z0-9][A-Za-z0-9\-\._~/]*)?';
>>> 
>>> I'm not saying that this change is wrong, but this technically looks to be 
>>> a non-backwards-compatible change (depending on whether interface names 
>>> could ever use non-ASCII characters).  Where is the set of allowed 
>>> characters for zone-ids defined?  I couldn't find them in an RFC, RFC 4007 
>>> section 11.2 seems to indicate that there is no restriction.
>> RFC 4007 is woefully vague, but it does limit the character set to ASCII. 
>> The failings I have noted so far include:
>> 1) No length limit - i.e. exposed to buffer overrun bugs and exploits;
>> 2) NULL is not disallowed - i.e. exposed to NULL-terminated string bugs and 
>> exploits;
>> 3) In fact, no statement about non-alphanumeric characters at all;
>> 4) No statement about case sensitivity or case folding;
>> [It's clear to me that RFC 4007 needs to be revisited after we have settled 
>> the current issues.]
>> All of these are problematic in the URI context, not to mention the poor 
>> choice of "%" as a delimiter.
>> The above doesn't tell me what is intended about case sensitivity, and it 
>> does include "/" which is troublesome in URIs.
>> Maybe you could consider an even more complex definition that distinguishes 
>> general zone identifiers from URI-friendly zone identifiers? The latter 
>> would be something like
>> '(%[a-z0-9][a-z0-9\-\._~]*)?'
>> Then there could be a general recommendation to use the restricted character 
>> set if, and only if, there is an operational requirement to generate URIs 
>> for a given interface.
>>>  draft-ietf-6man-rfc6874bis, which I'm currently holding a 'discuss' ballot 
>>> position on, effectively limits the usable character set of zone-ids to the 
>>> unreserved set in URIs, which seems to match those above except for '/' 
>>> that is allowed above (and used in many interface names), but not in the 
>>> URI's unreserved character set.  A further difference is that upper case 
>>> characters are allowed in this typedef but are not allowed when used in the 
>>> host part of URIs.
>> Well, more precisely they will almost certainly be normalized to lower case 
>> by the URI parser.
>>   
>>> Update - I've now seen the thread 'ipv6-address in RFC 6991 (and bis)', and 
>>> Jürgen has put together a useful blog post, thanks!
>>> 
>>> Given that "interface-name" in RFC 8343, and the text in RFC 4007 section 
>>> 11.2, then arguably the safest thing here would be to allow the zone-id to 
>>> be unrestricted, i.e., "(%.*)?"  However, this would leave 
>>> draft-ietf-6man-rfc6874bis as only being able to support a small fraction 
>>> of interface names as zone-ids in URLs.  The authors of 
>>> draft-ietf-6man-rfc6874bis seem to indicate that it works for all interface 
>>> names that currently matter for their use case.
>> That appears to be correct, as noted in the newly proposed text at
>> https://www.cs.auckland.ac.nz/~brian/draft-ietf-6man-rfc6874bis-06X.html#section-1-5
>>> 
>>> An alternative solution could be to somewhere define the zone-ids in YANG 
>>> to match the restrictive set in draft-ietf-6man-rfc6874bis (i.e., lower 
>>> case only, and disallow '/').  I think that this would then require that we 
>>> recommend a conversion of interface names into draft-ietf-6man-rfc6874bis 
>>> compatible zone-ids interface-names.  E.g., such a conversion could take 
>>> the interface name, and change any uppercase characters to lower case, and 
>>> replace any symbol that isn't in the allowed character set with '_'.  This 
>>> conversion is effectively one way, and there is a theoretical risk that the 
>>> converted interface names could collide, but this may be unlikely in 
>>> practice.  Obviously, this conversation doesn't handle non-ASCII interface 
>>> names, but I'm not sure how realistic it is that they would be used anyway.
>> Remember there is a browser between the URI and the operating system, and 
>> the browser communicates with the operating system via a socket interface. 
>> So such a conversion is useless unless the socket interface in the device 
>> concerned is fully aware of the mapping. So even if there is a use case, 
>> there are a lot of moving parts here.
>> Personally I think allowing non-ASCII would be disastrously complex and 
>> would have no real advantage for netops staff. Езернет1/0/1 instead of 
>> Ethernet1/0/1 doesn't seem worth all the resultant hassle.
>>> 
>>> This general comment also applies for the same change for 'ipv4-address'.
>> Fortunately this is 100% out of scope for the 6man draft.
>>> 
>>> (3) draft-ietf-netmod-rfc6991-bis-15, p 28, sec 4.  Internet Protocol Suite 
>>> Types
>>> 
>>>           The canonical format of IPv6 addresses uses the textual
>>>           representation defined in Section 4 of RFC 5952.  The
>>>           canonical format for the zone index is the numerical
>>>           format as described in Section 11.2 of RFC 4007.";
>>> 
>>> Would it make sense to also change the canonical format for the zone index 
>>> to be interface name (or converted interface name) rather than numeric id 
>>> (when used in YANG models)?
>> Please not. In a completely different context (RFC 8990) I've written code 
>> handling link local addresses and multiple interfaces, and driving it by 
>> interface index rather than by name is definitely the way to go. Humans may 
>> like the names, but the numbers are much better for programs.
>> Regard
>>     Brian
>>> 
>>> This comment also applies for the same change for 'ipv4-address'.
>>> 
>>> 
>>> Thoughts and comments on these two issues are welcome.
>>> 
>>> Regards,
>>> Rob
> _______________________________________________
> netmod mailing list
> netmod@ietf.org
> https://www.ietf.org/mailman/listinfo/netmod


Mahesh Jethanandani
mjethanand...@gmail.com






_______________________________________________
netmod mailing list
netmod@ietf.org
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to