-- ======================================================================
--
--  LANplex Systems Management Information Base
--  July 14, 1997
--  3Com Corporation
--  80 Central Street
--  Boxborough, MA 01719
--  
--  Change History:
--      Feb 26,  1998 - Add 1000Mb MacMode Support for CA/GA
--      Jan 15,  1998 - Add MacMode instance to a3ComTrunkIfTable (hmk)
--  	Aug  6,  1997 - change genVirtual to genTrunk 
--      July 14, 1997 - edits from first review. 
--
--		Revision 1.0.0 Initially created by Lucas Lam/John Scano (508)-264-1400
--
-- ======================================================================
--
--	Interpretation of the Interface Table for TRUNKs
-- 
--	OBJECT              VALUE/USE
--
--	ifIndex             Same interpretation as RFC1573.  A unique value,
--					 	greater than zero for each trunk interface.
--
--	ifDescr             Same interpretation as RFC1573.  A textual string
--						containing information anout the interface.  This
--						string should include the name of the manufacturer,
--						the product name, the version of the software, and that
--						the interface is a TRUNK.  Example: "3COM LANPlex 6000,
--						version 8.3, TRUNK"
--
--	ifType              propVirtual(53)
--
--	ifMtu               The largest size of packet which can be sent/received
--						on the interface.  
--
--	ifSpeed				The value of this object is aggregated bandwidth of all
--						Mac(s) attached to this interface.
--
--	ifPhysAddress		The value of this object is always equal to a null octet
--						string.
--
--	ifAdminStatus       Always equal to up(1).  SetRequest-PDUs fail.
--
--	ifOperStatus       	The value of this object is equal to up(1) if the
--						ifOperStatus of at least one MAC in in the set of MAC(s)
--						stacked below the TRUNK layer is up(1).  The value of this 
--						object is down(2) if the ifOperStatus of all MAC(s) stacked
--						below the TRUNK layer is down(2).  The value of this
--						object is down(2) if there are no MAC(s) stacked below the
--						the TRUNK sublayer.
--
--	ifLastChange       	Same interpretation as RFC1573.  The value of sysUpTime
--						at the time the interface entered its current operational
--						state.  If the current state was entered prior to the 
--						last re-initialization of the local network management
--						subsystem, then this object contains a zero value.
--	 
--	ifInOctets			These objects  return NO_SUCH_NAME on reads and writes. 
--	ifInUcastPkts		This approach is more desireable than returning zero
--	ifInNUcastPkts		on reads because NMS's cannot differentiate between
--	ifInDiscards		returning a zero for non-support vs returning a real
--	ifInErrors			zero value for the counter.  Inability to distinguish
--	ifInUnknownProtos	between these two cases would essentially prevent
--	ifOutOctets			future implementation of these objects, therefore NO_SUCH_NAME
--	ifOutUcastPkts		is returned to indicate no-support.  Future implementations
--	ifOutNUcastPkts		may choose to return real values for these counters.
--	ifOutDiscards							"
--	ifOutErrors								"
--	ifLinkUpDownTrapEnable					"
--	ifConnectorPresent						"
--	ifHighSpeed								"
--	ifName									"
--
--	ifOutQLen			Deprecated in RFC1573.  Set to zero if present.
--	ifSpecific			Deprecated in RFC1573.  Set to { 0.0 } if present. 
--
--	linkUp TRAP			Not supported for the TRUNK sublayer
--	linkDown TRAP		Not supported for the TRUNK sublayer
--
-- ======================================================================


	GENERIC-3COM-TRUNK-MIB DEFINITIONS ::= BEGIN

	IMPORTS
		enterprises, IpAddress		FROM RFC1155-SMI
		DisplayString, PhysAddress	FROM RFC1213-MIB
		OBJECT-TYPE					FROM RFC-1212;

	a3Com	OBJECT IDENTIFIER ::= { enterprises 43 }
	generic OBJECT IDENTIFIER ::= { a3Com 10 }
	genExperimental  OBJECT IDENTIFIER ::= { generic 1 }

	genTrunk OBJECT IDENTIFIER ::= { genExperimental 15 }

	--
	-- Structure of MIB
	--
	-- The objects are arranged into the following groups:
	--
	-- 3Com Generic TRUNK MIB Groups 

	a3ComTrunkGroup				OBJECT IDENTIFIER ::= { genTrunk 1 }

	--  RowStatus is defined in SNMPv2-TC
	RowStatus ::= INTEGER {

		-- the following two values are states:
		-- these values may be read or written
		active(1),
		notInService(2),

		-- the following value is a state:
		-- this value may be read, but not written
		notReady(3),

		-- the following three values are
		-- actions: these values may be written,
		--   but are never read
		createAndGo(4),
		createAndWait(5),
		destroy(6)
		}
	
	--
	-- The TRUNK Interface Group
	--	a3ComTrunkIfTable
	--	INDEX { a3ComTrunkIfIndex }
    --      The a3ComTrunkIfTable allows creation/deletion and
    --      naming of a trunking group.  The trunking MAC type
	--		is unknown until the first MAC is added to
	--		a TRUNK.  Addition/deletion of a port to a TRUNK
	--		is done through ifStackTable in which ifStackHigherLayer
	--		is TRUNK interface number and ifStackLowerLayer is the MAC
	--		interface number.  
	--
	-- a3ComTrunkMacTable
	--	INDEX	{ a3ComTrunkMacTrunkIfIndex, a3ComTrunkMacIfIndex }
	--		The a3ComTrunkMacTable provides information about the
	--		status of a MAC in a TRUNK.
	--
	-- a3ComTrunkTcmpPeersTable
	--	INDEX { a3ComTrunkPeerIfTrunkIndex, a3ComTrunkPeerMacIndex,
	--			a3ComTrunkPeersMacAddress }
	--  	The a3ComTrunkTcmpPeersTable provides neighbor
	--		information of a MAC in a TRUNK interface only if
	--		TCMP is enable in the TRUNK.
	--	         	


	-- The 3COM TRUNK Interface Table
	--
	-- This table is implemented by all 3Com network devices that  
	-- support TRUNK interfaces.
	--

    a3ComTrunkIfTable OBJECT-TYPE
		SYNTAX  SEQUENCE OF A3ComTrunkIfEntry
		ACCESS  not-accessible
		STATUS  mandatory
		DESCRIPTION
			"This table lists TRUNK interfaces that exist within
			a device.  A single entry exists in this list for each
			TRUNK interface in the system."
		::= { a3ComTrunkGroup 1 }

	a3ComTrunkIfEntry OBJECT-TYPE
		SYNTAX  A3ComTrunkIfEntry
		ACCESS  not-accessible
		STATUS  mandatory
		DESCRIPTION
			"An individual Trunk interface entry.  When an NMS wishes
			to create a new entry in this table, it must obtain a 
			non-zero index from the a3ComNextAvailableVirtIfIndex
			which is defined in a3ComVirtualGroup.
			Row creation in this table will fail if the
			chosen index value does not match the current value 
			returned from the a3ComNextAvailableVirtIfIndex object."
		INDEX { a3ComTrunkIfIndex }
		::= { a3ComTrunkIfTable 1 }

	A3ComTrunkIfEntry ::=
		SEQUENCE {
			a3ComTrunkIfIndex
				INTEGER,
			a3ComTrunkIfName
				DisplayString,
			a3ComTrunkTcmpEnable 
				INTEGER,
            a3ComTrunkMacMode
                INTEGER,
			a3ComTrunkIfStatus
				RowStatus
		}

    a3ComTrunkIfIndex OBJECT-TYPE
        SYNTAX  INTEGER
        ACCESS 	not-accessible 
        STATUS  mandatory
        DESCRIPTION
            "The index value of this row and the Trunk's ifIndex
			in the ifTable.  The NMS obtains the index value to
			create new row by reading the a3ComNextAvailableVirtIfIndex
			object which is the same as the one defined in
			a3ComVirtualGroup,"
        ::= { a3ComTrunkIfEntry 1 }

	a3ComTrunkIfName OBJECT-TYPE
		SYNTAX	DisplayString (SIZE(0..31))
		ACCESS	read-write
		STATUS	mandatory
		DESCRIPTION
			"This is the name of this TRUNK interface."
		::= { a3ComTrunkIfEntry 2 }

    a3ComTrunkTcmpEnable OBJECT-TYPE
        SYNTAX 	INTEGER {
					notAvailable(1),
					tcmpDisable(2),
					tcmpEnable(3)
				}
        ACCESS  read-write
        STATUS  mandatory
        DESCRIPTION
			"This object specifies if the Trunk Control Message
        	Protocol(TCMP) is currently	enabled for operation
			on a specific trunk. TCMP is used to dynamically control
			the configuration and operation of a trunk port and its
			constituent MACs."
		DEFVAL { tcmpEnable }
        ::= { a3ComTrunkIfEntry 3 }

    a3ComTrunkMacMode OBJECT-TYPE
        SYNTAX 	INTEGER {
                    half10(1),
                    full10(2),
                    half100(3),
                    full100(4),
                    half1000(5),
                    full1000(6)
                }
        ACCESS  read-write
        STATUS  mandatory
        DESCRIPTION
            "This object controls the Trunk physical link speed.
             When a port is added to this Trunk, it is switched
             to the specified speed, regardless of its previous
             speed setting. All ports; therefore, will be running 
             on the specified speed."
        DEFVAL { full100 }
        ::= { a3ComTrunkIfEntry 4 }

    a3ComTrunkIfStatus OBJECT-TYPE
        SYNTAX  RowStatus
        ACCESS  read-write
        STATUS  mandatory
        DESCRIPTION
            "The status column for this TRUNK interface. 
			 This OBJECT can be set to:

				createAndGo(4)
				destroy(6)

            The following values may be read:
            	active(1)
           		notReady(3).
			
			Setting this object to createAndGo(4) causes the agent
			to attempt to create and commit the row based on 
			the contents of the objects in the row.  If all necessary
			information is present in the row and the values are
			acceptible to the agent, the agent will change the 
			status to notReady(3).  If any of the necessary objects  
			are not available, the agent will reject the creation
			request.

			The state of the row transits to active(1) if and only
			if MAC(s) has/have been added to this entry through
			ifStackTable and system is ready.

			Setting this object to destroy(6) will remove the corresponding
			TRUNK interface and remove the entry in this table.

			In order for a set of this object to destroy(6) to succeed,
			all dependencies on this row must have been removed.  These
			will include any stacking dependencies in the ifStackTable."

        ::= { a3ComTrunkIfEntry 5 }


	a3ComTrunkMacTable OBJECT-TYPE
		SYNTAX  SEQUENCE OF A3ComTrunkMacEntry
		ACCESS  not-accessible
		STATUS  mandatory
		DESCRIPTION
			"A list of information about state of TRUNK MAC(s)
			in a TRUNK interface. If TCMP is not enabled, the MAC
			status is tied to the link status."
		::= { a3ComTrunkGroup 2 }

	a3ComTrunkMacEntry OBJECT-TYPE
		SYNTAX  A3ComTrunkMacEntry
		ACCESS  not-accessible
		STATUS  mandatory
		DESCRIPTION
			"An individual TRUNK group MAC entry status."
		INDEX	{ a3ComTrunkMacTrunkIfIndex, a3ComTrunkMacIndex }
		::= { a3ComTrunkMacTable 1 }

	A3ComTrunkMacEntry ::=
		SEQUENCE {
			a3ComTrunkMacTrunkIfIndex
				INTEGER,
			a3ComTrunkMacIndex
				INTEGER,
			a3ComTrunkTcmpMacState
				INTEGER
		}

	a3ComTrunkMacTrunkIfIndex OBJECT-TYPE
        SYNTAX  INTEGER
        ACCESS 	not-accessible 
        STATUS  mandatory
        DESCRIPTION
            "This object is the same as a3ComTrunkIfIndex defined in
			a3ComTrunkIfTable."
        ::= { a3ComTrunkMacEntry 1 }

a3ComTrunkMacIndex OBJECT-TYPE
        SYNTAX  INTEGER
        ACCESS 	not-accessible 
        STATUS  mandatory
        DESCRIPTION
            "This object identifies the ifIndex in the ifTable of
            a media access control (MAC) interface in the system."
        ::= { a3ComTrunkMacEntry 2 }

	a3ComTrunkTcmpMacState OBJECT-TYPE
		SYNTAX  INTEGER {
					notInUse(1),
					selected(2),
					inUse(3),
					undefined(4),
					down(5),
					up(6),
					configured(7)
				}
		ACCESS  read-only
		STATUS  mandatory
		DESCRIPTION
			"The state column for this MAC TRUNK entry if
			TCMP is enabled. The following values may be
			read:

			notInUse:	corresponding MAC has not been selected
						for active participation in trunk.  No
						LLC frames will be transmitted or
						received.
			selected:	corresponding MAC is selected for active
						participation in the trunk, but it has not
						transited to active use.
			inUse:		corresponding MAC is in active use on the
						trunk.

			The following values may be read if TCMP is disabled:

			undefined:	corresponding MAC is undefined
			down:    	corresponding MAC is selected
                        as a trunk port but is down
            up:       	corresponding MAC is selected
                        and in use
            configured: corresponding MAC is 
                        configured as TRUNK MAC "
		::= { a3ComTrunkMacEntry 3 }

	a3ComTrunkTcmpPeersTable OBJECT-TYPE
		SYNTAX  SEQUENCE OF A3ComTrunkTcmpPeersEntry
		ACCESS  not-accessible
		STATUS  mandatory
		DESCRIPTION
			"This table lists neighbouring information for
			a MAC in a Trunk interface."
		::= { a3ComTrunkGroup 3 }

	a3ComTrunkTcmpPeersEntry OBJECT-TYPE
		SYNTAX  A3ComTrunkTcmpPeersEntry 
		ACCESS  not-accessible
		STATUS  mandatory
		DESCRIPTION
			"Information about a particular peer of a MAC within
			the trunk."
		INDEX { a3ComTrunkPeerTrunkIfIndex, a3ComTrunkPeerMacIndex,
				a3ComTrunkPeersMacAddress }
		::= { a3ComTrunkTcmpPeersTable 1 }

	A3ComTrunkTcmpPeersEntry ::=
		SEQUENCE {
			a3ComTrunkPeerTrunkIfIndex
				INTEGER,
			a3ComTrunkPeerMacIndex
				INTEGER,
			a3ComTrunkPeersMacAddress
				PhysAddress
		}

	a3ComTrunkPeerTrunkIfIndex OBJECT-TYPE
        SYNTAX  INTEGER
        ACCESS 	not-accessible 
        STATUS  mandatory
        DESCRIPTION
            "This object is the same as a3ComTrunkIfIndex
			defined in a3ComTrunkIfTable."
        ::= { a3ComTrunkTcmpPeersEntry 1 }

a3ComTrunkPeerMacIndex OBJECT-TYPE
        SYNTAX  INTEGER
        ACCESS 	not-accessible 
        STATUS  mandatory
        DESCRIPTION
            "This object identifies the ifIndex in the ifTable of
            a media access control (MAC) interface in the system."
        ::= { a3ComTrunkTcmpPeersEntry 2 }

	a3ComTrunkPeersMacAddress OBJECT-TYPE
        SYNTAX  PhysAddress
        ACCESS 	read-only
        STATUS  mandatory
        DESCRIPTION
            "The MAC address of a peer connected to the
             a3ComTrunkPeerMacIndex identified by this entry." 
        ::= { a3ComTrunkTcmpPeersEntry 3 }

END
