-- *****************************************************************
-- FS-ADDRESS-MIB.mib:  FS Address MIB file
--
-- March 2002, Wuzg
--
-- Copyright (c) 2002 by FS.COM Inc..
-- All rights reserved.
-- 
-- *****************************************************************
--

FS-ADDRESS-MIB DEFINITIONS ::= BEGIN

IMPORTS
        MODULE-IDENTITY,
        OBJECT-TYPE,
        NOTIFICATION-TYPE,
        Integer32,
        Unsigned32
                FROM SNMPv2-SMI
        RowStatus,
        TimeStamp,
        MacAddress
                FROM SNMPv2-TC
        MODULE-COMPLIANCE,
        OBJECT-GROUP
                FROM SNMPv2-CONF
        IfIndex
                FROM FS-TC
        EnabledStatus 
                FROM P-BRIDGE-MIB
        fsMgmt
                FROM FS-SMI;

fsAddressMIB MODULE-IDENTITY
        LAST-UPDATED "200203200000Z"
        ORGANIZATION "FS.COM Inc.."
        CONTACT-INFO
                " 
                Tel: 400-865-2852 

                E-mail: https://www.fs.com/live_chat_service_mail.html"
        DESCRIPTION
                "This module defines fs address mibs."
        REVISION      "200203200000Z"
        DESCRIPTION
                "Initial version of this MIB module."
        ::= { fsMgmt 22}

fsAddressMIBObjects OBJECT IDENTIFIER ::= { fsAddressMIB 1 }

fsAddressManagementObjects OBJECT IDENTIFIER ::= { fsAddressMIBObjects 1 }

fsAddressNotificationObjects OBJECT IDENTIFIER ::= { fsAddressMIBObjects 2 }

 
--
-- fs Address Filter 
--
fsDynamicAddressCurrentNum OBJECT-TYPE
        SYNTAX Integer32
        MAX-ACCESS read-only
        STATUS current
        DESCRIPTION
              "The currunt number of dynamic MAC address ."
    ::= { fsAddressManagementObjects 1 } 
    
fsStaticAddressCurrentNum OBJECT-TYPE
        SYNTAX Integer32
        MAX-ACCESS read-only
        STATUS current
        DESCRIPTION
              "The currunt number of static MAC address ."
    ::= { fsAddressManagementObjects 2 }

fsFilterAddressCurrentNum OBJECT-TYPE
        SYNTAX Integer32
        MAX-ACCESS read-only
        STATUS current
        DESCRIPTION
              "Current number of the filtering MAC address."
    ::= { fsAddressManagementObjects 3 }

fsAddressAvailableNum OBJECT-TYPE
        SYNTAX Integer32
        MAX-ACCESS read-only
        STATUS current
        DESCRIPTION
              "Total Mac Address Space Available."
    ::= { fsAddressManagementObjects 4 }

fsMacAddressTable OBJECT-TYPE
        SYNTAX  SEQUENCE OF FSMacAddressEntry
        MAX-ACCESS  not-accessible
        STATUS  current
        DESCRIPTION
              "The table of address MAC address include dynamic mac address,
               static mac address and filter mac address."
    ::= { fsAddressManagementObjects 5 }

fsMacAddressEntry OBJECT-TYPE
        SYNTAX  FSMacAddressEntry
        MAX-ACCESS  not-accessible
        STATUS  current
        DESCRIPTION
              "The entry of MAC address table."
        INDEX   { fsMacAddressFdbId,fsMacAddress}
    ::= { fsMacAddressTable 1 }

 FSMacAddressEntry ::=
     SEQUENCE {
             fsMacAddressFdbId Unsigned32,
             fsMacAddress MacAddress,
             fsMacAddressPort IfIndex,
             fsMacAddressType INTEGER,      
             fsMacAddressStatus RowStatus                    
   }

fsMacAddressFdbId OBJECT-TYPE
        SYNTAX       Unsigned32
        MAX-ACCESS   read-only
        STATUS       current
        DESCRIPTION
            "The VID of vlan which the Address address blongs to."
    ::= { fsMacAddressEntry 1 }
    
fsMacAddress OBJECT-TYPE
        SYNTAX  MacAddress
        MAX-ACCESS  read-only
        STATUS  current
        DESCRIPTION
              "The MAC address which will be address static address."
    ::= { fsMacAddressEntry 2 }

fsMacAddressPort OBJECT-TYPE
        SYNTAX       IfIndex
        MAX-ACCESS   read-create
        STATUS       current
        DESCRIPTION
            "Interface(port or trunk) number of the port from which a frame must
             be received in order  for this entry's filtering information to apply."
    ::= { fsMacAddressEntry 3 }
    
fsMacAddressType OBJECT-TYPE
        SYNTAX  INTEGER {
                  dynamic(1),
                  static(2),
                  filter(3)                   
              }
        MAX-ACCESS  read-create
        STATUS  current
        DESCRIPTION
              "Only 'static' and 'filter' allow to be set to this object."
    ::= { fsMacAddressEntry 4 }
        
fsMacAddressStatus OBJECT-TYPE
        SYNTAX RowStatus
        MAX-ACCESS read-create
        STATUS current
        DESCRIPTION
            "entry status of this entry. and the means in this enviraments can
            reffer to the text-convention definition of the RowStatus."
    ::= { fsMacAddressEntry 5 }


--Address Notification
fsMacNotiGlobalEnabled  OBJECT-TYPE
    SYNTAX        EnabledStatus
    MAX-ACCESS    read-write
    STATUS        current
    DESCRIPTION
        "Indicates whether the MAC notification feature is currently 
         running in the device.

        Setting this object to disabled(2) disables the MAC notification
        feature globally thus disabling the feature at each interface.

        Setting this object to enabled(1) will start the MAC notification
        feature running in the device. If the feature is already
        running, setting to enabled(1) has no effect. Once the MAC
        notification is enabled, whether the feature is running at each
        interface is controlled by the fsMacNotiIfCfgTable."   
        
    ::= { fsAddressNotificationObjects 1 }

fsMacNotificationInterval  OBJECT-TYPE
    SYNTAX        Unsigned32 (0..3600)
    MAX-ACCESS    read-write
    STATUS        current
    DESCRIPTION
        "This object specifies the maximum interval of time in units of seconds
         between MacChangedNotifications being generated by the device.
        
        If the value of fsMacNotiGlobalEnabled is eanbled(1), the
        device will send out the generated MacChangedNotifications
        and archive the MAC change notification events in the
        FSMacNotiHisTable.  
        
        If the value of this object is equal to 0, the device will 
        generate MacChangedNotifications and archive the MAC 
        change notification events in the FSMacNotiHisTable as soon as
        there is MAC address learnt or removed by the device.

        If the value of this object is greater than 0, the device will
        wait for a period of time equal to the value of this object
        before generate the MacChangedNotifications and archive
        the MAC change notification events in the FSMacNotiHisTable."
    DEFVAL { 1 }
    ::= { fsAddressNotificationObjects 2 }

fsMacNotiHisTableMaxLength OBJECT-TYPE
    SYNTAX          Unsigned32 (0..200)
    MAX-ACCESS      read-write
    STATUS          current
    DESCRIPTION
        "The upper limit on the number of entries that the
        FSMacNotiHisTable may contain.  A value of 0 will
        prevent any history from being retained. When this
        table is full, the oldest entry will be deleted and
        a new one will be created."
    DEFVAL  { 50 }
    ::= { fsAddressNotificationObjects 3 }
    
fsMacNotiHisTableCurrentLength OBJECT-TYPE
    SYNTAX          Unsigned32   
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The number of entries that the FSMacNotiHisTable contain currently."
    ::= { fsAddressNotificationObjects 4 }    

fsMacNotiHisTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF FSMacNotiHisEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
        "This table will archive the dynamic MAC change notification events 
        generated by this device."
    ::= { fsAddressNotificationObjects 5 }

fsMacNotiHisEntry OBJECT-TYPE
    SYNTAX     FSMacNotiHisEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
        "A dynamic MAC change notification message that was previously
        generated by this device.  Each entry is indexed by a message
        index."
    INDEX   { fsMacNotiHisIndex }
    ::= { fsMacNotiHisTable 1 }

FSMacNotiHisEntry ::=
    SEQUENCE {
        fsMacNotiHisIndex
                Unsigned32,
        fsMacNotiHisMacChangedMsg
                OCTET STRING,
        fsMacNotiHisTimestamp
                TimeStamp
    }

fsMacNotiHisIndex OBJECT-TYPE
    SYNTAX          Unsigned32 (1..4294967295)
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "An index that uniquely identifies a MAC change notification
        event previously generated by the device. This index fss at
        1 and increases by one when a MAC change notification is 
        generated.  When it reaches the maximum value, the agent wraps
        the value back to 1."
    ::= { fsMacNotiHisEntry 1 }

fsMacNotiHisMacChangedMsg OBJECT-TYPE
    SYNTAX        OCTET STRING (SIZE(1..254))
    MAX-ACCESS    read-only
    STATUS        current
    DESCRIPTION
        "This object contains the information of a MAC change
        notification event. It consists of several sections packed
        together in the format of '<section1><section2>...'.
        
        Each tuple consist of 11 octets in the format of
        '<operation><VLAN><MAC><Interface>' where 

        <operation> is of size 1 octet and supports the following values
          0 - End of MIB object.
          1 - MAC learnt.
          2 - MAC removed.

        <VLAN> is vlan number of the VLAN which the MAC address is
        belonged to and has size of 2 octet.

        <MAC> is the Layer2 Mac Address and has size of 6 octets.

        <Interface> is the value for the interface from which the MAC 
        address is learnt and has size of 2 octets."
    ::= { fsMacNotiHisEntry 2 }

fsMacNotiHisTimestamp  OBJECT-TYPE
    SYNTAX          TimeStamp
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
        "The value of sysUpTime when the MacChangedNotification
        containing the information denoted by the fsMacNotiHisMacChangedMsg
        object in this entry was generated."
    ::= { fsMacNotiHisEntry 3 }


-- FS Mac Notification Interface Config Table

fsMacNotiIfCfgTable  OBJECT-TYPE
    SYNTAX        SEQUENCE OF FSMacNotiIfCfgEntry
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "This table enables or disables the generation of notification
        at each interface when MAC address is learnt or removed." 
    ::= { fsAddressNotificationObjects 6 }

fsMacNotiIfCfgEntry  OBJECT-TYPE
    SYNTAX        FSMacNotiIfCfgEntry
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "Each entry contains the configuration for enabling the
        MAC notification at each interface that supports this
        feature." 
    INDEX { fsMacNotiIfIndex }
    ::= { fsMacNotiIfCfgTable 1 }

FSMacNotiIfCfgEntry  ::= SEQUENCE {
    fsMacNotiIfIndex IfIndex,
    fsIfMacAddrLearntEnable    EnabledStatus, 
    fsIfMacAddrRemovedEnable   EnabledStatus 
}

fsMacNotiIfIndex OBJECT-TYPE
     SYNTAX   IfIndex
     MAX-ACCESS   read-only
     STATUS   current
     DESCRIPTION
            "IfIndex vale of interface."
    ::= { fsMacNotiIfCfgEntry 1 }
       
fsIfMacAddrLearntEnable OBJECT-TYPE
    SYNTAX        EnabledStatus 
    MAX-ACCESS    read-write
    STATUS        current
    DESCRIPTION
        "Indicates whether this interface is enabled to send 
        MacChangedNotification when it learns a new MAC address. This
        variable has no effect when the value of fsMacNotiGlobalEnabled
        object is disabled(2).

        Setting this object to enabled(1) enables the sending of
        MacChangedNotification when this interface learns a 
        new MAC address.

        Setting this object to disabled(2) disables the sending
        of MacChangedNotification when this interface learns
        a new MAC address."      
    DEFVAL { disabled }
    ::= { fsMacNotiIfCfgEntry 2 }

fsIfMacAddrRemovedEnable OBJECT-TYPE
    SYNTAX        EnabledStatus 
    MAX-ACCESS    read-write
    STATUS        current
    DESCRIPTION
        "Indicates whether this interface is enabled to send 
        MacChangedNotification when a MAC address which it learnt
        previously is removed from the forwarding table. This variable
        has no effect when the value of fsMacNotiGlobalEnabled object
        is disabled(2). 

        Setting this object to enabled(1) enables the sending of
        MacChangedNotification when a MAC address which this
        interface learnt previously is removed from the forwarding
        table.

        Setting this object to disabled(2) disables the sending of
        MacChangedNotification when a MAC address which this
        interface learnt previously is removed from the forwarding
        table."
    DEFVAL { disabled }
    ::= { fsMacNotiIfCfgEntry 3 }


fsMacIfLearnTable  OBJECT-TYPE
    SYNTAX        SEQUENCE OF FSMacIfLearnEntry
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "This table enables or disables the generation of notification
        at each interface when MAC address learning enable or disable." 
    ::= { fsAddressNotificationObjects 7 }

fsMacIfLearnEntry  OBJECT-TYPE
    SYNTAX        FSMacIfLearnEntry
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "The configuration of each entry illustrates whether each 
         interface supports the MAC address-learning ability." 
    INDEX { fsMacIfLearnIfIndex }
    ::= { fsMacIfLearnTable 1 }

FSMacIfLearnEntry  ::= SEQUENCE {
    fsMacIfLearnIfIndex IfIndex,
    fsMacIfLearnEnable  EnabledStatus 
}

fsMacIfLearnIfIndex OBJECT-TYPE
     SYNTAX   IfIndex
     MAX-ACCESS   read-only
     STATUS   current
     DESCRIPTION
            "IfIndex vale of interface."
    ::= { fsMacIfLearnEntry 1 }
       
fsMacIfLearnEnable OBJECT-TYPE
    SYNTAX        EnabledStatus 
    MAX-ACCESS    read-write
    STATUS        current
    DESCRIPTION
        "Indicates whether this interface is enabled to learn MAC address. 
         This variable has no effect when the value of fsMacIfLearnEnable
         object is disabled(2).

        Setting this object to be enabled(1) enables the interface to learn MAC address.

        Setting this object to be disabled(2) disables the interface to learn MAC address."      
    DEFVAL { enabled }
    ::= { fsMacIfLearnEntry 2 }

fsMacGlobalLearnEnabled  OBJECT-TYPE
    SYNTAX        EnabledStatus
    MAX-ACCESS    read-write
    STATUS        current
    DESCRIPTION
        "Indicates whether this device is enabled to learn MAC address. 
        Setting this object to be enabled(1) enables the device to learn MAC address.
        Setting this object to be disabled(2) disables the device to learn MAC address."      
    DEFVAL { enabled }
    ::= { fsAddressNotificationObjects 8 }
    
--
-- Notification 
--

fsAddressTraps      OBJECT IDENTIFIER ::= { fsAddressMIB 2 }

macChangedNotification NOTIFICATION-TYPE
    OBJECTS { fsMacNotiHisMacChangedMsg} 
    STATUS  current
    DESCRIPTION
        "This notification is generated when there is enough MAC
        address information to fully occupy a maximum size SNMP trap
        message. This notification is also generated when there
        is at least one MAC address changed or removed and the amount
        of time elapsed from the previous notification is greater
        than the maximum wait time denoted by fsMacNotificationInterval object. 

        If there are more MAC addresses information than can fit into
        one fsMacNotiHisMacChangedMsg object, then multiple notifications
        will be generated." 
    ::= { fsAddressTraps 1 } 
    
    
fsAddressMIBConformance OBJECT IDENTIFIER ::= { fsAddressMIB 3 }
fsAddressMIBCompliances OBJECT IDENTIFIER ::= { fsAddressMIBConformance 1 }
fsAddressMIBGroups      OBJECT IDENTIFIER ::= { fsAddressMIBConformance 2 }


-- compliance statements

fsAddressMIBCompliance MODULE-COMPLIANCE
        STATUS  current
        DESCRIPTION
                "The compliance statement for entities which implement
                the FS MAC Address MIB"
        MODULE  -- this module
                MANDATORY-GROUPS { fsMacAddressMIBGroup,
                                   fsAddressNotificationMIBGroup
                 }
        ::= { fsAddressMIBCompliances 1 }
                
-- units of conformance
       
fsMacAddressMIBGroup OBJECT-GROUP
        OBJECTS {
                fsDynamicAddressCurrentNum,
                fsStaticAddressCurrentNum,
                fsFilterAddressCurrentNum,
                fsAddressAvailableNum,       
                fsMacAddressFdbId,
                fsMacAddress,
                fsMacAddressPort,
                fsMacAddressType,      
                fsMacAddressStatus
        }
        STATUS  current
        DESCRIPTION
                "A collection of objects providing address address to a
                FS agent."
        ::= { fsAddressMIBGroups 1 }                         
        
fsAddressNotificationMIBGroup OBJECT-GROUP
        OBJECTS {
                fsMacNotiGlobalEnabled,
                fsMacNotificationInterval,
                fsMacNotiHisTableMaxLength,
                fsMacNotiHisTableCurrentLength,
                fsMacNotiHisIndex,
                fsMacNotiHisMacChangedMsg,
                fsMacNotiHisTimestamp,
                fsMacNotiIfIndex,
                fsIfMacAddrLearntEnable, 
                fsIfMacAddrRemovedEnable
        }
        STATUS  current
        DESCRIPTION
                "A collection of objects providing port address to a
                FS agent."
        ::= { fsAddressMIBGroups 2 }                                         
        
END
