pvl.hosts-lldp: snmp-based lldp discovery of connected switches
authorTero Marttila <terom@paivola.fi>
Mon, 17 Mar 2014 11:59:15 +0200
changeset 380 78f192fe9e2c
parent 379 60ce05b30227
child 381 6fe465ce6d52
pvl.hosts-lldp: snmp-based lldp discovery of connected switches
bin/pvl.hosts-lldp
etc/mibs/LLDP-MIB
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/pvl.hosts-lldp	Mon Mar 17 11:59:15 2014 +0200
@@ -0,0 +1,234 @@
+#!/usr/bin/env python
+
+"""
+    Requirements:
+        pysnmp
+        pysnmp-mibs
+        memoized-property
+
+    Setup:
+        ./opt/bin/build-pysnmp-mib -o usr/mibs/LLDP-MIB.py etc/mibs/LLDP-MIB
+
+    Run:
+        PYSNMP_MIB_DIRS=usr/mibs/ ./opt/bin/python ...
+"""
+
+import pvl.args
+import pvl.hosts
+
+import logging; log = logging.getLogger('pvl.hosts-snmp')
+import optparse
+
+from pysnmp.entity.rfc3413.oneliner import cmdgen as pysnmp
+import collections
+
+class SNMPError (Exception) :
+    pass
+
+class SNMPEngineError (SNMPError) :
+    """
+        Internal SNMP Engine error (?)
+    """
+
+class SNMPAgent (object) :
+    """
+        GET SNMP shit from a remote host.
+    """
+
+    SNMP_PORT = 161
+    snmp_cmdgen = pysnmp.CommandGenerator()
+
+    @classmethod
+    def apply (cls, options, host) :
+        community = options.snmp_community
+        port = cls.SNMP_PORT
+
+        if '@' in host :
+            community, host = host.split('@', 1)
+        
+        if ':' in host :
+            host, port = host.rsplit(':', 1)
+
+        return cls(
+                pysnmp.CommunityData(community),
+                pysnmp.UdpTransportTarget((host, port))
+        )
+
+    def __init__ (self, security, transport) :
+        self.security = security
+        self.transport = transport
+
+    def get (self, *request) :
+        """
+            request = (
+                pysnmp.MibVariable('IF-MIB', 'ifInOctets', 1),
+            )
+        """
+
+        opts = dict(
+                lookupNames     = True,
+                lookupValues    = True,
+        )
+
+        try :
+            error, error_status, error_index, response = self.snmp_cmdgen.getCmd(self.security, self.transport,  *request, **opts)
+        except pysnmp.error.PySnmpError as ex :
+            raise SNMPEngineError(ex)
+
+        if error :
+            raise SNMPEngineError(error)
+        
+        if error_status :
+            raise SNMPError(errorStatus.prettyPrint())
+        
+        return response
+        #for name, value in response :
+        #    yield name.getMibSymbol(), value.prettyPrint()
+
+    def walk (self, *request) :
+        """
+            request = (
+                    pysnmp.MibVariable('IF-MIB', 'ifInOctets'),
+            )
+        """
+
+        opts = dict(
+                lookupNames     = True,
+                lookupValues    = True,
+        )
+
+        try :
+            error, error_status, error_index, responses = self.snmp_cmdgen.nextCmd(self.security, self.transport, *request, **opts)
+        except pysnmp.error.PySnmpError as ex :
+            raise SNMPEngineError(ex)
+
+        if error :
+            raise SNMPEngineError(error)
+        
+        if error_status :
+            raise SNMPError(errorStatus.prettyPrint())
+        
+        return responses
+        #for response in responses:
+        #    for name, value in response :
+        #        yield name.getMibSymbol(), value.prettyPrint()
+
+    def table (self, table) :
+        """
+            Load a simple table with a running index.
+
+            Given [(attr, oid, type)] yields { attr: type(value) }
+        """
+
+        data = collections.defaultdict(dict)
+
+        for row in self.walk(*[oid for attr, oid, type in table]) :
+            log.debug("%s", row)
+
+            for (attr, type), (field, value) in zip([(attr, type) for attr, oid, type in table], row) :
+                mib, sym, idx = field.getMibSymbol()
+
+                # convert
+                if type :
+                    value = type(value)
+
+                log.debug("%s::%s.%s: %s: %s", mib, sym, idx, attr, value)
+                
+                data[idx][attr] = value
+            
+        return data.items()
+
+from memoized_property import memoized_property
+
+def macaddr (value) :
+    """
+        Excepts a MAC address from an SNMP OctetString.
+    """
+
+    return ':'.join('{octet:02x}'.format(octet=c) for c in value.asNumbers())
+
+class LLDPAgent (SNMPAgent) :
+    """
+        Query LLDP info from a remote agent.
+    """
+
+    LOCAL = (
+            ( 'chassis_id',     pysnmp.MibVariable('LLDP-MIB', 'lldpLocChassisId'),     macaddr ),
+            ( 'sys_name',       pysnmp.MibVariable('LLDP-MIB', 'lldpLocSysName'),       str     ),
+    )
+    
+    @memoized_property
+    def local (self) :
+        """
+            Describe the local system.
+        """
+
+        for idx, data in self.table(self.LOCAL) :
+            return data
+
+    PORTS = (
+            ( 'port_id',        pysnmp.MibVariable('LLDP-MIB', 'lldpLocPortId'),      str     ),
+    )
+
+    @memoized_property
+    def ports (self) :
+        """
+            Describe the local ports.
+        """
+
+        ports = { }
+
+        for idx, data in self.table(self.PORTS) :
+            port, = idx
+            
+            ports[int(port)] = data
+
+        return ports
+
+    def port (self, port) :
+        return self.ports[port]
+
+    REMOTE_DATA = (
+            ( 'chassis_id',     pysnmp.MibVariable('LLDP-MIB', 'lldpRemChassisId'),     macaddr ),
+            ( 'sys_name',       pysnmp.MibVariable('LLDP-MIB', 'lldpRemSysName'),       str     ),
+            ( 'remote_port',    pysnmp.MibVariable('LLDP-MIB', 'lldpRemPortId'),        str     ),
+    )
+
+    def remotes (self) :
+        """
+            Describe remote systems, indexed by local port.
+        """
+
+        for idx, data in self.table(self.REMOTE_DATA) :
+            time, port, idx = idx
+
+            yield int(port), data
+
+def main (argv) :
+    """
+        SNMP polling.
+    """
+
+    parser = optparse.OptionParser(main.__doc__)
+    parser.add_option_group(pvl.args.parser(parser))
+    #parser.add_option_group(pvl.hosts.optparser(parser))
+
+    parser.add_option('--snmp-community',
+            help="SNMPv2 read community")
+
+    options, args = parser.parse_args(argv[1:])
+    pvl.args.apply(options)
+
+    # input
+    #hosts = pvl.hosts.apply(options, args)
+
+    for arg in args :
+        lldp = LLDPAgent.apply(options, arg)
+        
+        print arg, "{chassis_id}({sys_name})".format(**lldp.local)
+        
+        for port, remote in lldp.remotes() :
+            print '\t', lldp.port(port), remote
+
+if __name__ == '__main__':
+    pvl.args.main(main)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/mibs/LLDP-MIB	Mon Mar 17 11:59:15 2014 +0200
@@ -0,0 +1,2032 @@
+LLDP-MIB DEFINITIONS ::= BEGIN
+
+IMPORTS
+    MODULE-IDENTITY, OBJECT-TYPE, Integer32, Counter32, NOTIFICATION-TYPE
+        FROM SNMPv2-SMI
+    TEXTUAL-CONVENTION, TimeStamp, TruthValue
+        FROM SNMPv2-TC
+    SnmpAdminString
+        FROM SNMP-FRAMEWORK-MIB
+    MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
+        FROM SNMPv2-CONF
+    TimeFilter, ZeroBasedCounter32
+        FROM RMON2-MIB
+    AddressFamilyNumbers
+        FROM IANA-ADDRESS-FAMILY-NUMBERS-MIB;
+
+lldpMIB MODULE-IDENTITY
+    LAST-UPDATED "200505060000Z" -- May 06, 2005
+    ORGANIZATION "IEEE 802.1 Working Group"
+    CONTACT-INFO 
+            "  WG-URL: http://grouper.ieee.org/groups/802/1/index.html
+             WG-EMail: stds-802-1@ieee.org
+
+              Contact: Paul Congdon
+               Postal: Hewlett-Packard Company
+                       8000 Foothills Blvd. 
+                       Roseville, CA 95747
+                       USA
+                  Tel: +1-916-785-5753
+               E-mail: paul_congdon@hp.com"
+    DESCRIPTION
+            "Management Information Base module for LLDP configuration,
+            statistics, local system data and remote systems data
+            components.
+
+            Copyright (C) IEEE (2005).  This version of this MIB module
+            is published as subclause 12.1 of IEEE Std 802.1AB-2005;
+            see the standard itself for full legal notices."
+    REVISION        "200505060000Z" -- May 06, 2005
+    DESCRIPTION
+            "Published as part of IEEE Std 802.1AB-2005 initial version."
+   ::= { iso std(0) iso8802(8802) ieee802dot1(1) ieee802dot1mibs(1) 2 }
+
+lldpNotifications            OBJECT IDENTIFIER ::= { lldpMIB 0 }
+lldpObjects                  OBJECT IDENTIFIER ::= { lldpMIB 1 }
+lldpConformance              OBJECT IDENTIFIER ::= { lldpMIB 2 } 
+
+--
+-- LLDP MIB Objects
+--
+
+lldpConfiguration            OBJECT IDENTIFIER ::= { lldpObjects 1 }
+lldpStatistics               OBJECT IDENTIFIER ::= { lldpObjects 2 }
+lldpLocalSystemData          OBJECT IDENTIFIER ::= { lldpObjects 3 }
+lldpRemoteSystemsData        OBJECT IDENTIFIER ::= { lldpObjects 4 }
+lldpExtensions               OBJECT IDENTIFIER ::= { lldpObjects 5 }
+
+-- 
+-- ***********************************************************
+-- 
+-- Textual Conventions
+-- 
+-- ***********************************************************
+
+LldpChassisIdSubtype ::= TEXTUAL-CONVENTION
+    STATUS      current
+    DESCRIPTION
+            "This TC describes the source of a chassis identifier.
+
+            The enumeration 'chassisComponent(1)' represents a chassis
+            identifier based on the value of entPhysicalAlias object
+            (defined in IETF RFC 2737) for a chassis component (i.e.,
+            an entPhysicalClass value of 'chassis(3)').
+
+            The enumeration 'interfaceAlias(2)' represents a chassis
+            identifier based on the value of ifAlias object (defined in
+            IETF RFC 2863) for an interface on the containing chassis.
+
+            The enumeration 'portComponent(3)' represents a chassis
+            identifier based on the value of entPhysicalAlias object
+            (defined in IETF RFC 2737) for a port or backplane
+            component (i.e., entPhysicalClass value of 'port(10)' or
+            'backplane(4)'), within the containing chassis.
+
+            The enumeration 'macAddress(4)' represents a chassis
+            identifier based on the value of a unicast source address
+            (encoded in network byte order and IEEE 802.3 canonical bit
+            order), of a port on the containing chassis as defined in
+            IEEE Std 802-2001.
+
+            The enumeration 'networkAddress(5)' represents a chassis
+            identifier based on a network address, associated with
+            a particular chassis.  The encoded address is actually
+            composed of two fields.  The first field is a single octet,
+            representing the IANA AddressFamilyNumbers value for the
+            specific address type, and the second field is the network
+            address value.
+
+            The enumeration 'interfaceName(6)' represents a chassis
+            identifier based on the value of ifName object (defined in
+            IETF RFC 2863) for an interface on the containing chassis.
+
+            The enumeration 'local(7)' represents a chassis identifier
+            based on a locally defined value."
+    SYNTAX  INTEGER {
+            chassisComponent(1),
+            interfaceAlias(2),
+            portComponent(3),
+            macAddress(4),
+            networkAddress(5),
+            interfaceName(6),
+            local(7)
+    }
+
+LldpChassisId ::= TEXTUAL-CONVENTION
+    STATUS      current
+    DESCRIPTION
+            "This TC describes the format of a chassis identifier string.
+            Objects of this type are always used with an associated
+            LldpChassisIdSubtype object, which identifies the format of
+            the particular LldpChassisId object instance.
+
+            If the associated LldpChassisIdSubtype object has a value of
+            'chassisComponent(1)', then the octet string identifies
+            a particular instance of the entPhysicalAlias object
+            (defined in IETF RFC 2737) for a chassis component (i.e.,
+            an entPhysicalClass value of 'chassis(3)').
+
+            If the associated LldpChassisIdSubtype object has a value
+            of 'interfaceAlias(2)', then the octet string identifies
+            a particular instance of the ifAlias object (defined in
+            IETF RFC 2863) for an interface on the containing chassis.
+            If the particular ifAlias object does not contain any values,
+            another chassis identifier type should be used.
+
+            If the associated LldpChassisIdSubtype object has a value
+            of 'portComponent(3)', then the octet string identifies a
+            particular instance of the entPhysicalAlias object (defined
+            in IETF RFC 2737) for a port or backplane component within
+            the containing chassis.
+
+            If the associated LldpChassisIdSubtype object has a value of
+            'macAddress(4)', then this string identifies a particular
+            unicast source address (encoded in network byte order and
+            IEEE 802.3 canonical bit order), of a port on the containing
+            chassis as defined in IEEE Std 802-2001.
+
+            If the associated LldpChassisIdSubtype object has a value of
+            'networkAddress(5)', then this string identifies a particular
+            network address, encoded in network byte order, associated
+            with one or more ports on the containing chassis.  The first
+            octet contains the IANA Address Family Numbers enumeration
+            value for the specific address type, and octets 2 through
+            N contain the network address value in network byte order.
+
+            If the associated LldpChassisIdSubtype object has a value
+            of 'interfaceName(6)', then the octet string identifies
+            a particular instance of the ifName object (defined in
+            IETF RFC 2863) for an interface on the containing chassis.
+            If the particular ifName object does not contain any values,
+            another chassis identifier type should be used.
+
+            If the associated LldpChassisIdSubtype object has a value of
+            'local(7)', then this string identifies a locally assigned
+            Chassis ID."
+    SYNTAX      OCTET STRING (SIZE (1..255))
+
+LldpPortIdSubtype ::= TEXTUAL-CONVENTION
+    STATUS      current
+    DESCRIPTION
+            "This TC describes the source of a particular type of port
+            identifier used in the LLDP MIB.
+
+            The enumeration 'interfaceAlias(1)' represents a port
+            identifier based on the ifAlias MIB object, defined in IETF
+            RFC 2863.
+
+            The enumeration 'portComponent(2)' represents a port
+            identifier based on the value of entPhysicalAlias (defined in
+            IETF RFC 2737) for a port component (i.e., entPhysicalClass
+            value of 'port(10)'), within the containing chassis.
+
+            The enumeration 'macAddress(3)' represents a port identifier
+            based on a unicast source address (encoded in network
+            byte order and IEEE 802.3 canonical bit order), which has
+            been detected by the agent and associated with a particular
+            port (IEEE Std 802-2001).
+
+            The enumeration 'networkAddress(4)' represents a port
+            identifier based on a network address, detected by the agent
+            and associated with a particular port.
+
+            The enumeration 'interfaceName(5)' represents a port
+            identifier based on the ifName MIB object, defined in IETF
+            RFC 2863.
+
+            The enumeration 'agentCircuitId(6)' represents a port
+            identifier based on the agent-local identifier of the circuit
+            (defined in RFC 3046), detected by the agent and associated
+            with a particular port.
+
+            The enumeration 'local(7)' represents a port identifier
+            based on a value locally assigned."
+
+    SYNTAX  INTEGER {
+            interfaceAlias(1),
+            portComponent(2),
+            macAddress(3),
+            networkAddress(4),
+            interfaceName(5),
+            agentCircuitId(6),
+            local(7)
+    }
+
+LldpPortId ::= TEXTUAL-CONVENTION
+    STATUS      current
+    DESCRIPTION
+            "This TC describes the format of a port identifier string.
+            Objects of this type are always used with an associated
+            LldpPortIdSubtype object, which identifies the format of the
+            particular LldpPortId object instance.
+
+            If the associated LldpPortIdSubtype object has a value of
+            'interfaceAlias(1)', then the octet string identifies a
+            particular instance of the ifAlias object (defined in IETF
+            RFC 2863).  If the particular ifAlias object does not contain
+            any values, another port identifier type should be used.
+
+            If the associated LldpPortIdSubtype object has a value of
+            'portComponent(2)', then the octet string identifies a
+            particular instance of the entPhysicalAlias object (defined
+            in IETF RFC 2737) for a port or backplane component.
+
+            If the associated LldpPortIdSubtype object has a value of
+            'macAddress(3)', then this string identifies a particular
+            unicast source address (encoded in network byte order
+            and IEEE 802.3 canonical bit order) associated with the port
+            (IEEE Std 802-2001).
+
+            If the associated LldpPortIdSubtype object has a value of
+            'networkAddress(4)', then this string identifies a network
+            address associated with the port.  The first octet contains
+            the IANA AddressFamilyNumbers enumeration value for the
+            specific address type, and octets 2 through N contain the
+            networkAddress address value in network byte order.
+
+            If the associated LldpPortIdSubtype object has a value of
+            'interfaceName(5)', then the octet string identifies a
+            particular instance of the ifName object (defined in IETF
+            RFC 2863).  If the particular ifName object does not contain
+            any values, another port identifier type should be used.
+
+            If the associated LldpPortIdSubtype object has a value of
+            'agentCircuitId(6)', then this string identifies a agent-local
+            identifier of the circuit (defined in RFC 3046).
+
+            If the associated LldpPortIdSubtype object has a value of
+            'local(7)', then this string identifies a locally
+            assigned port ID."
+    SYNTAX      OCTET STRING (SIZE (1..255))
+
+LldpManAddrIfSubtype ::= TEXTUAL-CONVENTION
+    STATUS      current
+    DESCRIPTION
+            "This TC describes the basis of a particular type of
+            interface associated with the management address.
+
+            The enumeration 'unknown(1)' represents the case where the
+            interface is not known.
+
+            The enumeration 'ifIndex(2)' represents interface identifier
+            based on the ifIndex MIB object.
+
+            The enumeration 'systemPortNumber(3)' represents interface
+            identifier based on the system port numbering convention."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.9.5"
+            
+    SYNTAX  INTEGER {
+            unknown(1),
+            ifIndex(2),
+            systemPortNumber(3)
+    }
+
+LldpManAddress ::= TEXTUAL-CONVENTION
+    STATUS      current
+    DESCRIPTION
+            "The value of a management address associated with the LLDP
+            agent that may be used to reach higher layer entities to
+            assist discovery by network management.
+
+            It should be noted that appropriate security credentials,
+            such as SNMP engineId, may be required to access the LLDP
+            agent using a management address.  These necessary credentials
+            should be known by the network management and the objects
+            associated with the credentials are not included in the
+            LLDP agent."
+    SYNTAX      OCTET STRING (SIZE (1..31))
+
+LldpSystemCapabilitiesMap ::= TEXTUAL-CONVENTION
+    STATUS      current
+    DESCRIPTION
+            "This TC describes the system capabilities.
+
+            The bit 'other(0)' indicates that the system has capabilities
+            other than those listed below.
+
+            The bit 'repeater(1)' indicates that the system has repeater
+            capability.
+
+            The bit 'bridge(2)' indicates that the system has bridge
+            capability.
+
+            The bit 'wlanAccessPoint(3)' indicates that the system has 
+            WLAN access point capability.
+
+            The bit 'router(4)' indicates that the system has router
+            capability.
+
+            The bit 'telephone(5)' indicates that the system has telephone
+            capability.
+
+            The bit 'docsisCableDevice(6)' indicates that the system has
+            DOCSIS Cable Device capability (IETF RFC 2669 & 2670).
+
+            The bit 'stationOnly(7)' indicates that the system has only
+            station capability and nothing else."
+    SYNTAX  BITS {
+            other(0),
+            repeater(1),
+            bridge(2),
+            wlanAccessPoint(3),
+            router(4),
+            telephone(5),
+            docsisCableDevice(6),
+            stationOnly(7)
+    }
+
+LldpPortNumber ::= TEXTUAL-CONVENTION
+    DISPLAY-HINT "d"
+    STATUS     current 
+    DESCRIPTION
+            "Each port contained in the chassis (that is known to the
+            LLDP agent) is uniquely identified by a port number.
+
+            A port number has no mandatory relationship to an
+            InterfaceIndex object (of the interfaces MIB, IETF RFC 2863).
+            If the LLDP agent is a IEEE 802.1D, IEEE 802.1Q bridge, the
+            LldpPortNumber will have the same value as the dot1dBasePort
+            object (defined in IETF RFC 1493) associated corresponding
+            bridge port.  If the system hosting LLDP agent is not an
+            IEEE 802.1D or an IEEE 802.1Q bridge, the LldpPortNumber
+            will have the same value as the corresponding interface's
+            InterfaceIndex object.
+
+            Port numbers should be in the range of 1 and 4096 since a
+            particular port is also represented by the corresponding
+            port number bit in LldpPortList."
+    SYNTAX 	Integer32(1..4096)
+
+LldpPortList ::= TEXTUAL-CONVENTION
+    STATUS      current
+    DESCRIPTION
+            "Each octet within this value specifies a set of eight ports,
+            with the first octet specifying ports 1 through 8, the second
+            octet specifying ports 9 through 16, etc.  Within each octet,
+            the most significant bit represents the lowest numbered port,
+            and the least significant bit represents the highest numbered
+            port.  Thus, each port of the system is represented by a
+            single bit within the value of this object.  If that bit has
+            a value of '1' then that port is included in the set of ports;
+            the port is not included if its bit has a value of '0'."
+    REFERENCE 
+            "IETF RFC 2674 section 5"
+    SYNTAX  OCTET STRING(SIZE(0..512))
+
+-- 
+-- ***********************************************************
+-- 
+--                  L L D P    C O N F I G 
+-- 
+-- *********************************************************** 
+--
+
+lldpMessageTxInterval OBJECT-TYPE
+    SYNTAX      Integer32(5..32768)
+    UNITS       "seconds"
+    MAX-ACCESS  read-write
+    STATUS      current
+    DESCRIPTION
+            "The interval at which LLDP frames are transmitted on
+            behalf of this LLDP agent.
+
+            The default value for lldpMessageTxInterval object is
+            30 seconds.
+
+            The value of this object must be restored from non-volatile
+            storage after a re-initialization of the management system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.5.3.3"
+    DEFVAL     { 30 }
+    ::= { lldpConfiguration 1 }
+
+lldpMessageTxHoldMultiplier OBJECT-TYPE
+    SYNTAX      Integer32(2..10)
+    MAX-ACCESS  read-write
+    STATUS      current
+    DESCRIPTION
+            "The time-to-live value expressed as a multiple of the
+            lldpMessageTxInterval object.  The actual time-to-live value
+            used in LLDP frames, transmitted on behalf of this LLDP agent,
+            can be expressed by the following formula: TTL = min(65535,
+            (lldpMessageTxInterval * lldpMessageTxHoldMultiplier)) For
+            example, if the value of lldpMessageTxInterval is '30', and
+            the value of lldpMessageTxHoldMultiplier is '4', then the
+            value '120' is encoded in the TTL field in the LLDP header.
+
+            The default value for lldpMessageTxHoldMultiplier object is 4.
+
+            The value of this object must be restored from non-volatile
+            storage after a re-initialization of the management system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.5.3.3"
+    DEFVAL      { 4 }    
+    ::= { lldpConfiguration 2 }
+
+lldpReinitDelay OBJECT-TYPE
+    SYNTAX      Integer32(1..10)
+    UNITS       "seconds"
+    MAX-ACCESS  read-write
+    STATUS      current
+    DESCRIPTION
+            "The lldpReinitDelay indicates the delay (in units of
+            seconds) from when lldpPortConfigAdminStatus object of a
+            particular port becomes 'disabled' until re-initialization
+            will be attempted.
+
+            The default value for lldpReintDelay object is two seconds.
+
+            The value of this object must be restored from non-volatile
+            storage after a re-initialization of the management system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.5.3.3"
+    DEFVAL      { 2 }    
+    ::= { lldpConfiguration 3 }
+
+lldpTxDelay OBJECT-TYPE
+    SYNTAX      Integer32(1..8192)
+    UNITS       "seconds"
+    MAX-ACCESS  read-write
+    STATUS      current
+    DESCRIPTION
+            "The lldpTxDelay indicates the delay (in units
+            of seconds) between successive LLDP frame transmissions 
+            initiated by value/status changes in the LLDP local systems
+            MIB.  The recommended value for the lldpTxDelay is set by the
+            following  formula:
+
+               1 <= lldpTxDelay <= (0.25 * lldpMessageTxInterval)
+
+            The default value for lldpTxDelay object is two seconds.
+
+            The value of this object must be restored from non-volatile
+            storage after a re-initialization of the management system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.5.3.3"
+    DEFVAL      { 2 }    
+    ::= { lldpConfiguration 4 }
+
+lldpNotificationInterval OBJECT-TYPE
+    SYNTAX      Integer32(5..3600)
+    UNITS       "seconds"
+    MAX-ACCESS  read-write
+    STATUS      current
+    DESCRIPTION
+            "This object controls the transmission of LLDP notifications.
+
+            the agent must not generate more than one lldpRemTablesChange
+            notification-event in the indicated period, where a
+            'notification-event' is the transmission of a single
+            notification PDU type to a list of notification destinations.
+            If additional changes in lldpRemoteSystemsData object
+            groups occur within the indicated throttling period,
+            then these trap- events must be suppressed by the
+            agent. An NMS should periodically check the value of
+            lldpStatsRemTableLastChangeTime to detect any missed
+            lldpRemTablesChange notification-events, e.g. due to
+            throttling or transmission loss.
+
+            If notification transmission is enabled for particular ports,
+            the suggested default throttling period is 5 seconds.
+
+            The value of this object must be restored from non-volatile
+            storage after a re-initialization of the management system."
+    DEFVAL { 5 }
+    ::= { lldpConfiguration 5 }
+
+--
+-- lldpPortConfigTable: LLDP configuration on a per port basis
+--
+
+lldpPortConfigTable   OBJECT-TYPE
+    SYNTAX      SEQUENCE OF LldpPortConfigEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "The table that controls LLDP frame transmission on individual
+            ports."
+    ::= { lldpConfiguration 6 }
+
+lldpPortConfigEntry   OBJECT-TYPE
+    SYNTAX      LldpPortConfigEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "LLDP configuration information for a particular port.
+            This configuration parameter controls the transmission and
+            the reception of LLDP frames on those ports whose rows are
+            created in this table."
+     INDEX  { lldpPortConfigPortNum }
+    ::= { lldpPortConfigTable 1 }
+
+LldpPortConfigEntry ::= SEQUENCE {
+      lldpPortConfigPortNum            LldpPortNumber,
+      lldpPortConfigAdminStatus        INTEGER,
+      lldpPortConfigNotificationEnable TruthValue,
+      lldpPortConfigTLVsTxEnable       BITS }
+
+lldpPortConfigPortNum   OBJECT-TYPE
+    SYNTAX      LldpPortNumber 
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "The index value used to identify the port component
+            (contained in the local chassis with the LLDP agent)
+            associated with this entry.
+
+            The value of this object is used as a port index to the
+            lldpPortConfigTable."
+    ::= { lldpPortConfigEntry 1 }
+
+lldpPortConfigAdminStatus  OBJECT-TYPE 
+    SYNTAX INTEGER { 
+       txOnly(1), 
+       rxOnly(2),
+       txAndRx(3),
+       disabled(4)
+    }
+    MAX-ACCESS read-write 
+    STATUS     current 
+    DESCRIPTION 
+            "The administratively desired status of the local LLDP agent.
+
+            If the associated lldpPortConfigAdminStatus object has a
+            value of 'txOnly(1)', then LLDP agent will transmit LLDP
+            frames on this port and it will not store any information
+            about the remote systems connected.
+         
+            If the associated lldpPortConfigAdminStatus object has a
+            value of 'rxOnly(2)', then the LLDP agent will receive,
+            but it will not transmit LLDP frames on this port.
+
+            If the associated lldpPortConfigAdminStatus object has a
+            value of 'txAndRx(3)', then the LLDP agent will transmit
+            and receive LLDP frames on this port.
+
+            If the associated lldpPortConfigAdminStatus object has a
+            value of 'disabled(4)', then LLDP agent will not transmit or
+            receive LLDP frames on this port.  If there is remote systems
+            information which is received on this port and stored in
+            other tables, before the port's lldpPortConfigAdminStatus
+            becomes disabled, then the information will naturally age out."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.5.1"
+    DEFVAL  { txAndRx }    
+   ::= { lldpPortConfigEntry 2 } 
+
+lldpPortConfigNotificationEnable OBJECT-TYPE 
+    SYNTAX     TruthValue
+    MAX-ACCESS read-write 
+    STATUS     current 
+    DESCRIPTION 
+            "The lldpPortConfigNotificationEnable controls, on a per
+            port basis,  whether or not notifications from the agent
+            are enabled. The value true(1) means that notifications are
+            enabled; the value false(2) means that they are not."
+    DEFVAL  { false }    
+   ::= { lldpPortConfigEntry 3 } 
+
+lldpPortConfigTLVsTxEnable OBJECT-TYPE
+    SYNTAX      BITS {
+            portDesc(0),
+            sysName(1),
+            sysDesc(2),
+            sysCap(3)
+    }
+    MAX-ACCESS  read-write
+    STATUS      current
+    DESCRIPTION
+            "The lldpPortConfigTLVsTxEnable, defined as a bitmap,
+            includes the basic set of LLDP TLVs whose transmission is
+            allowed on the local LLDP agent by the network management.
+            Each bit in the bitmap corresponds to a TLV type associated
+            with a specific optional TLV.
+
+            It should be noted that the organizationally-specific TLVs
+            are excluded from the lldpTLVsTxEnable bitmap.
+            
+            LLDP Organization Specific Information Extension MIBs should
+            have similar configuration object to control transmission
+            of their organizationally defined TLVs.
+
+            The bit 'portDesc(0)' indicates that LLDP agent should
+            transmit 'Port Description TLV'.
+
+            The bit 'sysName(1)' indicates that LLDP agent should transmit
+            'System Name TLV'.
+
+            The bit 'sysDesc(2)' indicates that LLDP agent should transmit
+            'System Description TLV'.
+
+            The bit 'sysCap(3)' indicates that LLDP agent should transmit
+            'System Capabilities TLV'.
+
+            There is no bit reserved for the management address TLV type
+            since transmission of management address TLVs are controlled
+            by another object, lldpConfigManAddrTable.
+
+            The default value for lldpPortConfigTLVsTxEnable object is
+            empty set, which means no enumerated values are set.
+
+            The value of this object must be restored from non-volatile
+            storage after a re-initialization of the management system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.2.1.1"
+    DEFVAL  { { } }
+    ::= { lldpPortConfigEntry 4 } 
+
+
+--
+-- lldpManAddrConfigTxPortsTable : selection of management addresses
+--                                 to be transmitted on a specified set
+--                                 of ports.
+-- 
+
+lldpConfigManAddrTable OBJECT-TYPE
+    SYNTAX      SEQUENCE OF LldpConfigManAddrEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "The table that controls selection of LLDP management address
+            TLV instances to be transmitted on individual ports."
+    ::= { lldpConfiguration 7 }
+
+lldpConfigManAddrEntry  OBJECT-TYPE
+    SYNTAX      LldpConfigManAddrEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "LLDP configuration information that specifies the set
+            of ports (represented as a PortList) on which the local
+            system management address instance will be transmitted.
+
+            This configuration object augments the lldpLocManAddrEntry,
+            therefore it is only present along with the management
+            address instance contained in the associated
+            lldpLocManAddrEntry entry.
+
+            Each active lldpConfigManAddrEntry must be restored from
+            non-volatile and re-created (along with the corresponding
+            lldpLocManAddrEntry) after a re-initialization of the
+            management system."
+    AUGMENTS { lldpLocManAddrEntry }
+    ::= { lldpConfigManAddrTable 1 }
+
+LldpConfigManAddrEntry  ::= SEQUENCE {
+    lldpConfigManAddrPortsTxEnable LldpPortList
+}
+
+lldpConfigManAddrPortsTxEnable  OBJECT-TYPE
+    SYNTAX        LldpPortList
+    MAX-ACCESS    read-write
+    STATUS        current
+    DESCRIPTION
+            "A set of ports that are identified by a PortList, in which
+            each port is represented as a bit.  The corresponding local
+            system management address instance will be transmitted on the
+            member ports of the lldpManAddrPortsTxEnable.  
+
+            The default value for lldpConfigManAddrPortsTxEnable object
+            is empty binary string, which means no ports are specified
+            for advertising indicated management address instance."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.2.1.1"
+    DEFVAL  { ''H }     -- empty binary string
+    ::= { lldpConfigManAddrEntry 1 }
+
+
+--
+--  *********************************************************** 
+--
+--                   L L D P    S T A T S 
+--
+--  *********************************************************** 
+--
+-- LLDP Stats Group
+
+lldpStatsRemTablesLastChangeTime OBJECT-TYPE
+    SYNTAX      TimeStamp
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The value of sysUpTime object (defined in IETF RFC 3418)
+            at the time an entry is created, modified, or deleted in the
+            in tables associated with the lldpRemoteSystemsData objects
+            and all LLDP extension objects associated with remote systems.
+
+            An NMS can use this object to reduce polling of the
+            lldpRemoteSystemsData objects."
+    ::= { lldpStatistics 1 }
+
+lldpStatsRemTablesInserts OBJECT-TYPE
+    SYNTAX      ZeroBasedCounter32
+    UNITS       "table entries"
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The number of times the complete set of information
+            advertised by a particular MSAP has been inserted into tables
+            contained in lldpRemoteSystemsData and lldpExtensions objects.
+
+            The complete set of information received from a particular
+            MSAP should be inserted into related tables.  If partial
+            information cannot be inserted for a reason such as lack
+            of resources, all of the complete set of information should
+            be removed.
+
+            This counter should be incremented only once after the
+            complete set of information is successfully recorded
+            in all related tables.  Any failures during inserting
+            information set which result in deletion of previously
+            inserted information should not trigger any changes in
+            lldpStatsRemTablesInserts since the insert is not completed
+            yet or or in lldpStatsRemTablesDeletes, since the deletion
+            would only be a partial deletion. If the failure was the
+            result of lack of resources, the lldpStatsRemTablesDrops
+            counter should be incremented once."
+    ::= { lldpStatistics 2 }
+
+lldpStatsRemTablesDeletes   OBJECT-TYPE
+    SYNTAX      ZeroBasedCounter32
+    UNITS       "table entries"
+    MAX-ACCESS  read-only
+    STATUS      current
+
+    DESCRIPTION
+            "The number of times the complete set of information
+            advertised by a particular MSAP has been deleted from
+            tables contained in lldpRemoteSystemsData and lldpExtensions
+            objects.
+
+            This counter should be incremented only once when the
+            complete set of information is completely deleted from all
+            related tables.  Partial deletions, such as deletion of
+            rows associated with a particular MSAP from some tables,
+            but not from all tables are not allowed, thus should not
+            change the value of this counter."
+    ::= { lldpStatistics 3 }
+
+lldpStatsRemTablesDrops  OBJECT-TYPE
+    SYNTAX      ZeroBasedCounter32
+    UNITS       "table entries"
+    MAX-ACCESS  read-only
+
+    STATUS      current
+    DESCRIPTION
+            "The number of times the complete set of information
+            advertised by a particular MSAP could not be entered into
+            tables contained in lldpRemoteSystemsData and lldpExtensions
+            objects because of insufficient resources."
+    ::= { lldpStatistics 4 }
+
+lldpStatsRemTablesAgeouts   OBJECT-TYPE
+    SYNTAX      ZeroBasedCounter32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The number of times the complete set of information
+            advertised by a particular MSAP has been deleted from tables
+            contained in lldpRemoteSystemsData and lldpExtensions objects
+            because the information timeliness interval has expired.
+
+            This counter should be incremented only once when the complete
+            set of information is completely invalidated (aged out)
+            from all related tables.  Partial aging, similar to deletion
+            case, is not allowed, and thus, should not change the value
+            of this counter."
+    ::= { lldpStatistics 5 }
+
+--
+-- TX statistics
+--
+
+lldpStatsTxPortTable  OBJECT-TYPE
+    SYNTAX      SEQUENCE OF LldpStatsTxPortEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION 
+            "A table containing LLDP transmission statistics for
+            individual ports.  Entries are not required to exist in
+            this table while the lldpPortConfigEntry object is equal to
+            'disabled(4)'."
+    ::= { lldpStatistics 6 } 
+
+lldpStatsTxPortEntry   OBJECT-TYPE
+     SYNTAX      LldpStatsTxPortEntry
+     MAX-ACCESS  not-accessible
+     STATUS      current
+     DESCRIPTION
+             "LLDP frame transmission statistics for a particular port.  
+             The port must be contained in the same chassis as the
+             LLDP agent.
+            
+             All counter values in a particular entry shall be
+             maintained on a continuing basis and shall not be deleted
+             upon expiration of rxInfoTTL timing counters in the LLDP
+             remote systems MIB of the receipt of a shutdown frame from
+             a remote LLDP agent.
+
+             All statistical counters associated with a particular
+             port on the local LLDP agent become frozen whenever the
+             adminStatus is disabled for the same port."
+     INDEX  { lldpStatsTxPortNum }
+     ::= { lldpStatsTxPortTable 1 } 
+
+LldpStatsTxPortEntry ::= SEQUENCE {      
+      lldpStatsTxPortNum                 LldpPortNumber,
+      lldpStatsTxPortFramesTotal         Counter32
+}
+
+lldpStatsTxPortNum   OBJECT-TYPE
+    SYNTAX      LldpPortNumber 
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "The index value used to identify the port component
+            (contained in the local chassis with the LLDP agent)
+            associated with this entry.
+
+            The value of this object is used as a port index to the
+            lldpStatsTable."
+    ::= { lldpStatsTxPortEntry 1 } 
+
+lldpStatsTxPortFramesTotal  OBJECT-TYPE
+    SYNTAX        Counter32
+    MAX-ACCESS    read-only
+    STATUS        current
+    DESCRIPTION
+            "The number of LLDP frames transmitted by this LLDP agent
+            on the indicated port."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.5.2.1"
+    ::= { lldpStatsTxPortEntry 2 }
+
+--
+-- RX statistics
+--
+
+lldpStatsRxPortTable  OBJECT-TYPE
+    SYNTAX      SEQUENCE OF LldpRxStatsPortEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION 
+            "A table containing LLDP reception statistics for individual
+            ports.  Entries are not required to exist in this table while
+            the lldpPortConfigEntry object is equal to 'disabled(4)'."
+    ::= { lldpStatistics 7 } 
+
+lldpStatsRxPortEntry   OBJECT-TYPE
+     SYNTAX      LldpRxStatsPortEntry
+     MAX-ACCESS  not-accessible
+     STATUS      current
+     DESCRIPTION
+             "LLDP frame reception statistics for a particular port.
+             The port must be contained in the same chassis as the
+             LLDP agent.
+            
+             All counter values in a particular entry shall be
+             maintained on a continuing basis and shall not be deleted
+             upon expiration of rxInfoTTL timing counters in the LLDP
+             remote systems MIB of the receipt of a shutdown frame from
+             a remote LLDP agent.
+
+             All statistical counters associated with a particular
+             port on the local LLDP agent become frozen whenever the
+             adminStatus is disabled for the same port."
+     INDEX  { lldpStatsRxPortNum }
+     ::= { lldpStatsRxPortTable 1 } 
+
+LldpRxStatsPortEntry ::= SEQUENCE {      
+      lldpStatsRxPortNum                   LldpPortNumber,
+      lldpStatsRxPortFramesDiscardedTotal  Counter32,
+      lldpStatsRxPortFramesErrors          Counter32,
+      lldpStatsRxPortFramesTotal           Counter32,
+      lldpStatsRxPortTLVsDiscardedTotal    Counter32,
+      lldpStatsRxPortTLVsUnrecognizedTotal Counter32,
+      lldpStatsRxPortAgeoutsTotal          ZeroBasedCounter32
+}
+
+lldpStatsRxPortNum   OBJECT-TYPE
+    SYNTAX      LldpPortNumber 
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "The index value used to identify the port component
+            (contained in the local chassis with the LLDP agent)
+            associated with this entry.
+
+            The value of this object is used as a port index to the
+            lldpStatsTable."
+    ::= { lldpStatsRxPortEntry 1 } 
+
+lldpStatsRxPortFramesDiscardedTotal OBJECT-TYPE 
+    SYNTAX        Counter32
+    MAX-ACCESS read-only
+    STATUS     current 
+    DESCRIPTION 
+            "The number of LLDP frames received by this LLDP agent on
+            the indicated port, and then discarded for any reason.
+            This counter can provide an indication that LLDP header
+            formating problems may exist with the local LLDP agent in
+            the sending system or that LLDPDU validation problems may
+            exist with the local LLDP agent in the receiving system."
+   REFERENCE 
+            "IEEE 802.1AB-2005 10.5.2.2"
+   ::= { lldpStatsRxPortEntry 2 } 
+
+lldpStatsRxPortFramesErrors  OBJECT-TYPE
+    SYNTAX        Counter32
+    MAX-ACCESS    read-only
+    STATUS        current
+    DESCRIPTION
+            "The number of invalid LLDP frames received by this LLDP
+            agent on the indicated port, while this LLDP agent is enabled."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.5.2.2"
+    ::= { lldpStatsRxPortEntry 3 }
+
+lldpStatsRxPortFramesTotal OBJECT-TYPE
+    SYNTAX        Counter32
+    MAX-ACCESS    read-only
+    STATUS        current
+    DESCRIPTION
+            "The number of valid LLDP frames received by this LLDP agent
+            on the indicated port, while this LLDP agent is enabled."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.5.2.2"
+    ::= { lldpStatsRxPortEntry 4 }
+
+lldpStatsRxPortTLVsDiscardedTotal OBJECT-TYPE
+    SYNTAX        Counter32
+    MAX-ACCESS    read-only
+    STATUS        current
+    DESCRIPTION
+            "The number of LLDP TLVs discarded for any reason by this LLDP
+            agent on the indicated port."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.5.2.2"
+    ::= { lldpStatsRxPortEntry 5 }
+
+lldpStatsRxPortTLVsUnrecognizedTotal  OBJECT-TYPE
+    SYNTAX        Counter32
+    MAX-ACCESS    read-only
+    STATUS        current
+    DESCRIPTION
+            "The number of LLDP TLVs received on the given port that
+            are not recognized by this LLDP agent on the indicated port.
+            
+            An unrecognized TLV is referred to as the TLV whose type value
+            is in the range of reserved TLV types (000 1001 - 111 1110)
+            in Table 9.1 of IEEE Std 802.1AB-2005.  An unrecognized
+            TLV may be a basic management TLV from a later LLDP version."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.5.2.2"
+    ::= { lldpStatsRxPortEntry 6 }
+
+lldpStatsRxPortAgeoutsTotal   OBJECT-TYPE
+    SYNTAX      ZeroBasedCounter32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The counter that represents the number of age-outs that
+            occurred on a given port.  An age-out is the number of
+            times the complete set of information advertised by a
+            particular MSAP has been deleted from tables contained in
+            lldpRemoteSystemsData and lldpExtensions objects because
+            the information timeliness interval has expired.
+
+            This counter is similar to lldpStatsRemTablesAgeouts, except
+            that the counter is on a per port basis.  This enables NMS to
+            poll tables associated with the lldpRemoteSystemsData objects
+            and all LLDP extension objects associated with remote systems
+            on the indicated port only.
+
+            This counter should be set to zero during agent initialization
+            and its value should not be saved in non-volatile storage.
+            When a port's admin status changes from 'disabled' to
+            'rxOnly', 'txOnly' or 'txAndRx', the counter associated with
+            the same port should reset to 0.  The agent should also flush
+            all remote system information associated with the same port.
+
+            This counter should be incremented only once when the
+            complete set of information is invalidated (aged out) from
+            all related tables on a particular port.  Partial aging
+            is not allowed, and thus, should not change the value of
+            this counter."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.5.2.2"
+    ::= { lldpStatsRxPortEntry 7 }
+
+--  ***********************************************************
+--
+--          L O C A L    S Y S T E M    D A T A
+--
+--  ***********************************************************
+
+lldpLocChassisIdSubtype  OBJECT-TYPE
+    SYNTAX      LldpChassisIdSubtype
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The type of encoding used to identify the chassis
+            associated with the local system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.2.2"
+    ::= { lldpLocalSystemData 1 }
+
+lldpLocChassisId  OBJECT-TYPE
+    SYNTAX      LldpChassisId
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The string value used to identify the chassis component
+            associated with the local system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.2.3"
+    ::= { lldpLocalSystemData 2 }
+
+lldpLocSysName  OBJECT-TYPE
+    SYNTAX      SnmpAdminString (SIZE(0..255))
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The string value used to identify the system name of the
+            local system.  If the local agent supports IETF RFC 3418,
+            lldpLocSysName object should have the same value of sysName
+            object."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.6.2"
+    ::= { lldpLocalSystemData 3 }
+
+lldpLocSysDesc  OBJECT-TYPE
+    SYNTAX      SnmpAdminString (SIZE(0..255))
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The string value used to identify the system description
+            of the local system.  If the local agent supports IETF RFC 3418,
+            lldpLocSysDesc object should have the same value of sysDesc
+            object."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.7.2"
+    ::= { lldpLocalSystemData 4 }
+
+lldpLocSysCapSupported OBJECT-TYPE
+    SYNTAX      LldpSystemCapabilitiesMap
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The bitmap value used to identify which system capabilities
+            are supported on the local system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.8.1"
+    ::= { lldpLocalSystemData 5 }
+
+lldpLocSysCapEnabled  OBJECT-TYPE
+    SYNTAX      LldpSystemCapabilitiesMap
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The bitmap value used to identify which system capabilities
+            are enabled on the local system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.8.2"
+    ::= { lldpLocalSystemData 6 }
+
+
+--
+-- lldpLocPortTable : Port specific Local system data
+--
+
+lldpLocPortTable OBJECT-TYPE
+    SYNTAX      SEQUENCE OF LldpLocPortEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "This table contains one or more rows per port information
+            associated with the local system known to this agent."
+    ::= { lldpLocalSystemData 7 }
+
+lldpLocPortEntry OBJECT-TYPE
+    SYNTAX      LldpLocPortEntry 
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "Information about a particular port component.
+
+            Entries may be created and deleted in this table by the
+            agent."
+    INDEX   { lldpLocPortNum }
+    ::= { lldpLocPortTable 1 }
+
+LldpLocPortEntry ::= SEQUENCE {
+      lldpLocPortNum                LldpPortNumber,
+      lldpLocPortIdSubtype          LldpPortIdSubtype,
+      lldpLocPortId                 LldpPortId,
+      lldpLocPortDesc               SnmpAdminString
+}
+
+lldpLocPortNum  OBJECT-TYPE
+    SYNTAX      LldpPortNumber
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "The index value used to identify the port component
+            (contained in the local chassis with the LLDP agent)
+            associated with this entry.
+            
+            The value of this object is used as a port index to the
+            lldpLocPortTable."
+    ::= { lldpLocPortEntry 1 }
+
+lldpLocPortIdSubtype  OBJECT-TYPE
+    SYNTAX      LldpPortIdSubtype
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The type of port identifier encoding used in the associated
+            'lldpLocPortId' object."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.3.2"
+    ::= { lldpLocPortEntry 2 }
+
+lldpLocPortId  OBJECT-TYPE
+    SYNTAX      LldpPortId
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The string value used to identify the port component
+            associated with a given port in the local system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.3.3"
+    ::= { lldpLocPortEntry 3 }
+
+lldpLocPortDesc  OBJECT-TYPE
+    SYNTAX      SnmpAdminString (SIZE(0..255))
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The string value used to identify the 802 LAN station's port
+            description associated with the local system.  If the local
+            agent supports IETF RFC 2863, lldpLocPortDesc object should
+            have the same value of ifDescr object."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.5.2"
+    ::= { lldpLocPortEntry 4 }
+
+--
+-- lldpLocManAddrTable : Management addresses of the local system
+--
+
+lldpLocManAddrTable OBJECT-TYPE
+    SYNTAX      SEQUENCE OF LldpLocManAddrEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "This table contains management address information on the
+            local system known to this agent."
+    ::= { lldpLocalSystemData 8 }
+
+lldpLocManAddrEntry OBJECT-TYPE
+    SYNTAX      LldpLocManAddrEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "Management address information about a particular chassis
+            component.  There may be multiple management addresses
+            configured on the system identified by a particular
+            lldpLocChassisId.  Each management address should have
+            distinct 'management address type' (lldpLocManAddrSubtype) and
+            'management address' (lldpLocManAddr.)
+
+            Entries may be created and deleted in this table by the
+            agent."
+    INDEX   { lldpLocManAddrSubtype,
+              lldpLocManAddr }
+    ::= { lldpLocManAddrTable 1 }
+
+LldpLocManAddrEntry ::= SEQUENCE {
+      lldpLocManAddrSubtype    AddressFamilyNumbers,
+      lldpLocManAddr           LldpManAddress,
+      lldpLocManAddrLen        Integer32,
+      lldpLocManAddrIfSubtype  LldpManAddrIfSubtype,
+      lldpLocManAddrIfId       Integer32,
+      lldpLocManAddrOID        OBJECT IDENTIFIER
+}
+
+lldpLocManAddrSubtype  OBJECT-TYPE
+    SYNTAX      AddressFamilyNumbers
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "The type of management address identifier encoding used in
+            the associated 'lldpLocManagmentAddr' object."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.9.3"
+    ::= { lldpLocManAddrEntry 1 }
+
+lldpLocManAddr  OBJECT-TYPE
+    SYNTAX      LldpManAddress
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "The string value used to identify the management address
+            component associated with the local system.  The purpose of
+            this address is to contact the management entity."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.9.4"
+    ::= { lldpLocManAddrEntry 2 }
+
+lldpLocManAddrLen  OBJECT-TYPE
+    SYNTAX      Integer32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The total length of the management address subtype and the
+            management address fields in LLDPDUs transmitted by the
+            local LLDP agent.
+
+            The management address length field is needed so that the
+            receiving systems that do not implement SNMP will not be
+            required to implement an iana family numbers/address length
+            equivalency table in order to decode the management adress."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.9.2"
+    ::= { lldpLocManAddrEntry 3 }
+
+
+lldpLocManAddrIfSubtype  OBJECT-TYPE
+    SYNTAX      LldpManAddrIfSubtype
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The enumeration value that identifies the interface numbering
+            method used for defining the interface number, associated
+            with the local system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.9.5"
+    ::= { lldpLocManAddrEntry 4 }
+
+lldpLocManAddrIfId  OBJECT-TYPE
+    SYNTAX      Integer32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The integer value used to identify the interface number
+            regarding the management address component associated with
+            the local system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.9.6"
+    ::= { lldpLocManAddrEntry 5 }
+
+lldpLocManAddrOID  OBJECT-TYPE
+    SYNTAX      OBJECT IDENTIFIER
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The OID value used to identify the type of hardware component
+            or protocol entity associated with the management address
+            advertised by the local system agent."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.9.8"
+    ::= { lldpLocManAddrEntry 6 }
+
+
+--  ***********************************************************
+--
+--          R E M O T E    S Y S T E M S    D A T A
+--
+--  ***********************************************************
+
+lldpRemTable OBJECT-TYPE
+    SYNTAX      SEQUENCE OF LldpRemEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "This table contains one or more rows per physical network
+            connection known to this agent.  The agent may wish to ensure
+            that only one lldpRemEntry is present for each local port,
+            or it may choose to maintain multiple lldpRemEntries for
+            the same local port.
+
+            The following procedure may be used to retrieve remote
+            systems information updates from an LLDP agent:
+
+               1. NMS polls all tables associated with remote systems
+                  and keeps a local copy of the information retrieved.
+                  NMS polls periodically the values of the following
+                  objects:
+                     a. lldpStatsRemTablesInserts
+                     b. lldpStatsRemTablesDeletes
+                     c. lldpStatsRemTablesDrops
+                     d. lldpStatsRemTablesAgeouts
+                     e. lldpStatsRxPortAgeoutsTotal for all ports.
+
+               2. LLDP agent updates remote systems MIB objects, and
+                  sends out notifications to a list of notification
+                  destinations.
+
+               3. NMS receives the notifications and compares the new
+                  values of objects listed in step 1.  
+
+                  Periodically, NMS should poll the object
+                  lldpStatsRemTablesLastChangeTime to find out if anything
+                  has changed since the last poll.  if something has
+                  changed, NMS will poll the objects listed in step 1 to
+                  figure out what kind of changes occurred in the tables.
+
+                  if value of lldpStatsRemTablesInserts has changed,
+                  then NMS will walk all tables by employing TimeFilter
+                  with the last-polled time value.  This request will
+                  return new objects or objects whose values are updated
+                  since the last poll.
+
+                  if value of lldpStatsRemTablesAgeouts has changed,
+                  then NMS will walk the lldpStatsRxPortAgeoutsTotal and
+                  compare the new values with previously recorded ones.
+                  For ports whose lldpStatsRxPortAgeoutsTotal value is
+                  greater than the recorded value, NMS will have to
+                  retrieve objects associated with those ports from
+                  table(s) without employing a TimeFilter (which is
+                  performed by specifying 0 for the TimeFilter.)
+
+                  lldpStatsRemTablesDeletes and lldpStatsRemTablesDrops
+                  objects are provided for informational purposes."
+    ::= { lldpRemoteSystemsData 1 }
+
+lldpRemEntry OBJECT-TYPE
+    SYNTAX      LldpRemEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "Information about a particular physical network connection.
+            Entries may be created and deleted in this table by the agent,
+            if a physical topology discovery process is active."
+    INDEX   {
+           lldpRemTimeMark,
+           lldpRemLocalPortNum,
+           lldpRemIndex
+    }
+    ::= { lldpRemTable 1 }
+
+LldpRemEntry ::= SEQUENCE {
+      lldpRemTimeMark           TimeFilter,
+      lldpRemLocalPortNum       LldpPortNumber,
+      lldpRemIndex              Integer32,
+      lldpRemChassisIdSubtype   LldpChassisIdSubtype,
+      lldpRemChassisId          LldpChassisId,
+      lldpRemPortIdSubtype      LldpPortIdSubtype,
+      lldpRemPortId             LldpPortId,
+      lldpRemPortDesc           SnmpAdminString,
+      lldpRemSysName            SnmpAdminString,
+      lldpRemSysDesc            SnmpAdminString,
+      lldpRemSysCapSupported    LldpSystemCapabilitiesMap,
+      lldpRemSysCapEnabled      LldpSystemCapabilitiesMap
+}
+
+lldpRemTimeMark  OBJECT-TYPE
+    SYNTAX      TimeFilter
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "A TimeFilter for this entry.  See the TimeFilter textual
+            convention in IETF RFC 2021 and 
+            http://www.ietf.org/IESG/Implementations/RFC2021-Implementation.txt
+            to see how TimeFilter works."
+    REFERENCE 
+            "IETF RFC 2021 section 6"
+    ::= { lldpRemEntry 1 }
+
+lldpRemLocalPortNum  OBJECT-TYPE
+    SYNTAX      LldpPortNumber
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "The index value used to identify the port component
+            (contained in the local chassis with the LLDP agent)
+            associated with this entry.  The lldpRemLocalPortNum
+            identifies the port on which the remote system information
+            is received.
+
+            The value of this object is used as a port index to the
+            lldpRemTable."
+    ::= { lldpRemEntry 2 }
+
+lldpRemIndex  OBJECT-TYPE
+    SYNTAX      Integer32(1..2147483647)
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "This object represents an arbitrary local integer value used
+            by this agent to identify a particular connection instance,
+            unique only for the indicated remote system.
+
+            An agent is encouraged to assign monotonically increasing
+            index values to new entries, starting with one, after each
+            reboot.  It is considered unlikely that the lldpRemIndex
+            will wrap between reboots."
+    ::= { lldpRemEntry 3 }
+
+lldpRemChassisIdSubtype  OBJECT-TYPE
+    SYNTAX      LldpChassisIdSubtype
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The type of encoding used to identify the chassis associated
+            with the remote system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.2.2"
+    ::= { lldpRemEntry 4 }
+
+lldpRemChassisId  OBJECT-TYPE
+    SYNTAX      LldpChassisId
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The string value used to identify the chassis component
+            associated with the remote system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.2.3"
+    ::= { lldpRemEntry 5 }
+
+lldpRemPortIdSubtype  OBJECT-TYPE
+    SYNTAX      LldpPortIdSubtype
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The type of port identifier encoding used in the associated
+            'lldpRemPortId' object."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.3.2"
+    ::= { lldpRemEntry 6 }
+
+lldpRemPortId  OBJECT-TYPE
+    SYNTAX      LldpPortId
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The string value used to identify the port component
+            associated with the remote system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.3.3"
+    ::= { lldpRemEntry 7 }
+
+lldpRemPortDesc  OBJECT-TYPE
+    SYNTAX      SnmpAdminString (SIZE(0..255))
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The string value used to identify the description of
+            the given port associated with the remote system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.5.2"
+    ::= { lldpRemEntry 8 }
+
+lldpRemSysName  OBJECT-TYPE
+    SYNTAX      SnmpAdminString (SIZE(0..255))
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The string value used to identify the system name of the
+            remote system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.6.2"
+    ::= { lldpRemEntry 9 }
+
+lldpRemSysDesc  OBJECT-TYPE
+    SYNTAX      SnmpAdminString (SIZE(0..255))
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The string value used to identify the system description
+            of the remote system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.7.2"
+    ::= { lldpRemEntry 10 }
+
+lldpRemSysCapSupported OBJECT-TYPE
+    SYNTAX      LldpSystemCapabilitiesMap
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The bitmap value used to identify which system capabilities
+            are supported on the remote system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.8.1"
+    ::= { lldpRemEntry 11 }
+
+lldpRemSysCapEnabled  OBJECT-TYPE
+    SYNTAX      LldpSystemCapabilitiesMap
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The bitmap value used to identify which system capabilities
+            are enabled on the remote system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.8.2"
+    ::= { lldpRemEntry 12 }
+
+--
+-- lldpRemManAddrTable : Management addresses of the remote system
+--
+
+lldpRemManAddrTable OBJECT-TYPE
+    SYNTAX      SEQUENCE OF LldpRemManAddrEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "This table contains one or more rows per management address
+            information on the remote system learned on a particular port
+            contained in the local chassis known to this agent."
+    ::= { lldpRemoteSystemsData 2 }
+
+lldpRemManAddrEntry OBJECT-TYPE
+    SYNTAX      LldpRemManAddrEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "Management address information about a particular chassis
+            component.  There may be multiple management addresses
+            configured on the remote system identified by a particular
+            lldpRemIndex whose information is received on
+            lldpRemLocalPortNum of the local system.  Each management
+            address should have distinct 'management address
+            type' (lldpRemManAddrSubtype) and 'management address'
+            (lldpRemManAddr.)
+
+            Entries may be created and deleted in this table by the
+            agent."
+    INDEX   { lldpRemTimeMark,
+              lldpRemLocalPortNum,
+              lldpRemIndex,
+              lldpRemManAddrSubtype,
+              lldpRemManAddr
+ }
+    ::= { lldpRemManAddrTable 1 }
+
+LldpRemManAddrEntry ::= SEQUENCE {
+      lldpRemManAddrSubtype     AddressFamilyNumbers,
+      lldpRemManAddr            LldpManAddress,
+      lldpRemManAddrIfSubtype   LldpManAddrIfSubtype,
+      lldpRemManAddrIfId        Integer32,
+      lldpRemManAddrOID         OBJECT IDENTIFIER
+}
+
+lldpRemManAddrSubtype  OBJECT-TYPE
+    SYNTAX      AddressFamilyNumbers
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "The type of management address identifier encoding used in
+            the associated 'lldpRemManagmentAddr' object."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.9.3"
+    ::= { lldpRemManAddrEntry 1 }
+
+lldpRemManAddr  OBJECT-TYPE
+    SYNTAX      LldpManAddress
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "The string value used to identify the management address
+            component associated with the remote system.  The purpose
+            of this address is to contact the management entity."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.9.4"
+    ::= { lldpRemManAddrEntry 2 }
+
+lldpRemManAddrIfSubtype  OBJECT-TYPE
+    SYNTAX      LldpManAddrIfSubtype
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The enumeration value that identifies the interface numbering
+            method used for defining the interface number, associated
+            with the remote system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.9.5"
+    ::= { lldpRemManAddrEntry 3 }
+
+lldpRemManAddrIfId  OBJECT-TYPE
+    SYNTAX      Integer32
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The integer value used to identify the interface number
+            regarding the management address component associated with
+            the remote system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.9.6"
+    ::= { lldpRemManAddrEntry 4 }
+
+lldpRemManAddrOID  OBJECT-TYPE
+    SYNTAX      OBJECT IDENTIFIER
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The OID value used to identify the type of hardware component
+            or protocol entity associated with the management address
+            advertised by the remote system agent."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.9.8"
+    ::= { lldpRemManAddrEntry 5 }
+
+--
+-- lldpRemUnknownTLVTable : Unrecognized TLV information 
+--
+lldpRemUnknownTLVTable  OBJECT-TYPE
+    SYNTAX      SEQUENCE OF LldpRemUnknownTLVEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "This table contains information about an incoming TLV which
+            is not recognized by the receiving LLDP agent.  The TLV may
+            be from a later version of the basic management set.
+
+            This table should only contain TLVs that are found in
+            a single LLDP frame.  Entries in this table, associated
+            with an MAC service access point (MSAP, the access point
+            for MAC services provided to the LCC sublayer, defined
+            in IEEE 100, which is also identified with a particular
+            lldpRemLocalPortNum, lldpRemIndex pair) are overwritten with
+            most recently received unrecognized TLV from the same MSAP,
+            or they will naturally age out when the rxInfoTTL timer
+            (associated with the MSAP) expires."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.3.2"
+    ::= { lldpRemoteSystemsData 3 }
+
+lldpRemUnknownTLVEntry OBJECT-TYPE
+    SYNTAX      LldpRemUnknownTLVEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "Information about an unrecognized TLV received from a
+            physical network connection.  Entries may be created and
+            deleted in this table by the agent, if a physical topology
+            discovery process is active."
+    INDEX   {
+           lldpRemTimeMark,
+           lldpRemLocalPortNum,
+           lldpRemIndex,
+           lldpRemUnknownTLVType 
+    }
+    ::= { lldpRemUnknownTLVTable 1 }
+
+LldpRemUnknownTLVEntry ::= SEQUENCE {
+      lldpRemUnknownTLVType     Integer32,
+      lldpRemUnknownTLVInfo     OCTET STRING
+}
+
+lldpRemUnknownTLVType OBJECT-TYPE
+    SYNTAX      Integer32(9..126)
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "This object represents the value extracted from the type
+            field of the TLV."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.3.5"
+    ::= { lldpRemUnknownTLVEntry 1 }
+
+lldpRemUnknownTLVInfo OBJECT-TYPE
+    SYNTAX      OCTET STRING (SIZE(0..511))
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "This object represents the value extracted from the value
+            field of the TLV."
+    REFERENCE 
+            "IEEE 802.1AB-2005 10.3.5"
+    ::= { lldpRemUnknownTLVEntry 2 }
+
+------------------------------------------------------------------------------
+-- Remote Systems Extension Table - Organizationally-Defined Information 
+------------------------------------------------------------------------------
+lldpRemOrgDefInfoTable OBJECT-TYPE
+    SYNTAX      SEQUENCE OF LldpRemOrgDefInfoEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "This table contains one or more rows per physical network
+            connection which advertises the organizationally defined
+            information.
+
+            Note that this table contains one or more rows of
+            organizationally defined information that is not recognized
+            by the local agent.
+
+            If the local system is capable of recognizing any
+            organizationally defined information, appropriate extension
+            MIBs from the organization should be used for information
+            retrieval."
+    ::= { lldpRemoteSystemsData 4 }
+
+lldpRemOrgDefInfoEntry OBJECT-TYPE
+    SYNTAX      LldpRemOrgDefInfoEntry
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "Information about the unrecognized organizationally
+            defined information advertised by the remote system.
+            The lldpRemTimeMark, lldpRemLocalPortNum, lldpRemIndex,
+            lldpRemOrgDefInfoOUI, lldpRemOrgDefInfoSubtype, and
+            lldpRemOrgDefInfoIndex are indexes to this table.  If there is
+            an lldpRemOrgDefInfoEntry associated with a particular remote
+            system identified by the lldpRemLocalPortNum and lldpRemIndex,
+            there must be an lldpRemEntry associated with the same
+            instance (i.e, using same indexes.)  When the lldpRemEntry
+            for the same index is removed from the lldpRemTable, the
+            associated lldpRemOrgDefInfoEntry should be removed from
+            the lldpRemOrgDefInfoTable.
+
+            Entries may be created and deleted in this table by the
+            agent."
+    INDEX   { lldpRemTimeMark,
+              lldpRemLocalPortNum,
+              lldpRemIndex,
+              lldpRemOrgDefInfoOUI,
+              lldpRemOrgDefInfoSubtype,
+              lldpRemOrgDefInfoIndex }
+    ::= { lldpRemOrgDefInfoTable 1 }
+
+LldpRemOrgDefInfoEntry ::= SEQUENCE {
+      lldpRemOrgDefInfoOUI         OCTET STRING,
+      lldpRemOrgDefInfoSubtype     Integer32,
+      lldpRemOrgDefInfoIndex       Integer32,
+      lldpRemOrgDefInfo            OCTET STRING
+}
+
+lldpRemOrgDefInfoOUI  OBJECT-TYPE
+    SYNTAX      OCTET STRING (SIZE(3))  
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "The Organizationally Unique Identifier (OUI), as defined
+            in IEEE std 802-2001, is a 24 bit (three octets) globally
+            unique assigned number referenced by various standards,
+            of the information received from the remote system."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.1.3"
+    ::= { lldpRemOrgDefInfoEntry 1 }
+
+lldpRemOrgDefInfoSubtype  OBJECT-TYPE
+    SYNTAX      Integer32(1..255)
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "The integer value used to identify the subtype of the
+            organizationally defined information received from the
+            remote system.
+
+            The subtype value is required to identify different instances
+            of organizationally defined information that could not be
+            retrieved without a unique identifier that indicates the
+            particular type of information contained in the information
+            string."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.1.4"
+    ::= { lldpRemOrgDefInfoEntry 2 }
+
+lldpRemOrgDefInfoIndex  OBJECT-TYPE
+    SYNTAX      Integer32(1..2147483647)
+    MAX-ACCESS  not-accessible
+    STATUS      current
+    DESCRIPTION
+            "This object represents an arbitrary local integer value
+            used by this agent to identify a particular unrecognized
+            organizationally defined information instance, unique only
+            for the lldpRemOrgDefInfoOUI and lldpRemOrgDefInfoSubtype
+            from the same remote system.
+
+            An agent is encouraged to assign monotonically increasing
+            index values to new entries, starting with one, after each
+            reboot.  It is considered unlikely that the
+            lldpRemOrgDefInfoIndex will wrap between reboots."
+    ::= { lldpRemOrgDefInfoEntry 3 }
+
+lldpRemOrgDefInfo  OBJECT-TYPE
+    SYNTAX      OCTET STRING(SIZE(0..507))
+    MAX-ACCESS  read-only
+    STATUS      current
+    DESCRIPTION
+            "The string value used to identify the organizationally
+            defined information of the remote system.  The encoding for
+            this object should be as defined for SnmpAdminString TC."
+    REFERENCE 
+            "IEEE 802.1AB-2005 9.5.1.5"
+    ::= { lldpRemOrgDefInfoEntry 4 }
+
+
+--
+-- ***********************************************************
+-- 
+--        L L D P   M I B   N O T I F I C A T I O N S
+-- 
+-- *********************************************************** 
+--
+
+lldpNotificationPrefix OBJECT IDENTIFIER ::= { lldpNotifications 0 }
+
+lldpRemTablesChange NOTIFICATION-TYPE
+    OBJECTS {
+        lldpStatsRemTablesInserts,
+        lldpStatsRemTablesDeletes,
+        lldpStatsRemTablesDrops,
+        lldpStatsRemTablesAgeouts
+    }
+    STATUS        current
+    DESCRIPTION
+            "A lldpRemTablesChange notification is sent when the value
+            of lldpStatsRemTableLastChangeTime changes.  It can be
+            utilized by an NMS to trigger LLDP remote systems table
+            maintenance polls.
+
+            Note that transmission of lldpRemTablesChange
+            notifications are throttled by the agent, as specified by the
+            'lldpNotificationInterval' object."
+   ::= { lldpNotificationPrefix 1 }
+
+
+--
+-- ***********************************************************
+-- 
+--           L L D P   M I B   C O N F O R M A N C E 
+-- 
+-- *********************************************************** 
+--
+
+lldpCompliances OBJECT IDENTIFIER ::= { lldpConformance 1 }
+lldpGroups      OBJECT IDENTIFIER ::= { lldpConformance 2 }
+
+-- compliance statements
+
+lldpCompliance MODULE-COMPLIANCE
+    STATUS  current
+    DESCRIPTION
+            "The compliance statement for SNMP entities which implement
+            the LLDP MIB."
+    MODULE  -- this module
+        MANDATORY-GROUPS { lldpConfigGroup, 
+                           lldpConfigRxGroup, 
+                           lldpConfigTxGroup, 
+                           lldpStatsRxGroup, 
+                           lldpStatsTxGroup, 
+                           lldpLocSysGroup,
+                           lldpRemSysGroup,
+                           lldpNotificationsGroup
+        }
+    ::= { lldpCompliances 1 }
+
+-- MIB groupings
+
+lldpConfigGroup    OBJECT-GROUP
+    OBJECTS {
+        lldpPortConfigAdminStatus
+    }
+    STATUS  current
+    DESCRIPTION
+            "The collection of objects which are used to configure the
+            LLDP implementation behavior.
+
+            This group is mandatory for agents which implement the LLDP."
+    ::= { lldpGroups 1 }
+
+lldpConfigRxGroup    OBJECT-GROUP
+    OBJECTS {
+        lldpNotificationInterval,
+        lldpPortConfigNotificationEnable
+    }
+    STATUS  current
+    DESCRIPTION
+            "The collection of objects which are used to configure the
+            LLDP implementation behavior.
+
+            This group is mandatory for agents which implement the LLDP
+            and have the capability of receiving LLDP frames."
+    ::= { lldpGroups 2 }
+
+lldpConfigTxGroup    OBJECT-GROUP
+    OBJECTS {
+        lldpMessageTxInterval,
+        lldpMessageTxHoldMultiplier,
+        lldpReinitDelay,
+        lldpTxDelay,
+        lldpPortConfigTLVsTxEnable,
+        lldpConfigManAddrPortsTxEnable
+    }
+    STATUS  current
+    DESCRIPTION
+            "The collection of objects which are used to configure the
+            LLDP implementation behavior.
+
+            This group is mandatory for agents which implement the LLDP
+            and have the capability of transmitting LLDP frames."
+    ::= { lldpGroups 3 }
+
+lldpStatsRxGroup    OBJECT-GROUP
+    OBJECTS {
+        lldpStatsRemTablesLastChangeTime,
+        lldpStatsRemTablesInserts,
+        lldpStatsRemTablesDeletes,
+        lldpStatsRemTablesDrops,
+        lldpStatsRemTablesAgeouts,
+        lldpStatsRxPortFramesDiscardedTotal,
+        lldpStatsRxPortFramesErrors,
+        lldpStatsRxPortFramesTotal,
+        lldpStatsRxPortTLVsDiscardedTotal,
+        lldpStatsRxPortTLVsUnrecognizedTotal,
+        lldpStatsRxPortAgeoutsTotal
+    }
+    STATUS  current
+    DESCRIPTION
+            "The collection of objects which are used to represent LLDP
+            reception statistics.
+
+            This group is mandatory for agents which implement the LLDP
+            and have the capability of receiving LLDP frames."
+    ::= { lldpGroups 4 }
+
+lldpStatsTxGroup    OBJECT-GROUP
+    OBJECTS {
+        lldpStatsTxPortFramesTotal
+    }
+    STATUS  current
+    DESCRIPTION
+            "The collection of objects which are used to represent LLDP
+            transmission statistics.
+
+            This group is mandatory for agents which implement the LLDP
+            and have the capability of transmitting LLDP frames."
+    ::= { lldpGroups 5 }
+
+lldpLocSysGroup  OBJECT-GROUP
+    OBJECTS {
+        lldpLocChassisIdSubtype,
+        lldpLocChassisId,
+        lldpLocPortIdSubtype,
+        lldpLocPortId,
+        lldpLocPortDesc,
+        lldpLocSysDesc,
+        lldpLocSysName,
+        lldpLocSysCapSupported,
+        lldpLocSysCapEnabled,
+        lldpLocManAddrLen,
+        lldpLocManAddrIfSubtype,
+        lldpLocManAddrIfId,
+        lldpLocManAddrOID
+    }
+    STATUS  current
+    DESCRIPTION
+            "The collection of objects which are used to represent LLDP
+            Local System Information.  
+            
+            This group is mandatory for agents which implement the LLDP
+            and have the capability of transmitting LLDP frames."
+    ::= { lldpGroups 6 }
+
+lldpRemSysGroup  OBJECT-GROUP
+    OBJECTS {
+        lldpRemChassisIdSubtype,
+        lldpRemChassisId,
+        lldpRemPortIdSubtype,
+        lldpRemPortId,
+        lldpRemPortDesc,
+        lldpRemSysName,
+        lldpRemSysDesc,
+        lldpRemSysCapSupported,
+        lldpRemSysCapEnabled,
+        lldpRemManAddrIfSubtype,
+        lldpRemManAddrIfId,
+        lldpRemManAddrOID,
+        lldpRemUnknownTLVInfo,
+        lldpRemOrgDefInfo 
+    }
+    STATUS  current
+    DESCRIPTION
+            "The collection of objects which are used to represent
+            LLDP Remote Systems Information.  The objects represent the
+            information associated with the basic TLV set.  Please note
+            that even the agent doesn't implement some of the optional
+            TLVs, it shall recognize all the optional TLV information
+            that the remote system may advertise.
+            
+            This group is mandatory for agents which implement the LLDP
+            and have the capability of receiving LLDP frames."
+    ::= { lldpGroups 7 }
+
+lldpNotificationsGroup  NOTIFICATION-GROUP
+    NOTIFICATIONS {
+        lldpRemTablesChange 
+    }
+    STATUS  current
+    DESCRIPTION
+            "The collection of notifications used to indicate LLDP MIB
+            data consistency and general status information.
+
+            This group is mandatory for agents which implement the LLDP
+            and have the capability of receiving LLDP frames."
+    ::= { lldpGroups 8 }
+
+END