SAVI-MIB DEFINITIONS ::=BEGIN

IMPORTS
    MODULE-COMPLIANCE,OBJECT-GROUP
        FROM SNMPv2-CONF
    MODULE-IDENTITY, OBJECT-IDENTITY, OBJECT-TYPE, Counter32, Unsigned32  
        FROM SNMPv2-SMI
    TEXTUAL-CONVENTION,MacAddress,TimeInterval,RowStatus
        FROM SNMPv2-TC
    InterfaceIndex	
        FROM IF-MIB
    InetVersion,InetAddressType,InetAddress 
        FROM INET-ADDRESS-MIB
    ip 
        FROM IP-MIB
    ;

saviMIB MODULE-IDENTITY
    LAST-UPDATED "201003080037Z" --March 08,2010
    ORGANIZATION
        "IETF SAVI Working Group"
    CONTACT-INFO
        "Changqing An
        
         Postal:  Network Research Center, Tsinghua University
         Beijing 100084
         China
         
         Email: acq@tsinghua.edu.cn"
    DESCRIPTION
        "The MIB Module for managing SAVI implementations."
    ::= {ip 40}

saviObjects OBJECT IDENTIFIER ::= { saviMIB 1 }


-- Savi parameters 

saviObjectsSystemTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF SaviObjectsSystemEntry   
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "The table containing savi system-wide parameters."
    ::= { saviObjects 1 }

saviObjectsSystemEntry OBJECT-TYPE
    SYNTAX     SaviObjectsSystemEntry               
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "Each entry  containing savi system-wide parameters for a
            particular IP version."
    INDEX { saviObjectsSystemIPVersion  }
    ::= { saviObjectsSystemTable 1 }

    

SaviObjectsSystemEntry ::=
    SEQUENCE {
        saviObjectsSystemIPVersion             InetVersion,
        saviObjectsSystemMode                  INTEGER,
        saviObjectsSystemMaxDadDelay           TimeInterval,
        saviObjectsSystemMaxDadPrepareDelay    TimeInterval
    }    

saviObjectsSystemIPVersion OBJECT-TYPE
    SYNTAX     InetVersion
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "The IP version "
    ::= { saviObjectsSystemEntry 1 }
    
    
saviObjectsSystemMode OBJECT-TYPE
    SYNTAX     INTEGER {
                 savi-disable(1),
                 savi-default(2),
                 savi-dhcp-only(3),
                 savi-slaac-only(4),
                 savi-dhcp-slaac-mix(5)
               }
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "IP Address Assignment Methods. "
    ::= { saviObjectsSystemEntry 2 }
    
saviObjectsSystemMaxDadDelay OBJECT-TYPE
    SYNTAX     TimeInterval 
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "A constant. When A gratuitous ARP Request or Duplicate 
            Address Detection Neighbor Solicitation is received 
            from anchor, the lifetime of the BST(Binding State Table)
            entry MUST be set to be MAX_ARP_DELAY or MAX_DAD_DELAY 
            respectively."
    ::= { saviObjectsSystemEntry 3 }

saviObjectsSystemMaxDadPrepareDelay OBJECT-TYPE
    SYNTAX     TimeInterval 
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "A constant. When a DHCPv4 DHCPACK or DHCPv6 REPLY message
            is received, the lifetime of the BST(Binding State Table)
            entry MUST be set to be MAX_ARP_PREPARE_DELAY or 
            MAX_DAD_PREPARE_DELAY respectively."
    ::= { saviObjectsSystemEntry 4 }    
    
    
 
 
-- Interface parameters 

saviObjectsIfTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF SaviObjectsIfEntry 
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "The table containing SAVI running parameters of each anchor."
    ::= { saviObjects 2 }

saviObjectsIfEntry OBJECT-TYPE
    SYNTAX     SaviObjectsIfEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "An entry containing SAVI running parameters of an anchor."
    INDEX { saviObjectsIfIPVersion, 
            saviObjectsIfIfIndex }
    ::= { saviObjectsIfTable 1 }

    

SaviObjectsIfEntry ::=
    SEQUENCE {
        saviObjectsIfIPVersion          InetVersion,
        saviObjectsIfIfIndex            InterfaceIndex,
        saviObjectsIfValidationStatus   INTEGER,
        saviObjectsIfTrustStatus        INTEGER,
        saviObjectsIfFilteringNum         Unsigned32
    }    

saviObjectsIfIPVersion      OBJECT-TYPE
    SYNTAX     InetVersion
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "The IP version "
    ::= { saviObjectsIfEntry 1 }


saviObjectsIfIfIndex  OBJECT-TYPE
    SYNTAX     InterfaceIndex
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "The index value that uniquely identifies the interface to
            which this entry is applicable.  The interface identified by
            a particular value of this index is the same interface as
            identified by the same value of the IF-MIB's ifIndex."
    ::= { saviObjectsIfEntry 2 }

saviObjectsIfValidationStatus OBJECT-TYPE
    SYNTAX     INTEGER {
                 enable(1),
                 disable(2)
               }
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "The validation status of the interface.  
            enable(1), check source address.
            disable(2), don't check source address. 
            "
    ::= { saviObjectsIfEntry 3 }


saviObjectsIfTrustStatus OBJECT-TYPE
    SYNTAX     INTEGER  {
    						 no-trust(1),
                 dhcp-trust(2),
                 ra-trust(3),
                 dhcp-ra-trust(4)
               }
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "The trust status of the interface.  
           no-trust(1), discard dhcp adv/reply and ra packet,
           dhcp-trust(2), permit dhcp adv/reply packet and discard ra packet,
           ra-trust(3), permit ra packet and discard dhcp adv/reply packet,
           dhcp-ra-trust(4), permit dhcp adv/reply and ra packet.
           "
    ::= { saviObjectsIfEntry 4 }
    
saviObjectsIfFilteringNum OBJECT-TYPE
    SYNTAX     Unsigned32 
    MAX-ACCESS read-write
    STATUS     current
    DESCRIPTION
           "The max filtering number of the Interface"
    ::= { saviObjectsIfEntry 5 }


-- Savi Binding Table

saviObjectsBindingTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF SaviObjectsBindingEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "The Binding State Table containing the state of binding 
            between source address and anchor."
    ::= { saviObjects 3 }

saviObjectsBindingEntry OBJECT-TYPE
    SYNTAX     SaviObjectsBindingEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "An entry containing the state of binding between source 
            address and anchor. Entries are keyed on the anchor, 
            binding type, source IP address version, and source IP 
            address."
    INDEX { saviObjectsBindingIpAddressType,
            saviObjectsBindingType,
            saviObjectsBindingIfIndex,
            saviObjectsBindingIpAddress
             }
    ::= { saviObjectsBindingTable 1 }

SaviObjectsBindingEntry ::= 
    SEQUENCE {
        saviObjectsBindingIpAddressType  InetAddressType,
        saviObjectsBindingType           INTEGER,
        saviObjectsBindingIfIndex        InterfaceIndex,
        saviObjectsBindingIpAddress      InetAddress,
        saviObjectsBindingMacAddr	       MacAddress,
        saviObjectsBindingState	         INTEGER,
        saviObjectsBindingLifetime	     TimeInterval,
	      saviObjectsBindingRowStatus      RowStatus
	 }

saviObjectsBindingIpAddressType OBJECT-TYPE
    SYNTAX     InetAddressType
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "IP address type of the  binding source IP"
    ::= { saviObjectsBindingEntry 1 }

saviObjectsBindingType OBJECT-TYPE
    SYNTAX     INTEGER {
                 static(1),          
                 slaac(2),
                 dhcp(3) 
               }
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "IP address assignment methods." 
    ::= { saviObjectsBindingEntry 2 }


saviObjectsBindingIfIndex OBJECT-TYPE
    SYNTAX     InterfaceIndex
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "The index value that uniquely identifies the interface to
            which this entry is applicable.  The interface identified by
            a particular value of this index is the same interface as
            identified by the same value of the IF-MIB's ifIndex."
    ::= { saviObjectsBindingEntry 3 }

    
saviObjectsBindingIpAddress OBJECT-TYPE
    SYNTAX     InetAddress
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "The binding source IP address"
    ::= { saviObjectsBindingEntry 4 }

saviObjectsBindingMacAddr OBJECT-TYPE
    SYNTAX     MacAddress
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "The binding source mac address."
    ::= { saviObjectsBindingEntry 5 }


saviObjectsBindingState OBJECT-TYPE
    SYNTAX     INTEGER  {
                 start(1),
    	           live(2),
    	           detection(3),
    	           query(4),
    	           bound(5)
               }
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "The state of the binding entry. "
    ::= { saviObjectsBindingEntry 6 }

saviObjectsBindingLifetime OBJECT-TYPE
    SYNTAX     TimeInterval
    MAX-ACCESS read-create
    STATUS     current
    DESCRIPTION
           "The remaining lifetime of the entry. 
           If saviObjectsBindingType=static, a value of 2147483647 
           represents infinity."
    ::= { saviObjectsBindingEntry 7 }
    

saviObjectsBindingRowStatus OBJECT-TYPE
       SYNTAX     RowStatus
       MAX-ACCESS read-create
       STATUS     current
       DESCRIPTION
             "The status of this row, by which new entries may be
              created, or old entries deleted from this table. 
              An Entry can be created or deleted only when 
              saviObjectsBindingType=static."
    ::= { saviObjectsBindingEntry 8 }



-- Savi Filtering Table

saviObjectsFilteringTable OBJECT-TYPE
    SYNTAX     SEQUENCE OF SaviObjectsFilteringEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "The Filtering Table is used to filter packets."
    ::= { saviObjects 4 }

saviObjectsFilteringEntry OBJECT-TYPE
    SYNTAX     SaviObjectsFilteringEntry
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "An entry containing the filtering parameters. Entries are keyed on the anchor."
    INDEX { saviObjectsFilteringIpAddressType,
            saviObjectsFilteringIfIndex,
            saviObjectsFilteringIpAddress }
    ::= { saviObjectsFilteringTable 1 }

SaviObjectsFilteringEntry ::= 
    SEQUENCE {
        saviObjectsFilteringIpAddressType  InetAddressType,
        saviObjectsFilteringIfIndex        InterfaceIndex,
        saviObjectsFilteringIpAddress      InetAddress,
        saviObjectsFilteringMacAddr	       MacAddress
	 }


saviObjectsFilteringIpAddressType OBJECT-TYPE
    SYNTAX     InetAddressType
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "IP address type of the  filtering source IP"
    ::= { saviObjectsFilteringEntry 1 }

saviObjectsFilteringIfIndex OBJECT-TYPE
    SYNTAX     InterfaceIndex
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "The index value that uniquely identifies the interface to
            which this entry is applicable.  The interface identified by
            a particular value of this index is the same interface as
            identified by the same value of the IF-MIB's ifIndex."
    ::= { saviObjectsFilteringEntry 2 }

    
saviObjectsFilteringIpAddress OBJECT-TYPE
    SYNTAX     InetAddress
    MAX-ACCESS not-accessible
    STATUS     current
    DESCRIPTION
           "The filtering source IP address"
    ::= { saviObjectsFilteringEntry 3 }


saviObjectsFilteringMacAddr OBJECT-TYPE
    SYNTAX     MacAddress
    MAX-ACCESS read-only
    STATUS     current
    DESCRIPTION
           "The filtering source mac address."
    ::= { saviObjectsFilteringEntry 4 }

   
-- Conformance information    
saviConformance OBJECT IDENTIFIER ::= { saviMIB 2 }
saviCompliances OBJECT IDENTIFIER ::= { saviConformance 1 }

-- Compliance statements
saviCompliance MODULE-COMPLIANCE
    STATUS current
    DESCRIPTION 
           "The compliance statement for entities which implement SAVI."

    MODULE
    MANDATORY-GROUPS {
        systemGroup, 
        ifGroup,
        bindingGroup,
        filteringGroup
    }

    ::= { saviCompliances 1}
        
saviGroups OBJECT IDENTIFIER ::= { saviConformance 2 }

--Units of conformance
    
systemGroup OBJECT-GROUP
    OBJECTS {
        saviObjectsSystemMode,
        saviObjectsSystemMaxDadDelay,
        saviObjectsSystemMaxDadPrepareDelay
    }
    STATUS current
    DESCRIPTION
           "The system group of objects containing savi system parameter."
    ::= {saviGroups 1}

   
ifGroup OBJECT-GROUP
    OBJECTS {
        saviObjectsIfValidationStatus,
        saviObjectsIfTrustStatus,
        saviObjectsIfFilteringNum
    }
    STATUS current
    DESCRIPTION
           "The if group of objects containing the savi running parameters
            of each anchor."
    ::= {saviGroups 2}

bindingGroup OBJECT-GROUP
    OBJECTS {
    	  saviObjectsBindingMacAddr,
        saviObjectsBindingState, 
        saviObjectsBindingLifetime,
        saviObjectsBindingRowStatus
    }
    STATUS current
    DESCRIPTION
           "The binding group of objects containing the binding information 
            of anchor and soure ip address. "
    ::= {saviGroups 3}  
    
    
filteringGroup OBJECT-GROUP
    OBJECTS {
    	  saviObjectsFilteringMacAddr
    }
    STATUS current
    DESCRIPTION
           "The filtering group of objects containing the filtering information 
            of anchor and soure ip address. "
    ::= {saviGroups 4}  
END
