On 20/09/2017 15:33, Ladislav Lhotka wrote:
Robert Wilton <rwil...@cisco.com> writes:

On 19/09/2017 15:07, Ladislav Lhotka wrote:
Robert Wilton píše v Út 19. 09. 2017 v 14:49 +0100:
Hi Lada,


On 19/09/2017 14:37, Ladislav Lhotka wrote:
Martin Bjorklund <m...@tail-f.com> writes:

Ladislav Lhotka <lho...@nic.cz> wrote:
Hi,

I support the adoption but I propose two conceptual changes:

1. Introduce a new module name and namespace so that it is not
necessary to carry along the deprecated baggage. If readability is
the primary concern, this is IMO the way to go. Instead of
"ietf-ip-2", I'd suggest something like "ietf- ip-nmda".

2. Avoid obsoleting RFC 7277. I believe the old modules may continue
to be used
in areas where NMDA is an overkill, such as open source home
routers.
Why wouldn't NMDA be appropriate in an open source home router?  Note
that the new model really just have a single tree instead of two
trees, so the data that needs to be instrumented is more or less the
same.
It is quite likely that some parts of the data models will be
implemented only as configuration but not state data. In the "old style"
modules it is easy to add a deviation for the node(s) under -state but
in NMDA style this is not possible because we only have one node.
The new YANG library allows different sets of modules to be available
for <conventional> datastores vs <operational>.   The operational
datastore can also have different features supported and different
deviations vs the conventional datastores.
OK, I missed the 7895bis draft, sorry. Then there could be differences in
mandatory/optional (e.g. a node is optional in configuration but mandatory in
state data) or the data type of a leaf can differ. How can these be handled?
If the data type of the leaf can differ, then normally this should be
modeled as two separate leaves.  Do you have a concrete example of
this?
So, for example, duplex and duplex-state? And <operational> will
have both as siblings?
Here I presume you are thinking that the configurable value for duplex is "full/half/auto", but the operational value is "full/half"?

The solution here is really to model auto-negotiation on/off as a separate leaf (which also more closely reflects the actual behaviour of the auto-negotiation protocol).  Then for duplex both the space for both the configured and operational leaves are the same, i.e. both taking "full/half", and hence only a single leaf is required to model both the optional configured value and the operational value.

A concrete example of the Ethernet interface YANG structured this way is @
https://github.com/8023YangDesignTeam/EthernetYang/blob/nmda/standard/ieee/802.3/draft/ieee802-ethernet-interface.yang




If some data is mandatory in config, but not necessarily mandatory in
<operational> then normally it can be marked as mandatory true, since
optional is allowed to violate this constraint if necessary, but
implementations would generally be expected to conform to the constraint
if possible.

For the reverse case, we can't express that.  I think that you would
have to leave out the "mandatory: true" constraint.  Again, can you
provide a concrete example of this please?  That makes it a bit easier
to reason about.
This should be quite typical: a config leaf is optional and if it is not
configured, the system sets it to some value (as in the case of
router-id). But in state data it is mandatory so that the client can see
what the system chose.
Yes, I agree that this scenario is very likely, but I think that the solution here is just to not mark the leaf as mandatory.

It is interesting to consider what "mandatory" exactly means in the <operational> datastore.  Given that the mandatory constraint may be violated in <operational>, then my interpretation is that it means that a correct implementation SHOULD always return a mandatory node (if it is in scope).  But a client has no way to force a device return this data (except perhaps shouting at the vendor :-), and so it seems that a robust client would need to be able to cope with the fact that the device is not behaving nicely and isn't returning the data regardless of any mandatory keyword specified in the schema.

To further expand on this, a device is required to ensure that configuration datastores are valid, and hence all mandatory constraints are enforced, or a config change would be rejected, but I don't think that many devices are going to validate operational. They will just return the current state of the system back to the client, and let the client deal with any unexpected inconsistencies.

Also, what about all the regular config false nodes in the schema that are not marked as mandatory?  Is a device always required to return those leaves (if they are in scope)?  If a device is never going to return those leaves then it should use a deviation to remove them, but is that actually required?

Is seems that possibly the most useful use of mandatory in the context of operational is for something like an IP address/prefix length pairing, i.e. to indicate that the data really doesn't make any sense unless both address and prefix are provided.

When the next version of YANG is specified, perhaps we should consider allowing an extra options to mandatory to that it only applies to the state datastores?  if so, we could add this to the YANG.Next issue tracker?

So, in conclusion, I think that the NMDA modelling advice for mandatory on config true nodes might be to only use it when the node is mandatory in configuration datastores.

If the WG isn't opposed, then I would suggested adding this to the NMDA FAQ.

Thanks,
Rob

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

Reply via email to