Robert Wilton <rwil...@cisco.com> writes: > Hi Andy, > > Picking up a slightly old thread after PTO ... > > On 24/08/2015 22:50, Andy Bierman wrote: >> >> >> On Mon, Aug 24, 2015 at 2:24 PM, Robert Wilton <rwil...@cisco.com >> <mailto:rwil...@cisco.com>> wrote: >> >> Hi Randy, >> >> On 24/08/2015 20:20, Randy Presuhn wrote: >> >> Hi - >> >> From: Ladislav Lhotka <lho...@nic.cz <mailto:lho...@nic.cz>> >> Sent: Aug 24, 2015 11:44 AM >> To: Andy Bierman <a...@yumaworks.com >> <mailto:a...@yumaworks.com>> >> Cc: "netmod@ietf.org <mailto:netmod@ietf.org>" >> <netmod@ietf.org <mailto:netmod@ietf.org>> >> Subject: Re: [netmod] Y26 again, sorry >> >> ... >> >> YANG does not provide any mechanism to REQUIRE modules >> A and B >> to both be implemented on a server. You may think it >> should, but >> currently the YANG conformance is for an individual >> module. >> >> There are sections on conformance and conformance >> announcement, >> and they say nothing like this. In my view, the data model >> comprises >> *all* modules advertised by the server. I think your >> interpretation >> of conformance might be an extrapolation from SNMP/SMI >> times, but, >> for better or worse, it really has no support in the YANG >> spec. >> >> It sounds as though you might be talking past each other. >> I believe part of Andy's point is that clients will need to deal >> with servers that do not implement (and thus do not advertise) >> the augmenting module. But there's (I think) a more interesting >> issue beneath this. >> >> Let's start with module M. Let's say M is for "modem" (to pick >> an obsolete but widely understood resource). >> Two different augmenting modules, F (for FSK - frequency >> shift keying) and Q (for QAM - quadrature amplitude modulation) >> are developed. Let us say that F and Q are mutually incompatible. >> >> A system with multiple Ms could well have both M+F and M+Q modems, >> but (if we claim F & Q are incompatible) could not have M+F+Q. >> If naked M is to be prohibited in systems (also) supporting F or Q >> or both, we don't currently have a mechanism to do so. >> >> Could this be achieved by augmenting from a choice statement? >> >> M defines the choice statement but with no case statements. >> >> F and Q both implement separate case statements that augment the >> choice statement in M. The case statements have containers which >> hold the parameters related to F or Q. >> >> M without F or Q is meaningless. >> M+F or M+Q works, but the choice statement means that you cannot >> have M+F+Q. >> >> >> nice solution >> >> This is perhaps the cleanest way to add mandatory nodes to a module. >> The old client will not attempt to create the new case. >> >> As I said before, I am OK with changing MUST NOT to SHOULD NOT >> add mandatory nodes, and then add MAY when X, Y, Z conditions are met. >> >> Two conditions so far: >> >> (1) augment + when <new flag set that old client will not set> >> >> (2) augment choice with a new case-stmt >> >> (1) is hard to define, but not (2) > > So, Lada is using (2) for DNS zones which works. Does the Y26 text need > to be updated to explicitly allow this, or is this implicitly allowed > anyway?
It is allowed in YANG 1.0. > > Unfortunately (2) won't work for my model augmentation issue, of wanting > to enforce that a sub-interface has to have a parent interface-ref. > As ietf-interfaces could also use the same mandatory choice pattern but it seems too late now. This is an example why the strict module update rules are counter-productive at this stage - instead if adopting the best current practice we have to resort to kludges. > a recap, the yang from my interfaces-common draft is: > > augment "/if:interfaces/if:interface" { > when "if:type = 'ianaift:l2vlan' or > if:type = 'ianaift:atmSubInterface' or > if:type = 'ianaift:frameRelay'" { > description > "Any ianaift :types that represent sub-interfaces"; > } > if-feature "sub-interfaces"; > description "Add a parent interface field to interfaces to model > sub-interfaces"; > leaf parent-interface { > type if:interface-ref; > /* > * TODO - How to make this mandatory without using the > * mandatory keyword. > * - Current options appear to be: > * - Create a sub-interface container with presence. ... which doesn't make the parent-interface mandatory anyway. > * - Enforce the constraint with a must statement. Yes, but this design offers no good place for it, you'd need to use an extra np-container and attach the must statement to it. > */ > //mandatory true; > description > "This is the mandatory reference to the parent interface of > this sub-interface."; > } > } > > > One suggestion that I've heard is based on a specific instance of your > first condition above, where the when statement only uses identities > defined by the same augmenting module: > I.e. don't use the existing "ianaift:l2vlan" for a VLAN sub-interface, > but define a new interface type identity "vlan-sub" in my interface > extensions module which would inherit from "iftype:l2vlan". Similarly > for atmSubInterface and frameRelay. Obviously, at the moment, this is > not allowed, but potentially it could be, and it is still safe to > existing clients (since they can't be using the new type). I think it would be best to make backward old-client compatibility a general guideline rather than a hard language rule. Currently it is enforced in some cases (augments, module update rules) but a mere guideline in other cases (must statements, extensions, defaults). Lada > > However, I'm not really sure whether fragmenting the list of iftypes > into separate modules would be a good idea ... > > Thanks, > Rob > > >> >> I can point you to a concrete example if it helps. >> >> Thanks, >> Rob >> >> >> >> >> >> Andy >> >> Randy >> >> _______________________________________________ >> netmod mailing list >> netmod@ietf.org <mailto:netmod@ietf.org> >> https://www.ietf.org/mailman/listinfo/netmod >> >> >> _______________________________________________ >> netmod mailing list >> netmod@ietf.org <mailto:netmod@ietf.org> >> https://www.ietf.org/mailman/listinfo/netmod >> >> > > _______________________________________________ > netmod mailing list > netmod@ietf.org > https://www.ietf.org/mailman/listinfo/netmod -- Ladislav Lhotka, CZ.NIC Labs PGP Key ID: E74E8C0C _______________________________________________ netmod mailing list netmod@ietf.org https://www.ietf.org/mailman/listinfo/netmod