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 <[email protected] <mailto:[email protected]>> wrote:

    Hi Randy,

    On 24/08/2015 20:20, Randy Presuhn wrote:

        Hi -

            From: Ladislav Lhotka <[email protected] <mailto:[email protected]>>
            Sent: Aug 24, 2015 11:44 AM
            To: Andy Bierman <[email protected]
            <mailto:[email protected]>>
            Cc: "[email protected] <mailto:[email protected]>"
            <[email protected] <mailto:[email protected]>>
            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?

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 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.
       *   - Enforce the constraint with a must statement.
       */
      //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).

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
        [email protected] <mailto:[email protected]>
        https://www.ietf.org/mailman/listinfo/netmod


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



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

Reply via email to