Hi Martin, See below.
On 8/22/2017 6:20 AM, Martin Bjorklund wrote: > Hi, > > Lada presented an open issue in schema mount in Prague. (See slide 6 > in > https://datatracker.ietf.org/meeting/99/materials/slides-99-netmod-sessb-schema-mount) > > The original problem comes from the NI use case > (https://tools.ietf.org/html/draft-ietf-rtgwg-ni-model). In this > use case, interfaces are assigned to NIs by: > > augment /if:interfaces/if:interface: > +--rw bind-ni-name? -> /network-instances/network-instance/name > > Modules that are mounted within the NI might have references to > interfaces. The idea is that a specific NI can only reference the > interfaces that has been assigned to it. > > In schema mount, we have the "parent-reference" XPath expression that > in this case will be "/if:interfaces/if:interface". The problem is > that this XPath expression will evaluate to a node set that contains > *all* interfaces in the system. We would like this to contain just > the interfaces assigned to the NI. > > It turns out that this can be done with a simple change to the > "parent-reference" node. If we state that this XPath expression is > evaluated in an XPath context where the context node is the node in > the data tree where the mount point is defined (instead of "/"), we > can use as parent-reference: > > /if:interfaces/if:interface[ni:bind-network-instance-name = ../ni:name] > > Putting this together we'd have: > > augment "/if:interfaces/if:interface" { > leaf bind-ni-name { > type leafref { > path "/network-instances/network-instance/name"; > } > } > } > > container network-instances { > list network-instance { > key name; > leaf name { ... } > ... > container root { > // this would be the XPath context root for parent-reference > yangmnt:mount-point ni-root; > } > } > } note that the current NI definition is: module: ietf-network-instance +--rw network-instances +--rw network-instance* [name] +--rw name string +--rw enabled? boolean +--rw description? string +--rw (ni-type)? +--rw (root-type)? +--:(vrf-root) | +--mp vrf-root? +--:(vsi-root) | +--mp vsi-root? +--:(vv-root) +--mp vv-root? augment /if:interfaces/if:interface: +--rw bind-ni-name? -> /network-instances/network-instance/name augment /if:interfaces/if:interface/ip:ipv4: +--rw bind-ni-name? -> /network-instances/network-instance/name augment /if:interfaces/if:interface/ip:ipv6: +--rw bind-ni-name? -> /network-instances/network-instance/name > And in state data: > > > "ietf-yang-schema-mount:schema-mounts": { > "namespace": [ > { > "prefix": "ni", > "uri": "urn:ietf:params:xml:ns:yang:ietf-network-instance" > }, > { > "prefix": "if", > "uri": "urn:ietf:params:xml:ns:yang:ietf-interfaces" > } > ] > "mount-point": [ > { > "target": "/ni:network-instances/ni:network-instance/ni:root", Can you confirm that with the current definition the target is: "target": "/ni:network-instances/ni:network-instance", correct? > "parent-reference": [ > "/if:interfaces/if:interface > [ni:bind-network-instance-name = ../ni:name]" > ], Also, can you confirm that if we wanted to cover v4, v6 (for example purposes) interfaces-state, the full parent reference list would be: "parent-reference": [ "/if:interfaces/if:interface [ni:bind-ni-name = ./ni:name]", "/if:interfaces/if:interface/ip:ipv4 [ni:bind-ni-name = ./ni:name]", "/if:interfaces/if:interface/ip:ipv6 [ni:bind-ni-name = ./ni:name]", "/if:interfaces-state/if:interface" correct? Note that interfaces-state isn't filtered as the bind-ni-name isn't present in -state. > "use-schema": [ > { > "name": "ni-schema" > } > ] > } > ] > > > > Note that this does NOT affect the schema that is mounted; it only > affects the result of the parent-reference XPath expressions. > > > I think that we should make this change, since it allows for more > precise parent-references. I'm okay with the change (just want to see the draft moved forward ;-) Lou (As contributor) > > > /martin > > _______________________________________________ > netmod mailing list > [email protected] > https://www.ietf.org/mailman/listinfo/netmod > _______________________________________________ netmod mailing list [email protected] https://www.ietf.org/mailman/listinfo/netmod
