Robert Wilton <rwil...@cisco.com> wrote: > Hi Martin, > > On 26/01/2016 14:33, Martin Bjorklund wrote: > > Robert Wilton <rwil...@cisco.com> wrote: > >> Hi Juergen, > >> > >> Hopefully my explanations below help clarify. > >> > >> On 26/01/2016 12:32, Juergen Schoenwaelder wrote: > >>> On Mon, Jan 18, 2016 at 09:47:31AM +0000, Robert Wilton wrote: > >>>> As I understand it, what you are proposing here is not what the > >>>> section > >>>> 4 requirements were intended to express. > >>>> > >>>> The section 4 requirements are meant to be at the YANG schema level, > >>>> i.e. illustrating possible relationships between YANG schema > >>>> nodes. E.g. > >>>> for a particular interface IP address they wouldn't be able to > >>>> indicate > >>>> whether it was actually configured by explicit IP address > >>>> configuration > >>>> or due to DHCP. They would only be able to tell which configurations > >>>> nodes could influence a particular derived state node. > >>> I am confused and I may not understand your example. My point is that > >>> an operationally used IP address can be there for a variety of reasons > >>> and the reasons depend on runtime state not on schema structure. > >> Yes, exactly. > >> > >> But this requirements draft is based on the improvements that the > >> operators would like to see to YANG/NETCONF/etc to make it easier for > >> them to use/deploy. > >> > >> For this section 4 requirements, my understanding is that they are not > >> asking to know why a particular operation node has a particular value, > >> they are only asking for an indication of which configuration leaves > >> could influence its value. Solving the latter is easier and can be > >> implemented at the schema level. > >> > >> To support my interpretation I recall that Rob Shakir, at the first > >> Netmod WG meeting IETF 94, indicated that their proposed opstate > >> solution draft (e.g. draft-openconfig-netmod-opstate-01) met all the > >> opstate requirements. Their draft doesn't have any mechanism to > >> indicate why a particular state leaf has a particular value, but it > >> does provide a schema level relationship between the configuration and > >> operation state nodes - i.e. the co-located config and state > >> containers that they consistently use throughout the OpenConfig > >> schema. > >> > >>>> I think that there are a couple of cases where this relationship is > >>>> useful: > >>>> (1) If you modify a config node, it allows the client to know (in > >>>> advance) which derived state nodes may be affected and hence should be > >>>> retrieved to confirm the change. > >>>> (2) Conversely, if a derived state note has an unexpected value, it > >>>> allows a client to know which configuration nodes it should retrieve > >>>> to > >>>> try and infer what the cause of the value is. > >>>> > >>>> If I understand your proposal, then what you are proposing is > >>>> meta-data > >>>> annotations of the derived state nodes in the data tree. I.e. the > >>>> annotations would allow you to tell you whether a particular interface > >>>> IP address had that value due to explicit IP address configuration or > >>>> because it was allocated by DHCP. I agree that this is useful, but I > >>>> think that it is very hard to implement (on the systems that I'm > >>>> familiar with) and is also beyond the requirement as originally stated > >>>> by the opstate requirements draft. > >>> I agree its hard to implement in general but I am not sure why the > >>> other proposal would be any simpler to implement. Your instrumentation > >>> is either able to keep track of 'why something has a certain value' or > >>> it is not. > >> I'm saying that there is no requirement (at least from the opstate > >> draft) to generally track "why something has a certain value" at all. > >> > >> > >>>> As such, I think that we should restrict the scope of the requirements > >>>> draft (and proposed solutions) to YANG schema level annotations that > >>>> are > >>>> easier to solve. If you agree, then do we need to tweak the text of > >>>> requirement 4 to make this explicit? > >>> But this approach requires to partition things artificially. For > >>> example, I can't have a simple list of IP addresses used by the > >>> interface anymore but instead I need to have a list of IP address > >>> coming from static config, a list of IP addresses coming from DHCP, a > >>> list of IP addresses coming from SLAAC and so on. I seriously can't > >>> imagine that debugging network configurations becomes simpler if we > >>> spread around the information one needs to look at in several branches > >>> of the data model. [I hope I completely misunderstand requirement 4.] > >> I don't think that they are asking/suggesting separate lists of > >> operational IP addresses. > >> > >> Taking the OpenConfig IP YANG model as an example > >> (https://github.com/openconfig/public/blob/master/release/models/interfaces/openconfig-if-ip.yang): > >> > >> They have a list of IP addresses. Each entry contains: > >> - the configured IP address (if any), > >> - the operational IP address, > >> - an enum indicating the source of the operational IP address value > >> - (static, dhcp, link_layer, random or other). > > I assume you refer to this list: > Yes. > > > > > list address { > > key ip; > > description > > "The list of configured IPv4 addresses on the interface."; > > > > leaf ip { > > type leafref { > > path "../ocip:config/ocip:ip"; > > } > > description "References the configured IP address"; > > } > > > > container config { > > description "Configuration data for each configured IPv4 > > address on the interface"; > > > > uses ipv4-config-address; > > } > > > > container state { > > > > config false; > > description "Operational state data for each IPv4 address > > configured on the interface"; > > > > uses ipv4-config-address; > > uses ipv4-state-address; > > } > > > > } > > > > > > > > Note how the key contains the "configured IP address" (and it is a > > config true list). So this list cannot contain addresses that are > > not configured. > OK, yes. I had missed that. > > I presume that they would ideally like this list to contain all IP > addresses on an interface whether configured or operational. Otherwise > if it contains just the list of configured addresses then the "origin" > leaf in the ipv4-state-address grouping seems pretty pointless since > the only sane value that it could hold is STATIC :-)
Exactly. This is the core of the problem with their models, imo. > I suspect that this issue ties back to sections 8.1.2 and 9.2 of > https://www.ietf.org/archive/id/draft-openconfig-netmod-opstate-01.txt > (text reproduced below) where they would like the YANG schema to have > a combined list of configured and state entries. Like SNMP tables... > 8.1.2. Handling lists > > In YANG 1.0, lists have requirements that complicate the creation of > the parallel configuration and state data structures. First, keys > must be children of the list; they cannot be further down the data > hierarchy within a subsequent container. For example, the > 'interface' list cannot be keyed by /interfaces/interface/config/ > name. Second, YANG requires that the list key is part of the > configuration or state data in each list member. > > We consider two possible approaches for lists: > > 1. list keys appear only at the top level of the list, i.e., not > duplicated under the 'config' or 'state' containers within the > list > > 2. the data represented by the list key appears in the config and > state containers, and a key with type leafref is used in the top > level of the list pointing to the corresponding data node in the > config (or state) container. This doesn't solve the problem; it just creates a more complex model. > Option 1 has the advantage of not duplicating data, but treats the > data item (or items) that are keys as special cases, i.e., not > included in the config or state containers. Option 2 is appealing in > that configurable data always appears in the config container, but > requires an arguably unnecessary key pointing to the data from the > top level of the list. > > Appendix C shows a simple example of both options. > > > 9.2. YANG lists as maps > > YANG has two list constructs, the 'leaf-list' which is similar to a > list of scalars (arrays) in other programming languages, and the > 'list' which allows a keyed list of complex structures, where the key > is also part of the data values. As described in Section 8.1.2, the > current requirements on YANG list keys require either duplication of > data, or treating some data (i.e., those that comprise list keys) as > a special case. One solution is to generalize lists to be more like > map data structures found in most modern programming languages, where > each list member has a key that is not required to part of the > configuration or state data, and also not subject to existing > "config-under-state limitations. This allows list keys to be > arbitrarily defined by the user if desired, or based on values of > data nodes. In the latter case, the specification of which data > nodes are used in constructing the list key could be indicated in the > meta-data associated with the key. I don't understand how this would solve the problem either, but in any case, I don't think this idea has been presented in greater detail, so I am not sure how it would actually work. /martin _______________________________________________ netmod mailing list netmod@ietf.org https://www.ietf.org/mailman/listinfo/netmod