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.
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="..."/>
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 type4.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
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 table4.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
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
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>
<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>
<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>
<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">
<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>
<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>
<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>
<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>
<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>
</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">
<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">
<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">
<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>
<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>
<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">
<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>
</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>
<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>
<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>
</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>
<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.
</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.
</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>
<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">
<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>
</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>