On Mon, 29 Apr 2019, Juergen Schoenwaelder wrote:

I believe we are not in the position to tell clients that they should or should not do. If I push the config value 2001:DB8::/64 (since my database has values stored using uppercase characters) and it comes back as 2001:db8::/64, then so be it; it might be convenient for me to be allowed to push 2001:0DB8:0:0:0:0:0:0/64 and not having to worry about how to produce the RFC 5952 representation in my glue code that ties into my database backend. Why would we say clients should not send values in non-canonical format? Why would we say clients have to take the pain to ensure everything is turned into 2001:db8::/64 (to continue the example) before sending values to the server?

Note that the ipv6-address definition has the same canonicalization
properties (if we consider the address portion of ipv6-prefix) and
there is no text saying you should send 2001:db8::1 instead of
2001:0DB8::1.

2001:0DB8::1 and 2001:db8::1 represent the same thing in the end. 2001:db8::/64 and 2001:db8::1/64 is not the same thing in the end.

The fact that the server accepts 2001:db8::1/64 and turns it into 2001:db8::/64 is something I believe should be explicitly stated. It's not obvious from neither the description of what a "canonical format" is in the YANG spec whether this also applies to dropping actual representation.

A contrived example is if I specify a canonical format for a string that is [a-f] and I sent it "abcdefghij" then the server just accepts this and turns it into "abcdef"? That's basically what's happening above. A lot of people would be astonished by this behaviour, and I think this should be more explicit when this is happening. From what we're seeing now from different implementations doing differently, this is not obvious.

I think our mission instead is to make it clear what the canonical format is and that servers will turn lexical representations they accept into canonical lexical representation. This way people can take informed decisions about what is appropriate for their specific clients.

The ipv6-prefix type doesn't have a lexical definition. An integer has lexical definition. Does this mean everything should have both just to make sure everything is clear? And should a server disallow input that doesn't adhere to the lexical format?

I just want it to be 100% clear from reading about what lexical and canonical format is what the server should and shouldn't do in each case.

I still think there is a difference between representation of the underlying information being changed or not. For instance, DNS domain names are case insensitive. Turning input into lower case (canonical format) is fine, this changes nothing operationally. Accepting client edit-config and just removing ASCII characters can cause unexpected and baffling behavior.

I still believe that if a client does edit-config on a DNS domain and include for instance a "%" in the name then the server should throw an error. So same thing with the ipv6-prefix, it needs to be defined whether the server should accept (and zero) host bits or not.

Do we have other types with this kind of ambiguity?

--
Mikael Abrahamsson    email: [email protected]

_______________________________________________
netmod mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to