tech-invite   World Map     

IETF     RFCs     Groups     SIP     ABNFs    |    3GPP     Specs     Gloss.     Arch.     IMS     UICC    |    Misc.    |    search     info

RFC 6956

 
 
 

Forwarding and Control Element Separation (ForCES) Logical Function Block (LFB) Library

Part 2 of 5, p. 11 to 41
Prev RFC Part       Next RFC Part

 


prevText      Top      Up      ToC       Page 11 
4.  Base Types

   The FE model [RFC5812] has specified predefined (built-in) atomic
   data types: char, uchar, int16, uint16, int32, uint32, int64, uint64,
   string[N], string, byte[N], boolean, octetstring[N], float16,
   float32, and float64.

Top      Up      ToC       Page 12 
   Note that, unlike the Simple Network Management Protocol (SNMP)
   information model, called the Structure of Management Information
   (SMI) [RFC2578], the FE model has not defined specific atomic data
   types for counting purposes.  This document also does not define
   specific counter types.  To describe LFB elements for packet
   statistics, which actually requires counters on packets, an unsigned
   integer, like an uint32 or an uint64, is adopted.  This document
   states that any LFB element defined for counting purposes is
   specified to monotonically increase until it reaches a maximum value,
   when it wraps around and starts increasing again from zero.  This
   document also states that how the unsigned integer element might be
   maintained to cope with issues like counter discontinuities when a
   counter wraps or is reset for any reason is an implementation's
   issue.  If a CE is expected to understand more meanings of the
   counter element than stated above, a private definition on the
   element between the CE and FE may be required.

   Based on the atomic data types and with the use of type definition
   elements in the FE model XML schema, new data types, packet frame
   types, and metadata types can be defined.

   To define a base LFB library for typical router functions, a set of
   base data types, frame types, and metadata types should be defined.
   This section provides a brief description of the base types and a
   full XML definition of them as well.

   The base type XML definitions are provided with a separate XML
   library file named "BaseTypeLibrary".  Users can refer to this
   library by the statement:

   <load library="BaseTypeLibrary" location="..."/>

Top      Up      ToC       Page 13 
4.1.  Data Types

   Data types defined in the base type library are categorized by the
   following types: atomic, compound struct, and compound array.

4.1.1.  Atomic

   The following data types are defined as atomic data types and put in
   the base type library:

    Data Type Name      Brief Description
    --------------      -----------------
    IPv4Addr            IPv4 address
    IPv6Addr            IPv6 address
    IEEEMAC             IEEE MAC address
    LANSpeedType        LAN speed by value types
    DuplexType          Duplex types
    PortStatusType      The possible types of port status, used for
                         both administrative and operative status
    VlanIDType          The type of VLAN ID
    VlanPriorityType    The type of VLAN priority
    SchdDisciplineType  Scheduling discipline type

4.1.2.  Compound Struct

   The following compound struct types are defined in the base type
   library:

    Data Type Name           Brief Description
    --------------           -----------------
    EtherDispatchEntryType   Entry type for Ethernet dispatch table
    VlanInputTableEntryType  Entry type for VLAN input table
    EncapTableEntryType      Entry type for Ethernet encapsulation table
    MACInStatsType           Statistics type for EtherMACIn LFB
    MACOutStatsType          Statistics type for EtherMACOut LFB
    EtherClassifyStatsType   Entry type for statistics table in
                              EtherClassifier LFB
    IPv4PrefixInfoType       Entry type for IPv4 prefix table
    IPv6PrefixInfoType       Entry type for IPv6 prefix table
    IPv4NextHopInfoType      Entry type for IPv4 next-hop table
    IPv6NextHopInfoType      Entry type for IPv6 next-hop table
    IPv4ValidatorStatsType   Statistics type in IPv4validator LFB
    IPv6ValidatorStatsType   Statistics type in IPv6validator LFB
    IPv4UcastLPMStatsType    Statistics type in IPv4UcastLPM LFB
    IPv6UcastLPMStatsType    Statistics type in IPv6UcastLPM LFB
    QueueStatsType           Entry type for queue depth table
    MetadataDispatchType     Entry type for metadata dispatch table

Top      Up      ToC       Page 14 
4.1.3.  Compound Array

   Compound array types are mostly created based on compound struct
   types for LFB table components.  The following compound array types
   are defined in this base type library:

    Data Type Name               Brief Description
    --------------               -----------------
    EtherClassifyStatsTableType  Type for Ethernet classifier statistics
                                  information table
    EtherDispatchTableType       Type for Ethernet dispatch table
    VlanInputTableType           Type for VLAN input table
    EncapTableType               Type for Ethernet encapsulation table
    IPv4PrefixTableType          Type for IPv4 prefix table
    IPv6PrefixTableType          Type for IPv6 prefix table
    IPv4NextHopTableType         Type for IPv4 next-hop table
    IPv6NextHopTableType         Type for IPv6 next-hop table
    MetadataDispatchTableType    Type for Metadata dispatch table
    QueueStatsTableType          Type for Queue depth table

4.2.  Frame Types

   According to the FE model [RFC5812], frame types are used in LFB
   definitions to define packet frame types that an LFB expects at its
   input port and that the LFB emits at its output port.  The <frameDef>
   element in the FE model is used to define a new frame type.

   The following frame types are defined in the base type library:

    Frame Name           Brief Description
    --------------       -----------------
    EthernetII           An Ethernet II frame
    ARP                  An ARP packet frame
    IPv4                 An IPv4 packet frame
    IPv6                 An IPv6 packet frame
    IPv4Unicast          An IPv4 unicast packet frame
    IPv4Multicast        An IPv4 multicast packet frame
    IPv6Unicast          An IPv6 unicast packet frame
    IPv6Multicast        An IPv6 multicast packet frame
    Arbitrary            Any type of packet frames

Top      Up      ToC       Page 15 
4.3.  Metadata Types

   LFB metadata is used to communicate per-packet state from one LFB to
   another.  The <metadataDef> element in the FE model is used to define
   a new metadata type.

   The following metadata types are currently defined in the base type
   library.

   Metadata Name  Metadata ID  Brief Description
   ------------   -----------  -----------------
   PHYPortID          1        Metadata indicating a physical port ID
   SrcMAC             2        Metadata indicating a source MAC address
   DstMAC             3        Metadata indicating a destination MAC
                                address
   LogicalPortID      4        Metadata of a logical port ID
   EtherType          5        Metadata indicating an Ethernet type
   VlanID             6        Metadata of a VLAN ID
   VlanPriority       7        Metadata of a VLAN priority
   NextHopIPv4Addr    8        Metadata representing a next-hop IPv4
                                address
   NextHopIPv6Addr    9        Metadata representing a next-hop IPv6
                                address
   HopSelector        10       Metadata indicating a hop selector
   ExceptionID        11       Metadata indicating exception types for
                                exceptional cases during LFB processing
   ValidateErrorID    12       Metadata indicating error types when a
                                packet passes validation process
   L3PortID           13       Metadata indicating ID of an L3 logical
                                port
   RedirectIndex      14       Metadata that CE sends to RedirectIn LFB,
                                indicating an associated packet a group
                                output port index of the LFB
   MediaEncapInfoIndex 15      A search key a packet uses to look up a
                                table in related LFBs to select an
                                encapsulation media

Top      Up      ToC       Page 16 
4.4.  XML for Base Type Library

<?xml version="1.0" encoding="UTF-8"?>
<LFBLibrary xmlns="urn:ietf:params:xml:ns:forces:lfbmodel:1.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     provides="BaseTypeLibrary">
   <frameDefs>
      <frameDef>
         <name>EthernetAll</name>
         <synopsis>Packet with any Ethernet type</synopsis>
      </frameDef>
      <frameDef>
         <name>EthernetII</name>
         <synopsis>Packet with Ethernet II type</synopsis>
      </frameDef>
      <frameDef>
         <name>ARP</name>
         <synopsis>ARP packet</synopsis>
      </frameDef>
      <frameDef>
         <name>IPv4</name>
         <synopsis>IPv4 packet</synopsis>
      </frameDef>
      <frameDef>
         <name>IPv6</name>
         <synopsis>IPv6 packet</synopsis>
      </frameDef>
      <frameDef>
         <name>IPv4Unicast</name>
         <synopsis>IPv4 unicast packet</synopsis>
      </frameDef>
      <frameDef>
         <name>IPv4Multicast</name>
         <synopsis>IPv4 multicast packet</synopsis>
      </frameDef>
      <frameDef>
         <name>IPv6Unicast</name>
         <synopsis>IPv6 unicast packet</synopsis>
      </frameDef>
      <frameDef>
         <name>IPv6Multicast</name>
         <synopsis>IPv6 multicast packet</synopsis>
      </frameDef>
      <frameDef>
         <name>Arbitrary</name>
         <synopsis>Any type of packet</synopsis>
      </frameDef>
   </frameDefs>

Top      Up      ToC       Page 17 
   <dataTypeDefs>
      <dataTypeDef>
         <name>IPv4Addr</name>
         <synopsis>IPv4 address</synopsis>
         <typeRef>byte[4]</typeRef>
      </dataTypeDef>
      <dataTypeDef>
         <name>IPv6Addr</name>
         <synopsis>IPv6 address</synopsis>
         <typeRef>byte[16]</typeRef>
      </dataTypeDef>
      <dataTypeDef>
         <name>IEEEMAC</name>
         <synopsis>IEEE MAC address</synopsis>
         <typeRef>byte[6]</typeRef>
      </dataTypeDef>
      <dataTypeDef>
        <name>LANSpeedType</name>
        <synopsis>LAN speed type</synopsis>
        <atomic>
         <baseType>uint32</baseType>
         <specialValues>
           <specialValue value="0x00000000">
            <name>LAN_SPEED_NONE</name>
            <synopsis>Nothing connected</synopsis>
           </specialValue>
           <specialValue value="0x00000001">
            <name>LAN_SPEED_10M</name>
            <synopsis>10M Ethernet</synopsis>
           </specialValue>
           <specialValue value="0x00000002">
            <name>LAN_SPEED_100M</name>
            <synopsis>100M Ethernet</synopsis>
           </specialValue>
           <specialValue value="0x00000003">
            <name>LAN_SPEED_1G</name>
            <synopsis>1G Ethernet</synopsis>
           </specialValue>
           <specialValue value="0x00000004">
            <name>LAN_SPEED_10G</name>
            <synopsis>10G Ethernet</synopsis>
           </specialValue>
           <specialValue value="0x00000005">
            <name>LAN_SPEED_40G</name>
            <synopsis>40G Ethernet</synopsis>
           </specialValue>
           <specialValue value="0x00000006">
            <name>LAN_SPEED_100G</name>

Top      Up      ToC       Page 18 
            <synopsis>100G Ethernet</synopsis>
           </specialValue>
           <specialValue value="0x00000007">
            <name>LAN_SPEED_400G</name>
            <synopsis>400G Ethernet</synopsis>
           </specialValue>
           <specialValue value="0x00000008">
            <name>LAN_SPEED_1T</name>
            <synopsis>1T Ethernet</synopsis>
           </specialValue>
           <specialValue value="0x00000009">
            <name>LAN_SPEED_OTHER</name>
            <synopsis>Other LAN speed type</synopsis>
           </specialValue>
           <specialValue value="0x0000000A">
            <name>LAN_SPEED_AUTO</name>
            <synopsis>LAN speed by auto negotiation</synopsis>
           </specialValue>
         </specialValues>
        </atomic>
      </dataTypeDef>
      <dataTypeDef>
        <name>DuplexType</name>
        <synopsis>Duplex mode type</synopsis>
        <atomic>
         <baseType>uint32</baseType>
         <specialValues>
           <specialValue value="0x00000001">
            <name>Auto</name>
            <synopsis>Auto negotiation</synopsis>
           </specialValue>
           <specialValue value="0x00000002">
            <name>HalfDuplex</name>
            <synopsis>Half duplex</synopsis>
           </specialValue>
           <specialValue value="0x00000003">
            <name>FullDuplex</name>
            <synopsis>Full duplex</synopsis>
           </specialValue>
         </specialValues>
        </atomic>
      </dataTypeDef>
      <dataTypeDef>
        <name>PortStatusType</name>
        <synopsis>
          Type for port status, used for both administrative and
          operative status.
        </synopsis>

Top      Up      ToC       Page 19 
        <atomic>
         <baseType>uchar</baseType>
         <specialValues>
           <specialValue value="0">
            <name>Disabled</name>
            <synopsis>Port disabled</synopsis>
           </specialValue>
           <specialValue value="1">
            <name>Up</name>
            <synopsis>Port up</synopsis>
           </specialValue>
           <specialValue value="2">
            <name>Down</name>
            <synopsis>Port down</synopsis>
           </specialValue>
         </specialValues>
        </atomic>
      </dataTypeDef>
      <dataTypeDef>
         <name>MACInStatsType</name>
         <synopsis>
           Data type defined for statistics in EtherMACIn LFB.
         </synopsis>
         <struct>
            <component componentID="1">
               <name>NumPacketsReceived</name>
               <synopsis>Number of packets received</synopsis>
               <typeRef>uint64</typeRef>
            </component>
            <component componentID="2">
               <name>NumPacketsDropped</name>
               <synopsis>Number of packets dropped</synopsis>
               <typeRef>uint64</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>MACOutStatsType</name>
         <synopsis>
           Data type defined for statistics in EtherMACOut LFB.
         </synopsis>
         <struct>
            <component componentID="1">
               <name>NumPacketsTransmitted</name>
               <synopsis>Number of packets transmitted</synopsis>
               <typeRef>uint64</typeRef>
            </component>
            <component componentID="2">

Top      Up      ToC       Page 20 
               <name>NumPacketsDropped</name>
               <synopsis>Number of packets dropped</synopsis>
               <typeRef>uint64</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>EtherDispatchEntryType</name>
         <synopsis>
           Data type defined for entry of Ethernet dispatch
           table in EtherClassifier LFB.
         </synopsis>
         <struct>
            <component componentID="1">
               <name>LogicalPortID</name>
               <synopsis>Logical port ID</synopsis>
               <typeRef>uint32</typeRef>
            </component>
            <component componentID="2">
               <name>EtherType</name>
               <synopsis>
                The Ethernet type of the Ethernet packet.
               </synopsis>
               <typeRef>uint16</typeRef>
            </component>
            <component componentID="3">
               <name>Reserved</name>
               <synopsis>
               A reserved bit space mainly for purpose of padding
               and packing efficiency.
               </synopsis>
               <typeRef>uint16</typeRef>
            </component>
            <component componentID="4">
               <name>LFBOutputSelectIndex</name>
                <synopsis>
                  Index for a packet to select an instance in the
                  group output port of EtherClassifier LFB to output.
                </synopsis>
               <typeRef>uint32</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>

Top      Up      ToC       Page 21 
         <name>EtherDispatchTableType</name>
         <synopsis>
           Data type defined for Ethernet dispatch table in
           EtherClassifier LFB.  The table is composed of an array
           of entries with EtherDispatchEntryType data type.
         </synopsis>
         <array type="variable-size">
           <typeRef>EtherDispatchEntryType</typeRef>
         </array>
      </dataTypeDef>
      <dataTypeDef>
         <name>VlanIDType</name>
         <synopsis>Data type for VLAN ID</synopsis>
         <atomic>
         <baseType>uint16</baseType>
           <rangeRestriction>
              <allowedRange min="0" max="4095"/>
            </rangeRestriction>
         </atomic>
       </dataTypeDef>
      <dataTypeDef>
         <name>VlanPriorityType</name>
         <synopsis>Data type for VLAN priority</synopsis>
         <atomic>
         <baseType>uchar</baseType>
           <rangeRestriction>
              <allowedRange min="0" max="7"/>
           </rangeRestriction>
         </atomic>
      </dataTypeDef>
      <dataTypeDef>
         <name>VlanInputTableEntryType</name>
         <synopsis>
           Data type for entry of VLAN input table in EtherClassifier
           LFB.  Each entry of the table contains an incoming port ID,
           a VLAN ID and a logical port ID.  Every input packet is
           assigned with a new logical port ID according to the
           packet incoming port ID and the VLAN ID.
           </synopsis>
         <struct>
            <component componentID="1">
               <name>IncomingPortID</name>
               <synopsis>The incoming port ID</synopsis>
               <typeRef>uint32</typeRef>
            </component>
            <component componentID="2">
               <name>VlanID</name>
               <synopsis>The VLAN ID</synopsis>

Top      Up      ToC       Page 22 
               <typeRef>VlanIDType</typeRef>
            </component>
            <component componentID="3">
               <name>Reserved</name>
               <synopsis>
               A reserved bit space mainly for purpose of padding
               and packing efficiency.
               </synopsis>
               <typeRef>uint16</typeRef>
            </component>
            <component componentID="4">
               <name>LogicalPortID</name>
               <synopsis>The logical port ID</synopsis>
               <typeRef>uint32</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>VlanInputTableType</name>
         <synopsis>
           Data type for the VLAN input table in EtherClassifier
           LFB.  The table is composed of an array of entries with
           VlanInputTableEntryType.
         </synopsis>
         <array type="variable-size">
           <typeRef>VlanInputTableEntryType</typeRef>
         </array>
      </dataTypeDef>
      <dataTypeDef>
         <name>EtherClassifyStatsType</name>
         <synopsis>
           Data type for entry of statistics table in EtherClassifier
           LFB.
         </synopsis>
         <struct>
            <component componentID="1">
               <name>EtherType</name>
               <synopsis>
                The Ethernet type of the Ethernet packet.
               </synopsis>
               <typeRef>uint16</typeRef>
            </component>
            <component componentID="2">
               <name>Reserved</name>
               <synopsis>
               A reserved bit space mainly for purpose of padding
               and packing efficiency.
               </synopsis>

Top      Up      ToC       Page 23 
               <typeRef>uint16</typeRef>
            </component>
            <component componentID="3">
               <name>PacketsNum</name>
               <synopsis>Packets number</synopsis>
               <typeRef>uint64</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>EtherClassifyStatsTableType</name>
         <synopsis>
           Data type for statistics table in EtherClassifier LFB.
         </synopsis>
         <array type="variable-size">
           <typeRef>EtherClassifyStatsType</typeRef>
         </array>
      </dataTypeDef>
      <dataTypeDef>
         <name>IPv4ValidatorStatsType</name>
         <synopsis>
           Data type for statistics in IPv4validator LFB.
         </synopsis>
         <struct>
            <component componentID="1">
               <name>badHeaderPkts</name>
               <synopsis>Number of packets with bad header</synopsis>
               <typeRef>uint64</typeRef>
            </component>
            <component componentID="2">
               <name>badTotalLengthPkts</name>
               <synopsis>
                 Number of packets with bad total length
               </synopsis>
               <typeRef>uint64</typeRef>
            </component>
            <component componentID="3">
               <name>badTTLPkts</name>
               <synopsis>Number of packets with bad TTL</synopsis>
               <typeRef>uint64</typeRef>
            </component>
            <component componentID="4">
               <name>badChecksumPkts</name>
               <synopsis>Number of packets with bad checksum</synopsis>
               <typeRef>uint64</typeRef>
            </component>
         </struct>
      </dataTypeDef>

Top      Up      ToC       Page 24 
      <dataTypeDef>
         <name>IPv6ValidatorStatsType</name>
         <synopsis>
           Data type for statistics in IPv6validator LFB.
         </synopsis>
         <struct>
            <component componentID="1">
               <name>badHeaderPkts</name>
               <synopsis>Number of packets with bad header</synopsis>
               <typeRef>uint64</typeRef>
            </component>
            <component componentID="2">
               <name>badTotalLengthPkts</name>
               <synopsis>
               Number of packets with bad total length.
               </synopsis>
               <typeRef>uint64</typeRef>
            </component>
            <component componentID="3">
               <name>badHopLimitPkts</name>
               <synopsis>
               Number of packets with bad hop limit.
               </synopsis>
               <typeRef>uint64</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>IPv4PrefixInfoType</name>
         <synopsis>Data type for entry of IPv4 longest prefix match
          table in IPv4UcastLPM LFB.  The destination IPv4 address
          of every input packet is used as a search key to look up
          the table to find out a next-hop selector.</synopsis>
         <struct>
            <component componentID="1">
               <name>IPv4Address</name>
               <synopsis>The destination IPv4 address</synopsis>
               <typeRef>IPv4Addr</typeRef>
            </component>
            <component componentID="2">
               <name>Prefixlen</name>
               <synopsis>The prefix length</synopsis>
               <atomic>
                  <baseType>uchar</baseType>
                  <rangeRestriction>
                     <allowedRange min="0" max="32"/>
                  </rangeRestriction>
               </atomic>

Top      Up      ToC       Page 25 
            </component>
            <component componentID="3">
               <name>ECMPFlag</name>
               <synopsis>The ECMP flag</synopsis>
               <atomic>
                  <baseType>boolean</baseType>
                  <specialValues>
                     <specialValue value="false">
                        <name>False</name>
                        <synopsis>
                         ECMP false, indicating the route
                         does not have multiple next hops.
                        </synopsis>
                     </specialValue>
                     <specialValue value="true">
                        <name>True</name>
                        <synopsis>
                          ECMP true, indicating the route
                          has multiple next hops.
                        </synopsis>
                     </specialValue>
                  </specialValues>
               </atomic>
            </component>
            <component componentID="4">
               <name>DefaultRouteFlag</name>
               <synopsis>Default route flag</synopsis>
               <atomic>
                  <baseType>boolean</baseType>
                  <specialValues>
                     <specialValue value="false">
                        <name>False</name>
                        <synopsis>
                          Default route false, indicating the
                          route is not a default route.
                        </synopsis>
                     </specialValue>
                     <specialValue value="true">
                        <name>True</name>
                        <synopsis>
                          Default route true, indicating the
                          route is a default route.
                        </synopsis>
                     </specialValue>
                  </specialValues>
               </atomic>
            </component>
            <component componentID="5">

Top      Up      ToC       Page 26 
               <name>Reserved</name>
               <synopsis>
               A reserved bit space mainly for purpose of padding
               and packing efficiency.
               </synopsis>
               <typeRef>uchar</typeRef>
            </component>
            <component componentID="6">
               <name>HopSelector</name>
               <synopsis>
                 The HopSelector produced by the prefix matching LFB,
                 which will be output to downstream LFB to find next-
                 hop information.
               </synopsis>
               <typeRef>uint32</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>IPv4PrefixTableType</name>
         <synopsis>
           Data type for IPv4 longest prefix match table in
           IPv4UcastLPM LFB.  Entry of the table is
           of IPv4PrefixInfoType data type.
         </synopsis>
         <array type="variable-size">
           <typeRef>IPv4PrefixInfoType</typeRef>
         </array>
      </dataTypeDef>
      <dataTypeDef>
         <name>IPv4UcastLPMStatsType</name>
         <synopsis>
          Data type for statistics in IPv4UcastLPM LFB.
         </synopsis>
         <struct>
            <component componentID="1">
               <name>InRcvdPkts</name>
               <synopsis>Number of received input packets.</synopsis>
               <typeRef>uint64</typeRef>
            </component>
            <component componentID="2">
               <name>FwdPkts</name>
               <synopsis>Number of forwarded packets.</synopsis>
               <typeRef>uint64</typeRef>
            </component>
            <component componentID="3">

Top      Up      ToC       Page 27 
               <name>NoRoutePkts</name>
               <synopsis>
                Number of packets with no route found.
               </synopsis>
               <typeRef>uint64</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>IPv6PrefixInfoType</name>
         <synopsis>Data type for entry of IPv6 longest prefix match
          table in IPv6UcastLPM LFB.  The destination IPv6 address
          of every input packet is used as a search key to look up
          the table to find out a next-hop selector.</synopsis>
         <struct>
            <component componentID="1">
               <name>IPv6Address</name>
               <synopsis>The destination IPv6 address</synopsis>
               <typeRef>IPv6Addr</typeRef>
            </component>
            <component componentID="2">
               <name>Prefixlen</name>
               <synopsis>The prefix length</synopsis>
               <atomic>
                  <baseType>uchar</baseType>
                  <rangeRestriction>
                     <allowedRange min="0" max="128"/>
                  </rangeRestriction>
               </atomic>
            </component>
            <component componentID="3">
               <name>ECMPFlag</name>
               <synopsis>ECMP flag</synopsis>
               <atomic>
                  <baseType>boolean</baseType>
                  <specialValues>
                     <specialValue value="false">
                        <name>False</name>
                        <synopsis>ECMP false</synopsis>
                     </specialValue>
                     <specialValue value="true">
                        <name>True</name>
                        <synopsis>ECMP true</synopsis>
                     </specialValue>
                  </specialValues>
               </atomic>
            </component>
            <component componentID="4">

Top      Up      ToC       Page 28 
               <name>DefaultRouteFlag</name>
               <synopsis>Default route flag</synopsis>
               <atomic>
                  <baseType>boolean</baseType>
                  <specialValues>
                     <specialValue value="false">
                        <name>False</name>
                        <synopsis>Default false</synopsis>
                     </specialValue>
                     <specialValue value="true">
                        <name>True</name>
                        <synopsis>Default route true</synopsis>
                     </specialValue>
                  </specialValues>
               </atomic>
            </component>
            <component componentID="5">
               <name>Reserved</name>
               <synopsis>
               A reserved bit space mainly for purpose of padding
               and packing efficiency.
               </synopsis>
               <typeRef>uchar</typeRef>
            </component>
            <component componentID="6">
               <name>HopSelector</name>
               <synopsis>
                 The HopSelector produced by the prefix matching LFB,
                 which will be output to downstream LFB to find next-
                 hop information.
               </synopsis>
               <typeRef>uint32</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>IPv6PrefixTableType</name>
         <synopsis>
           Data type for IPv6 longest prefix match table in
           IPv6UcastLPM LFB.  Entry of the table is
           of IPv6PrefixInfoType data type.
         </synopsis>
         <array type="variable-size">
           <typeRef>IPv6PrefixInfoType</typeRef>
         </array>
      </dataTypeDef>
      <dataTypeDef>

Top      Up      ToC       Page 29 
         <name>IPv6UcastLPMStatsType</name>
         <synopsis>Data type for statistics in IPv6UcastLPM LFB
         </synopsis>
         <struct>
            <component componentID="1">
               <name>InRcvdPkts</name>
               <synopsis>Number of received input packets</synopsis>
               <typeRef>uint64</typeRef>
            </component>
            <component componentID="2">
               <name>FwdPkts</name>
               <synopsis>Number of forwarded packets</synopsis>
               <typeRef>uint64</typeRef>
            </component>
            <component componentID="3">
               <name>NoRoutePkts</name>
               <synopsis>
                Number of packets with no route found.
               </synopsis>
               <typeRef>uint64</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>IPv4NextHopInfoType</name>
         <synopsis>
           Data type for entry of IPv4 next-hop information table
           in IPv4NextHop LFB.  The table uses a hop selector
           received from upstream LFB as a search key to look up
           index of the table to find the next-hop information.
         </synopsis>
         <struct>
            <component componentID="1">
               <name>L3PortID</name>
               <synopsis>
                The ID of the logical output port that is to pass
                onto downstream LFB, indicating what port to the
                neighbor is as defined by L3.
               </synopsis>
               <typeRef>uint32</typeRef>
            </component>
            <component componentID="2">
               <name>MTU</name>
               <synopsis>
                Maximum Transmission Unit for outgoing port
               </synopsis>
               <typeRef>uint32</typeRef>
            </component>

Top      Up      ToC       Page 30 
            <component componentID="3">
               <name>NextHopIPAddr</name>
               <synopsis>The next-hop IPv4 address</synopsis>
               <typeRef>IPv4Addr</typeRef>
            </component>
            <component componentID="4">
               <name>MediaEncapInfoIndex</name>
               <synopsis>
                 The index passed onto a downstream encapsulation
                 LFB, used there as a search key to lookup further
                 encapsulation information.
               </synopsis>
               <typeRef>uint32</typeRef>
            </component>
            <component componentID="5">
               <name>LFBOutputSelectIndex</name>
                <synopsis>
                  The index for the IPv4NextHop LFB to choose an
                  instance in the group output port of the LFB to
                  output.
                </synopsis>
               <typeRef>uint32</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>IPv4NextHopTableType</name>
         <synopsis>
           Data type for IPv4 next-hop table in IPv4NextHop LFB.
           Entry of the table is of IPv4NextHopInfoType data type.
         </synopsis>
         <array type="variable-size">
           <typeRef>IPv4NextHopInfoType</typeRef>
         </array>
      </dataTypeDef>
      <dataTypeDef>
         <name>IPv6NextHopInfoType</name>
         <synopsis>
           Data type for entry of IPv6 next-hop information table
           in IPv6NextHop LFB.  The table uses a hop selector
           received from upstream LFB as a search key to look up
           index of the table to find the next-hop information.
         </synopsis>
         <struct>
            <component componentID="1">

Top      Up      ToC       Page 31 
               <name>L3PortID</name>
               <synopsis>
                The ID of the logical output port that is to pass
                onto downstream LFB, indicating what port to the
                neighbor is as defined by L3.
               </synopsis>
               <typeRef>uint32</typeRef>
            </component>
            <component componentID="2">
               <name>MTU</name>
               <synopsis>
                 Maximum Transmission Unit for outgoing port
               </synopsis>
               <typeRef>uint32</typeRef>
            </component>
            <component componentID="3">
               <name>NextHopIPAddr</name>
               <synopsis>The next-hop IPv6 address</synopsis>
               <typeRef>IPv6Addr</typeRef>
            </component>
            <component componentID="4">
               <name>MediaEncapInfoIndex</name>
               <synopsis>
                 The index passed onto a downstream encapsulation
                 LFB, used there as a search key to lookup further
                 encapsulation information.
               </synopsis>
               <typeRef>uint32</typeRef>
            </component>
            <component componentID="5">
               <name>LFBOutputSelectIndex</name>
                <synopsis>
                 The index for the IPv6NextHop LFB to choose an instance
                 in the group output port of the LFB to output.
                </synopsis>
               <typeRef>uint32</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>IPv6NextHopTableType</name>
         <synopsis>
           Data type for IPv6 next-hop table in IPv6NextHop LFB.
           Entry of the table is of IPv6NextHopInfoType data type.
         </synopsis>
         <array type="variable-size">
           <typeRef>IPv6NextHopInfoType</typeRef>
         </array>

Top      Up      ToC       Page 32 
      </dataTypeDef>
      <dataTypeDef>
         <name>EncapTableEntryType</name>
         <synopsis>
           Data type for entry of Ethernet encapsulation table in
           EtherEncap LFB.  The LFB uses the MediaEncapInfoIndex
           received from upstream LFB as index of the table to
           find encapsulation information of every packet.
         </synopsis>
         <struct>
            <component componentID="1">
               <name>DstMac</name>
               <synopsis>
                 Destination MAC address for Ethernet encapsulation of
                 the packet.
               </synopsis>
               <typeRef>IEEEMAC</typeRef>
            </component>
            <component componentID="2">
               <name>SrcMac</name>
               <synopsis>
                 Source MAC address for Ethernet encapsulation of the
                 packet.
               </synopsis>
               <typeRef>IEEEMAC</typeRef>
            </component>
            <component componentID="3">
               <name>VlanID</name>
               <synopsis>The VLAN ID assigned to the packet</synopsis>
               <typeRef>VlanIDType</typeRef>
            </component>
             <component componentID="4">
               <name>Reserved</name>
               <synopsis>
                A reserved bit space mainly for purpose of padding
                and packing efficiency.
               </synopsis>
               <typeRef>uint16</typeRef>
            </component>
            <component componentID="5">
               <name>L2PortID</name>
               <synopsis>
                 The L2 logical output port ID for the packet.
               </synopsis>
               <typeRef>uint32</typeRef>
            </component>
         </struct>
      </dataTypeDef>

Top      Up      ToC       Page 33 
      <dataTypeDef>
         <name>EncapTableType</name>
         <synopsis>
           Data type for Ethernet encapsulation table in EtherEncap
           LFB.  Entry of the table is of EncapTableEntryType data
           type.
         </synopsis>
         <array type="variable-size">
           <typeRef>EncapTableEntryType</typeRef>
         </array>
      </dataTypeDef>
      <dataTypeDef>
         <name>MetadataDispatchType</name>
         <synopsis>
           Data type for entry of metadata dispatch table used in
           BasicMetadataDispatch LFB.  The LFB uses a metadata value
           as a search key to look up the table to find an index of
           the LFB group output port to output the packet.
         </synopsis>
         <struct>
            <component componentID="1">
               <name>MetadataValue</name>
               <synopsis>The value of the dispatch metadata</synopsis>
               <typeRef>uint32</typeRef>
            </component>
            <component componentID="2">
               <name>OutputIndex</name>
               <synopsis>
                 Index of a group output port for outgoing packets.
               </synopsis>
               <typeRef>uint32</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>MetadataDispatchTableType</name>
         <synopsis>
           Data type for metadata dispatch table used in
           BasicMetadataDispatch LFB.  Metadata value of
           the table is also defined as a content key field.
         </synopsis>
         <array type="variable-size">
           <typeRef>MetadataDispatchType</typeRef>
           <contentKey contentKeyID="1">
           <contentKeyField>MetadataValue</contentKeyField>
           </contentKey>
         </array>
      </dataTypeDef>

Top      Up      ToC       Page 34 
      <dataTypeDef>
         <name>SchdDisciplineType</name>
         <synopsis>Scheduling discipline type</synopsis>
         <atomic>
            <baseType>uint32</baseType>
            <specialValues>
               <specialValue value="1">
                  <name>RR</name>
                  <synopsis>
                    Round Robin scheduling discipline
                  </synopsis>
               </specialValue>
            </specialValues>
         </atomic>
      </dataTypeDef>
      <dataTypeDef>
         <name>QueueStatsType</name>
         <synopsis>
           Data type for entry of queue statistics table in
           GenericScheduler LFB.
         </synopsis>
         <struct>
            <component componentID="1">
               <name>QueueID</name>
               <synopsis>The input queue ID</synopsis>
               <typeRef>uint32</typeRef>
            </component>
            <component componentID="2">
               <name>QueueDepthInPackets</name>
               <synopsis>Current queue depth in packets</synopsis>
               <typeRef>uint32</typeRef>
            </component>
            <component componentID="3">
               <name>QueueDepthInBytes</name>
               <synopsis>Current queue depth in bytes</synopsis>
               <typeRef>uint32</typeRef>
            </component>
         </struct>
      </dataTypeDef>
      <dataTypeDef>
         <name>QueueStatsTableType</name>
         <synopsis>
           Data type for queue statistics table in GenericScheduler
           LFB.  Entry of the table is of QueueStatsType data type.
         </synopsis>
         <array type="variable-size">
           <typeRef>QueueStatsType</typeRef>
         </array>

Top      Up      ToC       Page 35 
      </dataTypeDef>
   </dataTypeDefs>
   <metadataDefs>
      <metadataDef>
         <name>PHYPortID</name>
         <synopsis>Metadata indicating physical port ID</synopsis>
         <metadataID>1</metadataID>
         <typeRef>uint32</typeRef>
      </metadataDef>
      <metadataDef>
         <name>SrcMAC</name>
         <synopsis>Metadata indicating source MAC address</synopsis>
         <metadataID>2</metadataID>
         <typeRef>IEEEMAC</typeRef>
      </metadataDef>
      <metadataDef>
         <name>DstMAC</name>
         <synopsis>
           Metadata indicating destination MAC address.
         </synopsis>
         <metadataID>3</metadataID>
         <typeRef>IEEEMAC</typeRef>
      </metadataDef>
      <metadataDef>
         <name>LogicalPortID</name>
         <synopsis>Metadata of logical port ID</synopsis>
         <metadataID>4</metadataID>
         <typeRef>uint32</typeRef>
      </metadataDef>
      <metadataDef>
         <name>EtherType</name>
         <synopsis>Metadata indicating Ethernet type</synopsis>
         <metadataID>5</metadataID>
         <typeRef>uint16</typeRef>
      </metadataDef>
      <metadataDef>
         <name>VlanID</name>
         <synopsis>Metadata of VLAN ID</synopsis>
         <metadataID>6</metadataID>
         <typeRef>VlanIDType</typeRef>
      </metadataDef>
      <metadataDef>
         <name>VlanPriority</name>
         <synopsis>Metadata of VLAN priority</synopsis>
         <metadataID>7</metadataID>
         <typeRef>VlanPriorityType</typeRef>
      </metadataDef>
      <metadataDef>

Top      Up      ToC       Page 36 
         <name>NextHopIPv4Addr</name>
         <synopsis>
           Metadata representing a next-hop IPv4 address
         </synopsis>
         <metadataID>8</metadataID>
         <typeRef>IPv4Addr</typeRef>
      </metadataDef>
      <metadataDef>
         <name>NextHopIPv6Addr</name>
         <synopsis>
           Metadata representing a next-hop IPv6 address
         </synopsis>
         <metadataID>9</metadataID>
         <typeRef>IPv6Addr</typeRef>
      </metadataDef>
      <metadataDef>
         <name>HopSelector</name>
         <synopsis>Metadata indicating a hop selector</synopsis>
         <metadataID>10</metadataID>
         <typeRef>uint32</typeRef>
      </metadataDef>
      <metadataDef>
         <name>ExceptionID</name>
         <synopsis>
           Metadata indicating exception types for exceptional cases
           during packet processing.
         </synopsis>
         <metadataID>11</metadataID>
         <atomic>
            <baseType>uint32</baseType>
            <specialValues>
                <specialValue value="0">
                  <name>AnyUnrecognizedExceptionCase</name>
                  <synopsis>Any unrecognized exception case</synopsis>
                  </specialValue>
                <specialValue value="1">
                  <name>ClassifyNoMatching</name>
                  <synopsis>
                   Exception case: no matching of tables in
                   EtherClassifier LFB.
                  </synopsis>
                </specialValue>
                <specialValue value="2">
                  <name>MediaEncapInfoIndexInvalid</name>
                  <synopsis>
                   Exception case: the MediaEncapInfoIndex value of
                   the packet is invalid and cannot be allocated in
                   the EncapTable in EtherEncap LFB.

Top      Up      ToC       Page 37 
                  </synopsis>
                </specialValue>
                <specialValue value="3">
                  <name>EncapTableLookupFailed</name>
                  <synopsis>
                   Exception case: the packet fails lookup of the
                   EncapTable table in EtherEncap LFB even though the
                   MediaEncapInfoIndex is valid.
                  </synopsis>
                </specialValue>
                <specialValue value="4">
                  <name>BadTTL</name>
                  <synopsis>
                   Exception case: packet with expired TTL
                  </synopsis>
                </specialValue>
                <specialValue value="5">
                  <name>IPv4HeaderLengthMismatch</name>
                  <synopsis>
                   Exception case: packet with header length more
                   than 5 words.
                  </synopsis>
                </specialValue>
                <specialValue value="6">
                   <name>RouterAlertOptions</name>
                   <synopsis>
                    Exception case: packet IP head includes router
                    alert options.
                   </synopsis>
                </specialValue>
                <specialValue value="7">
                   <name>IPv6HopLimitZero</name>
                   <synopsis>
                    Exception case: packet with the hop limit to zero.
                   </synopsis>
                </specialValue>
                <specialValue value="8">
                   <name>IPv6NextHeaderHBH</name>
                   <synopsis>
                    Exception case: packet with next header set to
                    Hop-by-Hop.
                   </synopsis>
                </specialValue>
                <specialValue value="9">
                   <name>SrcAddressException</name>
                   <synopsis>
                    Exception case: packet with exceptional source
                    address.

Top      Up      ToC       Page 38 
                   </synopsis>
                </specialValue>
                <specialValue value="10">
                   <name>DstAddressException</name>
                   <synopsis>
                    Exception case: packet with exceptional destination
                    address.
                   </synopsis>
                </specialValue>
                <specialValue value="11">
                   <name>LPMLookupFailed</name>
                   <synopsis>
                    Exception case: packet failed the LPM table lookup
                    in a prefix match LFB.
                   </synopsis>
                </specialValue>
                <specialValue value="12">
                   <name>HopSelectorInvalid</name>
                   <synopsis>
                    Exception case: HopSelector for the packet is
                    invalid.
                   </synopsis>
                </specialValue>
                <specialValue value="13">
                   <name>NextHopLookupFailed</name>
                   <synopsis>
                    Exception case: packet failed lookup of a next-hop
                    table even though HopSelector is valid.
                   </synopsis>
                </specialValue>
                <specialValue value="14">
                   <name>FragRequired</name>
                   <synopsis>
                    Exception case: packet fragmentation is required
                   </synopsis>
                </specialValue>
                <specialValue value="15">
                   <name>MetadataNoMatching</name>
                   <synopsis>
                    Exception case: there is no matching when looking
                    up the metadata dispatch table in
                    BasicMetadataDispatch LFB.
                   </synopsis>
                </specialValue>
             </specialValues>
          </atomic>
      </metadataDef>
      <metadataDef>

Top      Up      ToC       Page 39 
          <name>ValidateErrorID</name>
          <synopsis>
            Metadata indicating error types when a packet passes
            validation process.
          </synopsis>
          <metadataID>12</metadataID>
          <atomic>
             <baseType>uint32</baseType>
             <specialValues>
                <specialValue value="0">
                   <name>AnyUnrecognizedValidateErrorCase</name>
                   <synopsis>
                     Any unrecognized validate error case.
                   </synopsis>
                </specialValue>
                <specialValue value="1">
                   <name>InvalidIPv4PacketSize</name>
                   <synopsis>
                    Error case: packet length reported by the link
                    layer is less than 20 bytes.
                   </synopsis>
                </specialValue>
                <specialValue value="2">
                   <name>NotIPv4Packet</name>
                   <synopsis>
                    Error case: packet is not IP version 4</synopsis>
                </specialValue>
                <specialValue value="3">
                   <name>InvalidIPv4HeaderLengthSize</name>
                   <synopsis>
                    Error case: packet with header length field in
                    the header less than 5 words.
                   </synopsis>
                </specialValue>
                <specialValue value="4">
                   <name>InvalidIPv4LengthFieldSize</name>
                   <synopsis>
                    Error case: packet with total length field in the
                    header less than 20 bytes.
                   </synopsis>
                </specialValue>
                <specialValue value="5">
                   <name>InvalidIPv4Checksum</name>
                   <synopsis>
                    Error case: packet with invalid checksum.
                    </synopsis>
                </specialValue>
                <specialValue value="6">

Top      Up      ToC       Page 40 
                   <name>InvalidIPv4SrcAddr</name>
                   <synopsis>
                    Error case: packet with invalid IPv4 source
                    address.
                   </synopsis>
                </specialValue>
                <specialValue value="7">
                   <name>InvalidIPv4DstAddr</name>
                   <synopsis>
                    Error case: packet with invalid IPv4 destination
                    address.
                   </synopsis>
                </specialValue>
                <specialValue value="8">
                   <name>InvalidIPv6PacketSize</name>
                   <synopsis>
                    Error case: packet size is less than 40 bytes.
                   </synopsis>
                </specialValue>
                <specialValue value="9">
                   <name>NotIPv6Packet</name>
                   <synopsis>
                    Error case: packet is not IP version 6
                    </synopsis>
                </specialValue>
                <specialValue value="10">
                   <name>InvalidIPv6SrcAddr</name>
                   <synopsis>
                    Error case: packet with invalid IPv6 source address.
                   </synopsis>
                </specialValue>
                <specialValue value="11">
                   <name>InvalidIPv6DstAddr</name>
                   <synopsis>
                    Error case: packet with invalid IPv6 destination
                    address.
                   </synopsis>
                </specialValue>
             </specialValues>
          </atomic>
      </metadataDef>
      <metadataDef>
         <name>L3PortID</name>
         <synopsis>
           Metadata indicating ID of an L3 logical port
         </synopsis>
         <metadataID>13</metadataID>
         <typeRef>uint32</typeRef>

Top      Up      ToC       Page 41 
      </metadataDef>
      <metadataDef>
         <name>RedirectIndex</name>
         <synopsis>
           Metadata that CE sends to RedirectIn LFB, indicating
           the index of the LFB group output port.
         </synopsis>
         <metadataID>14</metadataID>
         <typeRef>uint32</typeRef>
      </metadataDef>
      <metadataDef>
         <name>MediaEncapInfoIndex</name>
         <synopsis>
           A search key a packet uses to look up a table to select
           an encapsulation media.
         </synopsis>
         <metadataID>15</metadataID>
         <typeRef>uint32</typeRef>
      </metadataDef>
   </metadataDefs>
</LFBLibrary>



(page 41 continued on part 3)

Next RFC Part