Tech-invite3GPPspaceIETFspace
96959493929190898887868584838281807978777675747372717069686766656463626160595857565554535251504948474645444342414039383736353433323130292827262524232221201918171615141312111009080706050403020100
in Index   Prev   Next

RFC 6956

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

Pages: 111
Proposed Standard
Errata
Part 2 of 5 – Pages 11 to 41
First   Prev   Next

Top   ToC   RFC6956 - Page 11   prevText

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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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   ToC   RFC6956 - 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 Section