-- ============================================================================
-- Copyright (C) 2004 by H3C TECHNOLOGIES. All rights reserved.
--
-- Description: Flowtemplate Management Information Base.
-- Reference: 
-- Version: 1.0
-- History:
-- V1.0 created by tangshun.
-- ============================================================================
H3C-FLOWTEMPLATE-MIB DEFINITIONS ::= BEGIN

        IMPORTS
            h3cCommon
                FROM HUAWEI-3COM-OID-MIB
            ifIndex
                FROM RFC1213-MIB
            Integer32, OBJECT-TYPE, MODULE-IDENTITY
                FROM SNMPv2-SMI
            RowStatus, MacAddress
                FROM SNMPv2-TC;

--
-- Nodes definitions
--
        h3cFlowTemplate MODULE-IDENTITY 
            LAST-UPDATED "200511241320Z"    -- Nov 24, 2005 at 13:20 GMT
            ORGANIZATION
                "Hangzhou H3C Tech. Co., Ltd."
            CONTACT-INFO
                "Platform Team Hangzhou H3C Tech. Co., Ltd.
                Hai-Dian District Beijing P.R. China
                http://www.h3c.com
                Zip:100085
                "
            DESCRIPTION 
                "Flow template management information base."
            ::= { h3cCommon 64 }

        h3cFlowTemplateMibObject OBJECT IDENTIFIER ::= { h3cFlowTemplate 1 }

        h3cFTConfigGroup OBJECT IDENTIFIER ::= { h3cFlowTemplateMibObject 1 }

        h3cFTGroupNextIndex OBJECT-TYPE
            SYNTAX Integer32
            MAX-ACCESS read-only
            STATUS current
            DESCRIPTION
                "This object contains an appropriate value to be used for h3cFTGroupIndex 
                 when creating rows in the h3cFTGroupTable.  If it is 2147483647, 
                 it denotes that h3cFTGroupTable can't create any instance. 
                "
            ::= { h3cFTConfigGroup 1 }    

        h3cFTGroupTable OBJECT-TYPE   
            SYNTAX SEQUENCE OF H3cFTGroupEntry
            MAX-ACCESS not-accessible
            STATUS current
            DESCRIPTION
                "A table of flow template group.
                 A flow template group, which is applied to interface,
                 must use h3cFTGroupTable to create a instance 
                 and h3cFTBasicGroupTable or h3cFTExtendGroupTable 
                 to configure flow template's need item.
                 A basic flow template must use h3cFTBasicGroupTable 
                 to configure some basic flow template's need item, 
                 such as: address, protocol, priority.
                 A extend flow template must use h3cFTExtendGroupTable
                 to configure packet's type and offset and length.
                "
            ::= { h3cFTConfigGroup 2 }

        h3cFTGroupEntry OBJECT-TYPE
            SYNTAX H3cFTGroupEntry
            MAX-ACCESS not-accessible
            STATUS current
            DESCRIPTION
                "Flow template group information."
            INDEX { h3cFTGroupIndex }
            ::= { h3cFTGroupTable 1 }

        H3cFTGroupEntry ::=
            SEQUENCE
            {
                h3cFTGroupIndex
                    Integer32,
                h3cFTGroupName
                    OCTET STRING,
                h3cFTGroupType
                    INTEGER,
                h3cFTGroupRowStatus
                    RowStatus
            }

        h3cFTGroupIndex OBJECT-TYPE
            SYNTAX Integer32
            MAX-ACCESS not-accessible
            STATUS current
            DESCRIPTION
                "Flow template group index."
            ::= { h3cFTGroupEntry 1 }

        h3cFTGroupName OBJECT-TYPE
            SYNTAX OCTET STRING (SIZE(1..31))
            MAX-ACCESS read-create
            STATUS current
            DESCRIPTION
                "Flow template group name."
            ::= { h3cFTGroupEntry 2 }

        h3cFTGroupType OBJECT-TYPE
            SYNTAX INTEGER 
            {
                basic(1),
                extend(2)
            }
            MAX-ACCESS read-create
            STATUS current
            DESCRIPTION
                "Type of flow template."
            ::= { h3cFTGroupEntry 3 }

        h3cFTGroupRowStatus OBJECT-TYPE
            SYNTAX RowStatus
            MAX-ACCESS read-create
            STATUS current
            DESCRIPTION
                "RowStatus."
            ::= { h3cFTGroupEntry 4 }
--
--nodes of h3cFTBasicGroupTable
--
        h3cFTBasicGroupTable OBJECT-TYPE   
            SYNTAX SEQUENCE OF H3cFTBasicGroupEntry
            MAX-ACCESS not-accessible
            STATUS current
            DESCRIPTION
                "A table of basic flow template group."
            ::= { h3cFTConfigGroup 3 }

        h3cFTBasicGroupEntry OBJECT-TYPE
            SYNTAX H3cFTBasicGroupEntry
            MAX-ACCESS not-accessible
            STATUS current
            DESCRIPTION
                "Basic flow template group information."
            INDEX { h3cFTGroupIndex }
            ::= { h3cFTBasicGroupTable 1 }

        H3cFTBasicGroupEntry ::=
            SEQUENCE
            {
                h3cFTBasicGroupAddressType
                    BITS,
                h3cFTBasicGroupPriorityType
                    BITS,
                h3cFTBasicGroupProtocolType
                    BITS,
                h3cFTBasicGroupSMacWildCard
                    MacAddress,
                h3cFTBasicGroupDMacWildCard
                    MacAddress,
                h3cFTBasicGroupRowStatus
                    RowStatus
            }

        h3cFTBasicGroupAddressType OBJECT-TYPE
            SYNTAX BITS
            {
                sourceIpv4Address(0),
                destIPv4Address(1),
                sourceIPv6Address(2),
                destIPv6Address(3),
                sourceMacAddress(4),
                destMacAddress(5)
            }
            MAX-ACCESS read-create
            STATUS current
            DESCRIPTION
                "Type of MAC and IP address.
                 This is a bit-map of possible conditions.
                 The various bit positions are:
                 sourceIpv4Address    source IPv4's address    
                 destIPv4Address      destination IPv4's address
                 sourceIPv6Address    source IPv6 address
                 destIPv6Address      destination IPv6 address
                 sourceMacAddress     source MAC address
                 destMacAddress       destination MAC address
                "
            ::= { h3cFTBasicGroupEntry 1 }

        h3cFTBasicGroupPriorityType OBJECT-TYPE
            SYNTAX BITS
            {
                vlanID(0),
                cos(1),
                topVlanID(2),
                topCos(3),
                fragment(4),
                tcpFlag(5),
                tos(6),
                dscp(7),
                ipprecedence(8)
            }
            MAX-ACCESS read-create
            STATUS current
            DESCRIPTION
                "Type of priority.
                 This is a bit-map of possible conditions.
                 The various bit positions are:
                 vlanID         VlanID
                 cos            802.1p priority
                 topVlanID      VlanID of top layer
                 topCos         802.1p priority of top layer
                 fragment       fragment
                 tcpFlag        TCP flag
                 tos            type of service
                 dscp           DSCP
                 ipprecedence   IP precedence
                "
            ::= { h3cFTBasicGroupEntry 2 }

        h3cFTBasicGroupProtocolType OBJECT-TYPE
            SYNTAX BITS
            {
                l2Potocol(0),
                ipv4L3Protocol(1),
                ipv6L3Protocol(2),
                icmpProtocolType(3),
                icmpProtocolCode(4),
                icmpv6ProtocolType(5),
                icmpv6ProtocolCode(6),
                sourceL4Port(7),
                destL4Port(8)
            }
            MAX-ACCESS read-create
            STATUS current
            DESCRIPTION
                "Type of protocol.
                 This is a bit-map of possible conditions.
                 The various bit positions are:
                 l2Potocol               layer 2 protocol
                 ipv4L3Protocol          layer 3 protocol of IPv4 
                 ipv6L3Protocol          layer 3 protocol of IPv6
                 icmpProtocolType        Type of ICMP protocol of IPv4
                 icmpProtocolCode        Code of ICMP protocol of IPv4
                 icmpv6ProtocolType      Type of ICMP protocol of IPv6
                 icmpv6ProtocolCode      Code of ICMP protocol of IPv6
                 sourceL4Port            port of layer 4 of source
                 destL4Port              port of layer 4 of destination
                "
            ::= { h3cFTBasicGroupEntry 3 }

        h3cFTBasicGroupSMacWildCard OBJECT-TYPE
            SYNTAX MacAddress
            MAX-ACCESS read-create
            STATUS current
            DESCRIPTION
                "Source MAC address field in Ethernet packet head."
            ::= { h3cFTBasicGroupEntry 4 }

        h3cFTBasicGroupDMacWildCard OBJECT-TYPE
            SYNTAX MacAddress
            MAX-ACCESS read-create
            STATUS current
            DESCRIPTION
                "Destination MAC address field in Ethernet packet head."
            ::= { h3cFTBasicGroupEntry 5 }

        h3cFTBasicGroupRowStatus OBJECT-TYPE
            SYNTAX RowStatus
            MAX-ACCESS read-create
            STATUS current
            DESCRIPTION
                "RowStatus."
            ::= { h3cFTBasicGroupEntry 6 }
--
--nodes of h3cFTExtendGroupTable
--
        h3cFTExtendGroupTable OBJECT-TYPE
            SYNTAX SEQUENCE OF H3cFTExtendGroupEntry
            MAX-ACCESS not-accessible
            STATUS current
            DESCRIPTION
                "A table of extend flow template group information."
            ::= { h3cFTConfigGroup 4 }

        h3cFTExtendGroupEntry OBJECT-TYPE
            SYNTAX H3cFTExtendGroupEntry
            MAX-ACCESS not-accessible
            STATUS current
            DESCRIPTION
                "Extend flow template group information entry."
            INDEX { h3cFTGroupIndex, h3cFTExtendGroupOffsetType }
            ::= { h3cFTExtendGroupTable 1 }

        H3cFTExtendGroupEntry ::=
            SEQUENCE
            {
                h3cFTExtendGroupOffsetType
                    INTEGER,
                h3cFTExtendGroupOffsetMaxValue
                    Integer32,
                h3cFTExtendGroupLengthMaxValue
                    Integer32,
                h3cFTExtendGroupRowStatus
                    RowStatus
            }

        h3cFTExtendGroupOffsetType OBJECT-TYPE
            SYNTAX INTEGER
            {
                start(1),
                mpls(2),
                l2(3),
                l4(4),
                l5(5),
                ipv4(6),
                ipv6(7)
            }
            MAX-ACCESS not-accessible
            STATUS current
            DESCRIPTION
                "Offset type of the packet.
                 start    Offset from the start of the packet
                 mpls     Offset from the head of MPLS
                 l2       Offset from the head of the L2 frame
                 l4       Offset from the head of L4 packet
                 l5       Offset from the head of the L5 packet
                 ipv4     Offset from the head of the IPv4 packet
                 ipv6     Offset from the head of the IPv6 packet
                "
            ::= { h3cFTExtendGroupEntry 1 }

        h3cFTExtendGroupOffsetMaxValue OBJECT-TYPE
            SYNTAX Integer32
            MAX-ACCESS read-create
            STATUS current
            DESCRIPTION
                "The max value of offset."
            ::= { h3cFTExtendGroupEntry 2 }    

        h3cFTExtendGroupLengthMaxValue OBJECT-TYPE
            SYNTAX Integer32
            MAX-ACCESS read-create
            STATUS current
            DESCRIPTION
                "The max value of length."
            ::= { h3cFTExtendGroupEntry 3 }

        h3cFTExtendGroupRowStatus OBJECT-TYPE
            SYNTAX RowStatus
            MAX-ACCESS read-create
            STATUS current
            DESCRIPTION
                "RowStatus."
            ::= { h3cFTExtendGroupEntry 4 }

--
--nodes of h3cFTApplyGroup
--
        h3cFTApplyGroup OBJECT IDENTIFIER ::= { h3cFlowTemplateMibObject 2 }

        h3cFTIfApplyTable OBJECT-TYPE
            SYNTAX SEQUENCE OF H3cFTIfApplyEntry
            MAX-ACCESS not-accessible
            STATUS current
            DESCRIPTION
                "A table of any interface with flowtemplate.
                 A flow template, which will be applied interface,
                 is an instance at h3cFTGroupTable 
                 and h3cFTBasicGroupTable or h3cFTExtendGroupTable.
                 A basic flow template is an instance at h3cFTGroupTable 
                 and h3cFTBasicGroupTable, and the instance's RowStatus 
                 must be 'active' at each table.
                 A extend flow template is an instance at h3cFTGroupTable
                 and h3cFTExtendGroupTable, and the instance's RowStatus 
                 must be 'active' at each table.  
                "
            ::= { h3cFTApplyGroup 1 }

        h3cFTIfApplyEntry OBJECT-TYPE
            SYNTAX H3cFTIfApplyEntry
            MAX-ACCESS not-accessible
            STATUS current
            DESCRIPTION
                "Any interface with flowtemplate information." 
            INDEX { ifIndex, h3cFTGroupIndex }
            ::= { h3cFTIfApplyTable 1 } 

        H3cFTIfApplyEntry ::=
            SEQUENCE
            {
                h3cFTIfApplyGroupName
                    OCTET STRING,
                h3cFTIfApplyRowStatus
                    RowStatus
            }

        h3cFTIfApplyGroupName OBJECT-TYPE
            SYNTAX OCTET STRING
            MAX-ACCESS read-only
            STATUS current
            DESCRIPTION
                "The name of flow template."
            ::= { h3cFTIfApplyEntry 1 }

        h3cFTIfApplyRowStatus OBJECT-TYPE
            SYNTAX RowStatus
            MAX-ACCESS read-create
            STATUS current
            DESCRIPTION
                "RowStatus."
            ::= { h3cFTIfApplyEntry 2 }
END 
