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;
      }
    }
  }

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",
      "parent-reference": [
            "/if:interfaces/if:interface
             [ni:bind-network-instance-name = ../ni:name]"
                          ],
      "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.



/martin

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

Reply via email to