Network Working Group                                     R. Wilton, Ed.
Internet-Draft                                             Cisco Systems
Intended status: Standards Track                            July 3, 2017
Expires: January 4, 2018


               Interface Properties for YANG Data Models
              draft-wilton-netmod-interface-properties-00

Abstract

   This document specifies a better way to restrict interface YANG
   schema nodes to only those types of interfaces that the nodes are
   applicable to.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on January 4, 2018.

Copyright Notice

   Copyright (c) 2017 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.





Wilton                   Expires January 4, 2018                [Page 1]


Internet-Draft                                                 July 2017


Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   3
   3.  Problem Definition  . . . . . . . . . . . . . . . . . . . . .   3
   4.  Interface Property Identities . . . . . . . . . . . . . . . .   4
   5.  Potential issues and considerations:  . . . . . . . . . . . .   4
   6.  YANG Modules  . . . . . . . . . . . . . . . . . . . . . . . .   4
   7.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   7
   8.  Security Considerations . . . . . . . . . . . . . . . . . . .   7
   9.  Acknowledgments . . . . . . . . . . . . . . . . . . . . . . .   7
   10. References  . . . . . . . . . . . . . . . . . . . . . . . . .   7
     10.1.  Normative References . . . . . . . . . . . . . . . . . .   7
     10.2.  Informative References . . . . . . . . . . . . . . . . .   7
   Appendix A.  Examples of possible updates to iana-if-types.yang .   7
   Appendix B.  Example of interface properties usage in ietf-
                interfaces-common.yang . . . . . . . . . . . . . . .  10
   Appendix C.  Example of interface properties usage in ietf-
                interfaces-ethernet-like.yang  . . . . . . . . . . .  15
   Appendix D.  Example of interface properties usage in ietf-
                interfaces.yang  . . . . . . . . . . . . . . . . . .  17
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  21

1.  Introduction

   This document introduces the concept of generic interface property
   identities in YANG [RFC7950] data models to solve the problem of how
   to restrict interface configuration and state schema nodes to the
   appropriate types of interfaces.  E.g., it is desirable to restrict
   MAC address configuration and state schema nodes to only those types
   of interfaces that use Ethernet framing, and hence for which MAC
   address configuration may be applicable.  This document defines a set
   of common interface property YANG identities (e.g., Ethernet-like),
   and proposes that the iana-interface-type identities in iana-if-
   type.yang are updated to also derive from the interface property
   identities (a backwards compatible change).  Interface based YANG
   schema nodes can then be made conditional on the interface property
   identities rather than being conditional on a hardcoded set of IANA
   interface types.  This approach also allows newly defined interface
   types to reuse published standard interface YANG schema nodes just by
   deriving from the appropriate interface property identities, and
   without requiring new revisions of those published standard YANG
   modules each time a new IANA interface type is defined.








Wilton                   Expires January 4, 2018                [Page 2]


Internet-Draft                                                 July 2017


2.  Terminology

   This document defines the following terms:

   o  interface property identity: A YANG identity that defines a
      particular generic interface related property that generally
      relates to multiple interface type identities defined in iana-
      interface-type.yang.  An example of such a property is
      'Ethernet-like'.

3.  Problem Definition

   The YANG language offers the "when" statement that can be used to
   make nodes conditional on some particular X-Path expression.

   In the case, of interface related configuration, the when statement
   can be used to explicitly list all the iana-interface-type identities
   that an interface's 'type' leaf may take.

   However, the current solution is not ideal for several reasons:

   o  Explicitly listing the interface types is somewhat unwieldy,
      particularly in the case that a schema node may apply to many
      interfaces.  When faced with this scenario, YANG model authors
      sometimes decide that it is better to keep the model simple and
      just allow the schema node to be used regardless of interface
      type.

   o  Explicly listing the inteface types has the further problem that
      the model cannot easily be extended to handle new interface types.
      If a new interface type is introduced then to reuse the same
      interface related schema nodes requires that all of the applicable
      model when statements must be updated to reference the new IANA
      interface type identity.

   o  The current solution does not really work for bespoke vendor
      specific interface types.  Even though the proprietrary interface
      types may be defined in the IANA interface type identity list, it
      is unlikely that it would be acceptable to update a standards
      based YANG model to reference a proprietrary interface type.
      Requiring bespoke interfaces to use separate similar configuration
      and state nodes makes the models less generic and more tedious to
      use by clients.








Wilton                   Expires January 4, 2018                [Page 3]


Internet-Draft                                                 July 2017


4.  Interface Property Identities

   This draft introduces "Interface Property Identities".  These are a
   set of YANG identities that describe properties that could be
   associated with multiple different types of interface.

   The existing IANA interface type identities are then selectively
   updated to also derive from one or more of these interface property
   identities.  The YANG module upgrade rules in [RFC7950] allow for the
   interface type identities to derive from additional identities in a
   fully backwards compatible way.

   YANG modules that define interface specific nodes can then use the
   YANG 1.1 derived-from() macro in the 'when' statement xpath
   expression to indicate that the node applies to all interfaces that
   inherit from the specified interface property.

   As new IANA interface types are defined they can derive from the
   interface property identities and hence acquire the interface
   specific YANG nodes that have been defined in existing YANG modules
   without requiring any changes beyond the device updating to use the
   latest iana-if-types YANG file.

   Similarly, vendor specific interface types can also inherit from the
   interface property identities and also acquire access to the
   appropriate interface configuration nodes.

   As required, new interface property identities can also be defined,
   again in a backwards compatible way.

5.  Potential issues and considerations:

   o  Would IANA be willing to manage the new interface property types?

   o  iana-interface-types.yang would need to be YANG 1.1.  Would this
      be an issue?

   o  Need to define a suitable set of base interface properties.

   o  Need to then apply the set of base interface properties to
      appropriate interface types.  Coordination between vendors may be
      required to get a reasonable base coverage.

6.  YANG Modules

   <CODE BEGINS> file "iana-if-property-type@2017-06-27.yang"

   module iana-if-property-type {



Wilton                   Expires January 4, 2018                [Page 4]


Internet-Draft                                                 July 2017


     namespace "urn:ietf:params:xml:ns:yang:iana-if-property-type";
     prefix ianaifp;

     organization "IANA";
     contact "";
     description
       "This YANG module defines YANG identities for IANA-registered
        interface property types.

        This YANG module is maintained by IANA.

        The latest revision of this YANG module can be obtained from
        the IANA web site.

        Requests for new values should be made to IANA via
        email (iana&iana.org).

        Copyright (c) 2017 IETF Trust and the persons identified as
        authors of the code.  All rights reserved.

        Redistribution and use in source and binary forms, with or
        without modification, is permitted pursuant to, and subject
        to the license terms contained in, the Simplified BSD License
        set forth in Section 4.c of the IETF Trust's Legal Provisions
        Relating to IETF Documents
        (http://trustee.ietf.org/license-info).

        The initial version of this YANG module is part of XXX;
        see the RFC itself for full legal notices.";
     reference
       "IANA 'interface property definitions' registry.";

     revision 2017-06-27 {
       description
         "Initial revision";
       reference
         "RFC XXX: IANA Interface Property Type YANG Module";
     }

     identity iana-if-property-type {
       description
         "Base identity from which specific interface property types are
          derived.";
     }

     identity physical {
       base iana-if-property-type;
       description



Wilton                   Expires January 4, 2018                [Page 5]


Internet-Draft                                                 July 2017


         "This property represents an interface that has a physical
          hardware representation, or is modelled as such.";
     }

     identity virtual {
       base iana-if-property-type;
       description
         "This property represents an interface that has no external
          physical hardware representation, and is used to represent
          interfaces that are created via configuration.";
     }

     identity sub-interface {
       base iana-if-property-type;
       description
         "This property represents an interface that is a child
          interface that is parented to another interface.";
     }

     identity point-to-point {
       base iana-if-property-type;
       description
         "This property represents an interface that is always
          point-to-point, i.e. the interface can only ever be connected
          to a single other interface, and hence broadcast and multicast
          packet statistics do not make sense.";
     }

     identity multicast {
       base iana-if-property-type;
       description
         "This property represents an interface that could have multiple
          end points, e.g. like an Ethernet interface.  Such an
          interface could have separate broadcast and multicast packet
          counters.";
     }

     identity ethernet-like {
       base iana-if-property-type;
       description
         "This property represents an interface that is similar in
          behaviour to an Ethernet interface, and uses Ethernet
          framing.";
     }
   }

   <CODE ENDS>




Wilton                   Expires January 4, 2018                [Page 6]


Internet-Draft                                                 July 2017


7.  IANA Considerations

   This draft proposes that IANA also manage a new registry of
   "interface properties" alongside the existing "interface type"
   registry, and to

    extend the "interface type" registry to also derive from interface
    properties identities.

8.  Security Considerations

   This document discusses an approach how to structure interface
   related YANG schema.  It has no security impact on the Internet.

9.  Acknowledgments

   This document arose from discussions with Martin Bjorklund, Ladislav
   Lhotka, and Vladimir Vassilev on the Netmod WG alias.

10.  References

10.1.  Normative References

   [RFC7224]  Bjorklund, M., "IANA Interface Type YANG Module",
              RFC 7224, DOI 10.17487/RFC7224, May 2014,
              <http://www.rfc-editor.org/info/rfc7224>.

   [RFC7950]  Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
              RFC 7950, DOI 10.17487/RFC7950, August 2016,
              <http://www.rfc-editor.org/info/rfc7950>.

10.2.  Informative References

   [RFC7223]  Bjorklund, M., "A YANG Data Model for Interface
              Management", RFC 7223, DOI 10.17487/RFC7223, May 2014,
              <http://www.rfc-editor.org/info/rfc7223>.

Appendix A.  Examples of possible updates to iana-if-types.yang

   The example-iana-if-type.yang module illustrates the type of updates
   that would be made to iana-if-types.yang to make use of interface
   properties.

   <CODE BEGINS> file "example-iana-if-type@2017-06-27.yang"

   module example-iana-if-type {
     yang-version "1.1";
     namespace "urn:ietf:params:xml:ns:yang:example-iana-if-type";



Wilton                   Expires January 4, 2018                [Page 7]


Internet-Draft                                                 July 2017


     prefix ianaift;

     import ietf-interfaces {
       prefix if;
     }

     import iana-if-property-type {
       prefix ianaifp;
     }

     // Full description, etc elided for clarity.
     organization "IANA";
     contact "";
     description
       "This example module illustrates how iana-if-type.yang could
        be extended to use interface properties.";
     reference
       "IANA 'ifType definitions' registry.
        <http://www.iana.org/assignments/smi-numbers>";

     revision 2017-06-27 {
       description
         "Initial example of how IANA if type could be extended";
       reference
         "Taken from draft-rwilton-netmod-interface-properties-00";
     }

     // Previous revision statements elided for clarity.

     identity iana-interface-type {
       base if:interface-type;
       description
         "This identity is used as a base for all interface types
          defined in the 'ifType definitions' registry.";
     }

     // Most identies elided for clarity, some are retained to
     // illustrate how the interface properties are defined.
     identity other {
       base iana-interface-type;
       description
         "None of the following";
     }

     identity ethernetCsmacd {
       base iana-interface-type;
       base ianaifp:physical;
       base ianaifp:multicast;



Wilton                   Expires January 4, 2018                [Page 8]


Internet-Draft                                                 July 2017


       base ianaifp:ethernet-like;
       description
         "For all Ethernet-like interfaces, regardless of speed,
          as per RFC 3635.";
       reference
         "RFC 3635 - Definitions of Managed Objects for the
                     Ethernet-like Interface Types";
     }

     identity ieee8023adLag {
       base iana-interface-type;
       base ianaifp:virtual;
       base ianaifp:multicast;
       base ianaifp:ethernet-like;
       description
         "IEEE 802.3ad Link Aggregate.";
     }

     identity atm {
       base iana-interface-type;
       base ianaifp:physical;
       base ianaifp:multicast;
       description
         "ATM cells.";
     }

     identity atmSubInterface {
       base iana-interface-type;
       base ianaifp:virtual;
       base ianaifp:sub-interface;
       base ianaifp:multicast;
       description
         "ATM Sub Interface.";
     }

     identity l2vlan {
       base iana-interface-type;
       base ianaifp:virtual;
       base ianaifp:sub-interface;
       base ianaifp:multicast;
       description
         "Layer 2 Virtual LAN using 802.1Q.";
     }

     identity pos {
       base iana-interface-type;
       base ianaifp:point-to-point;
       description



Wilton                   Expires January 4, 2018                [Page 9]


Internet-Draft                                                 July 2017


         "Packet over SONET/SDH Interface.";
     }

     identity irb {
       base iana-interface-type;
       base ianaifp:virtual;
       base ianaifp:multicast;
       base ianaifp:ethernet-like;

       description
         "Integrated Routing and Bridging interface, also known as an
          SVI or BVI interface.

          Note, not currently defined in if-type.yang";
     }
   }

   <CODE ENDS>

Appendix B.  Example of interface properties usage in ietf-interfaces-
             common.yang

   The ietf-interfaces-common module defines various interface
   configuration nodes that are applicable to different types of
   interfaces and hence would benefit from interface properties.

   <CODE BEGINS> file "example-ietf-interfaces-common@2017-06-27.yang"

   module example-ietf-interfaces-common {
     yang-version 1.1;

     namespace
       "urn:ietf:params:xml:ns:yang:example-ietf-interfaces-common";

     prefix if-cmn;

     import ietf-interfaces {
       prefix if;
     }

     import iana-if-type {
       prefix ianaift;
     }

     import iana-if-property-type {
       prefix ianaifp;
     }




Wilton                   Expires January 4, 2018               [Page 10]


Internet-Draft                                                 July 2017


     organization
       "IETF NETMOD (NETCONF Data Modeling Language) Working Group";

     contact
       "WG Web:   <http://tools.ietf.org/wg/netmod/>
        WG List:  <mailto:netmod@ietf.org>

        WG Chair: Lou Berger
                  <mailto:lberger@labn.net>

        WG Chair: Kent Watsen
                  <mailto:kwatsen@juniper.net>

        Editor:   Robert Wilton
                  <mailto:rwilton@cisco.com>";

     description
       "Example of using when statements with interface properties";

     revision 2017-06-27 {
       description
         "Examples of using when statements with interface properties";

       reference "Internet draft: draft-ietf-netmod-intf-ext-yang-04";
     }

     feature bandwidth {
       description "<description elided>";
       reference "Section 3.1 Bandwidth";
     }

     feature carrier-delay {
       description "<description elided>";
       reference "Section 3.2 Carrier Delay";
     }

     feature dampening {
       description "<description elided>";
       reference "Section 3.3 Dampening";
     }

     feature loopback {
       description "<description elided>";
       reference "Section 3.5 Loopback";
     }

     feature configurable-l2-mtu {
       description "<description elided>";



Wilton                   Expires January 4, 2018               [Page 11]


Internet-Draft                                                 July 2017


       reference "Section 3.6 MTU";
     }

     feature sub-interfaces {
       description
         "This feature indicates that the device supports the
          instantiation of sub-interfaces.  Sub-interfaces are defined
          as logical child interfaces that allow features and forwarding
          decisions to be applied to a subset of the traffic processed
          on the specified parent interface.";
       reference "Section 3.7 Sub-interface";
     }

     feature forwarding-mode {
       description "<description elided>";
       reference "Section 3.8 Forwarding Mode";
     }

     /*
      * Define common identities to help allow interface types to be
      * assigned properties.
      */

     identity loopback {
       description "Base identity for interface loopback options";
     }
     identity loopback-internal {
       base loopback;
       description "<description elided>";
     }
     identity loopback-line {
       base loopback;
       description "<description elided>";
     }
     identity loopback-connector {
       base loopback;
       description "<description elided>";
     }


     /*
      * Augments the IETF interfaces model with a leaf to explicitly
      * specify the bandwidth available on an interface.
      */
     augment "/if:interfaces/if:interface" {
       description
         "Augments the IETF interface model with optional common
          interface level commands that are not formally covered by any



Wilton                   Expires January 4, 2018               [Page 12]


Internet-Draft                                                 July 2017


          specific standard";

       // Various features/nodes elided.


       /*
        * Various types of interfaces support a configurable layer 2
        * encapsulation, any that are supported by YANG should be
        * listed here.
        *
        * Different encapsulations can hook into the common encaps-type
        * choice statement.
        */
       container encapsulation {
         when
           "derived-from-or-self(../if:type, 'ianaifp:ethernet-like') or
            derived-from-or-self(../if:type, 'ianaifp:sub-interface')" {

           description
             "All interface types that can have a configurable L2
              encapsulation";
           /*
            * TODO - Should we introduce an abstract type to make this
            *        extensible to new interface types, or vendor
            *        specific interface types?
            */
         }

         description
           "Holds the OSI layer 2 encapsulation associated with an
            interface";
         choice encaps-type {
           description "Extensible choice of L2 encapsulations";
         }
       }

        /*
         * Various types of interfaces support loopback configuration,
         * any that are supported by YANG should be listed here.
         */
       leaf loopback {
         when "derived-from(if:type, 'ianaifp:physical')" {
           description
             "Applies to all interfaces that derive from the physical
              interface property.";
         }

         if-feature "loopback";



Wilton                   Expires January 4, 2018               [Page 13]


Internet-Draft                                                 July 2017


         type identityref {
           base loopback;
         }
         description "Enables traffic loopback.";
       }

       /*
        * Many types of interfaces support a configurable layer 2 MTU.
        */
       leaf l2-mtu {
         if-feature "configurable-l2-mtu";
         type uint16 {
           range "64 .. 65535";
         }
         description
           "The maximum size of layer 2 frames that may be transmitted
            or received on the interface (excluding any FCS overhead).
            In the case of Ethernet interfaces it also excludes the
            4-8 byte overhead of any known (i.e. explicitly matched by
            a child sub-interface) 801.1Q VLAN tags.";
       }
     }

     /*
      * Add generic support for sub-interfaces.
      *
      * This should be extended to cover all interface types that are
      * child interfaces of other interfaces.
      */
     augment "/if:interfaces/if:interface" {
       when "derived-from(if:type, 'ianaifp:sub-interface')" {
         description
           "Applies to all interfaces that derive from the Ethernet-like
            interface property.";
       }

       if-feature "sub-interfaces";

       description
         "Add a parent interface field to interfaces that model
          sub-interfaces";
       leaf parent-interface {

         type if:interface-ref;

         mandatory true;
         description
           "This is the reference to the parent interface of this



Wilton                   Expires January 4, 2018               [Page 14]


Internet-Draft                                                 July 2017


            sub-interface.";
       }
     }
   }

   <CODE ENDS>

Appendix C.  Example of interface properties usage in ietf-interfaces-
             ethernet-like.yang

   The ietf-interfaces-ethernet-like module defines various interface
   configuration nodes that are applicable to any interfaces that have
   "Ethernet-like" semantics, and hence would benefit from interface
   properties.

   <CODE BEGINS> file "example-ietf-interfaces-ethernet-
   like@2017-06-27.yang"

  module example-ietf-interfaces-ethernet-like {
    yang-version 1.1;

    namespace
      "urn:ietf:params:xml:ns:yang:" +
      "example-ietf-interfaces-ethernet-like";

    prefix ethlike;

    import ietf-interfaces {
      prefix if;
    }

    import ietf-yang-types {
      prefix yang;
    }

    import iana-if-property-type {
      prefix ianaifp;
    }

    organization
      "IETF NETMOD (NETCONF Data Modeling Language) Working Group";

    contact
      "WG Web:   <http://tools.ietf.org/wg/netmod/>
       WG List:  <mailto:netmod@ietf.org>

       WG Chair: Lou Berger
                 <mailto:lberger@labn.net>



Wilton                   Expires January 4, 2018               [Page 15]


Internet-Draft                                                 July 2017


       WG Chair: Kent Watsen
                 <mailto:kwatsen@juniper.net>

       Editor:   Robert Wilton
                 <mailto:rwilton@cisco.com>";

    description
      "Example for when statements using interface properties.";

    revision 2017-06-27 {
      description
        "Examples of using when statements with interface properties";

      reference "Internet draft: draft-ietf-netmod-intf-ext-yang-04";
    }

    /*
     * Configuration parameters for Ethernet-like interfaces.
     */
    augment "/if:interfaces/if:interface" {
      when "derived-from(if:type, 'ianaifp:ethernet-like')" {
        description
          "Applies to all interfaces that derive from the Ethernet-like
           interface property.";
      }
      description
        "Augment the interface model with configuration parameters for
         all Ethernet-like interfaces";

      container ethernet-like {
        description "Contains configuration parameters for interfaces
                     that use Ethernet framing and expose an Ethernet
                     MAC layer.";
        leaf mac-address {
          type yang:mac-address;
          description
            "The configured MAC address of the interface.";
        }
      }
    }

    /*
     * Operational state for Ethernet-like interfaces.
     */
    augment "/if:interfaces-state/if:interface" {
      when "derived-from(if:type, 'ianaifp:ethernet-like')" {
        description
          "Applies to all interfaces that derive from the Ethernet-like



Wilton                   Expires January 4, 2018               [Page 16]


Internet-Draft                                                 July 2017


           interface property.";
      }
      description
        "Augments the interface model with operational state parameters
         for all Ethernet-like interfaces.";
      container ethernet-like {
        description
          "Contains operational state parameters for interfaces that use
           Ethernet framing and expose an Ethernet MAC layer.";
        leaf mac-address {
          type yang:mac-address;
          description
            "The operational MAC address of the interface, if
             applicable";
        }

        leaf bia-mac-address {
          type yang:mac-address;
          description
            "The 'burnt-in' MAC address.  I.e the default MAC address
             assigned to the interface if none is explicitly
             configured.";
        }

        container statistics {
          description
            "Packet statistics that apply to all Ethernet-like
             interfaces";
          leaf in-drop-unknown-dest-mac-pkts {
            type yang:counter64;
            units frames;
            description "<long description elided>";
          }
        }
      }
    }
  }

   <CODE ENDS>

Appendix D.  Example of interface properties usage in ietf-
             interfaces.yang

   Here is an example of how the ietf-interfaces.yang module could have
   used interface properties to restrict multicast packet statistics to
   only those interfaces that support it.

   <CODE BEGINS> file "example-ietf-interfaces@2017-06-27.yang"



Wilton                   Expires January 4, 2018               [Page 17]


Internet-Draft                                                 July 2017


   module example-ietf-interfaces {
     yang-version 1.1;

     namespace "urn:ietf:params:xml:ns:yang:example-ietf-interfaces";

     prefix if;
     import ietf-yang-types {
       prefix yang;
     }

     import "iana-if-property-type" {
       prefix ianaifp;
     }

     organization
       "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
     contact "<elided>";
     description
       "Example of when statements for refining interface statistics";

     revision 2017-06-27 {
       description
         "Example of how some interface statistics could make use of
          interface properties";
       reference
         "RFC 7223: A YANG Data Model for Interface Management";
     }
     /*
      * Typedefs
      */
     // interface-ref typedef elided.
     typedef interface-state-ref {
       type leafref {
         path "/if:interfaces-state/if:interface/if:name";
       }
       description
         "This type is used by data models that need to reference
          the operationally present interfaces.";
     }
     /*
      * Identities
      */
     identity interface-type {
       description
         "Base identity from which specific interface types are
          derived.";
     }




Wilton                   Expires January 4, 2018               [Page 18]


Internet-Draft                                                 July 2017


     // Features elided.
     // Configuration tree elided.

     /*
      * Operational state data nodes
      */
     container interfaces-state {
       config false;
       description
         "Data nodes for the operational state of interfaces.";
       list interface {
         key "name";
         description
           "The list of interfaces on the device.
            System-controlled interfaces created by the system are
            always present in this list, whether they are configured or
            not.";
         leaf name {
           type string;
           description
             "The name of the interface.
              A server implementation MAY map this leaf to the ifName
              MIB object.  Such an implementation needs to use some
              mechanism to handle the differences in size and characters
              allowed between this leaf and ifName.  The definition of
              such a mechanism is outside the scope of this document.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifName";
         }
         leaf type {
           type identityref {
             base interface-type;
           }
           mandatory true;
           description
             "The type of the interface.";
           reference
             "RFC 2863: The Interfaces Group MIB - ifType";
         }

         // Various leaves elided.

         container statistics {
           description
             "A collection of interface-related statistics objects.";
           leaf discontinuity-time {
             type yang:date-and-time;
             mandatory true;



Wilton                   Expires January 4, 2018               [Page 19]


Internet-Draft                                                 July 2017


             description "<description elided>";
           }
           leaf in-octets {
             type yang:counter64;
             description "<description elided>";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
           }
           leaf in-unicast-pkts {
             type yang:counter64;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were not addressed to a
                multicast or broadcast address at this sub-layer.
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system, and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
           }
           leaf in-broadcast-pkts {
             when "derived-from(if:type, 'ianaifp:multicast')" {
               description
                 "Applies to interfaces that inherit the multicast
                  interface property.";
             }

             type yang:counter64;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were addressed to a broadcast
                address at this sub-layer.
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system, and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCInBroadcastPkts";
           }
           leaf in-multicast-pkts {
             when "derived-from(if:type, 'ianaifp:multicast')" {
               description
                 "Applies to interfaces that inherit the multicast
                  interface property.";
             }




Wilton                   Expires January 4, 2018               [Page 20]


Internet-Draft                                                 July 2017


             type yang:counter64;
             description
               "The number of packets, delivered by this sub-layer to a
                higher (sub-)layer, that were addressed to a multicast
                address at this sub-layer.  For a MAC-layer protocol,
                this includes both Group and Functional addresses.
                Discontinuities in the value of this counter can occur
                at re-initialization of the management system, and at
                other times as indicated by the value of
                'discontinuity-time'.";
             reference
               "RFC 2863: The Interfaces Group MIB -
                          ifHCInMulticastPkts";
           }
           // Remaining counters elided.
         }
       }
     }
   }

   <CODE ENDS>

Author's Address

   Robert Wilton (editor)
   Cisco Systems

   Email: rwilton@cisco.com























Wilton                   Expires January 4, 2018               [Page 21]