-- *****************************************************************
-- FS-DHCP-SNOOPING-MIB.mib:  FS DHCP snooping MIB file
--
-- Oct. 2007, chenfeng
--
-- Copyright (c) 2007 by FS.COM Inc..
-- All rights reserved.
-- 
-- *****************************************************************
--

FS-DHCP-SNOOPING-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, 
    OBJECT-TYPE,
    IpAddress,
    Unsigned32
        FROM SNMPv2-SMI

    MODULE-COMPLIANCE,
    OBJECT-GROUP
        FROM SNMPv2-CONF

    TruthValue,
    MacAddress, 
    DisplayString,
    RowStatus
        FROM SNMPv2-TC

    InterfaceIndex
        FROM IF-MIB

    VlanIndex
        FROM Q-BRIDGE-MIB 

    fsMgmt
        FROM FS-SMI;

fsDhcpSnoopingMIB MODULE-IDENTITY
    LAST-UPDATED "200710180000Z"
    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 DHCP snooping mibs."
    REVISION    "200710180000Z"
    DESCRIPTION
        "Initial version of this MIB module."
    ::= { fsMgmt 42} 

fsDhcpSnoopingMIBObjects
    OBJECT IDENTIFIER ::= { fsDhcpSnoopingMIB 1 }
fsDhcpSnoopingMIBConformance
    OBJECT IDENTIFIER ::= { fsDhcpSnoopingMIB 2 }

fsSNDhcpGlobal
    OBJECT IDENTIFIER ::= { fsDhcpSnoopingMIBObjects 1 }
fsSNDhcpInterface
    OBJECT IDENTIFIER ::= { fsDhcpSnoopingMIBObjects 2 }
fsSNDhcpBindings
    OBJECT IDENTIFIER ::= { fsDhcpSnoopingMIBObjects 3 }
--
-- The Global group  
-- 

fsSNDhcpFeatureEnable  OBJECT-TYPE
    SYNTAX        TruthValue
    MAX-ACCESS    read-write
    STATUS        current
    DESCRIPTION
        "This object indicates whether the DHCP Snooping feature is
        enabled. 
        Setting this object to 'false' disables the DHCP Snooping 
        feature. Setting this object to 'true' will start the DHCP Snooping 
        feature running in the device."
    ::= { fsSNDhcpGlobal 1 }

fsSNDhcpDatabaseUpdateInterval OBJECT-TYPE
    SYNTAX          Unsigned32
    UNITS            "seconds"
    MAX-ACCESS    read-write
    STATUS          current
    DESCRIPTION
        "This object indicates the time interval at which DHCP
         bindings information will be written to the database file
         denoted by fsSNDhcpDatabaseFile object."
    ::= { fsSNDhcpGlobal 2 }

fsSNDhcpRelayAgentInfoOptEnable OBJECT-TYPE
    SYNTAX         TruthValue
    MAX-ACCESS    read-write
    STATUS          current
    DESCRIPTION
        "This object indicates if the DHCP relay agent information
        option (option 82) will be inserted to DHCP packets by
        DHCP Snooping feature.
        If this object is set to 'true', DHCP option 82 data will
        be inserted to DHCP packets.
        If this object is set to 'false', DHCP option 82 data
        will not be inserted."
    REFERENCE
        "RFC 3046, DHCP Relay Agent Information Option."
    ::= { fsSNDhcpGlobal 3 }

fsSNDhcpMatchMacAddressEnable OBJECT-TYPE
    SYNTAX          TruthValue
    MAX-ACCESS    read-write
    STATUS          current
    DESCRIPTION
        "This object indicates if DHCP Snooping Mac address
        matching is enabled. 
        If this object is set to 'true', DHCP Snooping Mac
        address matching is enabled.
        If this object is set to 'false', DHCP Snooping Mac
        address matching is disabled."
    ::= { fsSNDhcpGlobal 4 }

--
-- The DHCP Snooping Interface Trust Table
--

fsSNDhcpIfTrustTable OBJECT-TYPE
    SYNTAX         SEQUENCE OF FSSNDhcpIfTrustEntry
    MAX-ACCESS   not-accessible
    STATUS         current
    DESCRIPTION
        "A table provides the mechanism to configure the trust
        state for DHCP Snooping purpose at each physical interface
        capable of this feature. Some of the interfaces
        (but not limited to) for which this feature might be
        applicable are: ifType = ethernetCsmacd(6)." 
    ::= { fsSNDhcpInterface 1 }
 
fsSNDhcpIfTrustEntry OBJECT-TYPE
    SYNTAX         FSSNDhcpIfTrustEntry 
    MAX-ACCESS   not-accessible
    STATUS         current
    DESCRIPTION
        "A row instance contains the configuration to enable
        or disable trust state for DHCP Snooping at each physical
        interface capable of this feature." 
    INDEX { fsSNDhcpIfTrustIndex }
    ::= { fsSNDhcpIfTrustTable 1 }

FSSNDhcpIfTrustEntry ::= SEQUENCE {
    fsSNDhcpIfTrustIndex        InterfaceIndex,
    fsSNDhcpIfTrustEnable       TruthValue 
}

fsSNDhcpIfTrustIndex OBJECT-TYPE
        SYNTAX         InterfaceIndex
        MAX-ACCESS   not-accessible
        STATUS         current
        DESCRIPTION
            " "
        ::= { fsSNDhcpIfTrustEntry 1 }  
     
fsSNDhcpIfTrustEnable OBJECT-TYPE
    SYNTAX        TruthValue
    MAX-ACCESS  read-write
    STATUS        current
    DESCRIPTION
        "This object indicates whether the interface is trusted for
        DHCP Snooping purpose. 
        If this object is set to 'true', the interface is trusted.
        DHCP packets coming to this interface will be forwarded
        without checking.
        If this object is set to 'false', the interface is not
        trusted. DHCP packets coming to this interface will be
        subjected to DHCP checks." 
    ::= { fsSNDhcpIfTrustEntry 2 }

--
-- The DHCP Snooping Interface Suppression Table
--

fsSNDhcpIfSuppressionTable OBJECT-TYPE
    SYNTAX         SEQUENCE OF FSSNDhcpIfSuppressionEntry
    MAX-ACCESS   not-accessible
    STATUS         current
    DESCRIPTION
        "A table provides the mechanism to configure the suppression
        state for DHCP Snooping purpose at each physical interface
        capable of this feature. Some of the interfaces
        (but not limited to) for which this feature might be
        applicable are: ifType = ethernetCsmacd(6)." 
    ::= { fsSNDhcpInterface 2 }
 
fsSNDhcpIfSuppressionEntry OBJECT-TYPE
    SYNTAX         FSSNDhcpIfSuppressionEntry 
    MAX-ACCESS   not-accessible
    STATUS         current
    DESCRIPTION
        "A row instance contains the configuration to enable
        or disable suppression state for DHCP Snooping at each physical
        interface capable of this feature." 
    INDEX { fsSNDhcpIfSuppressionIndex }
    ::= { fsSNDhcpIfSuppressionTable 1 }

FSSNDhcpIfSuppressionEntry ::= SEQUENCE {
    fsSNDhcpIfSuppressionIndex               InterfaceIndex,
    fsSNDhcpIfSuppressionEnable       TruthValue 
}

fsSNDhcpIfSuppressionIndex OBJECT-TYPE
        SYNTAX        InterfaceIndex
        MAX-ACCESS  not-accessible
        STATUS        current
        DESCRIPTION
            "This object indicates the interface open Suppression"
        ::= { fsSNDhcpIfSuppressionEntry 1 }  
     
fsSNDhcpIfSuppressionEnable OBJECT-TYPE
    SYNTAX         TruthValue
    MAX-ACCESS   read-write
    STATUS         current
    DESCRIPTION
        "This object indicates whether the interface is suppression for
        DHCP Snooping purpose. 
        If this object is set to 'true', the interface is suppressed.
        DHCP packets coming to this interface will be ingnored.
        If this object is set to 'false', the interface is not
        suppressed. DHCP packets coming to this interface will be
        processed by DHCP Snooping."
    ::= { fsSNDhcpIfSuppressionEntry 2 }

--
--   The DHCP Address Binding Table
--

fsSNDhcpAddressBindTable OBJECT-TYPE
    SYNTAX         SEQUENCE OF FSSNDhcpAddressBindEntry
    MAX-ACCESS   not-accessible
    STATUS         current
    DESCRIPTION
        "A table provides the mechanism to configure the DHCP Snooping 
        binding database set as IP+MAC Address binding."
    ::= { fsSNDhcpInterface 3 }
 
fsSNDhcpAddressBindEntry OBJECT-TYPE
    SYNTAX         FSSNDhcpAddressBindEntry 
    MAX-ACCESS   not-accessible
    STATUS         current
    DESCRIPTION
        "A row instance contains the configuration to enable
        or disable address bind for DHCP Snooping at each physical
        interface capable of this feature." 
    INDEX { fsSNDhcpAddressBindIndex }
    ::= { fsSNDhcpAddressBindTable 1 }

FSSNDhcpAddressBindEntry ::= SEQUENCE {
    fsSNDhcpAddressBindIndex        InterfaceIndex,
    fsSNDhcpAddressBindEnable       TruthValue 
}

fsSNDhcpAddressBindIndex OBJECT-TYPE
        SYNTAX        InterfaceIndex
        MAX-ACCESS  not-accessible
        STATUS        current
        DESCRIPTION
            "This object indicates the interface open Address binding."
        ::= { fsSNDhcpAddressBindEntry 1 }  

fsSNDhcpAddressBindEnable OBJECT-TYPE
    SYNTAX         TruthValue
    MAX-ACCESS   read-write
    STATUS         current
    DESCRIPTION
        "This object indicates if DHCP Snooping Address Binding
        is enabled.
        Setting this object to 'true', DHCP binding entry is set as
        Address binding entrys; Otherwise, this funciton is disabled."
    ::= { fsSNDhcpAddressBindEntry 2 }
    
fsDhcpSnpFalsePktStatisticTable  OBJECT-TYPE
    SYNTAX SEQUENCE OF FSDhcpSnpFalsePktStatisticEntry
    MAX-ACCESS not-accessible
    STATUS current
    DESCRIPTION
        "The false packets statistic information table."
    ::= { fsSNDhcpInterface 4 }

       
fsDhcpSnpFalsePktStatisticEntry OBJECT-TYPE
    SYNTAX FSDhcpSnpFalsePktStatisticEntry
    MAX-ACCESS not-accessible
    STATUS current
    DESCRIPTION
        "An entry in the snooping false packets statistic information table."
    INDEX { fsDhcpSnpStatisticIfIndex, fsDhcpSnpStatisticVlanIndex }
    ::= { fsDhcpSnpFalsePktStatisticTable 1 }
        
FSDhcpSnpFalsePktStatisticEntry ::=
    SEQUENCE {
        fsDhcpSnpStatisticIfIndex        InterfaceIndex,
        fsDhcpSnpStatisticVlanIndex      VlanIndex,
        fsDhcpSnpStatisticIfDescr        DisplayString,
        fsDhcpSnpStatisticVlanId         VlanIndex,  
        fsChaddrNomatchSrcMacDhcpPktNum  Counter32,
        fsArpNomatchSnpBindTblPktNum     Counter32,
        fsIpNomatchSnpBindTblPktNum      Counter32,
        fsNomatchSnpBindTblDhcpPktNum    Counter32,
        fsUntrustedReplyPktNum           Counter32,
        fsDhcpPktIfRateDiscardNum        Counter32      
    }
    
fsDhcpSnpStatisticIfIndex OBJECT-TYPE
    SYNTAX        InterfaceIndex
    MAX-ACCESS    not-accessible
    STATUS        current
    DESCRIPTION
        "The index of the interfaces."
    ::= { fsDhcpSnpFalsePktStatisticEntry 1 }      
    
fsDhcpSnpStatisticVlanIndex OBJECT-TYPE
    SYNTAX  VlanIndex
    MAX-ACCESS not-accessible
    STATUS current
    DESCRIPTION 
        "The vlan Id."
    ::= { fsDhcpSnpFalsePktStatisticEntry 2 }      

fsDhcpSnpStatisticIfDescr OBJECT-TYPE
    SYNTAX  DisplayString(SIZE(0..255))
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION 
        "The description of the interfaces."
    ::= { fsDhcpSnpFalsePktStatisticEntry 3 }      
    
fsDhcpSnpStatisticVlanId OBJECT-TYPE
    SYNTAX  VlanIndex
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION 
        "The vlan Id."
    ::= { fsDhcpSnpFalsePktStatisticEntry 4 }
      
fsChaddrNomatchSrcMacDhcpPktNum OBJECT-TYPE
    SYNTAX  Counter32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION 
        "The false packets(chaddr in Dhcp packets is not same with source mac-address in
        ethernet frame) count."
    ::= { fsDhcpSnpFalsePktStatisticEntry 5 }   
      
fsArpNomatchSnpBindTblPktNum OBJECT-TYPE
    SYNTAX  Counter32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION 
        "The false Arp packets match in snooping bind table count."
    ::= { fsDhcpSnpFalsePktStatisticEntry 6 }   
       
fsIpNomatchSnpBindTblPktNum OBJECT-TYPE
    SYNTAX  Counter32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION 
        "The false Ip packets do not match snooping bind table count."
    ::= { fsDhcpSnpFalsePktStatisticEntry 7 }   

fsNomatchSnpBindTblDhcpPktNum OBJECT-TYPE
    SYNTAX  Counter32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION 
        "The Dhcp request packets do not match the snooping bind table."
    ::= { fsDhcpSnpFalsePktStatisticEntry 8 }   
      
fsUntrustedReplyPktNum OBJECT-TYPE
    SYNTAX  Counter32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION 
        "The untrusted port Dhcp reply packets count."
    ::= { fsDhcpSnpFalsePktStatisticEntry 9 }

fsDhcpPktIfRateDiscardNum OBJECT-TYPE
    SYNTAX     Counter32
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
        "DHCP packets that discarded for the rate limit on the interface. "
    ::= { fsDhcpSnpFalsePktStatisticEntry 10 }

--
--   The DHCP Bindings Table
--

fsSNDhcpBindingsTable OBJECT-TYPE
    SYNTAX         SEQUENCE OF FSSNDhcpBindingsEntry
    MAX-ACCESS   not-accessible
    STATUS         current
    DESCRIPTION
        "A table provides the DHCP bindings information learnt by
        the device." 
    ::= { fsSNDhcpBindings 1 }
 
fsSNDhcpBindingsEntry OBJECT-TYPE
    SYNTAX         FSSNDhcpBindingsEntry 
    MAX-ACCESS   not-accessible
    STATUS         current
    DESCRIPTION
        "A row instance contains the Mac address, IP address type,
        IP address, VLAN number, interface number, leased time and
        status of this instance." 
    INDEX { fsSNDhcpBindingsVlan, 
            fsSNDhcpBindingsMacAddress,
            fsSNDhcpBindingsAddrType }
    ::= { fsSNDhcpBindingsTable 1 }

FSSNDhcpBindingsEntry ::= SEQUENCE {
    fsSNDhcpBindingsVlan            VlanIndex,
    fsSNDhcpBindingsMacAddress      MacAddress, 
    fsSNDhcpBindingsAddrType        INTEGER,
    fsSNDhcpBindingsIpAddress       IpAddress,
    fsSNDhcpBindingsInterface       InterfaceIndex,
    fsSNDhcpBindingsLeasedTime      Unsigned32,
    fsSNDhcpBindingsStatus          RowStatus
}
 
fsSNDhcpBindingsVlan OBJECT-TYPE
    SYNTAX         VlanIndex
    MAX-ACCESS     not-accessible 
    STATUS         current
    DESCRIPTION
        "This object indicates the VLAN to which a DHCP client host
         belongs."
    ::= { fsSNDhcpBindingsEntry 1 }

fsSNDhcpBindingsMacAddress OBJECT-TYPE
    SYNTAX         MacAddress 
    MAX-ACCESS     not-accessible 
    STATUS         current
    DESCRIPTION
        "This object indicates the MAC address of a DHCP client
         host." 
    ::= { fsSNDhcpBindingsEntry 2 }

fsSNDhcpBindingsAddrType OBJECT-TYPE
    SYNTAX INTEGER{
        dynamic(1),     -- Dynamic Addresss bind, Dynamic get from DHCP Snooping address binding database;
        static(2)       -- Static Address bind, Added by Administrator;
    }
    MAX-ACCESS   not-accessible
    STATUS         current
    DESCRIPTION
        "This object indicates the type of IP+MAC binding address denoted
        in fsSNDhcpBindingsIpAddress object." 
    ::= { fsSNDhcpBindingsEntry 3 }

fsSNDhcpBindingsIpAddress OBJECT-TYPE
    SYNTAX         IpAddress
    MAX-ACCESS   read-create
    STATUS         current
    DESCRIPTION
        "This object indicates the allocated IP address of
        a DHCP client host."
    ::= { fsSNDhcpBindingsEntry 4 }

fsSNDhcpBindingsInterface OBJECT-TYPE
    SYNTAX         InterfaceIndex
    MAX-ACCESS   read-create
    STATUS         current
    DESCRIPTION
        "This object indicates the interface where a DHCP client
        host connects to."
    ::= { fsSNDhcpBindingsEntry 5 }

fsSNDhcpBindingsLeasedTime OBJECT-TYPE
    SYNTAX        Unsigned32
    UNITS          "seconds" 
    MAX-ACCESS  read-only
    STATUS        current
    DESCRIPTION
        "This object indicates the leased time of this DHCP
        bindings."
    ::= { fsSNDhcpBindingsEntry 6 }

fsSNDhcpBindingsStatus OBJECT-TYPE
    SYNTAX         RowStatus 
    MAX-ACCESS   read-create
    STATUS         current
    DESCRIPTION
        "This object is used to to manage the deletion of rows
        in this table. This object only supports active(1) and
        destroy(6) value. 
        Whenever a DHCP binding is learnt by the device, an
        entry will be created by the device in this table with
        its RowStatus object set to active(1). Setting this
        object value to destroy(6) will clear the DHCP bindings
        information represented by this row instance."
    ::= { fsSNDhcpBindingsEntry 7 }

fsDhcpTrapMacAddress OBJECT-TYPE
    SYNTAX         MacAddress 
    MAX-ACCESS     accessible-for-notify
    STATUS         current
    DESCRIPTION
        "Dhcp trap macaddress"
    ::= { fsDhcpSnoopingMIBObjects 4 }
    

-- dhcp snooping traps
fsDhcpSnoopingMIBTraps  OBJECT IDENTIFIER ::= { fsDhcpSnoopingMIB 0 }
                                 
fsDhcpSnoopingNoResponseTrap NOTIFICATION-TYPE
    OBJECTS { 
        fsDhcpTrapMacAddress
    }
    STATUS current
    DESCRIPTION
          "Send trap when dhcp request packets not been response."
    ::= { fsDhcpSnoopingMIBTraps 1 }


fsDhcpSnoopingMIBCompliances OBJECT IDENTIFIER ::= { fsDhcpSnoopingMIBConformance 1 }
fsDhcpSnoopingMIBGroups      OBJECT IDENTIFIER ::= { fsDhcpSnoopingMIBConformance 2 }


-- compliance statements

fsDhcpSnoopingMIBCompliance MODULE-COMPLIANCE
        STATUS  current
        DESCRIPTION
                "The compliance statement for entities which implement
                the FS Dhcp Snooping MIB"
        MODULE  -- this module
                MANDATORY-GROUPS { fsDhcpSnoopingMIBGroup
                 }
        ::= { fsDhcpSnoopingMIBCompliances 1 }
                
-- units of conformance

fsDhcpSnoopingMIBGroup OBJECT-GROUP
        OBJECTS {
          fsSNDhcpFeatureEnable,
          fsSNDhcpDatabaseUpdateInterval,
          fsSNDhcpRelayAgentInfoOptEnable,
          fsSNDhcpMatchMacAddressEnable,
          fsSNDhcpIfTrustEnable,
          fsSNDhcpIfSuppressionEnable,
          fsSNDhcpAddressBindEnable,
          fsDhcpSnpStatisticIfDescr,
          fsDhcpSnpStatisticVlanId,  
          fsChaddrNomatchSrcMacDhcpPktNum,
          fsArpNomatchSnpBindTblPktNum,
          fsIpNomatchSnpBindTblPktNum,
          fsNomatchSnpBindTblDhcpPktNum,
          fsUntrustedReplyPktNum,
          fsDhcpPktIfRateDiscardNum,  
          fsSNDhcpBindingsIpAddress,
          fsSNDhcpBindingsInterface,
          fsSNDhcpBindingsLeasedTime,
          fsSNDhcpBindingsStatus,
          fsDhcpTrapMacAddress
        }
        STATUS  current
        DESCRIPTION
                "A collection of objects providing snooping Dhcp configure ."
        ::= { fsDhcpSnoopingMIBGroups 1 }
        
END