Blob Blame History Raw
/*
 * This module has been generated by smidump 0.4.8:
 *
 *      smidump -f yang IF-MIB
 *
 * Do not edit. Edit the source file instead!
 */

module IF-MIB {

  /*** NAMESPACE / PREFIX DEFINITION ***/

  namespace "urn:ietf:params:xml:ns:yang:smiv2:IF-MIB";
  prefix "if-mib";

  /*** LINKAGE (IMPORTS / INCLUDES) ***/

  import IANAifType-MIB { prefix "ianaiftype-mib"; }
  import SNMPv2-TC      { prefix "smiv2"; }
  import yang-types     { prefix "yang"; }

  /*** META INFORMATION ***/

  organization      
   "IETF Interfaces MIB Working Group";

  contact           
   "   Keith McCloghrie
    Cisco Systems, Inc.
    170 West Tasman Drive
    San Jose, CA  95134-1706
    US
    
    408-526-5260
    kzm@cisco.com";

  description       
   "The MIB module to describe generic objects for network
    interface sub-layers.  This MIB is an updated version of
    MIB-II's ifTable, and incorporates the extensions defined in
    RFC 1229.";

  revision "2000-06-14" {
    description     
     "Clarifications agreed upon by the Interfaces MIB WG, and
      published as RFC 2863.";
  }
  revision "1996-02-28" {
    description     
     "Revisions made by the Interfaces MIB WG, and published in
      RFC 2233.";
  }
  revision "1993-11-08" {
    description     
     "Initial revision, published as part of RFC 1573.";
  }

  /*** TYPE DEFINITIONS ***/

  typedef OwnerString {
    type string {
      length "0..255";
      pattern "\p{IsBasicLatin}{0,255}";
    }
    status deprecated;
    description     
     "This data type is used to model an administratively
      assigned name of the owner of a resource.  This information
      is taken from the NVT ASCII character set.  It is suggested
      that this name contain one or more of the following: ASCII
      form of the manager station's transport address, management
      station name (e.g., domain name), network management
      personnel's name, location, or phone number.  In some cases
      the agent itself will be the owner of an entry.  In these
      cases, this string shall be set to a string starting with
      'agent'.";
  }

  typedef InterfaceIndex {
    type int32 {
      range "1..2147483647";
    }
    description     
     "A unique value, greater than zero, for each interface or
      interface sub-layer in the managed system.  It is
      recommended that values are assigned contiguously starting
      from 1.  The value for each interface sub-layer must remain
      constant at least from one re-initialization of the entity's
      network management system to the next re-initialization.";
  }

  typedef InterfaceIndexOrZero {
    type int32 {
      range "0..2147483647";
    }
    description     
     "This textual convention is an extension of the
      InterfaceIndex convention.  The latter defines a greater
      than zero value used to identify an interface or interface
      sub-layer in the managed system.  This extension permits the
      additional value of zero.  the value zero is object-specific
      and must therefore be defined as part of the description of
      any object which uses this syntax.  Examples of the usage of
      zero might include situations where interface was unknown,
      or when none or all interfaces need to be referenced.";
  }

  container interfaces {

    leaf ifNumber {
      type int32;
      config false;
      description   
       "The number of network interfaces (regardless of their
        current state) present on this system.";
    }


    /* XXX table comments here XXX */

    list ifEntry {

      key "ifIndex";
      description   
       "An entry containing management information applicable to a
        particular interface.";


      leaf ifIndex {
        type if-mib:InterfaceIndex;
        config false;
        description 
         "A unique value, greater than zero, for each interface.  It
          is recommended that values are assigned contiguously
          starting from 1.  The value for each interface sub-layer
          must remain constant at least from one re-initialization of
          the entity's network management system to the next re-
          initialization.";
      }

      leaf ifDescr {
        type smiv2:DisplayString {
          length "0..255";
        }
        config false;
        description 
         "A textual string containing information about the
          interface.  This string should include the name of the
          manufacturer, the product name and the version of the
          interface hardware/software.";
      }

      leaf ifType {
        type ianaiftype-mib:IANAifType;
        config false;
        description 
         "The type of interface.  Additional values for ifType are
          assigned by the Internet Assigned Numbers Authority (IANA),
          through updating the syntax of the IANAifType textual
          convention.";
      }

      leaf ifMtu {
        type int32;
        config false;
        description 
         "The size of the largest packet which can be sent/received
          on the interface, specified in octets.  For interfaces that
          are used for transmitting network datagrams, this is the
          size of the largest network datagram that can be sent on the
          interface.";
      }

      leaf ifSpeed {
        type yang:gauge32;
        config false;
        description 
         "An estimate of the interface's current bandwidth in bits
          per second.  For interfaces which do not vary in bandwidth
          or for those where no accurate estimation can be made, this
          object should contain the nominal bandwidth.  If the
          bandwidth of the interface is greater than the maximum value
          reportable by this object then this object should report its
          maximum value (4,294,967,295) and ifHighSpeed must be used
          to report the interace's speed.  For a sub-layer which has
          no concept of bandwidth, this object should be zero.";
      }

      leaf ifPhysAddress {
        type yang:phys-address;
        config false;
        description 
         "The interface's address at its protocol sub-layer.  For
          example, for an 802.x interface, this object normally
          contains a MAC address.  The interface's media-specific MIB
          must define the bit and byte ordering and the format of the
          value of this object.  For interfaces which do not have such
          an address (e.g., a serial line), this object should contain
          an octet string of zero length.";
      }

      leaf ifAdminStatus {
        type enumeration {
          enum up      { value 1; }
          enum down    { value 2; }
          enum testing { value 3; }
        }
        config true;
        description 
         "The desired state of the interface.  The testing(3) state
          indicates that no operational packets can be passed.  When a
          managed system initializes, all interfaces start with
          ifAdminStatus in the down(2) state.  As a result of either
          explicit management action or per configuration information
          retained by the managed system, ifAdminStatus is then
          changed to either the up(1) or testing(3) states (or remains
          in the down(2) state).";
      }

      leaf ifOperStatus {
        type enumeration {
          enum up             { value 1; }
          enum down           { value 2; }
          enum testing        { value 3; }
          enum unknown        { value 4; }
          enum dormant        { value 5; }
          enum notPresent     { value 6; }
          enum lowerLayerDown { value 7; }
        }
        config false;
        description 
         "The current operational state of the interface.  The
          testing(3) state indicates that no operational packets can
          be passed.  If ifAdminStatus is down(2) then ifOperStatus
          should be down(2).  If ifAdminStatus is changed to up(1)
          then ifOperStatus should change to up(1) if the interface is
          ready to transmit and receive network traffic; it should
          change to dormant(5) if the interface is waiting for
          external actions (such as a serial line waiting for an
          incoming connection); it should remain in the down(2) state
          if and only if there is a fault that prevents it from going
          to the up(1) state; it should remain in the notPresent(6)
          state if the interface has missing (typically, hardware)
          components.";
      }

      leaf ifLastChange {
        type yang:timeticks;
        config false;
        description 
         "The value of sysUpTime at the time the interface entered
          its current operational state.  If the current state was
          entered prior to the last re-initialization of the local
          network management subsystem, then this object contains a
          zero value.";
      }

      leaf ifInOctets {
        type yang:counter32;
        config false;
        description 
         "The total number of octets received on the interface,
          
          
          including framing characters.
          
          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
          ifCounterDiscontinuityTime.";
      }

      leaf ifInUcastPkts {
        type yang:counter32;
        config false;
        description 
         "The number of packets, delivered by this sub-layer to a
          higher (sub-)layer, which 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
          ifCounterDiscontinuityTime.";
      }

      leaf ifInNUcastPkts {
        type yang:counter32;
        config false;
        status deprecated;
        description 
         "The number of packets, delivered by this sub-layer to a
          higher (sub-)layer, which were 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
          ifCounterDiscontinuityTime.
          
          This object is deprecated in favour of ifInMulticastPkts and
          ifInBroadcastPkts.";
      }

      leaf ifInDiscards {
        type yang:counter32;
        config false;
        description 
         "The number of inbound packets which were chosen to be
          discarded even though no errors had been detected to prevent
          
          
          their being deliverable to a higher-layer protocol.  One
          possible reason for discarding such a packet could be to
          free up buffer space.
          
          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
          ifCounterDiscontinuityTime.";
      }

      leaf ifInErrors {
        type yang:counter32;
        config false;
        description 
         "For packet-oriented interfaces, the number of inbound
          packets that contained errors preventing them from being
          deliverable to a higher-layer protocol.  For character-
          oriented or fixed-length interfaces, the number of inbound
          transmission units that contained errors preventing them
          from being deliverable to a higher-layer protocol.
          
          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
          ifCounterDiscontinuityTime.";
      }

      leaf ifInUnknownProtos {
        type yang:counter32;
        config false;
        description 
         "For packet-oriented interfaces, the number of packets
          received via the interface which were discarded because of
          an unknown or unsupported protocol.  For character-oriented
          or fixed-length interfaces that support protocol
          multiplexing the number of transmission units received via
          the interface which were discarded because of an unknown or
          unsupported protocol.  For any interface that does not
          support protocol multiplexing, this counter will always be
          0.
          
          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
          ifCounterDiscontinuityTime.";
      }

      leaf ifOutOctets {
        type yang:counter32;
        config false;
        description 
         "The total number of octets transmitted out of the
          interface, including framing characters.
          
          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
          ifCounterDiscontinuityTime.";
      }

      leaf ifOutUcastPkts {
        type yang:counter32;
        config false;
        description 
         "The total number of packets that higher-level protocols
          requested be transmitted, and which were not addressed to a
          multicast or broadcast address at this sub-layer, including
          those that were discarded or not sent.
          
          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
          ifCounterDiscontinuityTime.";
      }

      leaf ifOutNUcastPkts {
        type yang:counter32;
        config false;
        status deprecated;
        description 
         "The total number of packets that higher-level protocols
          requested be transmitted, and which were addressed to a
          multicast or broadcast address at this sub-layer, including
          those that were discarded or not sent.
          
          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
          ifCounterDiscontinuityTime.
          
          This object is deprecated in favour of ifOutMulticastPkts
          and ifOutBroadcastPkts.";
      }

      leaf ifOutDiscards {
        type yang:counter32;
        config false;
        description 
         "The number of outbound packets which were chosen to be
          discarded even though no errors had been detected to prevent
          their being transmitted.  One possible reason for discarding
          such a packet could be to free up buffer space.
          
          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
          ifCounterDiscontinuityTime.";
      }

      leaf ifOutErrors {
        type yang:counter32;
        config false;
        description 
         "For packet-oriented interfaces, the number of outbound
          packets that could not be transmitted because of errors.
          For character-oriented or fixed-length interfaces, the
          number of outbound transmission units that could not be
          transmitted because of errors.
          
          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
          ifCounterDiscontinuityTime.";
      }

      leaf ifOutQLen {
        type yang:gauge32;
        config false;
        status deprecated;
        description 
         "The length of the output packet queue (in packets).";
      }

      leaf ifSpecific {
        type yang:object-identifier;
        config false;
        status deprecated;
        description 
         "A reference to MIB definitions specific to the particular
          media being used to realize the interface.  It is
          
          
          recommended that this value point to an instance of a MIB
          object in the media-specific MIB, i.e., that this object
          have the semantics associated with the InstancePointer
          textual convention defined in RFC 2579.  In fact, it is
          recommended that the media-specific MIB specify what value
          ifSpecific should/can take for values of ifType.  If no MIB
          definitions specific to the particular media are available,
          the value should be set to the OBJECT IDENTIFIER { 0 0 }.";
      }
    }
  }

  container ifMIBObjects {


    /* XXX table comments here XXX */

    list ifStackEntry {

      key "ifStackHigherLayer ifStackLowerLayer";
      description   
       "Information on a particular relationship between two sub-
        layers, specifying that one sub-layer runs on 'top' of the
        other sub-layer.  Each sub-layer corresponds to a conceptual
        row in the ifTable.";


      leaf ifStackHigherLayer {
        type if-mib:InterfaceIndexOrZero;
        config false;
        description 
         "The value of ifIndex corresponding to the higher sub-layer
          of the relationship, i.e., the sub-layer which runs on 'top'
          of the sub-layer identified by the corresponding instance of
          ifStackLowerLayer.  If there is no higher sub-layer (below
          the internetwork layer), then this object has the value 0.";
      }

      leaf ifStackLowerLayer {
        type if-mib:InterfaceIndexOrZero;
        config false;
        description 
         "The value of ifIndex corresponding to the lower sub-layer
          of the relationship, i.e., the sub-layer which runs 'below'
          the sub-layer identified by the corresponding instance of
          ifStackHigherLayer.  If there is no lower sub-layer, then
          this object has the value 0.";
      }

      leaf ifStackStatus {
        type smiv2:RowStatus;
        config true;
        description 
         "The status of the relationship between two sub-layers.
          
          Changing the value of this object from 'active' to
          'notInService' or 'destroy' will likely have consequences up
          and down the interface stack.  Thus, write access to this
          object is likely to be inappropriate for some types of
          interfaces, and many implementations will choose not to
          support write-access for any type of interface.";
      }
    }



    /* XXX table comments here XXX */

    list ifRcvAddressEntry {

      key "ifIndex ifRcvAddressAddress";
      description   
       "A list of objects identifying an address for which the
        system will accept packets/frames on the particular
        interface identified by the index value ifIndex.";

      leaf ifIndex {
        type keyref {
          path "/if-mib:interfaces/if-mib:ifEntry/if-mib:ifIndex";
        }
        config false;
        description 
         "Automagically generated keyref leaf.";
      }

      leaf ifRcvAddressAddress {
        type yang:phys-address;
        config false;
        description 
         "An address for which the system will accept packets/frames
          on this entry's interface.";
      }

      leaf ifRcvAddressStatus {
        type smiv2:RowStatus;
        config true;
        description 
         "This object is used to create and delete rows in the
          ifRcvAddressTable.";
      }

      leaf ifRcvAddressType {
        type enumeration {
          enum other       { value 1; }
          enum volatile    { value 2; }
          enum nonVolatile { value 3; }
        }
        config true;
        description 
         "This object has the value nonVolatile(3) for those entries
          in the table which are valid and will not be deleted by the
          next restart of the managed system.  Entries having the
          value volatile(2) are valid and exist, but have not been
          saved, so that will not exist after the next restart of the
          managed system.  Entries having the value other(1) are valid
          and exist but are not classified as to whether they will
          continue to exist after the next restart.";
      }
    }

    leaf ifTableLastChange {
      type yang:timeticks;
      config false;
      description   
       "The value of sysUpTime at the time of the last creation or
        deletion of an entry in the ifTable.  If the number of
        entries has been unchanged since the last re-initialization
        of the local network management subsystem, then this object
        contains a zero value.";
    }

    leaf ifStackLastChange {
      type yang:timeticks;
      config false;
      description   
       "The value of sysUpTime at the time of the last change of
        the (whole) interface stack.  A change of the interface
        stack is defined to be any creation, deletion, or change in
        value of any instance of ifStackStatus.  If the interface
        stack has been unchanged since the last re-initialization of
        the local network management subsystem, then this object
        contains a zero value.";
    }
  }


  /* XXX table comments here XXX */

  augment "/if-mib:interfaces/if-mib:ifEntry" {
    description     
     "An entry containing additional management information
      applicable to a particular interface.";

    leaf ifName {
      type smiv2:DisplayString;
      config false;
      description   
       "The textual name of the interface.  The value of this
        object should be the name of the interface as assigned by
        the local device and should be suitable for use in commands
        entered at the device's `console'.  This might be a text
        name, such as `le0' or a simple port number, such as `1',
        depending on the interface naming syntax of the device.  If
        several entries in the ifTable together represent a single
        interface as named by the device, then each will have the
        same value of ifName.  Note that for an agent which responds
        to SNMP queries concerning an interface on some other
        (proxied) device, then the value of ifName for such an
        interface is the proxied device's local name for it.
        
        If there is no local name, or this object is otherwise not
        applicable, then this object contains a zero-length string.";
    }

    leaf ifInMulticastPkts {
      type yang:counter32;
      config false;
      description   
       "The number of packets, delivered by this sub-layer to a
        higher (sub-)layer, which 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
        ifCounterDiscontinuityTime.";
    }

    leaf ifInBroadcastPkts {
      type yang:counter32;
      config false;
      description   
       "The number of packets, delivered by this sub-layer to a
        higher (sub-)layer, which 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
        ifCounterDiscontinuityTime.";
    }

    leaf ifOutMulticastPkts {
      type yang:counter32;
      config false;
      description   
       "The total number of packets that higher-level protocols
        requested be transmitted, and which were addressed to a
        multicast address at this sub-layer, including those that
        were discarded or not sent.  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
        ifCounterDiscontinuityTime.";
    }

    leaf ifOutBroadcastPkts {
      type yang:counter32;
      config false;
      description   
       "The total number of packets that higher-level protocols
        requested be transmitted, and which were addressed to a
        broadcast address at this sub-layer, including those that
        were discarded or not sent.
        
        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
        ifCounterDiscontinuityTime.";
    }

    leaf ifHCInOctets {
      type yang:counter64;
      config false;
      description   
       "The total number of octets received on the interface,
        including framing characters.  This object is a 64-bit
        version of ifInOctets.
        
        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
        ifCounterDiscontinuityTime.";
    }

    leaf ifHCInUcastPkts {
      type yang:counter64;
      config false;
      description   
       "The number of packets, delivered by this sub-layer to a
        higher (sub-)layer, which were not addressed to a multicast
        or broadcast address at this sub-layer.  This object is a
        64-bit version of ifInUcastPkts.
        
        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
        ifCounterDiscontinuityTime.";
    }

    leaf ifHCInMulticastPkts {
      type yang:counter64;
      config false;
      description   
       "The number of packets, delivered by this sub-layer to a
        higher (sub-)layer, which were addressed to a multicast
        address at this sub-layer.  For a MAC layer protocol, this
        includes both Group and Functional addresses.  This object
        is a 64-bit version of ifInMulticastPkts.
        
        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
        ifCounterDiscontinuityTime.";
    }

    leaf ifHCInBroadcastPkts {
      type yang:counter64;
      config false;
      description   
       "The number of packets, delivered by this sub-layer to a
        higher (sub-)layer, which were addressed to a broadcast
        address at this sub-layer.  This object is a 64-bit version
        of ifInBroadcastPkts.
        
        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
        ifCounterDiscontinuityTime.";
    }

    leaf ifHCOutOctets {
      type yang:counter64;
      config false;
      description   
       "The total number of octets transmitted out of the
        interface, including framing characters.  This object is a
        64-bit version of ifOutOctets.
        
        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
        ifCounterDiscontinuityTime.";
    }

    leaf ifHCOutUcastPkts {
      type yang:counter64;
      config false;
      description   
       "The total number of packets that higher-level protocols
        requested be transmitted, and which were not addressed to a
        multicast or broadcast address at this sub-layer, including
        those that were discarded or not sent.  This object is a
        64-bit version of ifOutUcastPkts.
        
        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
        ifCounterDiscontinuityTime.";
    }

    leaf ifHCOutMulticastPkts {
      type yang:counter64;
      config false;
      description   
       "The total number of packets that higher-level protocols
        requested be transmitted, and which were addressed to a
        multicast address at this sub-layer, including those that
        were discarded or not sent.  For a MAC layer protocol, this
        includes both Group and Functional addresses.  This object
        is a 64-bit version of ifOutMulticastPkts.
        
        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
        ifCounterDiscontinuityTime.";
    }

    leaf ifHCOutBroadcastPkts {
      type yang:counter64;
      config false;
      description   
       "The total number of packets that higher-level protocols
        requested be transmitted, and which were addressed to a
        broadcast address at this sub-layer, including those that
        were discarded or not sent.  This object is a 64-bit version
        of ifOutBroadcastPkts.
        
        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
        ifCounterDiscontinuityTime.";
    }

    leaf ifLinkUpDownTrapEnable {
      type enumeration {
        enum enabled  { value 1; }
        enum disabled { value 2; }
      }
      config true;
      description   
       "Indicates whether linkUp/linkDown traps should be generated
        for this interface.
        
        By default, this object should have the value enabled(1) for
        interfaces which do not operate on 'top' of any other
        interface (as defined in the ifStackTable), and disabled(2)
        otherwise.";
    }

    leaf ifHighSpeed {
      type yang:gauge32;
      config false;
      description   
       "An estimate of the interface's current bandwidth in units
        of 1,000,000 bits per second.  If this object reports a
        value of `n' then the speed of the interface is somewhere in
        the range of `n-500,000' to `n+499,999'.  For interfaces
        which do not vary in bandwidth or for those where no
        accurate estimation can be made, this object should contain
        the nominal bandwidth.  For a sub-layer which has no concept
        of bandwidth, this object should be zero.";
    }

    leaf ifPromiscuousMode {
      type smiv2:TruthValue;
      config true;
      description   
       "This object has a value of false(2) if this interface only
        accepts packets/frames that are addressed to this station.
        This object has a value of true(1) when the station accepts
        all packets/frames transmitted on the media.  The value
        true(1) is only legal on certain types of media.  If legal,
        setting this object to a value of true(1) may require the
        interface to be reset before becoming effective.
        
        The value of ifPromiscuousMode does not affect the reception
        of broadcast and multicast packets/frames by the interface.";
    }

    leaf ifConnectorPresent {
      type smiv2:TruthValue;
      config false;
      description   
       "This object has the value 'true(1)' if the interface
        sublayer has a physical connector and the value 'false(2)'
        otherwise.";
    }

    leaf ifAlias {
      type smiv2:DisplayString {
        length "0..64";
      }
      config true;
      description   
       "This object is an 'alias' name for the interface as
        specified by a network manager, and provides a non-volatile
        'handle' for the interface.
        
        On the first instantiation of an interface, the value of
        ifAlias associated with that interface is the zero-length
        string.  As and when a value is written into an instance of
        ifAlias through a network management set operation, then the
        agent must retain the supplied value in the ifAlias instance
        associated with the same interface for as long as that
        interface remains instantiated, including across all re-
        initializations/reboots of the network management system,
        including those which result in a change of the interface's
        ifIndex value.
        
        An example of the value which a network manager might store
        in this object for a WAN interface is the (Telco's) circuit
        number/identifier of the interface.
        
        Some agents may support write-access only for interfaces
        having particular values of ifType.  An agent which supports
        write access to this object is required to keep the value in
        non-volatile storage, but it may limit the length of new
        values depending on how much storage is already occupied by
        the current values for other interfaces.";
    }

    leaf ifCounterDiscontinuityTime {
      type yang:timestamp;
      config false;
      description   
       "The value of sysUpTime on the most recent occasion at which
        any one or more of this interface's counters suffered a
        discontinuity.  The relevant counters are the specific
        instances associated with this interface of any Counter32 or
        
        
        Counter64 object contained in the ifTable or ifXTable.  If
        no such discontinuities have occurred since the last re-
        initialization of the local management subsystem, then this
        object contains a zero value.";
    }
  }


  /* XXX table comments here XXX */

  augment "/if-mib:interfaces/if-mib:ifEntry" {
    status deprecated;
    description     
     "An entry containing objects for invoking tests on an
      interface.";

    leaf ifTestId {
      type smiv2:TestAndIncr;
      config true;
      status deprecated;
      description   
       "This object identifies the current invocation of the
        interface's test.";
    }

    leaf ifTestStatus {
      type enumeration {
        enum notInUse { value 1; }
        enum inUse    { value 2; }
      }
      config true;
      status deprecated;
      description   
       "This object indicates whether or not some manager currently
        has the necessary 'ownership' required to invoke a test on
        this interface.  A write to this object is only successful
        when it changes its value from 'notInUse(1)' to 'inUse(2)'.
        After completion of a test, the agent resets the value back
        to 'notInUse(1)'.";
    }

    leaf ifTestType {
      type smiv2:AutonomousType;
      config true;
      status deprecated;
      description   
       "A control variable used to start and stop operator-
        initiated interface tests.  Most OBJECT IDENTIFIER values
        assigned to tests are defined elsewhere, in association with
        specific types of interface.  However, this document assigns
        a value for a full-duplex loopback test, and defines the
        special meanings of the subject identifier:
        
            noTest  OBJECT IDENTIFIER ::= { 0 0 }
        
        When the value noTest is written to this object, no action
        is taken unless a test is in progress, in which case the
        test is aborted.  Writing any other value to this object is
        
        
        only valid when no test is currently in progress, in which
        case the indicated test is initiated.
        
        When read, this object always returns the most recent value
        that ifTestType was set to.  If it has not been set since
        the last initialization of the network management subsystem
        on the agent, a value of noTest is returned.";
    }

    leaf ifTestResult {
      type enumeration {
        enum none         { value 1; }
        enum success      { value 2; }
        enum inProgress   { value 3; }
        enum notSupported { value 4; }
        enum unAbleToRun  { value 5; }
        enum aborted      { value 6; }
        enum failed       { value 7; }
      }
      config false;
      status deprecated;
      description   
       "This object contains the result of the most recently
        requested test, or the value none(1) if no tests have been
        requested since the last reset.  Note that this facility
        provides no provision for saving the results of one test
        when starting another, as could be required if used by
        multiple managers concurrently.";
    }

    leaf ifTestCode {
      type yang:object-identifier;
      config false;
      status deprecated;
      description   
       "This object contains a code which contains more specific
        information on the test result, for example an error-code
        after a failed test.  Error codes and other values this
        object may take are specific to the type of interface and/or
        test.  The value may have the semantics of either the
        AutonomousType or InstancePointer textual conventions as
        defined in RFC 2579.  The identifier:
        
            testCodeUnknown  OBJECT IDENTIFIER ::= { 0 0 }
        
        is defined for use if no additional result code is
        available.";
    }

    leaf ifTestOwner {
      type if-mib:OwnerString;
      config true;
      status deprecated;
      description   
       "The entity which currently has the 'ownership' required to
        invoke a test on this interface.";
    }
  }

  notification linkDown {
    description     
     "A linkDown trap signifies that the SNMP entity, acting in
      an agent role, has detected that the ifOperStatus object for
      one of its communication links is about to enter the down
      state from some other state (but not from the notPresent
      state).  This other state is indicated by the included value
      of ifOperStatus.";

    container linkDown-ifIndex {
      leaf ifIndex {
        type keyref {
          path "/if-mib:interfaces/if-mib:ifEntry/if-mib:ifIndex";
        }
        config false;
        description 
         "Automagically generated keyref leaf.";
      }
    }

    container linkDown-ifAdminStatus {
      leaf ifIndex {
        type keyref {
          path "/if-mib:interfaces/if-mib:ifEntry/if-mib:ifIndex";
        }
        config false;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf ifAdminStatus {
        type enumeration {
          enum up      { value 1; }
          enum down    { value 2; }
          enum testing { value 3; }
        }
        config false;
        description 
         "The desired state of the interface.  The testing(3) state
          indicates that no operational packets can be passed.  When a
          managed system initializes, all interfaces start with
          ifAdminStatus in the down(2) state.  As a result of either
          explicit management action or per configuration information
          retained by the managed system, ifAdminStatus is then
          changed to either the up(1) or testing(3) states (or remains
          in the down(2) state).";
      }
    }

    container linkDown-ifOperStatus {
      leaf ifIndex {
        type keyref {
          path "/if-mib:interfaces/if-mib:ifEntry/if-mib:ifIndex";
        }
        config false;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf ifOperStatus {
        type enumeration {
          enum up             { value 1; }
          enum down           { value 2; }
          enum testing        { value 3; }
          enum unknown        { value 4; }
          enum dormant        { value 5; }
          enum notPresent     { value 6; }
          enum lowerLayerDown { value 7; }
        }
        config false;
        description 
         "The current operational state of the interface.  The
          testing(3) state indicates that no operational packets can
          be passed.  If ifAdminStatus is down(2) then ifOperStatus
          should be down(2).  If ifAdminStatus is changed to up(1)
          then ifOperStatus should change to up(1) if the interface is
          ready to transmit and receive network traffic; it should
          change to dormant(5) if the interface is waiting for
          external actions (such as a serial line waiting for an
          incoming connection); it should remain in the down(2) state
          if and only if there is a fault that prevents it from going
          to the up(1) state; it should remain in the notPresent(6)
          state if the interface has missing (typically, hardware)
          components.";
      }
    }

  }

  notification linkUp {
    description     
     "A linkUp trap signifies that the SNMP entity, acting in an
      agent role, has detected that the ifOperStatus object for
      one of its communication links left the down state and
      transitioned into some other state (but not into the
      notPresent state).  This other state is indicated by the
      included value of ifOperStatus.";

    container linkUp-ifIndex {
      leaf ifIndex {
        type keyref {
          path "/if-mib:interfaces/if-mib:ifEntry/if-mib:ifIndex";
        }
        config false;
        description 
         "Automagically generated keyref leaf.";
      }
    }

    container linkUp-ifAdminStatus {
      leaf ifIndex {
        type keyref {
          path "/if-mib:interfaces/if-mib:ifEntry/if-mib:ifIndex";
        }
        config false;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf ifAdminStatus {
        type enumeration {
          enum up      { value 1; }
          enum down    { value 2; }
          enum testing { value 3; }
        }
        config false;
        description 
         "The desired state of the interface.  The testing(3) state
          indicates that no operational packets can be passed.  When a
          managed system initializes, all interfaces start with
          ifAdminStatus in the down(2) state.  As a result of either
          explicit management action or per configuration information
          retained by the managed system, ifAdminStatus is then
          changed to either the up(1) or testing(3) states (or remains
          in the down(2) state).";
      }
    }

    container linkUp-ifOperStatus {
      leaf ifIndex {
        type keyref {
          path "/if-mib:interfaces/if-mib:ifEntry/if-mib:ifIndex";
        }
        config false;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf ifOperStatus {
        type enumeration {
          enum up             { value 1; }
          enum down           { value 2; }
          enum testing        { value 3; }
          enum unknown        { value 4; }
          enum dormant        { value 5; }
          enum notPresent     { value 6; }
          enum lowerLayerDown { value 7; }
        }
        config false;
        description 
         "The current operational state of the interface.  The
          testing(3) state indicates that no operational packets can
          be passed.  If ifAdminStatus is down(2) then ifOperStatus
          should be down(2).  If ifAdminStatus is changed to up(1)
          then ifOperStatus should change to up(1) if the interface is
          ready to transmit and receive network traffic; it should
          change to dormant(5) if the interface is waiting for
          external actions (such as a serial line waiting for an
          incoming connection); it should remain in the down(2) state
          if and only if there is a fault that prevents it from going
          to the up(1) state; it should remain in the notPresent(6)
          state if the interface has missing (typically, hardware)
          components.";
      }
    }

  }
} /* end of module IF-MIB */