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

module RMON2-MIB {

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

  namespace "urn:ietf:params:xml:ns:yang:smiv2:RMON2-MIB";
  prefix "rmon2-mib";

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

  import IF-MIB              { prefix "if-mib"; }
  import RMON-MIB            { prefix "rmon-mib"; }
  import SNMPv2-TC           { prefix "smiv2"; }
  import TOKEN-RING-RMON-MIB { prefix "token-ring"; }
  import inet-types          { prefix "inet"; }
  import yang-types          { prefix "yang"; }

  /*** META INFORMATION ***/

  organization      
   "IETF RMON MIB Working Group";

  contact           
   "Author:
    Steve Waldbusser
    Phone:  +1-650-948-6500
    Fax :   +1-650-745-0671
    Email:  waldbusser@nextbeacon.com
    
    Working Group Chair:
    Andy Bierman
    E-mail: ietf@andybierman.com
    
    Working Group Mailing List: <rmonmib@ietf.org>
    To subscribe send email to: <rmonmib-request@ietf.org>    ";

  description       
   "The MIB module for managing remote monitoring
    device implementations.  This MIB module
    extends the architecture introduced in the original
    RMON MIB as specified in RFC 2819.
    
    Copyright (C) The Internet Society (2006).  This version of
    this MIB module is part of RFC 4502;  see the RFC itself for
    full legal notices.";

  revision "2006-05-02" {
    description     
     "This version updates the proposed-standard version of the
      RMON2 MIB (published as RFC 2021) by adding 2 new
      enumerations to the nlMatrixTopNControlRateBase object and
      4 new enumerations to the alMatrixTopNControlRateBase object.
      These new enumerations support the creation of high-capacity
      topN reports in the High Capacity RMON MIB [RFC3273].
      
      Additionally, the following objects have been deprecated, as
      they have not had enough independent implementations to
      demonstrate interoperability to meet the requirements of a
      Draft Standard:
      
      probeDownloadFile
      probeDownloadTFTPServer
      probeDownloadAction
      probeDownloadStatus
      
      
      
      serialMode
      serialProtocol
      serialTimeout
      serialModemInitString
      serialModemHangUpString
      serialModemConnectResp
      serialModemNoConnectResp
      serialDialoutTimeout
      serialStatus
      serialConnectDestIpAddress
      serialConnectType
      serialConnectDialString
      serialConnectSwitchConnectSeq
      serialConnectSwitchDisconnectSeq
      serialConnectSwitchResetSeq
      serialConnectOwner
      serialConnectStatus
      netConfigIPAddress
      netConfigSubnetMask
      netConfigStatus
      netDefaultGateway
      tokenRingMLStats2DroppedFrames
      tokenRingMLStats2CreateTime
      tokenRingPStats2DroppedFrames
      tokenRingPStats2CreateTime
      ringStationControl2DroppedFrames
      ringStationControl2CreateTime
      sourceRoutingStats2DroppedFrames
      sourceRoutingStats2CreateTime
      trapDestIndex
      trapDestCommunity
      trapDestProtocol
      trapDestAddress
      trapDestOwner
      trapDestStatus
      
      In addition, two corrections were made.  The LastCreateTime
      Textual Convention had been defined with a base type of
      another textual convention, which isn't allowed in SMIv2.  The
      definition has been modified to use TimeTicks as the base
      type.
      
      Further, the SerialConfigEntry SEQUENCE definition included
      sub-typing information that is not allowed in SMIv2.  This
      information has been deleted.  Ranges were added to a number of
      objects and textual-conventions to constrain their maximum
      (and sometimes minimum) sizes.  The addition of these ranges
      documents existing practice for these objects.  These objects
      
      
      
      are:
          ControlString
          protocolDirID
          protocolDirParameters
          addressMapNetworkAddress
          nlHostAddress
          nlMatrixSDSourceAddress
          nlMatrixSDDestAddress
          nlMatrixDSSourceAddress
          nlMatrixDSDestAddress
          nlMatrixTopNSourceAddress
          nlMatrixTopNDestAddress
          alHostEntry
          alMatrixSDEntry
          alMatrixDSEntry
          alMatrixTopNSourceAddress
          alMatrixTopNDestAddress
      
      Finally, the TimeFilter TC has been updated to encourage agent
      implementations that allow a MIB walk to behave well even when
      performed by an application that is not aware of the special
      TimeFilter semantics.";
  }
  revision "2002-07-08" {
    description     
     "Added new enumerations to support the High-Capacity RMON
      MIB as defined in RFC 3273.  Also fixed some typos and
      added clarifications.";
  }
  revision "1996-05-27" {
    description     
     "Original version.  Published as RFC 2021.";
  }

  /*** TYPE DEFINITIONS ***/

  typedef ZeroBasedCounter32 {
    type yang:gauge32;
    description     
     "This TC describes an object that counts events with the
      following semantics: objects of this type will be set to
      zero(0) on creation and will thereafter count appropriate
      events, wrapping back to zero(0) when the value 2^32 is
      reached.
      
      Provided that an application discovers the new object within
      the minimum time to wrap, it can use the initial value as a
      delta since it last polled the table of which this object is
      part.  It is important for a management station to be aware of
      this minimum time and the actual time between polls, and to
      discard data if the actual time is too long or there is no
      defined minimum time.
      
      Typically, this TC is used in tables where the INDEX space is
      constantly changing and/or the TimeFilter mechanism is in use.";
  }

  typedef LastCreateTime {
    type yang:timeticks;
    description     
     "This TC describes an object that stores the value of the
      sysUpTime object at the last time its entry was created.
      
      This can be used for polling applications to determine that an
      entry has been deleted and re-created between polls, causing
      an otherwise undetectable discontinuity in the data.
      
      If sysUpTime is reset to zero as a result of a re-
      initialization of the network management (sub)system, then
      the values of all LastCreateTime objects are also reset.
      However, after approximately 497 days without a re-
      initialization, the sysUpTime object will reach 2^^32-1 and
      then increment to zero; in this case, existing values
      of TimeStamp objects do not change.  This can lead to
      ambiguities in the value of TimeStamp objects.";
  }

  typedef TimeFilter {
    type yang:timeticks;
    description     
     "To be used for the index to a table.  Allows an application
      to download only those rows changed since a particular time.
      
      
      
      Note that this is not a history mechanism.  Only current values
      of underlying objects are returned; saved instance values
      associated with particular values of sysUpTime are not.
      
      An entry is considered changed if the value of any object in the
      entry changes, if the row is created, or if any object in the
      entry is created or deleted.  Note that deleted entries cannot
      be detected or downloaded.
      
      A time-filtered conceptual table is created by inserting a
      single object of SYNTAX TimeFilter as the first INDEX component
      in a copy of an existing basic conceptual table (i.e., any
      SEQUENCE without a TimeFilter INDEX component).  Thus, for
      each conceptual entry 'I' in the basic table, there exists N
      conceptual entries in the time-filtered version, indexed N.I,
      where 'N' is equal to the value of sysUpTime.
      
      When an application retrieves conceptual instances from a
      time-filtered table, and an INDEX value is provided for the
      TimeFilter INDEX component 'N', the agent will only consider
      returning basic conceptual entries (e.g., 'fooColumn.N.I') if
      any column within the basic conceptual entry has changed since
      sysUpTime 'N'.  If not, the basic conceptual entry will
      be ignored for the particular retrieval operation.
      
      When sysUpTime is equal to zero, this table shall be empty.
      
      One conceptual entry exists for each past value of sysUpTime,
      except that the whole table is purged should sysUpTime wrap.
      
      As an entry in a time-filtered table is updated (i.e., one of
      the columns in the basic conceptual table is changed), new
      conceptual entries are also created in the time-filtered version
      (which still shares the now updated object values with all other
      instances).  The number of unique time-filtered instances that
      are created is determined by the value of sysUpTime at which the
      basic entry was last updated.  One unique instance will exist
      for each value of sysUpTime at the last update time for the row.
      However, a new TimeFilter index instance is created for each new
      sysUpTime value.  The TimeFilter index values not associated
      with entry updates are called duplicate time-filtered instances.
      
      After some deployment experience, it has been determined that
      a time-filtered table is more efficient if the agent
      stops a MIB walk operation by skipping over rows with a
      TimeFilter index value higher than the value in the received
      GetNext/GetBulk request.  That is, instead of incrementing a
      TimeFilter index value, the agent will continue to the next
      
      
      
      object or table.  As a consequence, GetNext or GetBulk
      operations will provide only one pass through a time-filtered
      table.
      
      It is suggested that an agent implement a time-filtered table
      in this manner to improve performance and avoid a MIB walk
      getting stuck in time-filtered tables.  It is, however, still
      acceptable for an agent to implement a time-filtered table in
      the traditional manner (i.e., every conceptual time-filtered
      instance is returned in GetNext and GetBulk PDU responses), and
      management applications must be able to deal with such
      traditional implementations.
      
      See the appendix for further discussion of this textual
      convention.
      
      The following example is provided to demonstrate TimeFilter
      behavior:
      
      Consider the following basic conceptual table, basicFooTable.
      (Note that the basic version of a time-filtered table may not
      actually be defined.)
      
          basicFooTable:
      
          basicFooTable ...
          INDEX { fooIndex }
      
          BasicFooEntry {
             fooIndex     Integer32,
             fooCounts    Counter32
          }
      
      For this example, the basicFooTable contains two static
      conceptual entries (fooIndex equals '1' and '2'), created at
      time zero.  It also contains one dynamic conceptual entry
      (fooIndex equals '3'), which is created at time '3' and deleted
      at time '7'.
      
      The time-filtered version of the basicFooTable could be defined
      as follows:
      
          FooTable:
      
          fooTable ...
          INDEX { fooTimeMark, fooIndex }
      
          FooEntry {
      
      
      
             fooTimeMark  TimeFilter,
             fooIndex     Integer32,
             fooCounts    Counter32
          }
      
      
      Note that entries exist in the time-filtered conceptual table
      only if they actually exist in the underlying (basic) table.
      
      For this example, the fooTable will have three underlying
      basic entries (fooIndex == 1, 2, and 3), with the following
      activity (for sysUpTime equal 0 to 9):
      
         - fooEntry.N.1 is created at time '0' and most recently
           updated at time '6' to the value '5'.
         - fooEntry.N.2 is created at time '0' and most recently
           updated at time '8' to the value '9'.
         - fooEntry.N.3 is created at time '3', updated at time '5'
           to the value '17', and deleted at time '7'.
      
      The following tables show the values that would be returned for
      MIB walk operations with various TimeFilter values, done at
      different times.  An application issues a retrieval request at
      time 'T', with a TimeFilter value, 'N' (typically set to a lower
      value, such as the value of sysUpTime at the last polling cycle).
      
      The following values would be returned in a MIB walk of
      fooCounts.N if T equals '0' and N equals '0':
      
           fooCounts.N.I    Value
           ==========================
           fooCounts.0.1    0
           fooCounts.0.2    0
      
       Note that nothing is returned for fooCounts.0.3, since that
       entry does not exist at sysUpTime equals '0'.
      
      The following values would be returned in a full (traditional) MIB
      walk of fooCounts.N if T equals '3' and N equals '0':
      
           fooCounts.N.I    Value
           =======================
           fooCounts.0.1    0
           fooCounts.0.2    0
           fooCounts.0.3    0
           fooCounts.1.3    0
           fooCounts.2.3    0
           fooCounts.3.3    0
      
      
      
       Note that there are no instances for T equals 1 or 2 for the
       first two values of N, as these entries did not change
       since they were created at time '0'.
      
       Note that the current value for 'fooCounts.N.3' is returned
       here, even for values of N less than '3' (when the entry was
       created).  The agent only considers the current existence of an
       entry in the TimeFilter algorithm, not the time when the entry
       was created.
      
       Note that the instances 'fooCounts.0.3', 'fooCounts.1.3',
       and 'fooCounts.2.3' are duplicates and can be suppressed by the
       agent in a MIB walk.
      
      The following values would be returned in a full (traditional)
      MIB walk of fooCounts.N if T equals '6' and N equals '3':
      
           fooCounts.N.I    Value
           =======================
           fooCounts.3.1    5
           fooCounts.3.3    17
           fooCounts.4.1    5
           fooCounts.4.3    17
           fooCounts.5.1    5
           fooCounts.5.3    17
           fooCounts.6.1    5
      
        Note that no instances for entry 'fooCounts.N.2' are returned,
        since it has not changed since time '3'.
      
        Note that all instances except 'fooCounts.5.3' and
        'fooCounts.6.1' are duplicates and can be suppressed by the
        agent in a MIB walk.
      
      The following values would be returned in a full (traditional)
      MIB walk of fooCounts.N if T equals '9' and N equals '6':
      
           fooCounts.N.I    Value
           =======================
           fooCounts.6.1    5
           fooCounts.6.2    9
           fooCounts.7.2    9
           fooCounts.8.2    9
      
        Note that no instances for entry 'fooCounts.N.3' are returned,
        since it was deleted at time '7'.
      
        Note that instances 'fooCounts.6.2' and 'fooCounts.7.2'
      
      
      
        are duplicates and can be suppressed by the agent in a MIB
        walk.";
  }

  typedef DataSource {
    type yang:object-identifier;
    description     
     "Identifies the source of the data that the associated
      function is configured to analyze.  This source can be any
      interface on this device.
      
      In order to identify a particular interface, this
      object shall identify the instance of the ifIndex
      object, defined in [RFC2863], for the desired interface.
      
      For example, if an entry were to receive data from
      interface #1, this object would be set to ifIndex.1.";
  }

  typedef ControlString {
    type binary {
      length "0..255";
    }
    description     
     "This data type is used to communicate with a modem or a
      
      
      
      serial data switch.  A ControlString contains embedded
      commands to control how the device will interact with the
      remote device through the serial interface.  Commands are
      represented as two-character sequences beginning with
      the '^' character.
      
      The following commands are recognized by the device (note
      that command characters are case sensitive):
      
         ^s  Send string that follows, which is terminated by the
             next command or the end of string.
         ^c  Delay for the number of seconds that follows.  Toss
             out any data received rather than store it in a
             buffer for parsing.
         ^t  Set timeout to the value represented by the decimal
             digits that follow.  The default timeout is 20
             seconds.  Note that this timeout may be overridden
             by a smaller serialTimeout configured for the
             associated serial interface (see serialConfigTable).
         ^w  Wait for the reply string that follows, which is
             terminated by the next command or the end of string.
             Partial and case-insensitive matching is applied, i.e.,
             if the reply string (any case combination) is found
             anywhere in the received string, then the a match is
             found.  If the current timeout elapses without a match,
             then the remaining control string is ignored.
         ^!  The ^ character.
         ^d  Delay the number of seconds specified by the decimal
             digits that follow.
         ^b  Send break for the number of milliseconds specified by
             the decimal digits that follow.  If no digits follow,
             break will be enforced for 250 milliseconds by default.
      
      The following ASCII control characters may be inserted into
      the '^s' send string or the '^w' reply string:
      
         ^@    0x00
         ^A    0x01
          ..
         ^M    0x0D
          ..
         ^Z    0x1A
         ^[    0x1B
         ^    0x1C
         ^]    0x1D
         ^^    0x1E
         ^_    0x1F
      
      
      
      
      Binary data may also be inserted into the data stream.  The
      control sequence for each byte of binary data is ^0x##, where
      ## is the hexadecimal representation of the data byte.  Two
      ASCII characters (0-9, a-f, A-F) must follow the '^0x'
      control prefix.  For example, '^0x0D^0x0A' is interpreted as a
      carriage return followed by a line feed.";
  }

  container protocolDir {

    leaf protocolDirLastChange {
      type yang:timestamp;
      config false;
      description   
       "The value of sysUpTime at the time the protocol directory
        was last modified, either through insertions or deletions,
        or through modifications of the
        protocolDirAddressMapConfig, protocolDirHostConfig, or
        protocolDirMatrixConfig.";
    }


    /* XXX table comments here XXX */

    list protocolDirEntry {

      key "protocolDirID protocolDirParameters";
      description   
       "A conceptual row in the protocolDirTable.
        
        An example of the indexing of this entry is
        protocolDirLocalIndex.8.0.0.0.1.0.0.8.0.2.0.0, which is the
        encoding of a length of 8, followed by 8 subids encoding the
        protocolDirID of 1.2048, followed by a length of 2 and the
        2 subids encoding zero-valued parameters.
        
        Note that some combinations of index values may result in an
        index that exceeds 128 sub-identifiers in length, which exceeds
        the maximum for the SNMP protocol.  Implementations should take
        care to avoid such combinations.";


      leaf protocolDirID {
        type binary {
          length "4..128";
        }
        config false;
        description 
         "A unique identifier for a particular protocol.  Standard
          identifiers will be defined in such a manner that they
          
          
          
          can often be used as specifications for new protocols - i.e.,
          a tree-structured assignment mechanism that matches the
          protocol encapsulation 'tree' and that has algorithmic
          assignment mechanisms for certain subtrees.  See RFC 2074 for
          more details.
          
          Despite the algorithmic mechanism, the probe will only place
          entries in here for those protocols it chooses to collect.  In
          other words, it need not populate this table with all
          possible ethernet protocol types, nor need it create them on
          the fly when it sees them.  Whether it does these
          things is a matter of product definition (cost/benefit,
          usability) and is up to the designer of the product.
          
          If an entry is written to this table with a protocolDirID that
          the agent doesn't understand, either directly or
          algorithmically, the SET request will be rejected with an
          inconsistentName or badValue (for SNMPv1) error.";
      }

      leaf protocolDirParameters {
        type binary {
          length "1..32";
        }
        config false;
        description 
         "A set of parameters for the associated protocolDirID.
          See the associated RMON2 Protocol Identifiers document
          for a description of the possible parameters.  There
          will be one octet in this string for each sub-identifier in
          the protocolDirID, and the parameters will appear here in the
          same order as the associated sub-identifiers appear in the
          protocolDirID.
          
          Every node in the protocolDirID tree has a different, optional
          set of parameters defined (that is, the definition of
          parameters for a node is optional).  The proper parameter
          value for each node is included in this string.  Note that the
          inclusion of a parameter value in this string for each node is
          not optional.  What is optional is that a node may have no
          parameters defined, in which case the parameter field for that
          node will be zero.";
      }

      leaf protocolDirLocalIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "The locally arbitrary but unique identifier associated
          with this protocolDir entry.
          
          The value for each supported protocol must remain constant at
          least from one re-initialization of the entity's network
          management system to the next re-initialization, except that
          if a protocol is deleted and re-created, it must be re-created
          with a new value that has not been used since the last
          re-initialization.
          
          The specific value is meaningful only within a given SNMP
          entity.  A protocolDirLocalIndex must not be re-used until the
          next agent restart in the event that the protocol directory
          entry is deleted.";
      }

      leaf protocolDirDescr {
        type smiv2:DisplayString {
          length "1..64";
        }
        config true;
        description 
         "A textual description of the protocol encapsulation.
          A probe may choose to describe only a subset of the
          entire encapsulation (e.g., only the highest layer).
          
          This object is intended for human consumption only.
          
          This object may not be modified if the associated
          protocolDirStatus object is equal to active(1).";
      }

      leaf protocolDirType {
        type bits {
          bit extensible                { position 0; }
          bit addressRecognitionCapable { position 1; }
        }
        config false;
        description 
         "This object describes 2 attributes of this protocol
          directory entry.
          
          The presence or absence of the 'extensible' bit describes
          whether this protocol directory entry can be extended
          by the user by creating protocol directory entries that are
          children of this protocol.
          
          An example of an entry that will often allow extensibility is
          
          
          
          'ip.udp'.  The probe may automatically populate some children
          of this node, such as 'ip.udp.snmp' and 'ip.udp.dns'.
          A probe administrator or user may also populate additional
          children via remote SNMP requests that create entries in this
          table.  When a child node is added for a protocol for which the
          probe has no built-in support extending a parent node (for
          which the probe does have built-in support),
          that child node is not extendable.  This is termed 'limited
          extensibility'.
          
          When a child node is added through this extensibility
          mechanism, the values of protocolDirLocalIndex and
          protocolDirType shall be assigned by the agent.
          
          The other objects in the entry will be assigned by the
          manager who is creating the new entry.
          
          This object also describes whether this agent can
          recognize addresses for this protocol, should it be a
          network-level protocol.  That is, while a probe may be able
          to recognize packets of a particular network-layer protocol
          and count them, it takes additional logic to be able to
          recognize the addresses in this protocol and to populate
          network-layer or application-layer tables with the addresses
          in this protocol.  If this bit is set, the agent will
          recognize network-layer addresses for this protocol and
          populate the network- and application-layer host and matrix
          tables with these protocols.
          
          Note that when an entry is created, the agent will supply
          values for the bits that match the capabilities of the agent
          with respect to this protocol.  Note that since row creations
          usually exercise the limited extensibility feature, these
          bits will usually be set to zero.";
      }

      leaf protocolDirAddressMapConfig {
        type enumeration {
          enum notSupported { value 1; }
          enum supportedOff { value 2; }
          enum supportedOn  { value 3; }
        }
        config true;
        description 
         "This object describes and configures the probe's support for
          address mapping for this protocol.  When the probe creates
          entries in this table for all protocols that it understands,
          
          
          
          it will set the entry to notSupported(1) if it doesn't have
          the capability to perform address mapping for the protocol or
          if this protocol is not a network-layer protocol.  When
          an entry is created in this table by a management operation as
          part of the limited extensibility feature, the probe must set
          this value to notSupported(1), because limited extensibility
          of the protocolDirTable does not extend to interpreting
          addresses of the extended protocols.
          
          If the value of this object is notSupported(1), the probe
          will not perform address mapping for this protocol and
          shall not allow this object to be changed to any other value.
          If the value of this object is supportedOn(3), the probe
          supports address mapping for this protocol and is configured
          to perform address mapping for this protocol for all
          addressMappingControlEntries and all interfaces.
          If the value of this object is supportedOff(2), the probe
          supports address mapping for this protocol but is configured
          to not perform address mapping for this protocol for any
          addressMappingControlEntries and all interfaces.
          Whenever this value changes from supportedOn(3) to
          supportedOff(2), the probe shall delete all related entries in
          the addressMappingTable.";
      }

      leaf protocolDirHostConfig {
        type enumeration {
          enum notSupported { value 1; }
          enum supportedOff { value 2; }
          enum supportedOn  { value 3; }
        }
        config true;
        description 
         "This object describes and configures the probe's support for
          the network-layer and application-layer host tables for this
          protocol.  When the probe creates entries in this table for
          all protocols that it understands, it will set the entry to
          notSupported(1) if it doesn't have the capability to track the
          nlHostTable for this protocol or if the alHostTable is
          implemented but doesn't have the capability to track this
          protocol.  Note that if the alHostTable is implemented, the
          probe may only support a protocol if it is supported in both
          the nlHostTable and the alHostTable.
          
          If the associated protocolDirType object has the
          addressRecognitionCapable bit set, then this is a network-
          layer protocol for which the probe recognizes addresses, and
          
          
          
          thus the probe will populate the nlHostTable and alHostTable
          with addresses it discovers for this protocol.
          
          If the value of this object is notSupported(1), the probe
          will not track the nlHostTable or alHostTable for this
          protocol and shall not allow this object to be changed to any
          other value.  If the value of this object is supportedOn(3),
          the probe supports tracking of the nlHostTable and alHostTable
          for this protocol and is configured to track both tables
          for this protocol for all control entries and all interfaces.
          If the value of this object is supportedOff(2), the probe
          supports tracking of the nlHostTable and alHostTable for this
          protocol but is configured to not track these tables
          for any control entries or interfaces.
          Whenever this value changes from supportedOn(3) to
          supportedOff(2), the probe shall delete all related entries in
          the nlHostTable and alHostTable.
          
          Note that since each alHostEntry references 2 protocol
          directory entries, one for the network address and one for the
          type of the highest protocol recognized, an entry will
          only be created in that table if this value is supportedOn(3)
          for both protocols.";
      }

      leaf protocolDirMatrixConfig {
        type enumeration {
          enum notSupported { value 1; }
          enum supportedOff { value 2; }
          enum supportedOn  { value 3; }
        }
        config true;
        description 
         "This object describes and configures the probe's support for
          the network-layer and application-layer matrix tables for this
          protocol.  When the probe creates entries in this table for
          all protocols that it understands, it will set the entry to
          notSupported(1) if it doesn't have the capability to track the
          nlMatrixTables for this protocol or if the alMatrixTables are
          implemented but don't have the capability to track this
          protocol.  Note that if the alMatrix tables are implemented,
          the probe may only support a protocol if it is supported in
          both of the nlMatrixTables and both of the
          alMatrixTables.
          
          If the associated protocolDirType object has the
          addressRecognitionCapable bit set, then this is a network-
          
          
          
          layer protocol for which the probe recognizes addresses, and
          thus the probe will populate both of the nlMatrixTables and
          both of the alMatrixTables with addresses it discovers for
          this protocol.
          
          If the value of this object is notSupported(1), the probe
          will not track either of the nlMatrixTables or the
          alMatrixTables for this protocol and shall not allow this
          object to be changed to any other value.  If the value of this
          object is supportedOn(3), the probe supports tracking of both
          of the nlMatrixTables and (if implemented) both of the
          alMatrixTables for this protocol and is configured to track
          these tables for this protocol for all control entries and all
          interfaces.  If the value of this object is supportedOff(2),
          the probe supports tracking of both of the nlMatrixTables and
          (if implemented) both of the alMatrixTables for this protocol
          but is configured to not track these tables for this
          protocol for any control entries or interfaces.
          Whenever this value changes from supportedOn(3) to
          supportedOff(2), the probe shall delete all related entries in
          the nlMatrixTables and the alMatrixTables.
          
          Note that since each alMatrixEntry references 2 protocol
          directory entries, one for the network address and one for the
          type of the highest protocol recognized, an entry will
          only be created in that table if this value is supportedOn(3)
          for both protocols.";
      }

      leaf protocolDirOwner {
        type rmon-mib:OwnerString;
        config true;
        description 
         "The entity that configured this entry and is
          therefore using the resources assigned to it.";
      }

      leaf protocolDirStatus {
        type smiv2:RowStatus;
        config true;
        description 
         "The status of this protocol directory entry.
          
          An entry may not exist in the active state unless all
          objects in the entry have an appropriate value.
          
          
          
          
          If this object is not equal to active(1), all associated
          entries in the nlHostTable, nlMatrixSDTable, nlMatrixDSTable,
          alHostTable, alMatrixSDTable, and alMatrixDSTable shall be
          deleted.";
      }
    }
  }

  container protocolDist {


    /* XXX table comments here XXX */

    list protocolDistControlEntry {

      key "protocolDistControlIndex";
      description   
       "A conceptual row in the protocolDistControlTable.
        
        An example of the indexing of this entry is
        protocolDistControlDroppedFrames.7";


      leaf protocolDistControlIndex {
        type int32 {
          range "1..65535";
        }
        config false;
        description 
         "A unique index for this protocolDistControlEntry.";
      }

      leaf protocolDistControlDataSource {
        type rmon2-mib:DataSource;
        config true;
        description 
         "The source of data for the this protocol distribution.
          
          The statistics in this group reflect all packets
          on the local network segment attached to the
          identified interface.
          
          This object may not be modified if the associated
          protocolDistControlStatus object is equal to active(1).";
      }

      leaf protocolDistControlDroppedFrames {
        type yang:counter32;
        config false;
        description 
         "The total number of frames that were received by the probe
          and therefore not accounted for in the *StatsDropEvents, but
          that the probe chose not to count for this entry for
          whatever reason.  Most often, this event occurs when the probe
          is out of some resources and decides to shed load from this
          collection.
          
          This count does not include packets that were not counted
          because they had MAC-layer errors.
          
          
          
          Note that, unlike the dropEvents counter, this number is the
          exact number of frames dropped.";
      }

      leaf protocolDistControlCreateTime {
        type rmon2-mib:LastCreateTime;
        config false;
        description 
         "The value of sysUpTime when this control entry was last
          activated.  This can be used by the management station to
          ensure that the table has not been deleted and recreated
          between polls.";
      }

      leaf protocolDistControlOwner {
        type rmon-mib:OwnerString;
        config true;
        description 
         "The entity that configured this entry and is
          therefore using the resources assigned to it.";
      }

      leaf protocolDistControlStatus {
        type smiv2:RowStatus;
        config true;
        description 
         "The status of this row.
          
          An entry may not exist in the active state unless all
          objects in the entry have an appropriate value.
          
          If this object is not equal to active(1), all associated
          entries in the protocolDistStatsTable shall be deleted.";
      }
    }


    /* XXX table comments here XXX */

    list protocolDistStatsEntry {

      key "protocolDistControlIndex protocolDirLocalIndex";
      description   
       "A conceptual row in the protocolDistStatsTable.
        
        The index is composed of the protocolDistControlIndex of the
        associated protocolDistControlEntry, followed by the
        protocolDirLocalIndex of the associated protocol that this
        entry represents.  In other words, the index identifies the
        protocol distribution an entry is a part of and the
        particular protocol that it represents.
        
        An example of the indexing of this entry is
        protocolDistStatsPkts.1.18";

      leaf protocolDistControlIndex {
        type keyref {
          path "/rmon2-mib:protocolDist/rmon2-mib:protocolDistControlEntry/rmon2-mib:protocolDistControlIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf protocolDirLocalIndex {
        type keyref {
          path "/rmon2-mib:protocolDir/rmon2-mib:protocolDirEntry/rmon2-mib:protocolDirLocalIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }

      leaf protocolDistStatsPkts {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of packets of this protocol type received
          without errors.  Note that this is the number of
          link-layer packets, so if a single network-layer packet
          is fragmented into several link-layer frames, this counter
          is incremented several times.";
      }

      leaf protocolDistStatsOctets {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of octets in packets of this protocol type
          
          
          
          received since it was added to the protocolDistStatsTable
          (excluding framing bits, but including FCS octets), except for
          those octets in packets that contained errors.
          
          Note that this doesn't count just those octets in the
          particular protocol frames but includes the entire packet
          that contained the protocol.";
      }
    }
  }

  container addressMap {

    leaf addressMapInserts {
      type yang:counter32;
      config false;
      description   
       "The number of times an address mapping entry has been
        inserted into the addressMapTable.  If an entry is inserted,
        then deleted, and then inserted, this counter will be
        incremented by 2.
        
        Note that the table size can be determined by subtracting
        addressMapDeletes from addressMapInserts.";
    }

    leaf addressMapDeletes {
      type yang:counter32;
      config false;
      description   
       "The number of times an address mapping entry has been
        deleted from the addressMapTable (for any reason).  If
        an entry is deleted, then inserted, and then deleted, this
        counter will be incremented by 2.
        
        Note that the table size can be determined by subtracting
        addressMapDeletes from addressMapInserts.";
    }

    leaf addressMapMaxDesiredEntries {
      type int32 {
        range "-1..2147483647";
      }
      config true;
      description   
       "The maximum number of entries that are desired in the
        addressMapTable.  The probe will not create more than
        this number of entries in the table but may choose to create
        fewer entries in this table for any reason, including the lack
        of resources.
        
        If this object is set to a value less than the current number
        of entries, enough entries are chosen in an
        implementation-dependent manner and deleted so that the number
        of entries in the table equals the value of this object.
        
        If this value is set to -1, the probe may create any number
        of entries in this table.
        
        This object may be used to control how resources are allocated
        on the probe for the various RMON functions.";
    }


    /* XXX table comments here XXX */

    list addressMapControlEntry {

      key "addressMapControlIndex";
      description   
       "A conceptual row in the addressMapControlTable.
        
        An example of the indexing of this entry is
        addressMapControlDroppedFrames.1";


      leaf addressMapControlIndex {
        type int32 {
          range "1..65535";
        }
        config false;
        description 
         "A unique index for this entry in the addressMapControlTable.";
      }

      leaf addressMapControlDataSource {
        type rmon2-mib:DataSource;
        config true;
        description 
         "The source of data for this addressMapControlEntry.";
      }

      leaf addressMapControlDroppedFrames {
        type yang:counter32;
        config false;
        description 
         "The total number of frames that were received by the probe
          and therefore not accounted for in the *StatsDropEvents, but
          that the probe chose not to count for this entry for
          whatever reason.  Most often, this event occurs when the probe
          is out of some resources and decides to shed load from this
          collection.
          
          This count does not include packets that were not counted
          because they had MAC-layer errors.
          
          Note that, unlike the dropEvents counter, this number is the
          exact number of frames dropped.";
      }

      leaf addressMapControlOwner {
        type rmon-mib:OwnerString;
        config true;
        description 
         "The entity that configured this entry and is
          therefore using the resources assigned to it.";
      }

      leaf addressMapControlStatus {
        type smiv2:RowStatus;
        config true;
        description 
         "The status of this addressMap control entry.
          
          An entry may not exist in the active state unless all
          objects in the entry have an appropriate value.
          
          If this object is not equal to active(1), all associated
          entries in the addressMapTable shall be deleted.";
      }
    }


    /* XXX table comments here XXX */

    list addressMapEntry {

      key "addressMapTimeMark protocolDirLocalIndex 
           addressMapNetworkAddress addressMapSource";
      description   
       "A conceptual row in the addressMapTable.
        
        The protocolDirLocalIndex in the index identifies the network
        layer protocol of the addressMapNetworkAddress.
        
        
        
        
        An example of the indexing of this entry is
        addressMapSource.783495.18.4.128.2.6.6.11.1.3.6.1.2.1.2.2.1.1.1.
        
        Note that some combinations of index values may result in an
        index that exceeds 128 sub-identifiers in length, which exceeds
        the maximum for the SNMP protocol.  Implementations should take
        care to avoid such combinations.";

      leaf protocolDirLocalIndex {
        type keyref {
          path "/rmon2-mib:protocolDir/rmon2-mib:protocolDirEntry/rmon2-mib:protocolDirLocalIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }

      leaf addressMapTimeMark {
        type rmon2-mib:TimeFilter;
        config false;
        description 
         "A TimeFilter for this entry.  See the TimeFilter textual
          convention to see how this works.";
      }

      leaf addressMapNetworkAddress {
        type binary {
          length "1..255";
        }
        config false;
        description 
         "The network address for this relation.
          
          This is represented as an octet string with
          specific semantics and length as identified
          by the protocolDirLocalIndex component of the
          index.
          
          For example, if the protocolDirLocalIndex indicates an
          encapsulation of ip, this object is encoded as a length
          octet of 4, followed by the 4 octets of the IP address,
          in network byte order.";
      }

      leaf addressMapSource {
        type yang:object-identifier;
        config false;
        description 
         "The interface or port on which the associated network
          address was most recently seen.
          
          If this address mapping was discovered on an interface, this
          object shall identify the instance of the ifIndex
          object, defined in [RFC2863], for the desired interface.
          For example, if an entry were to receive data from
          interface #1, this object would be set to ifIndex.1.
          
          If this address mapping was discovered on a port, this
          object shall identify the instance of the rptrGroupPortIndex
          object, defined in [RFC2108], for the desired port.
          For example, if an entry were to receive data from
          group #1, port #1, this object would be set to
          rptrGroupPortIndex.1.1.
          
          Note that while the dataSource associated with this entry
          may only point to index objects, this object may at times
          point to repeater port objects.  This situation occurs when
          the dataSource points to an interface that is a locally
          attached repeater and the agent has additional information
          about the source port of traffic seen on that repeater.";
      }

      leaf addressMapPhysicalAddress {
        type binary;
        config false;
        description 
         "The last source physical address on which the associated
          network address was seen.  If the protocol of the associated
          network address was encapsulated inside of a network-level or
          higher protocol, this will be the address of the next-lower
          protocol with the addressRecognitionCapable bit enabled and
          will be formatted as specified for that protocol.";
      }

      leaf addressMapLastChange {
        type yang:timestamp;
        config false;
        description 
         "The value of sysUpTime at the time this entry was last
          created or the values of the physical address changed.
          
          
          
          
          This can be used to help detect duplicate address problems, in
          which case this object will be updated frequently.";
      }
    }
  }

  container nlHost {


    /* XXX table comments here XXX */

    list hlHostControlEntry {

      key "hlHostControlIndex";
      description   
       "A conceptual row in the hlHostControlTable.
        
        An example of the indexing of this entry is
        
        
        
        hlHostControlNlDroppedFrames.1";


      leaf hlHostControlIndex {
        type int32 {
          range "1..65535";
        }
        config false;
        description 
         "An index that uniquely identifies an entry in the
          hlHostControlTable.  Each such entry defines
          a function that discovers hosts on a particular
          interface and places statistics about them in the
          nlHostTable, and optionally in the alHostTable, on
          behalf of this hlHostControlEntry.";
      }

      leaf hlHostControlDataSource {
        type rmon2-mib:DataSource;
        config true;
        description 
         "The source of data for the associated host tables.
          
          The statistics in this group reflect all packets
          on the local network segment attached to the
          identified interface.
          
          This object may not be modified if the associated
          hlHostControlStatus object is equal to active(1).";
      }

      leaf hlHostControlNlDroppedFrames {
        type yang:counter32;
        config false;
        description 
         "The total number of frames that were received by the probe
          and therefore not accounted for in the *StatsDropEvents, but
          that the probe chose not to count for the associated
          nlHost entries for whatever reason.  Most often, this event
          occurs when the probe is out of some resources and decides to
          shed load from this collection.
          
          This count does not include packets that were not counted
          because they had MAC-layer errors.
          
          Note that if the nlHostTable is inactive because no protocols
          are enabled in the protocol directory, this value should be 0.
          
          Note that, unlike the dropEvents counter, this number is the
          exact number of frames dropped.";
      }

      leaf hlHostControlNlInserts {
        type yang:counter32;
        config false;
        description 
         "The number of times an nlHost entry has been
          inserted into the nlHost table.  If an entry is inserted, then
          deleted, and then inserted, this counter will be incremented
          by 2.
          
          To allow for efficient implementation strategies, agents may
          delay updating this object for short periods of time.  For
          example, an implementation strategy may allow internal
          data structures to differ from those visible via SNMP for
          short periods of time.  This counter may reflect the internal
          data structures for those short periods of time.
          
          Note that the table size can be determined by subtracting
          hlHostControlNlDeletes from hlHostControlNlInserts.";
      }

      leaf hlHostControlNlDeletes {
        type yang:counter32;
        config false;
        description 
         "The number of times an nlHost entry has been
          
          
          
          deleted from the nlHost table (for any reason).  If an entry
          is deleted, then inserted, and then deleted, this counter will
          be incremented by 2.
          
          To allow for efficient implementation strategies, agents may
          delay updating this object for short periods of time.  For
          example, an implementation strategy may allow internal
          data structures to differ from those visible via SNMP for
          short periods of time.  This counter may reflect the internal
          data structures for those short periods of time.
          
          Note that the table size can be determined by subtracting
          hlHostControlNlDeletes from hlHostControlNlInserts.";
      }

      leaf hlHostControlNlMaxDesiredEntries {
        type int32 {
          range "-1..2147483647";
        }
        config true;
        description 
         "The maximum number of entries that are desired in the
          nlHostTable on behalf of this control entry.  The probe will
          not create more than this number of associated entries in the
          table but may choose to create fewer entries in this table
          for any reason, including the lack of resources.
          
          If this object is set to a value less than the current number
          of entries, enough entries are chosen in an
          implementation-dependent manner and deleted so that the number
          of entries in the table equals the value of this object.
          
          If this value is set to -1, the probe may create any number
          of entries in this table.  If the associated
          hlHostControlStatus object is equal to 'active', this
          object may not be modified.
          
          This object may be used to control how resources are allocated
          on the probe for the various RMON functions.";
      }

      leaf hlHostControlAlDroppedFrames {
        type yang:counter32;
        config false;
        description 
         "The total number of frames that were received by the probe
          and therefore not accounted for in the *StatsDropEvents, but
          that the probe chose not to count for the associated
          
          
          
          alHost entries for whatever reason.  Most often, this event
          occurs when the probe is out of some resources and decides to
          shed load from this collection.
          
          This count does not include packets that were not counted
          because they had MAC-layer errors.
          
          Note that if the alHostTable is not implemented or is inactive
          because no protocols are enabled in the protocol directory,
          this value should be 0.
          
          Note that, unlike the dropEvents counter, this number is the
          exact number of frames dropped.";
      }

      leaf hlHostControlAlInserts {
        type yang:counter32;
        config false;
        description 
         "The number of times an alHost entry has been
          inserted into the alHost table.  If an entry is inserted, then
          deleted, and then inserted, this counter will be incremented
          by 2.
          
          To allow for efficient implementation strategies, agents may
          delay updating this object for short periods of time.  For
          example, an implementation strategy may allow internal
          data structures to differ from those visible via SNMP for
          short periods of time.  This counter may reflect the internal
          data structures for those short periods of time.
          
          Note that the table size can be determined by subtracting
          hlHostControlAlDeletes from hlHostControlAlInserts.";
      }

      leaf hlHostControlAlDeletes {
        type yang:counter32;
        config false;
        description 
         "The number of times an alHost entry has been
          deleted from the alHost table (for any reason).  If an entry
          is deleted, then inserted, and then deleted, this counter will
          be incremented by 2.
          
          To allow for efficient implementation strategies, agents may
          delay updating this object for short periods of time.  For
          
          
          
          example, an implementation strategy may allow internal
          data structures to differ from those visible via SNMP for
          short periods of time.  This counter may reflect the internal
          data structures for those short periods of time.
          
          Note that the table size can be determined by subtracting
          hlHostControlAlDeletes from hlHostControlAlInserts.";
      }

      leaf hlHostControlAlMaxDesiredEntries {
        type int32 {
          range "-1..2147483647";
        }
        config true;
        description 
         "The maximum number of entries that are desired in the alHost
          table on behalf of this control entry.  The probe will not
          create more than this number of associated entries in the
          table but may choose to create fewer entries in this table
          for any reason, including the lack of resources.
          
          If this object is set to a value less than the current number
          of entries, enough entries are chosen in an
          implementation-dependent manner and deleted so that the number
          of entries in the table equals the value of this object.
          
          If this value is set to -1, the probe may create any number
          of entries in this table.  If the associated
          hlHostControlStatus object is equal to 'active', this
          object may not be modified.
          
          This object may be used to control how resources are allocated
          on the probe for the various RMON functions.";
      }

      leaf hlHostControlOwner {
        type rmon-mib:OwnerString;
        config true;
        description 
         "The entity that configured this entry and is
          therefore using the resources assigned to it.";
      }

      leaf hlHostControlStatus {
        type smiv2:RowStatus;
        config true;
        description 
         "The status of this hlHostControlEntry.
          
          An entry may not exist in the active state unless all
          objects in the entry have an appropriate value.
          
          If this object is not equal to active(1), all associated
          entries in the nlHostTable and alHostTable shall be deleted.";
      }
    }


    /* XXX table comments here XXX */

    list nlHostEntry {

      key "hlHostControlIndex nlHostTimeMark 
           protocolDirLocalIndex nlHostAddress";
      description   
       "A conceptual row in the nlHostTable.
        
        The hlHostControlIndex value in the index identifies the
        hlHostControlEntry on whose behalf this entry was created.
        The protocolDirLocalIndex value in the index identifies the
        network layer protocol of the nlHostAddress.
        
        An example of the indexing of this entry is
        nlHostOutPkts.1.783495.18.4.128.2.6.6.
        
        Note that some combinations of index values may result in an
        index that exceeds 128 sub-identifiers in length, which exceeds
        the maximum for the SNMP protocol.  Implementations should take
        
        
        
        care to avoid such combinations.";

      leaf hlHostControlIndex {
        type keyref {
          path "/rmon2-mib:nlHost/rmon2-mib:hlHostControlEntry/rmon2-mib:hlHostControlIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf protocolDirLocalIndex {
        type keyref {
          path "/rmon2-mib:protocolDir/rmon2-mib:protocolDirEntry/rmon2-mib:protocolDirLocalIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }

      leaf nlHostTimeMark {
        type rmon2-mib:TimeFilter;
        config false;
        description 
         "A TimeFilter for this entry.  See the TimeFilter textual
          convention to see how this works.";
      }

      leaf nlHostAddress {
        type binary {
          length "1..255";
        }
        config false;
        description 
         "The network address for this nlHostEntry.
          
          This is represented as an octet string with
          specific semantics and length as identified
          by the protocolDirLocalIndex component of the index.
          
          For example, if the protocolDirLocalIndex indicates an
          encapsulation of IP, this object is encoded as a length
          octet of 4, followed by the 4 octets of the IP address,
          in network byte order.";
      }

      leaf nlHostInPkts {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of packets without errors transmitted to
          
          
          
          this address since it was added to the nlHostTable.  Note that
          this is the number of link-layer packets, so if a single
          network-layer packet is fragmented into several link-layer
          frames, this counter is incremented several times.";
      }

      leaf nlHostOutPkts {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of packets without errors transmitted by
          this address since it was added to the nlHostTable.  Note that
          this is the number of link-layer packets, so if a single
          network-layer packet is fragmented into several link-layer
          frames, this counter is incremented several times.";
      }

      leaf nlHostInOctets {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of octets transmitted to this address
          since it was added to the nlHostTable (excluding
          framing bits, but including FCS octets), excluding
          octets in packets that contained errors.
          
          Note that this doesn't count just those octets in the particular
          protocol frames but includes the entire packet that contained
          the protocol.";
      }

      leaf nlHostOutOctets {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of octets transmitted by this address
          since it was added to the nlHostTable (excluding
          framing bits, but including FCS octets), excluding
          octets in packets that contained errors.
          
          Note that this doesn't count just those octets in the particular
          protocol frames but includes the entire packet that contained
          the protocol.";
      }

      leaf nlHostOutMacNonUnicastPkts {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of packets without errors transmitted by this
          address that were directed to any MAC broadcast addresses
          or to any MAC multicast addresses since this host was
          added to the nlHostTable.  Note that this is the number of
          link-layer packets, so if a single network-layer packet is
          fragmented into several link-layer frames, this counter is
          incremented several times.";
      }

      leaf nlHostCreateTime {
        type rmon2-mib:LastCreateTime;
        config false;
        description 
         "The value of sysUpTime when this entry was last activated.
          This can be used by the management station to ensure that the
          entry has not been deleted and recreated between polls.";
      }
    }
  }

  container nlMatrix {


    /* XXX table comments here XXX */

    list hlMatrixControlEntry {

      key "hlMatrixControlIndex";
      description   
       "A conceptual row in the hlMatrixControlTable.
        
        An example of indexing of this entry is
        hlMatrixControlNlDroppedFrames.1";


      leaf hlMatrixControlIndex {
        type int32 {
          range "1..65535";
        }
        config false;
        description 
         "An index that uniquely identifies an entry in the
          hlMatrixControlTable.  Each such entry defines
          a function that discovers conversations on a particular
          interface and places statistics about them in the
          nlMatrixSDTable and the nlMatrixDSTable, and optionally the
          alMatrixSDTable and alMatrixDSTable, on behalf of this
          
          
          
          hlMatrixControlEntry.";
      }

      leaf hlMatrixControlDataSource {
        type rmon2-mib:DataSource;
        config true;
        description 
         "The source of the data for the associated matrix tables.
          
          The statistics in this group reflect all packets
          on the local network segment attached to the
          identified interface.
          
          This object may not be modified if the associated
          hlMatrixControlStatus object is equal to active(1).";
      }

      leaf hlMatrixControlNlDroppedFrames {
        type yang:counter32;
        config false;
        description 
         "The total number of frames that were received by the probe
          and therefore not accounted for in the *StatsDropEvents, but
          that the probe chose not to count for this entry for
          whatever reason.  Most often, this event occurs when the probe
          is out of some resources and decides to shed load from this
          collection.
          
          This count does not include packets that were not counted
          because they had MAC-layer errors.
          
          Note that if the nlMatrixTables are inactive because no
          protocols are enabled in the protocol directory, this value
          should be 0.
          
          Note that, unlike the dropEvents counter, this number is the
          exact number of frames dropped.";
      }

      leaf hlMatrixControlNlInserts {
        type yang:counter32;
        config false;
        description 
         "The number of times an nlMatrix entry has been
          inserted into the nlMatrix tables.  If an entry is inserted,
          
          
          
          then deleted, and then inserted, this counter will be
          incremented by 2.  The addition of a conversation into both
          the nlMatrixSDTable and nlMatrixDSTable shall be counted as
          two insertions (even though every addition into one table must
          be accompanied by an insertion into the other).
          
          To allow for efficient implementation strategies, agents may
          delay updating this object for short periods of time.  For
          example, an implementation strategy may allow internal
          data structures to differ from those visible via SNMP for
          short periods of time.  This counter may reflect the internal
          data structures for those short periods of time.
          
          Note that the sum of then nlMatrixSDTable and nlMatrixDSTable
          sizes can be determined by subtracting
          hlMatrixControlNlDeletes from hlMatrixControlNlInserts.";
      }

      leaf hlMatrixControlNlDeletes {
        type yang:counter32;
        config false;
        description 
         "The number of times an nlMatrix entry has been
          deleted from the nlMatrix tables (for any reason).  If an
          entry is deleted, then inserted, and then deleted, this
          counter will be incremented by 2.  The deletion of a
          conversation from both the nlMatrixSDTable and nlMatrixDSTable
          shall be counted as two deletions (even though every deletion
          from one table must be accompanied by a deletion from the
          other).
          
          To allow for efficient implementation strategies, agents may
          delay updating this object for short periods of time.  For
          example, an implementation strategy may allow internal
          data structures to differ from those visible via SNMP for
          short periods of time.  This counter may reflect the internal
          data structures for those short periods of time.
          
          Note that the table size can be determined by subtracting
          hlMatrixControlNlDeletes from hlMatrixControlNlInserts.";
      }

      leaf hlMatrixControlNlMaxDesiredEntries {
        type int32 {
          range "-1..2147483647";
        }
        config true;
        description 
         "The maximum number of entries that are desired in the
          nlMatrix tables on behalf of this control entry.  The probe
          will not create more than this number of associated entries in
          the table but may choose to create fewer entries in this
          table for any reason, including the lack of resources.
          
          If this object is set to a value less than the current number
          of entries, enough entries are chosen in an
          implementation-dependent manner and deleted so that the number
          of entries in the table equals the value of this object.
          
          If this value is set to -1, the probe may create any number
          of entries in this table.  If the associated
          hlMatrixControlStatus object is equal to 'active', this
          object may not be modified.
          
          This object may be used to control how resources are allocated
          on the probe for the various RMON functions.";
      }

      leaf hlMatrixControlAlDroppedFrames {
        type yang:counter32;
        config false;
        description 
         "The total number of frames that were received by the probe
          and therefore not accounted for in the *StatsDropEvents, but
          that the probe chose not to count for this entry for
          whatever reason.  Most often, this event occurs when the probe
          is out of some resources and decides to shed load from this
          collection.
          
          This count does not include packets that were not counted
          because they had MAC-layer errors.
          
          Note that if the alMatrixTables are not implemented or are
          inactive because no protocols are enabled in the protocol
          directory, this value should be 0.
          
          Note that, unlike the dropEvents counter, this number is the
          exact number of frames dropped.";
      }

      leaf hlMatrixControlAlInserts {
        type yang:counter32;
        config false;
        description 
         "The number of times an alMatrix entry has been
          inserted into the alMatrix tables.  If an entry is inserted,
          then deleted, and then inserted, this counter will be
          incremented by 2.  The addition of a conversation into both
          the alMatrixSDTable and alMatrixDSTable shall be counted as
          two insertions (even though every addition into one table must
          be accompanied by an insertion into the other).
          
          To allow for efficient implementation strategies, agents may
          delay updating this object for short periods of time.  For
          example, an implementation strategy may allow internal
          data structures to differ from those visible via SNMP for
          short periods of time.  This counter may reflect the internal
          data structures for those short periods of time.
          
          Note that the table size can be determined by subtracting
          hlMatrixControlAlDeletes from hlMatrixControlAlInserts.";
      }

      leaf hlMatrixControlAlDeletes {
        type yang:counter32;
        config false;
        description 
         "The number of times an alMatrix entry has been
          deleted from the alMatrix tables.  If an entry is deleted,
          then inserted, and then deleted, this counter will be
          incremented by 2.  The deletion of a conversation from both
          the alMatrixSDTable and alMatrixDSTable shall be counted as
          two deletions (even though every deletion from one table must
          be accompanied by a deletion from the other).
          
          To allow for efficient implementation strategies, agents may
          delay updating this object for short periods of time.  For
          example, an implementation strategy may allow internal
          data structures to differ from those visible via SNMP for
          short periods of time.  This counter may reflect the internal
          data structures for those short periods of time.
          
          Note that the table size can be determined by subtracting
          hlMatrixControlAlDeletes from hlMatrixControlAlInserts.";
      }

      leaf hlMatrixControlAlMaxDesiredEntries {
        type int32 {
          range "-1..2147483647";
        }
        config true;
        description 
         "The maximum number of entries that are desired in the
          alMatrix tables on behalf of this control entry.  The probe
          will not create more than this number of associated entries in
          the table but may choose to create fewer entries in this
          table for any reason, including the lack of resources.
          
          If this object is set to a value less than the current number
          of entries, enough entries are chosen in an
          implementation-dependent manner and deleted so that the number
          of entries in the table equals the value of this object.
          
          If this value is set to -1, the probe may create any number
          of entries in this table.  If the associated
          hlMatrixControlStatus object is equal to 'active', this
          object may not be modified.
          
          This object may be used to control how resources are allocated
          on the probe for the various RMON functions.";
      }

      leaf hlMatrixControlOwner {
        type rmon-mib:OwnerString;
        config true;
        description 
         "The entity that configured this entry and is
          therefore using the resources assigned to it.";
      }

      leaf hlMatrixControlStatus {
        type smiv2:RowStatus;
        config true;
        description 
         "The status of this hlMatrixControlEntry.
          
          An entry may not exist in the active state unless all
          objects in the entry have an appropriate value.
          
          If this object is not equal to active(1), all
          associated entries in the nlMatrixSDTable,
          nlMatrixDSTable, alMatrixSDTable, and alMatrixDSTable
          shall be deleted by the agent.";
      }
    }


    /* XXX table comments here XXX */

    list nlMatrixSDEntry {

      key "hlMatrixControlIndex nlMatrixSDTimeMark 
           protocolDirLocalIndex nlMatrixSDSourceAddress 
           nlMatrixSDDestAddress";
      description   
       "A conceptual row in the nlMatrixSDTable.
        
        The hlMatrixControlIndex value in the index identifies the
        hlMatrixControlEntry on whose behalf this entry was created.
        The protocolDirLocalIndex value in the index identifies the
        network-layer protocol of the nlMatrixSDSourceAddress and
        nlMatrixSDDestAddress.
        
        An example of the indexing of this table is
        nlMatrixSDPkts.1.783495.18.4.128.2.6.6.4.128.2.6.7.
        
        Note that some combinations of index values may result in an
        index that exceeds 128 sub-identifiers in length, which exceeds
        the maximum for the SNMP protocol.  Implementations should take
        care to avoid such combinations.";

      leaf hlMatrixControlIndex {
        type keyref {
          path "/rmon2-mib:nlMatrix/rmon2-mib:hlMatrixControlEntry/rmon2-mib:hlMatrixControlIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf protocolDirLocalIndex {
        type keyref {
          path "/rmon2-mib:protocolDir/rmon2-mib:protocolDirEntry/rmon2-mib:protocolDirLocalIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }

      leaf nlMatrixSDTimeMark {
        type rmon2-mib:TimeFilter;
        config false;
        description 
         "A TimeFilter for this entry.  See the TimeFilter textual
          convention to see how this works.";
      }

      leaf nlMatrixSDSourceAddress {
        type binary {
          length "1..255";
        }
        config false;
        description 
         "The network source address for this nlMatrixSDEntry.
          
          This is represented as an octet string with
          specific semantics and length as identified
          by the protocolDirLocalIndex component of the index.
          
          For example, if the protocolDirLocalIndex indicates an
          encapsulation of IP, this object is encoded as a length
          octet of 4, followed by the 4 octets of the IP address,
          in network byte order.";
      }

      leaf nlMatrixSDDestAddress {
        type binary {
          length "1..255";
        }
        config false;
        description 
         "The network destination address for this
          nlMatrixSDEntry.
          
          This is represented as an octet string with
          specific semantics and length as identified
          by the protocolDirLocalIndex component of the index.
          
          For example, if the protocolDirLocalIndex indicates an
          
          
          
          encapsulation of IP, this object is encoded as a length
          octet of 4, followed by the 4 octets of the IP address,
          in network byte order.";
      }

      leaf nlMatrixSDPkts {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of packets without errors transmitted from the
          source address to the destination address since this entry was
          added to the nlMatrixSDTable.  Note that this is the number of
          link-layer packets, so if a single network-layer packet is
          fragmented into several link-layer frames, this counter is
          incremented several times.";
      }

      leaf nlMatrixSDOctets {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of octets transmitted from the source address to
          the destination address since this entry was added to the
          nlMatrixSDTable (excluding framing bits, but
          including FCS octets), excluding octets in packets that
          contained errors.
          
          Note that this doesn't count just those octets in the particular
          protocol frames but includes the entire packet that contained
          the protocol.";
      }

      leaf nlMatrixSDCreateTime {
        type rmon2-mib:LastCreateTime;
        config false;
        description 
         "The value of sysUpTime when this entry was last activated.
          This can be used by the management station to ensure that the
          entry has not been deleted and recreated between polls.";
      }
    }


    /* XXX table comments here XXX */

    list nlMatrixDSEntry {

      key "hlMatrixControlIndex nlMatrixDSTimeMark 
           protocolDirLocalIndex nlMatrixDSDestAddress 
           nlMatrixDSSourceAddress";
      description   
       "A conceptual row in the nlMatrixDSTable.
        
        The hlMatrixControlIndex value in the index identifies the
        hlMatrixControlEntry on whose behalf this entry was created.
        The protocolDirLocalIndex value in the index identifies the
        network-layer protocol of the nlMatrixDSSourceAddress and
        nlMatrixDSDestAddress.
        
        An example of the indexing of this table is
        nlMatrixDSPkts.1.783495.18.4.128.2.6.7.4.128.2.6.6.
        
        Note that some combinations of index values may result in an
        index that exceeds 128 sub-identifiers in length, which exceeds
        the maximum for the SNMP protocol.  Implementations should take
        care to avoid such combinations.";

      leaf hlMatrixControlIndex {
        type keyref {
          path "/rmon2-mib:nlMatrix/rmon2-mib:hlMatrixControlEntry/rmon2-mib:hlMatrixControlIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf protocolDirLocalIndex {
        type keyref {
          path "/rmon2-mib:protocolDir/rmon2-mib:protocolDirEntry/rmon2-mib:protocolDirLocalIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }

      leaf nlMatrixDSTimeMark {
        type rmon2-mib:TimeFilter;
        config false;
        description 
         "A TimeFilter for this entry.  See the TimeFilter textual
          convention to see how this works.";
      }

      leaf nlMatrixDSSourceAddress {
        type binary {
          length "1..255";
        }
        config false;
        description 
         "The network source address for this nlMatrixDSEntry.
          
          This is represented as an octet string with
          specific semantics and length as identified
          by the protocolDirLocalIndex component of the index.
          
          For example, if the protocolDirLocalIndex indicates an
          encapsulation of IP, this object is encoded as a length
          octet of 4, followed by the 4 octets of the IP address,
          in network byte order.";
      }

      leaf nlMatrixDSDestAddress {
        type binary {
          length "1..255";
        }
        config false;
        description 
         "The network destination address for this
          nlMatrixDSEntry.
          
          This is represented as an octet string with
          specific semantics and length as identified
          
          
          
          by the protocolDirLocalIndex component of the index.
          
          For example, if the protocolDirLocalIndex indicates an
          encapsulation of IP, this object is encoded as a length
          octet of 4, followed by the 4 octets of the IP address,
          in network byte order.";
      }

      leaf nlMatrixDSPkts {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of packets without errors transmitted from the
          source address to the destination address since this entry was
          added to the nlMatrixDSTable.  Note that this is the number of
          link-layer packets, so if a single network-layer packet is
          fragmented into several link-layer frames, this counter is
          incremented several times.";
      }

      leaf nlMatrixDSOctets {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of octets transmitted from the source address
          to the destination address since this entry was added to the
          nlMatrixDSTable (excluding framing bits, but
          including FCS octets), excluding octets in packets that
          contained errors.
          
          Note that this doesn't count just those octets in the particular
          protocol frames but includes the entire packet that contained
          the protocol.";
      }

      leaf nlMatrixDSCreateTime {
        type rmon2-mib:LastCreateTime;
        config false;
        description 
         "The value of sysUpTime when this entry was last activated.
          This can be used by the management station to ensure that the
          entry has not been deleted and recreated between polls.";
      }
    }


    /* XXX table comments here XXX */

    list nlMatrixTopNControlEntry {

      key "nlMatrixTopNControlIndex";
      description   
       "A conceptual row in the nlMatrixTopNControlTable.
        
        An example of the indexing of this table is
        nlMatrixTopNControlDuration.3";


      leaf nlMatrixTopNControlIndex {
        type int32 {
          range "1..65535";
        }
        config false;
        description 
         "An index that uniquely identifies an entry
          in the nlMatrixTopNControlTable.  Each such
          entry defines one topN report prepared for
          one interface.";
      }

      leaf nlMatrixTopNControlMatrixIndex {
        type int32 {
          range "1..65535";
        }
        config true;
        description 
         "The nlMatrix[SD/DS] table for which a topN report will be
          prepared on behalf of this entry.  The nlMatrix[SD/DS] table
          is identified by the value of the hlMatrixControlIndex
          for that table - that value is used here to identify the
          particular table.
          
          This object may not be modified if the associated
          nlMatrixTopNControlStatus object is equal to active(1).";
      }

      leaf nlMatrixTopNControlRateBase {
        type enumeration {
          enum nlMatrixTopNPkts               { value 1; }
          enum nlMatrixTopNOctets             { value 2; }
          enum nlMatrixTopNHighCapacityPkts   { value 3; }
          enum nlMatrixTopNHighCapacityOctets { value 4; }
        }
        config true;
        description 
         "The variable for each nlMatrix[SD/DS] entry that the
          nlMatrixTopNEntries are sorted by, as well as a control
          for the table that the results will be reported in.
          
          This object may not be modified if the associated
          nlMatrixTopNControlStatus object is equal to active(1).
          
          If this value is less than or equal to 2, when the report
          is prepared, entries are created in the nlMatrixTopNTable
          associated with this object.
          If this value is greater than or equal to 3, when the report
          is prepared, entries are created in the
          nlMatrixTopNHighCapacityTable associated with this object.";
      }

      leaf nlMatrixTopNControlTimeRemaining {
        type int32 {
          range "0..2147483647";
        }
        config true;
        description 
         "The number of seconds left in the report currently
          being collected.  When this object is modified by
          the management station, a new collection is started,
          possibly aborting a currently running report.  The
          new value is used as the requested duration of this
          
          
          
          report and is immediately loaded into the associated
          nlMatrixTopNControlDuration object.
          
          When the report finishes, the probe will automatically
          start another collection with the same initial value
          of nlMatrixTopNControlTimeRemaining.  Thus, the management
          station may simply read the resulting reports repeatedly,
          checking the startTime and duration each time to ensure that a
          report was not missed or that the report parameters were not
          changed.
          
          While the value of this object is non-zero, it decrements
          by one per second until it reaches zero.  At the time
          that this object decrements to zero, the report is made
          accessible in the nlMatrixTopNTable, overwriting any report
          that may be there.
          
          When this object is modified by the management station, any
          associated entries in the nlMatrixTopNTable shall be deleted.
          
          (Note that this is a different algorithm than the one used
          in the hostTopNTable).";
      }

      leaf nlMatrixTopNControlGeneratedReports {
        type yang:counter32;
        config false;
        description 
         "The number of reports that have been generated by this entry.";
      }

      leaf nlMatrixTopNControlDuration {
        type int32;
        config false;
        description 
         "The number of seconds that this report has collected
          during the last sampling interval.
          
          When the associated nlMatrixTopNControlTimeRemaining object is
          set, this object shall be set by the probe to the
          same value and shall not be modified until the next
          time the nlMatrixTopNControlTimeRemaining is set.
          
          This value shall be zero if no reports have been
          requested for this nlMatrixTopNControlEntry.";
      }

      leaf nlMatrixTopNControlRequestedSize {
        type int32 {
          range "0..2147483647";
        }
        config true;
        description 
         "The maximum number of matrix entries requested for this report.
          
          When this object is created or modified, the probe
          should set nlMatrixTopNControlGrantedSize as closely to this
          object as possible for the particular probe
          implementation and available resources.";
      }

      leaf nlMatrixTopNControlGrantedSize {
        type int32 {
          range "0..2147483647";
        }
        config false;
        description 
         "The maximum number of matrix entries in this report.
          
          When the associated nlMatrixTopNControlRequestedSize object is
          created or modified, the probe should set this
          object as closely to the requested value as
          possible for the particular implementation and
          available resources.  The probe must not lower this
          value except as a side-effect of a set to the associated
          nlMatrixTopNControlRequestedSize object.
          
          If the value of nlMatrixTopNControlRateBase is equal to
          nlMatrixTopNPkts, when the next topN report is generated,
          matrix entries with the highest value of nlMatrixTopNPktRate
          shall be placed in this table in decreasing order of this rate
          until there is no more room or until there are no more
          matrix entries.
          
          If the value of nlMatrixTopNControlRateBase is equal to
          nlMatrixTopNOctets, when the next topN report is generated,
          matrix entries with the highest value of nlMatrixTopNOctetRate
          shall be placed in this table in decreasing order of this rate
          until there is no more room or until there are no more
          matrix entries.
          
          It is an implementation-specific matter how entries with the
          same value of nlMatrixTopNPktRate or nlMatrixTopNOctetRate are
          sorted.  It is also an implementation-specific matter as to
          
          
          
          whether zero-valued entries are available.";
      }

      leaf nlMatrixTopNControlStartTime {
        type yang:timestamp;
        config false;
        description 
         "The value of sysUpTime when this topN report was
          last started.  In other words, this is the time that
          the associated nlMatrixTopNControlTimeRemaining object was
          modified to start the requested report or the time
          the report was last automatically (re)started.
          
          This object may be used by the management station to
          determine whether a report was missed.";
      }

      leaf nlMatrixTopNControlOwner {
        type rmon-mib:OwnerString;
        config true;
        description 
         "The entity that configured this entry and is
          therefore using the resources assigned to it.";
      }

      leaf nlMatrixTopNControlStatus {
        type smiv2:RowStatus;
        config true;
        description 
         "The status of this nlMatrixTopNControlEntry.
          
          An entry may not exist in the active state unless all
          objects in the entry have an appropriate value.
          
          If this object is not equal to active(1), all
          associated entries in the nlMatrixTopNTable shall be deleted
          by the agent.";
      }
    }


    /* XXX table comments here XXX */

    list nlMatrixTopNEntry {

      key "nlMatrixTopNControlIndex nlMatrixTopNIndex";
      description   
       "A conceptual row in the nlMatrixTopNTable.
        
        The nlMatrixTopNControlIndex value in the index identifies the
        nlMatrixTopNControlEntry on whose behalf this entry was
        created.
        
        An example of the indexing of this table is
        nlMatrixTopNPktRate.3.10";

      leaf nlMatrixTopNControlIndex {
        type keyref {
          path "/rmon2-mib:nlMatrix/rmon2-mib:nlMatrixTopNControlEntry/rmon2-mib:nlMatrixTopNControlIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }

      leaf nlMatrixTopNIndex {
        type int32 {
          range "1..65535";
        }
        config false;
        description 
         "An index that uniquely identifies an entry in
          the nlMatrixTopNTable among those in the same report.
          This index is between 1 and N, where N is the
          number of entries in this report.
          
          If the value of nlMatrixTopNControlRateBase is equal to
          nlMatrixTopNPkts, increasing values of nlMatrixTopNIndex shall
          be assigned to entries with decreasing values of
          nlMatrixTopNPktRate until index N is assigned or there are no
          more nlMatrixTopNEntries.
          
          If the value of nlMatrixTopNControlRateBase is equal to
          nlMatrixTopNOctets, increasing values of nlMatrixTopNIndex
          
          
          
          shall be assigned to entries with decreasing values of
          nlMatrixTopNOctetRate until index N is assigned or there are
          no more nlMatrixTopNEntries.";
      }

      leaf nlMatrixTopNProtocolDirLocalIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "The protocolDirLocalIndex of the network-layer protocol of
          this entry's network address.";
      }

      leaf nlMatrixTopNSourceAddress {
        type binary {
          length "1..255";
        }
        config false;
        description 
         "The network-layer address of the source host in this
          conversation.
          
          This is represented as an octet string with
          specific semantics and length as identified
          by the associated nlMatrixTopNProtocolDirLocalIndex.
          
          For example, if the protocolDirLocalIndex indicates an
          encapsulation of IP, this object is encoded as a length
          octet of 4, followed by the 4 octets of the IP address,
          in network byte order.";
      }

      leaf nlMatrixTopNDestAddress {
        type binary {
          length "1..255";
        }
        config false;
        description 
         "The network-layer address of the destination host in this
          conversation.
          
          This is represented as an octet string with
          specific semantics and length as identified
          by the associated nlMatrixTopNProtocolDirLocalIndex.
          
          For example, if the nlMatrixTopNProtocolDirLocalIndex
          indicates an encapsulation of IP, this object is encoded as a
          length octet of 4, followed by the 4 octets of the IP address,
          in network byte order.";
      }

      leaf nlMatrixTopNPktRate {
        type yang:gauge32;
        config false;
        description 
         "The number of packets seen from the source host
          to the destination host during this sampling interval, counted
          using the rules for counting the nlMatrixSDPkts object.
          If the value of nlMatrixTopNControlRateBase is
          nlMatrixTopNPkts, this variable will be used to sort this
          report.";
      }

      leaf nlMatrixTopNReversePktRate {
        type yang:gauge32;
        config false;
        description 
         "The number of packets seen from the destination host to the
          source host during this sampling interval, counted
          using the rules for counting the nlMatrixSDPkts object.  (Note
          that the corresponding nlMatrixSDPkts object selected is the
          one whose source address is equal to nlMatrixTopNDestAddress
          and whose destination address is equal to
          nlMatrixTopNSourceAddress.)
          
          Note that if the value of nlMatrixTopNControlRateBase is equal
          to nlMatrixTopNPkts, the sort of topN entries is based
          entirely on nlMatrixTopNPktRate, and not on the value of this
          object.";
      }

      leaf nlMatrixTopNOctetRate {
        type yang:gauge32;
        config false;
        description 
         "The number of octets seen from the source host
          to the destination host during this sampling interval, counted
          using the rules for counting the nlMatrixSDOctets object.  If
          the value of nlMatrixTopNControlRateBase is
          nlMatrixTopNOctets, this variable will be used to sort this
          report.";
      }

      leaf nlMatrixTopNReverseOctetRate {
        type yang:gauge32;
        config false;
        description 
         "The number of octets seen from the destination host to the
          source host during this sampling interval, counted
          using the rules for counting the nlMatrixDSOctets object.  (Note
          that the corresponding nlMatrixSDOctets object selected is the
          one whose source address is equal to nlMatrixTopNDestAddress
          and whose destination address is equal to
          nlMatrixTopNSourceAddress.)
          
          Note that if the value of nlMatrixTopNControlRateBase is equal
          to nlMatrixTopNOctets, the sort of topN entries is based
          entirely on nlMatrixTopNOctetRate, and not on the value of
          this object.";
      }
    }
  }

  container alHost {


    /* XXX table comments here XXX */

    list alHostEntry {

      key "hlHostControlIndex alHostTimeMark 
           protocolDirLocalIndex nlHostAddress 
           protocolDirLocalIndex";
      description   
       "A conceptual row in the alHostTable.
        
        The hlHostControlIndex value in the index identifies the
        hlHostControlEntry on whose behalf this entry was created.
        The first protocolDirLocalIndex value in the index identifies
        the network-layer protocol of the address.
        The nlHostAddress value in the index identifies the network-
        layer address of this entry.
        The second protocolDirLocalIndex value in the index identifies
        the protocol that is counted by this entry.
        
        An example of the indexing in this entry is
        alHostOutPkts.1.783495.18.4.128.2.6.6.34.
        
        Note that some combinations of index values may result in an
        index that exceeds 128 sub-identifiers in length, which exceeds
        the maximum for the SNMP protocol.  Implementations should take
        care to avoid such combinations.";

      leaf hlHostControlIndex {
        type keyref {
          path "/rmon2-mib:nlHost/rmon2-mib:hlHostControlEntry/rmon2-mib:hlHostControlIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf protocolDirLocalIndex {
        type keyref {
          path "/rmon2-mib:protocolDir/rmon2-mib:protocolDirEntry/rmon2-mib:protocolDirLocalIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf nlHostAddress {
        type keyref {
          path "/rmon2-mib:nlHost/rmon2-mib:nlHostEntry/rmon2-mib:nlHostAddress";
        }
        config false;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf protocolDirLocalIndex {
        type keyref {
          path "/rmon2-mib:protocolDir/rmon2-mib:protocolDirEntry/rmon2-mib:protocolDirLocalIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }

      leaf alHostTimeMark {
        type rmon2-mib:TimeFilter;
        config false;
        description 
         "A TimeFilter for this entry.  See the TimeFilter textual
          convention to see how this works.";
      }

      leaf alHostInPkts {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of packets of this protocol type without errors
          transmitted to this address since it was added to the
          alHostTable.  Note that this is the number of link-layer
          packets, so if a single network-layer packet is fragmented
          into several link-layer frames, this counter is incremented
          several times.";
      }

      leaf alHostOutPkts {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of packets of this protocol type without errors
          transmitted by this address since it was added to the
          alHostTable.  Note that this is the number of link-layer
          packets, so if a single network-layer packet is fragmented
          into several link-layer frames, this counter is incremented
          several times.";
      }

      leaf alHostInOctets {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of octets transmitted to this address
          of this protocol type since it was added to the
          alHostTable (excluding framing bits, but including
          FCS octets), excluding octets in packets that
          contained errors.
          
          Note that this doesn't count just those octets in the particular
          protocol frames but includes the entire packet that contained
          the protocol.";
      }

      leaf alHostOutOctets {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of octets transmitted by this address
          of this protocol type since it was added to the
          alHostTable (excluding framing bits, but including
          FCS octets), excluding octets in packets that
          contained errors.
          
          Note that this doesn't count just those octets in the particular
          protocol frames but includes the entire packet that contained
          the protocol.";
      }

      leaf alHostCreateTime {
        type rmon2-mib:LastCreateTime;
        config false;
        description 
         "The value of sysUpTime when this entry was last activated.
          This can be used by the management station to ensure that the
          entry has not been deleted and recreated between polls.";
      }
    }
  }

  container alMatrix {


    /* XXX table comments here XXX */

    list alMatrixSDEntry {

      key "hlMatrixControlIndex alMatrixSDTimeMark 
           protocolDirLocalIndex nlMatrixSDSourceAddress 
           nlMatrixSDDestAddress protocolDirLocalIndex";
      description   
       "A conceptual row in the alMatrixSDTable.
        
        The hlMatrixControlIndex value in the index identifies the
        hlMatrixControlEntry on whose behalf this entry was created.
        The first protocolDirLocalIndex value in the index identifies
        the network-layer protocol of the nlMatrixSDSourceAddress and
        nlMatrixSDDestAddress.
        The nlMatrixSDSourceAddress value in the index identifies the
        network-layer address of the source host in this conversation.
        The nlMatrixSDDestAddress value in the index identifies the
        network-layer address of the destination host in this
        conversation.
        The second protocolDirLocalIndex value in the index identifies
        the protocol that is counted by this entry.
        
        An example of the indexing of this entry is
        alMatrixSDPkts.1.783495.18.4.128.2.6.6.4.128.2.6.7.34.
        
        Note that some combinations of index values may result in an
        index that exceeds 128 sub-identifiers in length, which exceeds
        the maximum for the SNMP protocol.  Implementations should take
        care to avoid such combinations.";

      leaf hlMatrixControlIndex {
        type keyref {
          path "/rmon2-mib:nlMatrix/rmon2-mib:hlMatrixControlEntry/rmon2-mib:hlMatrixControlIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf protocolDirLocalIndex {
        type keyref {
          path "/rmon2-mib:protocolDir/rmon2-mib:protocolDirEntry/rmon2-mib:protocolDirLocalIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf nlMatrixSDSourceAddress {
        type keyref {
          path "/rmon2-mib:nlMatrix/rmon2-mib:nlMatrixSDEntry/rmon2-mib:nlMatrixSDSourceAddress";
        }
        config false;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf nlMatrixSDDestAddress {
        type keyref {
          path "/rmon2-mib:nlMatrix/rmon2-mib:nlMatrixSDEntry/rmon2-mib:nlMatrixSDDestAddress";
        }
        config false;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf protocolDirLocalIndex {
        type keyref {
          path "/rmon2-mib:protocolDir/rmon2-mib:protocolDirEntry/rmon2-mib:protocolDirLocalIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }

      leaf alMatrixSDTimeMark {
        type rmon2-mib:TimeFilter;
        config false;
        description 
         "A TimeFilter for this entry.  See the TimeFilter textual
          convention to see how this works.";
      }

      leaf alMatrixSDPkts {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of packets of this protocol type without errors
          transmitted from the source address to the destination address
          since this entry was added to the alMatrixSDTable.  Note that
          this is the number of link-layer packets, so if a single
          network-layer packet is fragmented into several link-layer
          frames, this counter is incremented several times.";
      }

      leaf alMatrixSDOctets {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of octets in packets of this protocol type
          transmitted from the source address to the destination address
          since this entry was added to the alMatrixSDTable (excluding
          framing bits, but including FCS octets), excluding octets
          in packets that contained errors.
          
          Note that this doesn't count just those octets in the particular
          protocol frames but includes the entire packet that contained
          the protocol.";
      }

      leaf alMatrixSDCreateTime {
        type rmon2-mib:LastCreateTime;
        config false;
        description 
         "The value of sysUpTime when this entry was last activated.
          This can be used by the management station to ensure that the
          entry has not been deleted and recreated between polls.";
      }
    }


    /* XXX table comments here XXX */

    list alMatrixDSEntry {

      key "hlMatrixControlIndex alMatrixDSTimeMark 
           protocolDirLocalIndex nlMatrixDSDestAddress 
           nlMatrixDSSourceAddress protocolDirLocalIndex";
      description   
       "A conceptual row in the alMatrixDSTable.
        
        The hlMatrixControlIndex value in the index identifies the
        hlMatrixControlEntry on whose behalf this entry was created.
        The first protocolDirLocalIndex value in the index identifies
        the network-layer protocol of the alMatrixDSSourceAddress and
        alMatrixDSDestAddress.
        The nlMatrixDSDestAddress value in the index identifies the
        network-layer address of the destination host in this
        
        
        
        conversation.
        The nlMatrixDSSourceAddress value in the index identifies the
        network-layer address of the source host in this conversation.
        The second protocolDirLocalIndex value in the index identifies
        the protocol that is counted by this entry.
        
        An example of the indexing of this entry is
        alMatrixDSPkts.1.783495.18.4.128.2.6.7.4.128.2.6.6.34.
        
        Note that some combinations of index values may result in an
        index that exceeds 128 sub-identifiers in length, which exceeds
        the maximum for the SNMP protocol.  Implementations should take
        care to avoid such combinations.";

      leaf hlMatrixControlIndex {
        type keyref {
          path "/rmon2-mib:nlMatrix/rmon2-mib:hlMatrixControlEntry/rmon2-mib:hlMatrixControlIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf protocolDirLocalIndex {
        type keyref {
          path "/rmon2-mib:protocolDir/rmon2-mib:protocolDirEntry/rmon2-mib:protocolDirLocalIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf nlMatrixDSDestAddress {
        type keyref {
          path "/rmon2-mib:nlMatrix/rmon2-mib:nlMatrixDSEntry/rmon2-mib:nlMatrixDSDestAddress";
        }
        config false;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf nlMatrixDSSourceAddress {
        type keyref {
          path "/rmon2-mib:nlMatrix/rmon2-mib:nlMatrixDSEntry/rmon2-mib:nlMatrixDSSourceAddress";
        }
        config false;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf protocolDirLocalIndex {
        type keyref {
          path "/rmon2-mib:protocolDir/rmon2-mib:protocolDirEntry/rmon2-mib:protocolDirLocalIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }

      leaf alMatrixDSTimeMark {
        type rmon2-mib:TimeFilter;
        config false;
        description 
         "A TimeFilter for this entry.  See the TimeFilter textual
          convention to see how this works.";
      }

      leaf alMatrixDSPkts {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of packets of this protocol type without errors
          transmitted from the source address to the destination address
          since this entry was added to the alMatrixDSTable.  Note that
          this is the number of link-layer packets, so if a single
          network-layer packet is fragmented into several link-layer
          frames, this counter is incremented several times.";
      }

      leaf alMatrixDSOctets {
        type rmon2-mib:ZeroBasedCounter32;
        config false;
        description 
         "The number of octets in packets of this protocol type
          transmitted from the source address to the destination address
          since this entry was added to the alMatrixDSTable (excluding
          framing bits, but including FCS octets), excluding octets
          in packets that contained errors.
          
          Note that this doesn't count just those octets in the particular
          protocol frames but includes the entire packet that contained
          the protocol.";
      }

      leaf alMatrixDSCreateTime {
        type rmon2-mib:LastCreateTime;
        config false;
        description 
         "The value of sysUpTime when this entry was last activated.
          This can be used by the management station to ensure that the
          entry has not been deleted and recreated between polls.";
      }
    }


    /* XXX table comments here XXX */

    list alMatrixTopNControlEntry {

      key "alMatrixTopNControlIndex";
      description   
       "A conceptual row in the alMatrixTopNControlTable.
        
        An example of the indexing of this table is
        alMatrixTopNControlDuration.3";


      leaf alMatrixTopNControlIndex {
        type int32 {
          range "1..65535";
        }
        config false;
        description 
         "An index that uniquely identifies an entry
          in the alMatrixTopNControlTable.  Each such
          entry defines one topN report prepared for
          one interface.";
      }

      leaf alMatrixTopNControlMatrixIndex {
        type int32 {
          range "1..65535";
        }
        config true;
        description 
         "The alMatrix[SD/DS] table for which a topN report will be
          prepared on behalf of this entry.  The alMatrix[SD/DS] table
          is identified by the value of the hlMatrixControlIndex
          for that table - that value is used here to identify the
          particular table.
          
          This object may not be modified if the associated
          alMatrixTopNControlStatus object is equal to active(1).";
      }

      leaf alMatrixTopNControlRateBase {
        type enumeration {
          enum alMatrixTopNTerminalsPkts               { value 1; }
          enum alMatrixTopNTerminalsOctets             { value 2; }
          enum alMatrixTopNAllPkts                     { value 3; }
          enum alMatrixTopNAllOctets                   { value 4; }
          enum alMatrixTopNTerminalsHighCapacityPkts   { value 5; }
          enum alMatrixTopNTerminalsHighCapacityOctets { value 6; }
          enum alMatrixTopNAllHighCapacityPkts         { value 7; }
          enum alMatrixTopNAllHighCapacityOctets       { value 8; }
        }
        config true;
        description 
         "This object controls which alMatrix[SD/DS] entry that the
          alMatrixTopNEntries are sorted by, which view of the matrix
          table that will be used, as well as which table the results
          will be reported in.
          
          The values alMatrixTopNTerminalsPkts,
          alMatrixTopNTerminalsOctets,
          alMatrixTopNTerminalsHighCapacityPkts, and
          alMatrixTopNTerminalsHighCapacityOctets cause collection
          only from protocols that have no child protocols that are
          counted.  The values alMatrixTopNAllPkts,
          alMatrixTopNAllOctets, alMatrixTopNAllHighCapacityPkts, and
          alMatrixTopNAllHighCapacityOctets cause collection from all
          alMatrix entries.
          
          This object may not be modified if the associated
          alMatrixTopNControlStatus object is equal to active(1).";
      }

      leaf alMatrixTopNControlTimeRemaining {
        type int32 {
          range "0..2147483647";
        }
        config true;
        description 
         "The number of seconds left in the report currently
          being collected.  When this object is modified by
          the management station, a new collection is started,
          possibly aborting a currently running report.  The
          new value is used as the requested duration of this
          report and is immediately loaded into the associated
          alMatrixTopNControlDuration object.
          
          When the report finishes, the probe will automatically
          start another collection with the same initial value
          of alMatrixTopNControlTimeRemaining.  Thus, the management
          station may simply read the resulting reports repeatedly,
          checking the startTime and duration each time to ensure that a
          report was not missed or that the report parameters were not
          changed.
          
          While the value of this object is non-zero, it decrements
          by one per second until it reaches zero.  At the time
          
          
          
          that this object decrements to zero, the report is made
          accessible in the alMatrixTopNTable, overwriting any report
          that may be there.
          
          When this object is modified by the management station, any
          associated entries in the alMatrixTopNTable shall be deleted.
          
          (Note that this is a different algorithm than the one used
          in the hostTopNTable).";
      }

      leaf alMatrixTopNControlGeneratedReports {
        type yang:counter32;
        config false;
        description 
         "The number of reports that have been generated by this entry.";
      }

      leaf alMatrixTopNControlDuration {
        type int32;
        config false;
        description 
         "The number of seconds that this report has collected
          during the last sampling interval.
          
          When the associated alMatrixTopNControlTimeRemaining object
          is set, this object shall be set by the probe to the
          same value and shall not be modified until the next
          time the alMatrixTopNControlTimeRemaining is set.
          
          This value shall be zero if no reports have been
          requested for this alMatrixTopNControlEntry.";
      }

      leaf alMatrixTopNControlRequestedSize {
        type int32 {
          range "0..2147483647";
        }
        config true;
        description 
         "The maximum number of matrix entries requested for this report.
          
          When this object is created or modified, the probe
          should set alMatrixTopNControlGrantedSize as closely to this
          object as possible for the particular probe
          implementation and available resources.";
      }

      leaf alMatrixTopNControlGrantedSize {
        type int32 {
          range "0..2147483647";
        }
        config false;
        description 
         "The maximum number of matrix entries in this report.
          
          When the associated alMatrixTopNControlRequestedSize object
          is created or modified, the probe should set this
          object as closely to the requested value as
          possible for the particular implementation and
          available resources. The probe must not lower this
          value except as a side-effect of a set to the associated
          alMatrixTopNControlRequestedSize object.
          
          If the value of alMatrixTopNControlRateBase is equal to
          alMatrixTopNTerminalsPkts or alMatrixTopNAllPkts, when the
          next topN report is generated, matrix entries with the highest
          value of alMatrixTopNPktRate shall be placed in this table in
          decreasing order of this rate until there is no more room or
          until there are no more matrix entries.
          
          If the value of alMatrixTopNControlRateBase is equal to
          alMatrixTopNTerminalsOctets or alMatrixTopNAllOctets, when the
          next topN report is generated, matrix entries with the highest
          value of alMatrixTopNOctetRate shall be placed in this table
          in decreasing order of this rate until there is no more room
          or until there are no more matrix entries.
          
          It is an implementation-specific matter how entries with the
          same value of alMatrixTopNPktRate or alMatrixTopNOctetRate are
          sorted.  It is also an implementation-specific matter as to
          whether zero-valued entries are available.";
      }

      leaf alMatrixTopNControlStartTime {
        type yang:timestamp;
        config false;
        description 
         "The value of sysUpTime when this topN report was
          last started.  In other words, this is the time that
          the associated alMatrixTopNControlTimeRemaining object
          was modified to start the requested report or the time
          the report was last automatically (re)started.
          
          
          
          This object may be used by the management station to
          determine whether a report was missed.";
      }

      leaf alMatrixTopNControlOwner {
        type rmon-mib:OwnerString;
        config true;
        description 
         "The entity that configured this entry and is
          therefore using the resources assigned to it.";
      }

      leaf alMatrixTopNControlStatus {
        type smiv2:RowStatus;
        config true;
        description 
         "The status of this alMatrixTopNControlEntry.
          
          An entry may not exist in the active state unless all
          objects in the entry have an appropriate value.
          
          If this object is not equal to active(1), all
          associated entries in the alMatrixTopNTable shall be
          deleted by the agent.";
      }
    }


    /* XXX table comments here XXX */

    list alMatrixTopNEntry {

      key "alMatrixTopNControlIndex alMatrixTopNIndex";
      description   
       "A conceptual row in the alMatrixTopNTable.
        
        The alMatrixTopNControlIndex value in the index identifies
        the alMatrixTopNControlEntry on whose behalf this entry was
        created.
        
        
        
        An example of the indexing of this table is
        alMatrixTopNPktRate.3.10";

      leaf alMatrixTopNControlIndex {
        type keyref {
          path "/rmon2-mib:alMatrix/rmon2-mib:alMatrixTopNControlEntry/rmon2-mib:alMatrixTopNControlIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }

      leaf alMatrixTopNIndex {
        type int32 {
          range "1..65535";
        }
        config false;
        description 
         "An index that uniquely identifies an entry in
          the alMatrixTopNTable among those in the same report.
          
          This index is between 1 and N, where N is the
          number of entries in this report.
          
          If the value of alMatrixTopNControlRateBase is equal to
          alMatrixTopNTerminalsPkts or alMatrixTopNAllPkts, increasing
          values of alMatrixTopNIndex shall be assigned to entries with
          decreasing values of alMatrixTopNPktRate until index N is
          assigned or there are no more alMatrixTopNEntries.
          
          If the value of alMatrixTopNControlRateBase is equal to
          alMatrixTopNTerminalsOctets or alMatrixTopNAllOctets,
          increasing values of alMatrixTopNIndex shall be assigned to
          entries with decreasing values of alMatrixTopNOctetRate until
          index N is assigned or there are no more alMatrixTopNEntries.";
      }

      leaf alMatrixTopNProtocolDirLocalIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "The protocolDirLocalIndex of the network-layer protocol of
          this entry's network address.";
      }

      leaf alMatrixTopNSourceAddress {
        type binary {
          length "1..255";
        }
        config false;
        description 
         "The network-layer address of the source host in this
          conversation.
          
          This is represented as an octet string with
          specific semantics and length as identified
          by the associated alMatrixTopNProtocolDirLocalIndex.
          
          For example, if the alMatrixTopNProtocolDirLocalIndex
          indicates an encapsulation of IP, this object is encoded as a
          length octet of 4, followed by the 4 octets of the IP address,
          in network byte order.";
      }

      leaf alMatrixTopNDestAddress {
        type binary {
          length "1..255";
        }
        config false;
        description 
         "The network-layer address of the destination host in this
          conversation.
          
          This is represented as an octet string with
          specific semantics and length as identified
          by the associated alMatrixTopNProtocolDirLocalIndex.
          
          For example, if the alMatrixTopNProtocolDirLocalIndex
          indicates an encapsulation of IP, this object is encoded as a
          length octet of 4, followed by the 4 octets of the IP address,
          in network byte order.";
      }

      leaf alMatrixTopNAppProtocolDirLocalIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "The type of the protocol counted by this matrix entry.";
      }

      leaf alMatrixTopNPktRate {
        type yang:gauge32;
        config false;
        description 
         "The number of packets seen of this protocol from the source
          host to the destination host during this sampling interval,
          counted using the rules for counting the alMatrixSDPkts
          object.
          
          If the value of alMatrixTopNControlRateBase is
          alMatrixTopNTerminalsPkts or alMatrixTopNAllPkts, this
          variable will be used to sort this report.";
      }

      leaf alMatrixTopNReversePktRate {
        type yang:gauge32;
        config false;
        description 
         "The number of packets seen of this protocol from the
          destination host to the source host during this sampling
          interval, counted using the rules for counting the
          alMatrixDSPkts object.  (Note that the corresponding
          alMatrixSDPkts object selected is the one whose source address
          is equal to alMatrixTopNDestAddress and whose destination
          address is equal to alMatrixTopNSourceAddress.)
          
          Note that if the value of alMatrixTopNControlRateBase is equal
          to alMatrixTopNTerminalsPkts or alMatrixTopNAllPkts, the sort
          of topN entries is based entirely on alMatrixTopNPktRate, and
          not on the value of this object.";
      }

      leaf alMatrixTopNOctetRate {
        type yang:gauge32;
        config false;
        description 
         "The number of octets seen of this protocol from the source
          host to the destination host during this sampling interval,
          counted using the rules for counting the alMatrixSDOctets
          object.
          
          If the value of alMatrixTopNControlRateBase is
          alMatrixTopNTerminalsOctets or alMatrixTopNAllOctets, this
          variable will be used to sort this report.";
      }

      leaf alMatrixTopNReverseOctetRate {
        type yang:gauge32;
        config false;
        description 
         "The number of octets seen of this protocol from the
          destination host to the source host during this sampling
          interval, counted using the rules for counting the
          alMatrixDSOctets object.  (Note that the corresponding
          alMatrixSDOctets object selected is the one whose source
          address is equal to alMatrixTopNDestAddress and whose
          destination address is equal to alMatrixTopNSourceAddress.)
          
          Note that if the value of alMatrixTopNControlRateBase is equal
          to alMatrixTopNTerminalsOctets or alMatrixTopNAllOctets, the
          sort of topN entries is based entirely on
          alMatrixTopNOctetRate, and not on the value of this object.";
      }
    }
  }

  container usrHistory {


    /* XXX table comments here XXX */

    list usrHistoryControlEntry {

      key "usrHistoryControlIndex";
      description   
       "A list of parameters that set up a group of user-defined
        MIB objects to be sampled periodically (called a
        bucket-group).
        
        For example, an instance of usrHistoryControlInterval
        might be named usrHistoryControlInterval.1";


      leaf usrHistoryControlIndex {
        type int32 {
          range "1..65535";
        }
        config false;
        description 
         "An index that uniquely identifies an entry in the
          usrHistoryControlTable.  Each such entry defines a
          set of samples at a particular interval for a specified
          set of MIB instances available from the managed system.";
      }

      leaf usrHistoryControlObjects {
        type int32 {
          range "1..65535";
        }
        config true;
        description 
         "The number of MIB objects to be collected
          in the portion of usrHistoryTable associated with this
          usrHistoryControlEntry.
          
          This object may not be modified if the associated instance
          of usrHistoryControlStatus is equal to active(1).";
      }

      leaf usrHistoryControlBucketsRequested {
        type int32 {
          range "1..65535";
        }
        config true;
        description 
         "The requested number of discrete time intervals
          over which data is to be saved in the part of the
          usrHistoryTable associated with this usrHistoryControlEntry.
          
          When this object is created or modified, the probe
          should set usrHistoryControlBucketsGranted as closely to
          this object as possible for the particular probe
          implementation and available resources.";
      }

      leaf usrHistoryControlBucketsGranted {
        type int32 {
          range "1..65535";
        }
        config false;
        description 
         "The number of discrete sampling intervals
          over which data shall be saved in the part of
          the usrHistoryTable associated with this
          usrHistoryControlEntry.
          
          When the associated usrHistoryControlBucketsRequested
          object is created or modified, the probe should set
          this object as closely to the requested value as
          possible for the particular probe implementation and
          available resources.  The probe must not lower this
          value except as a result of a modification to the associated
          usrHistoryControlBucketsRequested object.
          
          The associated usrHistoryControlBucketsRequested object
          should be set before or at the same time as this object
          to allow the probe to accurately estimate the resources
          required for this usrHistoryControlEntry.
          
          There will be times when the actual number of buckets
          associated with this entry is less than the value of
          this object.  In this case, at the end of each sampling
          interval, a new bucket will be added to the usrHistoryTable.
          
          When the number of buckets reaches the value of this object
          and a new bucket is to be added to the usrHistoryTable,
          the oldest bucket associated with this usrHistoryControlEntry
          shall be deleted by the agent so that the new bucket can be
          added.
          
          When the value of this object changes to a value less than
          the current value, entries are deleted from the
          usrHistoryTable associated with this usrHistoryControlEntry.
          Enough of the oldest of these entries shall be deleted by the
          agent so that their number remains less than or equal to the
          new value of this object.
          
          When the value of this object changes to a value greater
          than the current value, the number of associated usrHistory
          entries may be allowed to grow.";
      }

      leaf usrHistoryControlInterval {
        type int32 {
          range "1..2147483647";
        }
        config true;
        description 
         "The interval in seconds over which the data is
          sampled for each bucket in the part of the usrHistory
          table associated with this usrHistoryControlEntry.
          
          Because the counters in a bucket may overflow at their
          maximum value with no indication, a prudent manager will
          take into account the possibility of overflow in any of
          the associated counters.  It is important to consider the
          minimum time in which any counter could overflow on a
          particular media type and to set the usrHistoryControlInterval
          object to a value less than this interval.
          
          This object may not be modified if the associated
          usrHistoryControlStatus object is equal to active(1).";
      }

      leaf usrHistoryControlOwner {
        type rmon-mib:OwnerString;
        config true;
        description 
         "The entity that configured this entry and is
          therefore using the resources assigned to it.";
      }

      leaf usrHistoryControlStatus {
        type smiv2:RowStatus;
        config true;
        description 
         "The status of this variable history control entry.
          
          An entry may not exist in the active state unless all
          objects in the entry have an appropriate value.
          
          If this object is not equal to active(1), all associated
          entries in the usrHistoryTable shall be deleted.";
      }
    }


    /* XXX table comments here XXX */

    list usrHistoryObjectEntry {

      key "usrHistoryControlIndex usrHistoryObjectIndex";
      description   
       "A list of MIB instances to be sampled periodically.
        
        Entries in this table are created when an associated
        usrHistoryControlObjects object is created.
        
        The usrHistoryControlIndex value in the index is
        that of the associated usrHistoryControlEntry.
        
        For example, an instance of usrHistoryObjectVariable might be
        usrHistoryObjectVariable.1.3";

      leaf usrHistoryControlIndex {
        type keyref {
          path "/rmon2-mib:usrHistory/rmon2-mib:usrHistoryControlEntry/rmon2-mib:usrHistoryControlIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }

      leaf usrHistoryObjectIndex {
        type int32 {
          range "1..65535";
        }
        config false;
        description 
         "An index used to uniquely identify an entry in the
          usrHistoryObject table.  Each such entry defines a
          MIB instance to be collected periodically.";
      }

      leaf usrHistoryObjectVariable {
        type yang:object-identifier;
        config true;
        description 
         "The object identifier of the particular variable to be
          
          
          
          sampled.
          
          Only variables that resolve to an ASN.1 primitive type of
          Integer32 (Integer32, Counter, Gauge, or TimeTicks) may be
          sampled.
          
          Because SNMP access control is articulated entirely in terms
          of the contents of MIB views, no access control mechanism
          exists that can restrict the value of this object to identify
          only those objects that exist in a particular MIB view.
          Because there is thus no acceptable means of restricting the
          read access that could be obtained through the user history
          mechanism, the probe must only grant write access to this
          object in those views that have read access to all objects on
          the probe.  See USM [RFC3414] and VACM [RFC3415] for more
          information.
          
          During a set operation, if the supplied variable name is not
          available in the selected MIB view, a badValue error must be
          returned.
          
          This object may not be modified if the associated
          usrHistoryControlStatus object is equal to active(1).";
      }

      leaf usrHistoryObjectSampleType {
        type enumeration {
          enum absoluteValue { value 1; }
          enum deltaValue    { value 2; }
        }
        config true;
        description 
         "The method of sampling the selected variable for storage in
          the usrHistoryTable.
          
          If the value of this object is absoluteValue(1), the value of
          the selected variable will be copied directly into the history
          bucket.
          
          If the value of this object is deltaValue(2), the value of the
          selected variable at the last sample will be subtracted from
          the current value, and the difference will be stored in the
          history bucket.  If the associated usrHistoryObjectVariable
          instance could not be obtained at the previous sample
          interval, then a delta sample is not possible, and the value
          of the associated usrHistoryValStatus object for this interval
          will be valueNotAvailable(1).
          
          
          
          This object may not be modified if the associated
          usrHistoryControlStatus object is equal to active(1).";
      }
    }


    /* XXX table comments here XXX */

    list usrHistoryEntry {

      key "usrHistoryControlIndex usrHistorySampleIndex 
           usrHistoryObjectIndex";
      description   
       "A historical sample of user-defined variables.  This sample
        is associated with the usrHistoryControlEntry that set up the
        parameters for a regular collection of these samples.
        
        The usrHistoryControlIndex value in the index identifies the
        usrHistoryControlEntry on whose behalf this entry was created.
        The usrHistoryObjectIndex value in the index identifies the
        usrHistoryObjectEntry on whose behalf this entry was created.
        
        For example, an instance of usrHistoryAbsValue, which represents
        the 14th sample of a variable collected as specified by
        usrHistoryControlEntry.1 and usrHistoryObjectEntry.1.5,
        would be named usrHistoryAbsValue.1.14.5";

      leaf usrHistoryControlIndex {
        type keyref {
          path "/rmon2-mib:usrHistory/rmon2-mib:usrHistoryControlEntry/rmon2-mib:usrHistoryControlIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }
      leaf usrHistoryObjectIndex {
        type keyref {
          path "/rmon2-mib:usrHistory/rmon2-mib:usrHistoryObjectEntry/rmon2-mib:usrHistoryObjectIndex";
        }
        config true;
        description 
         "Automagically generated keyref leaf.";
      }

      leaf usrHistorySampleIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "An index that uniquely identifies the particular sample this
          entry represents among all samples associated with the same
          usrHistoryControlEntry.  This index starts at 1 and increases
          by one as each new sample is taken.";
      }

      leaf usrHistoryIntervalStart {
        type yang:timestamp;
        config false;
        description 
         "The value of sysUpTime at the start of the interval over
          which this sample was measured.  If the probe keeps track of
          the time of day, it should start the first sample of the
          history at a time such that when the next hour of the day
          begins, a sample is started at that instant.
          
          Note that following this rule may require that the probe delay
          collecting the first sample of the history, as each sample
          must be of the same interval.  Also note that the sample that
          is currently being collected is not accessible in this table
          until the end of its interval.";
      }

      leaf usrHistoryIntervalEnd {
        type yang:timestamp;
        config false;
        description 
         "The value of sysUpTime at the end of the interval over which
          this sample was measured.";
      }

      leaf usrHistoryAbsValue {
        type yang:gauge32;
        config false;
        description 
         "The absolute value (i.e., unsigned value) of the
          user-specified statistic during the last sampling period.  The
          value during the current sampling period is not made available
          until the period is completed.
          
          To obtain the true value for this sampling interval, the
          associated instance of usrHistoryValStatus must be checked,
          and usrHistoryAbsValue adjusted as necessary.
          
          
          
          
          If the MIB instance could not be accessed during the sampling
          interval, then this object will have a value of zero, and the
          associated instance of usrHistoryValStatus will be set to
          'valueNotAvailable(1)'.
          
          The access control check prescribed in the definition of
          usrHistoryObjectVariable SHOULD be checked for each sampling
          interval.  If this check determines that access should not be
          allowed, then this object will have a value of zero, and the
          associated instance of usrHistoryValStatus will be set to
          'valueNotAvailable(1)'.";
      }

      leaf usrHistoryValStatus {
        type enumeration {
          enum valueNotAvailable { value 1; }
          enum valuePositive     { value 2; }
          enum valueNegative     { value 3; }
        }
        config false;
        description 
         "This object indicates the validity and sign of the data in
          the associated instance of usrHistoryAbsValue.
          
          If the MIB instance could not be accessed during the sampling
          interval, then 'valueNotAvailable(1)' will be returned.
          
          If the sample is valid and the actual value of the sample is
          greater than or equal to zero, then 'valuePositive(2)' is
          returned.
          
          If the sample is valid and the actual value of the sample is
          less than zero, 'valueNegative(3)' will be returned.  The
          associated instance of usrHistoryAbsValue should be multiplied
          by -1 to obtain the true sample value.";
      }
    }
  }

  container probeConfig {

    leaf probeCapabilities {
      type bits {
        bit etherStats           { position 0; }
        bit historyControl       { position 1; }
        bit etherHistory         { position 2; }
        bit alarm                { position 3; }
        bit hosts                { position 4; }
        bit hostTopN             { position 5; }
        bit matrix               { position 6; }
        bit filter               { position 7; }
        bit capture              { position 8; }
        bit event                { position 9; }
        bit tokenRingMLStats     { position 10; }
        bit tokenRingPStats      { position 11; }
        bit tokenRingMLHistory   { position 12; }
        bit tokenRingPHistory    { position 13; }
        bit ringStation          { position 14; }
        bit ringStationOrder     { position 15; }
        bit ringStationConfig    { position 16; }
        bit sourceRouting        { position 17; }
        bit protocolDirectory    { position 18; }
        bit protocolDistribution { position 19; }
        bit addressMapping       { position 20; }
        bit nlHost               { position 21; }
        bit nlMatrix             { position 22; }
        bit alHost               { position 23; }
        bit alMatrix             { position 24; }
        bit usrHistory           { position 25; }
        bit probeConfig          { position 26; }
      }
      config false;
      description   
       "An indication of the RMON MIB groups supported
        on at least one interface by this probe.";
    }

    leaf probeSoftwareRev {
      type smiv2:DisplayString {
        length "0..15";
      }
      config false;
      description   
       "The software revision of this device.  This string will have
        a zero length if the revision is unknown.";
    }

    leaf probeHardwareRev {
      type smiv2:DisplayString {
        length "0..31";
      }
      config false;
      description   
       "The hardware revision of this device.  This string will have
        a zero length if the revision is unknown.";
    }

    leaf probeDateTime {
      type binary {
        length "0 | 8 | 11";
      }
      config true;
      description   
       "Probe's current date and time.
        
        field  octets  contents                  range
        -----  ------  --------                  -----
          1      1-2   year                      0..65536
          2       3    month                     1..12
          3       4    day                       1..31
          4       5    hour                      0..23
          5       6    minutes                   0..59
          6       7    seconds                   0..60
                        (use 60 for leap-second)
          7       8    deci-seconds              0..9
          8       9    direction from UTC        '+' / '-'
          9      10    hours from UTC            0..11
         10      11    minutes from UTC          0..59
        
        For example, Tuesday May 26, 1992 at 1:30:15 PM
        EDT would be displayed as:
        
                    1992-5-26,13:30:15.0,-4:0
        
        Note that if only local time is known, then
        time zone information (fields 8-10) is not
        present, and that if no time information is known, the
        null string is returned.";
    }

    leaf probeResetControl {
      type enumeration {
        enum running  { value 1; }
        enum warmBoot { value 2; }
        enum coldBoot { value 3; }
      }
      config true;
      description   
       "Setting this object to warmBoot(2) causes the device to
        restart the application software with current configuration
        parameters saved in non-volatile memory.  Setting this
        object to coldBoot(3) causes the device to reinitialize
        configuration parameters in non-volatile memory to default
        values and to restart the application software.  When the device
        is running normally, this variable has a value of
        running(1).";
    }

    leaf probeDownloadFile {
      type smiv2:DisplayString {
        length "0..127";
      }
      config true;
      status deprecated;
      description   
       "The file name to be downloaded from the TFTP server when a
        download is next requested via this MIB.  This value is set to
        the zero-length string when no file name has been specified.
        
        This object has been deprecated, as it has not had enough
        independent implementations to demonstrate interoperability to
        meet the requirements of a Draft Standard.";
    }

    leaf probeDownloadTFTPServer {
      type inet:ipv4-address;
      config true;
      status deprecated;
      description   
       "The IP address of the TFTP server that contains the boot
        image to load when a download is next requested via this MIB.
        This value is set to '0.0.0.0' when no IP address has been
        
        
        
        specified.
        
        This object has been deprecated, as it has not had enough
        independent implementations to demonstrate interoperability to
        meet the requirements of a Draft Standard.";
    }

    leaf probeDownloadAction {
      type enumeration {
        enum notDownloading { value 1; }
        enum downloadToPROM { value 2; }
        enum downloadToRAM  { value 3; }
      }
      config true;
      status deprecated;
      description   
       "When this object is set to downloadToRAM(3) or
        downloadToPROM(2), the device will discontinue its
        normal operation and begin download of the image specified
        by probeDownloadFile from the server specified by
        probeDownloadTFTPServer using the TFTP protocol.  If
        downloadToRAM(3) is specified, the new image is copied
        to RAM only (the old image remains unaltered in the flash
        EPROM).  If downloadToPROM(2) is specified,
        the new image is written to the flash EPROM
        memory after its checksum has been verified to be correct.
        When the download process is completed, the device will
        warm boot to restart the newly loaded application.
        When the device is not downloading, this object will have
        a value of notDownloading(1).
        
        This object has been deprecated, as it has not had enough
        independent implementations to demonstrate interoperability to
        meet the requirements of a Draft Standard.";
    }

    leaf probeDownloadStatus {
      type enumeration {
        enum downloadSuccess              { value 1; }
        enum downloadStatusUnknown        { value 2; }
        enum downloadGeneralError         { value 3; }
        enum downloadNoResponseFromServer { value 4; }
        enum downloadChecksumError        { value 5; }
        enum downloadIncompatibleImage    { value 6; }
        enum downloadTftpFileNotFound     { value 7; }
        enum downloadTftpAccessViolation  { value 8; }
      }
      config false;
      status deprecated;
      description   
       "The status of the last download procedure, if any.  This
        object will have a value of downloadStatusUnknown(2) if no
        download process has been performed.
        
        This object has been deprecated, as it has not had enough
        independent implementations to demonstrate interoperability to
        meet the requirements of a Draft Standard.";
    }


    /* XXX table comments here XXX */

    list serialConfigEntry {

      key "ifIndex";
      status deprecated;
      description   
       "A set of configuration parameters for a particular
        serial interface on this device.  If the device has no serial
        interfaces, this table is empty.
        
        The index is composed of the ifIndex assigned to this serial
        line interface.";

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

      leaf serialMode {
        type enumeration {
          enum direct { value 1; }
          enum modem  { value 2; }
        }
        config true;
        status deprecated;
        description 
         "The type of incoming connection to be expected on this
          serial interface.";
      }

      leaf serialProtocol {
        type enumeration {
          enum other { value 1; }
          enum slip  { value 2; }
          enum ppp   { value 3; }
        }
        config true;
        status deprecated;
        description 
         "The type of data link encapsulation to be used on this
          serial interface.";
      }

      leaf serialTimeout {
        type int32 {
          range "1..65535";
        }
        config true;
        status deprecated;
        description 
         "This timeout value is used when the Management Station has
          initiated the conversation over the serial link.  This variable
          represents the number of seconds of inactivity allowed before
          terminating the connection on this serial interface.  Use the
          serialDialoutTimeout in the case where the probe has initiated
          the connection for the purpose of sending a trap.";
      }

      leaf serialModemInitString {
        type rmon2-mib:ControlString {
          length "0..255";
        }
        config true;
        status deprecated;
        description 
         "A control string that controls how a modem attached to this
          serial interface should be initialized.  The initialization
          is performed once during startup and again after each
          connection is terminated if the associated serialMode has the
          value of modem(2).
          
          A control string that is appropriate for a wide variety of
          modems is: '^s^MATE0Q0V1X4 S0=1 S2=43^M'.";
      }

      leaf serialModemHangUpString {
        type rmon2-mib:ControlString {
          length "0..255";
        }
        config true;
        status deprecated;
        description 
         "A control string that specifies how to disconnect a modem
          connection on this serial interface.  This object is only
          meaningful if the associated serialMode has the value
          of modem(2).
          
          A control string that is appropriate for a wide variety of
          modems is: '^d2^s+++^d2^sATH0^M^d2'.";
      }

      leaf serialModemConnectResp {
        type smiv2:DisplayString {
          length "0..255";
        }
        config true;
        status deprecated;
        description 
         "An ASCII string containing substrings that describe the
          expected modem connection response code and associated bps
          rate.  The substrings are delimited by the first character
          in the string, for example:
             /CONNECT/300/CONNECT 1200/1200/CONNECT 2400/2400/
             CONNECT 4800/4800/CONNECT 9600/9600
          will be interpreted as:
              response code    bps rate
              CONNECT            300
              CONNECT 1200      1200
              CONNECT 2400      2400
              CONNECT 4800      4800
              CONNECT 9600      9600
          The agent will use the information in this string to adjust
          the bps rate of this serial interface once a modem connection
          is established.
          
          A value that is appropriate for a wide variety of modems is:
          
          
          
          '/CONNECT/300/CONNECT 1200/1200/CONNECT 2400/2400/
           CONNECT 4800/4800/CONNECT 9600/9600/CONNECT 14400/14400/
          CONNECT 19200/19200/CONNECT 38400/38400/'.";
      }

      leaf serialModemNoConnectResp {
        type smiv2:DisplayString {
          length "0..255";
        }
        config true;
        status deprecated;
        description 
         "An ASCII string containing response codes that may be
          generated by a modem to report the reason why a connection
          attempt has failed.  The response codes are delimited by
          the first character in the string, for example:
             /NO CARRIER/BUSY/NO DIALTONE/NO ANSWER/ERROR/
          
          If one of these response codes is received via this serial
          interface while attempting to make a modem connection,
          the agent will issue the hang up command as specified by
          serialModemHangUpString.
          
          A value that is appropriate for a wide variety of modems is:
          '/NO CARRIER/BUSY/NO DIALTONE/NO ANSWER/ERROR/'.";
      }

      leaf serialDialoutTimeout {
        type int32 {
          range "1..65535";
        }
        config true;
        status deprecated;
        description 
         "This timeout value is used when the probe initiates the
          serial connection with the intention of contacting a
          management station.  This variable represents the number
          of seconds of inactivity allowed before terminating the
          connection on this serial interface.";
      }

      leaf serialStatus {
        type smiv2:RowStatus;
        config true;
        status deprecated;
        description 
         "The status of this serialConfigEntry.
          
          An entry may not exist in the active state unless all
          objects in the entry have an appropriate value.";
      }
    }


    /* XXX table comments here XXX */

    list netConfigEntry {

      key "ifIndex";
      status deprecated;
      description   
       "A set of configuration parameters for a particular
        network interface on this device.  If the device has no network
        interface, this table is empty.
        
        The index is composed of the ifIndex assigned to the
        corresponding interface.";

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

      leaf netConfigIPAddress {
        type inet:ipv4-address;
        config true;
        status deprecated;
        description 
         "The IP address of this Net interface.  The default value
          for this object is 0.0.0.0.  If either the netConfigIPAddress
          or netConfigSubnetMask is 0.0.0.0, then when the device
          boots, it may use BOOTP to try to figure out what these
          values should be.  If BOOTP fails before the device
          can talk on the network, this value must be configured
          (e.g., through a terminal attached to the device).  If BOOTP is
          used, care should be taken to not send BOOTP broadcasts too
          frequently and to eventually send them very infrequently if no
          replies are received.";
      }

      leaf netConfigSubnetMask {
        type inet:ipv4-address;
        config true;
        status deprecated;
        description 
         "The subnet mask of this Net interface.  The default value
          for this object is 0.0.0.0.  If either the netConfigIPAddress
          or netConfigSubnetMask is 0.0.0.0, then when the device
          boots, it may use BOOTP to try to figure out what these
          values should be.  If BOOTP fails before the device
          can talk on the network, this value must be configured
          (e.g., through a terminal attached to the device).  If BOOTP is
          used, care should be taken to not send BOOTP broadcasts too
          frequently and to eventually send them very infrequently if no
          replies are received.";
      }

      leaf netConfigStatus {
        type smiv2:RowStatus;
        config true;
        status deprecated;
        description 
         "The status of this netConfigEntry.
          
          An entry may not exist in the active state unless all
          objects in the entry have an appropriate value.";
      }
    }

    leaf netDefaultGateway {
      type inet:ipv4-address;
      config true;
      status deprecated;
      description   
       "The IP Address of the default gateway.  If this value is
        undefined or unknown, it shall have the value 0.0.0.0.";
    }


    /* XXX table comments here XXX */

    list trapDestEntry {

      key "trapDestIndex";
      status deprecated;
      description   
       "This entry includes a destination IP address to which
        traps are sent for this community.";


      leaf trapDestIndex {
        type int32 {
          range "1..65535";
        }
        config false;
        status deprecated;
        description 
         "A value that uniquely identifies this trapDestEntry.";
      }

      leaf trapDestCommunity {
        type binary {
          length "0..127";
        }
        config true;
        status deprecated;
        description 
         "A community to which this destination address belongs.
          This entry is associated with any eventEntries in the RMON
          MIB whose value of eventCommunity is equal to the value of
          this object.  Every time an associated event entry sends a
          trap due to an event, that trap will be sent to each
          
          
          
          address in the trapDestTable with a trapDestCommunity equal
          to eventCommunity, as long as no access control mechanism
          precludes it (e.g., VACM).
          
          This object may not be modified if the associated
          trapDestStatus object is equal to active(1).";
      }

      leaf trapDestProtocol {
        type enumeration {
          enum ip   { value 1; }
          enum ipx  { value 2; }
        }
        config true;
        status deprecated;
        description 
         "The protocol with which this trap is to be sent.";
      }

      leaf trapDestAddress {
        type binary;
        config true;
        status deprecated;
        description 
         "The destination address for traps on behalf of this entry.
          
          If the associated trapDestProtocol object is equal to ip(1),
          the encoding of this object is the same as the snmpUDPAddress
          textual convention in RFC 3417, 'Transport Mappings for the
           Simple Network Management Protocol (SNMP)' [RFC3417]:
            -- for a SnmpUDPAddress of length 6:
            --
            -- octets   contents        encoding
            --  1-4     IP-address      network-byte order
            --  5-6     UDP-port        network-byte order
          
          If the associated trapDestProtocol object is equal to ipx(2),
          the encoding of this object is the same as the snmpIPXAddress
          textual convention in RFC 3417, 'Transport Mappings for the
           Simple Network Management Protocol (SNMP)' [RFC3417]:
            -- for a SnmpIPXAddress of length 12:
            --
            -- octets   contents            encoding
            --  1-4     network-number      network-byte order
            --  5-10    physical-address    network-byte order
            -- 11-12    socket-number       network-byte order
          
          This object may not be modified if the associated
          
          
          
          trapDestStatus object is equal to active(1).";
      }

      leaf trapDestOwner {
        type rmon-mib:OwnerString;
        config true;
        status deprecated;
        description 
         "The entity that configured this entry and is
          therefore using the resources assigned to it.";
      }

      leaf trapDestStatus {
        type smiv2:RowStatus;
        config true;
        status deprecated;
        description 
         "The status of this trap destination entry.
          
          An entry may not exist in the active state unless all
          objects in the entry have an appropriate value.";
      }
    }


    /* XXX table comments here XXX */

    list serialConnectionEntry {

      key "serialConnectIndex";
      status deprecated;
      description   
       "Configuration for a SLIP link over a serial line.";


      leaf serialConnectIndex {
        type int32 {
          range "1..65535";
        }
        config false;
        status deprecated;
        description 
         "A value that uniquely identifies this serialConnection
          entry.";
      }

      leaf serialConnectDestIpAddress {
        type inet:ipv4-address;
        config true;
        status deprecated;
        description 
         "The IP Address that can be reached at the other end of this
          serial connection.
          
          This object may not be modified if the associated
          serialConnectStatus object is equal to active(1).";
      }

      leaf serialConnectType {
        type enumeration {
          enum direct      { value 1; }
          enum modem       { value 2; }
          enum switch      { value 3; }
          enum modemSwitch { value 4; }
        }
        config true;
        status deprecated;
        description 
         "The type of outgoing connection to be made.  If this object
          has the value direct(1), then a direct serial connection
          is assumed.  If this object has the value modem(2),
          then serialConnectDialString will be used to make a modem
          connection.  If this object has the value switch(3),
          then serialConnectSwitchConnectSeq will be used to establish
          the connection over a serial data switch, and
          serialConnectSwitchDisconnectSeq will be used to terminate
          the connection.  If this object has the value
          modem-switch(4), then a modem connection will be made first,
          followed by the switch connection.
          
          This object may not be modified if the associated
          serialConnectStatus object is equal to active(1).";
      }

      leaf serialConnectDialString {
        type rmon2-mib:ControlString {
          length "0..255";
        }
        config true;
        status deprecated;
        description 
         "A control string that specifies how to dial the phone
          number in order to establish a modem connection.  The
          string should include the dialing prefix and suffix.  For
          example: '^s^MATD9,888-1234^M' will instruct the Probe
          to send a carriage return, followed by the dialing prefix
          'ATD', the phone number '9,888-1234', and a carriage
          return as the dialing suffix.
          
          This object may not be modified if the associated
          serialConnectStatus object is equal to active(1).";
      }

      leaf serialConnectSwitchConnectSeq {
        type rmon2-mib:ControlString {
          length "0..255";
        }
        config true;
        status deprecated;
        description 
         "A control string that specifies how to establish a
          data switch connection.
          
          This object may not be modified if the associated
          serialConnectStatus object is equal to active(1).";
      }

      leaf serialConnectSwitchDisconnectSeq {
        type rmon2-mib:ControlString {
          length "0..255";
        }
        config true;
        status deprecated;
        description 
         "A control string that specifies how to terminate a
          data switch connection.
          
          This object may not be modified if the associated
          serialConnectStatus object is equal to active(1).";
      }

      leaf serialConnectSwitchResetSeq {
        type rmon2-mib:ControlString {
          length "0..255";
        }
        config true;
        status deprecated;
        description 
         "A control string that specifies how to reset a data
          switch in the event of a timeout.
          
          This object may not be modified if the associated
          serialConnectStatus object is equal to active(1).";
      }

      leaf serialConnectOwner {
        type rmon-mib:OwnerString;
        config true;
        status deprecated;
        description 
         "The entity that configured this entry and is
          therefore using the resources assigned to it.";
      }

      leaf serialConnectStatus {
        type smiv2:RowStatus;
        config true;
        status deprecated;
        description 
         "The status of this serialConnectionEntry.
          
          If the manager attempts to set this object to active(1) when
          the serialConnectType is set to modem(2) or modem-switch(4)
          and the serialConnectDialString is a zero-length string or
          cannot be correctly parsed as a ConnectString, the set
          request will be rejected with badValue(3).
          
          If the manager attempts to set this object to active(1) when
          the serialConnectType is set to switch(3) or modem-switch(4)
          and the serialConnectSwitchConnectSeq,
          the serialConnectSwitchDisconnectSeq, or
          
          
          
          the serialConnectSwitchResetSeq is a zero-length string
          or cannot be correctly parsed as a ConnectString, the set
          request will be rejected with badValue(3).
          
          An entry may not exist in the active state unless all
          objects in the entry have an appropriate value.";
      }
    }
  }


  /* XXX table comments here XXX */

  augment "/rmon-mib:statistics/rmon-mib:etherStatsEntry" {
    description     
     "Contains the RMON-2 augmentations to RMON-1.";

    leaf etherStatsDroppedFrames {
      type yang:counter32;
      config false;
      description   
       "The total number of frames that were received by the probe
        and therefore not accounted for in the *StatsDropEvents, but
        that the probe chose not to count for this entry for
        whatever reason.  Most often, this event occurs when the
        probe is out of some resources and decides to shed load from
        this collection.
        
        This count does not include packets that were not counted
        because they had MAC-layer errors.
        
        Note that, unlike the dropEvents counter, this number is the
        exact number of frames dropped.";
    }

    leaf etherStatsCreateTime {
      type rmon2-mib:LastCreateTime;
      config false;
      description   
       "The value of sysUpTime when this control entry was last
        activated.  This can be used by the management station to
        ensure that the table has not been deleted and recreated
        between polls.";
    }
  }


  /* XXX table comments here XXX */

  augment "/rmon-mib:statistics/token-ring:tokenRingMLStatsEntry" {
    status deprecated;
    description     
     "Contains the RMON-2 augmentations to RMON-1.";

    leaf tokenRingMLStatsDroppedFrames {
      type yang:counter32;
      config false;
      status deprecated;
      description   
       "The total number of frames that were received by the probe
        and therefore not accounted for in the *StatsDropEvents, but
        that the probe chose not to count for this entry for
        whatever reason.  Most often, this event occurs when the
        probe is out of some resources and decides to shed load from
        this collection.
        
        This count does not include packets that were not counted
        because they had MAC-layer errors.
        
        Note that, unlike the dropEvents counter, this number is the
        exact number of frames dropped.";
    }

    leaf tokenRingMLStatsCreateTime {
      type rmon2-mib:LastCreateTime;
      config false;
      status deprecated;
      description   
       "The value of sysUpTime when this control entry was last
        activated.  This can be used by the management station to
        ensure that the table has not been deleted and recreated
        between polls.";
    }
  }


  /* XXX table comments here XXX */

  augment "/rmon-mib:statistics/token-ring:tokenRingPStatsEntry" {
    status deprecated;
    description     
     "Contains the RMON-2 augmentations to RMON-1.";

    leaf tokenRingPStatsDroppedFrames {
      type yang:counter32;
      config false;
      status deprecated;
      description   
       "The total number of frames that were received by the probe
        and therefore not accounted for in the *StatsDropEvents, but
        that the probe chose not to count for this entry for
        whatever reason.  Most often, this event occurs when the
        probe is out of some resources and decides to shed load from
        this collection.
        
        This count does not include packets that were not counted
        because they had MAC-layer errors.
        
        Note that, unlike the dropEvents counter, this number is the
        exact number of frames dropped.";
    }

    leaf tokenRingPStatsCreateTime {
      type rmon2-mib:LastCreateTime;
      config false;
      status deprecated;
      description   
       "The value of sysUpTime when this control entry was last
        activated.  This can be used by the management station to
        ensure that the table has not been deleted and recreated
        between polls.";
    }
  }


  /* XXX table comments here XXX */

  augment "/rmon-mib:history/rmon-mib:historyControlEntry" {
    description     
     "Contains the RMON-2 augmentations to RMON-1.";

    leaf historyControlDroppedFrames {
      type yang:counter32;
      config false;
      description   
       "The total number of frames that were received by the probe
        and therefore not accounted for in the *StatsDropEvents, but
        that the probe chose not to count for this entry for
        whatever reason.  Most often, this event occurs when the
        probe is out of some resources and decides to shed load from
        this collection.
        
        This count does not include packets that were not counted
        because they had MAC-layer errors.
        
        Note that, unlike the dropEvents counter, this number is the
        exact number of frames dropped.";
    }
  }


  /* XXX table comments here XXX */

  augment "/rmon-mib:hosts/rmon-mib:hostControlEntry" {
    description     
     "Contains the RMON-2 augmentations to RMON-1.";

    leaf hostControlDroppedFrames {
      type yang:counter32;
      config false;
      description   
       "The total number of frames that were received by the probe
        and therefore not accounted for in the *StatsDropEvents, but
        that the probe chose not to count for this entry for
        whatever reason.  Most often, this event occurs when the
        
        
        
        probe is out of some resources and decides to shed load from
        this collection.
        
        This count does not include packets that were not counted
        because they had MAC-layer errors.
        
        Note that, unlike the dropEvents counter, this number is the
        exact number of frames dropped.";
    }

    leaf hostControlCreateTime {
      type rmon2-mib:LastCreateTime;
      config false;
      description   
       "The value of sysUpTime when this control entry was last
        activated.  This can be used by the management station to
        ensure that the table has not been deleted and recreated
        between polls.";
    }
  }


  /* XXX table comments here XXX */

  augment "/rmon-mib:matrix/rmon-mib:matrixControlEntry" {
    description     
     "Contains the RMON-2 augmentations to RMON-1.";

    leaf matrixControlDroppedFrames {
      type yang:counter32;
      config false;
      description   
       "The total number of frames that were received by the probe
        and therefore not accounted for in the *StatsDropEvents, but
        that the probe chose not to count for this entry for
        whatever reason.  Most often, this event occurs when the
        probe is out of some resources and decides to shed load from
        this collection.
        
        This count does not include packets that were not counted
        because they had MAC-layer errors.
        
        Note that, unlike the dropEvents counter, this number is the
        exact number of frames dropped.";
    }

    leaf matrixControlCreateTime {
      type rmon2-mib:LastCreateTime;
      config false;
      description   
       "The value of sysUpTime when this control entry was last
        activated.  This can be used by the management station to
        ensure that the table has not been deleted and recreated
        between polls.";
    }
  }


  /* XXX table comments here XXX */

  augment "/rmon-mib:filter/rmon-mib:channelEntry" {
    description     
     "Contains the RMON-2 augmentations to RMON-1.";

    leaf channelDroppedFrames {
      type yang:counter32;
      config false;
      description   
       "The total number of frames that were received by the probe
        and therefore not accounted for in the *StatsDropEvents, but
        that the probe chose not to count for this entry for
        whatever reason.  Most often, this event occurs when the
        probe is out of some resources and decides to shed load from
        this collection.
        
        This count does not include packets that were not counted
        because they had MAC-layer errors.
        
        Note that, unlike the dropEvents counter, this number is the
        exact number of frames dropped.";
    }

    leaf channelCreateTime {
      type rmon2-mib:LastCreateTime;
      config false;
      description   
       "The value of sysUpTime when this control entry was last
        activated.  This can be used by the management station to
        ensure that the table has not been deleted and recreated
        between polls.";
    }
  }


  /* XXX table comments here XXX */

  augment "/rmon-mib:filter/rmon-mib:filterEntry" {
    description     
     "Provides a variable-length packet filter feature to the
      RMON-1 filter table.";

    leaf filterProtocolDirDataLocalIndex {
      type int32 {
        range "0..2147483647";
      }
      config true;
      description   
       "When this object is set to a non-zero value, the filter that
        it is associated with performs the following operations on
        every packet:
        
        1) If the packet doesn't match the protocol directory entry
           identified by this object, discard the packet and exit
           (i.e., discard the packet if it is not of the identified
           protocol).
        
        
        
        2) If the associated filterProtocolDirLocalIndex is non-zero
           and the packet doesn't match the protocol directory
           entry identified by that object, discard the packet and
           exit.
        3) If the packet matches, perform the regular filter
           algorithm as if the beginning of this named protocol is
           the beginning of the packet, potentially applying the
           filterOffset value to move further into the packet.";
    }

    leaf filterProtocolDirLocalIndex {
      type int32 {
        range "0..2147483647";
      }
      config true;
      description   
       "When this object is set to a non-zero value, the filter that
        it is associated with will discard the packet if the packet
        doesn't match this protocol directory entry.";
    }
  }


  /* XXX table comments here XXX */

  augment "/token-ring:tokenRing/token-ring:ringStationControlEntry" {
    status deprecated;
    description     
     "Contains the RMON-2 augmentations to RMON-1.";

    leaf ringStationControlDroppedFrames {
      type yang:counter32;
      config false;
      status deprecated;
      description   
       "The total number of frames that were received by the probe
        and therefore not accounted for in the *StatsDropEvents, but
        that the probe chose not to count for this entry for
        whatever reason.  Most often, this event occurs when the
        probe is out of some resources and decides to shed load from
        this collection.
        
        This count does not include packets that were not counted
        because they had MAC-layer errors.
        
        Note that, unlike the dropEvents counter, this number is the
        exact number of frames dropped.";
    }

    leaf ringStationControlCreateTime {
      type rmon2-mib:LastCreateTime;
      config false;
      status deprecated;
      description   
       "The value of sysUpTime when this control entry was last
        activated.  This can be used by the management station to
        
        
        
        ensure that the table has not been deleted and recreated
        between polls.";
    }
  }


  /* XXX table comments here XXX */

  augment "/token-ring:tokenRing/token-ring:sourceRoutingStatsEntry" {
    status deprecated;
    description     
     "Contains the RMON-2 augmentations to RMON-1.";

    leaf sourceRoutingStatsDroppedFrames {
      type yang:counter32;
      config false;
      status deprecated;
      description   
       "The total number of frames that were received by the probe
        and therefore not accounted for in the *StatsDropEvents, but
        that the probe chose not to count for this entry for
        whatever reason.  Most often, this event occurs when the
        probe is out of some resources and decides to shed load from
        this collection.
        
        This count does not include packets that were not counted
        because they had MAC-layer errors.
        
        Note that, unlike the dropEvents counter, this number is the
        exact number of frames dropped.";
    }

    leaf sourceRoutingStatsCreateTime {
      type rmon2-mib:LastCreateTime;
      config false;
      status deprecated;
      description   
       "The value of sysUpTime when this control entry was last
        activated.  This can be used by the management station to
        ensure that the table has not been deleted and recreated
        between polls.";
    }
  }

} /* end of module RMON2-MIB */