6. XML for LFB 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="BaseLFBLibrary"> <load library="BaseTypeLibrary"/> <LFBClassDefs> <LFBClassDef LFBClassID="3"> <name>EtherPHYCop</name> <synopsis> The EtherPHYCop LFB describes an Ethernet interface that limits the physical media to copper. </synopsis> <version>1.0</version> <inputPorts> <inputPort> <name>EtherPHYIn</name> <synopsis> The input port of the EtherPHYCop LFB. It expects any type of Ethernet frame. </synopsis> <expectation> <frameExpected> <ref>EthernetAll</ref> </frameExpected> </expectation>
</inputPort> </inputPorts> <outputPorts> <outputPort> <name>EtherPHYOut</name> <synopsis> The output port of the EtherPHYCop LFB. The output packet has the same Ethernet frame type as the input packet, associated with a metadata indicating the ID of the physical port. </synopsis> <product> <frameProduced> <ref>EthernetAll</ref> </frameProduced> <metadataProduced> <ref>PHYPortID</ref> </metadataProduced> </product> </outputPort> </outputPorts> <components> <component componentID="1" access="read-only"> <name>PHYPortID</name> <synopsis> The identification of the physical port </synopsis> <typeRef>uint32</typeRef> </component> <component componentID="2" access="read-write"> <name>AdminStatus</name> <synopsis> The port status administratively requested </synopsis> <typeRef>PortStatusType</typeRef> <defaultValue>2</defaultValue> </component> <component componentID="3" access="read-only"> <name>OperStatus</name> <synopsis> The port actual operational status </synopsis> <typeRef>PortStatusType</typeRef> </component> <component componentID="4" access="read-write"> <name>AdminLinkSpeed</name> <synopsis> The port link speed administratively requested
</synopsis> <typeRef>LANSpeedType</typeRef> <defaultValue>LAN_SPEED_AUTO</defaultValue> </component> <component componentID="5" access="read-only"> <name>OperLinkSpeed</name> <synopsis> The port actual operational link speed </synopsis> <typeRef>LANSpeedType</typeRef> </component> <component componentID="6" access="read-write"> <name>AdminDuplexMode</name> <synopsis> The port duplex mode administratively requested </synopsis> <typeRef>DuplexType</typeRef> <defaultValue>Auto</defaultValue> </component> <component componentID="7" access="read-only"> <name>OperDuplexMode</name> <synopsis> The port actual operational duplex mode </synopsis> <typeRef>DuplexType</typeRef> </component> <component componentID="8" access="read-only"> <name>CarrierStatus</name> <synopsis>The carrier status of the port </synopsis> <typeRef>boolean</typeRef> <defaultValue>false</defaultValue> </component> </components> <capabilities> <capability componentID="30"> <name>SupportedLinkSpeed</name> <synopsis> A list of link speeds the port supports </synopsis> <array> <typeRef>LANSpeedType</typeRef> </array> </capability> <capability componentID="31"> <name>SupportedDuplexMode</name> <synopsis> A list of duplex modes the port supports </synopsis>
<array> <typeRef>DuplexType</typeRef> </array> </capability> </capabilities> <events baseID="60"> <event eventID="1"> <name>PHYPortStatusChanged</name> <synopsis> An event reporting change on operational status of the physical port. </synopsis> <eventTarget> <eventField>OperStatus</eventField> </eventTarget> <eventChanged/> <eventReports> <eventReport> <eventField>OperStatus</eventField> </eventReport> </eventReports> </event> <event eventID="2"> <name>LinkSpeedChanged</name> <synopsis> An event reporting change on operational link speed of the physical port. </synopsis> <eventTarget> <eventField>OperLinkSpeed</eventField> </eventTarget> <eventChanged/> <eventReports> <eventReport> <eventField>OperLinkSpeed</eventField> </eventReport> </eventReports> </event> <event eventID="3"> <name>DuplexModeChanged</name> <synopsis> An event reporting change on operational duplex mode of the physical port. </synopsis> <eventTarget> <eventField>OperDuplexMode</eventField> </eventTarget> <eventChanged/>
<eventReports> <eventReport> <eventField>OperDuplexMode</eventField> </eventReport> </eventReports> </event> </events> </LFBClassDef> <LFBClassDef LFBClassID="4"> <name>EtherMACIn</name> <synopsis> EtherMACIn LFB describes an Ethernet port at MAC data link layer. The LFB describes Ethernet processing functions of MAC address locality check, deciding if the Ethernet packets should be bridged, providing Ethernet-layer flow control, etc. </synopsis> <version>1.0</version> <inputPorts> <inputPort group="false"> <name>EtherPktsIn</name> <synopsis> The input port of the EtherMACIn LFB. It expects any type of Ethernet frame. </synopsis> <expectation> <frameExpected> <ref>EthernetAll</ref> </frameExpected> <metadataExpected> <ref>PHYPortID</ref> </metadataExpected> </expectation> </inputPort> </inputPorts> <outputPorts> <outputPort group="false"> <name>NormalPathOut</name> <synopsis> An output port in the EtherMACIn LFB. It outputs Ethernet packets to downstream LFBs for normal processing like Ethernet packet classification and other L3 IP-layer processing. </synopsis> <product> <frameProduced> <ref>EthernetAll</ref> </frameProduced>
<metadataProduced> <ref>PHYPortID</ref> </metadataProduced> </product> </outputPort> <outputPort> <name>L2BridgingPathOut</name> <synopsis> An output port in the EtherMACIn LFB. It outputs Ethernet packets to downstream LFBs for layer 2 bridging processing. The port is switched on or off by the L2BridgingPathEnable flag in the LFB. </synopsis> <product> <frameProduced> <ref>EthernetAll</ref> </frameProduced> <metadataProduced> <ref>PHYPortID</ref> </metadataProduced> </product> </outputPort> </outputPorts> <components> <component componentID="1" access="read-write"> <name>AdminStatus</name> <synopsis> The LFB status administratively requested, which has the same data type with a port status. Default is in 'Down' status. </synopsis> <typeRef>PortStatusType</typeRef> <defaultValue>2</defaultValue> </component> <component componentID="2" access="read-write"> <name>LocalMACAddresses</name> <synopsis> Local MAC address(es) of the Ethernet port the LFB represents. </synopsis> <array> <typeRef>IEEEMAC</typeRef> </array> </component> <component componentID="3" access="read-write"> <name>L2BridgingPathEnable</name> <synopsis>
A flag indicating if the LFB L2 BridgingPath output port is enabled or not. Default is not enabled. </synopsis> <typeRef>boolean</typeRef> <defaultValue>false</defaultValue> </component> <component componentID="4" access="read-write"> <name>PromiscuousMode</name> <synopsis> A flag indicating whether the LFB is in promiscuous mode or not. Default is not. </synopsis> <typeRef>boolean</typeRef> <defaultValue>false</defaultValue> </component> <component componentID="5" access="read-write"> <name>TxFlowControl</name> <synopsis> A flag indicating whether transmit flow control is applied or not. Default is not. </synopsis> <optional/> <typeRef>boolean</typeRef> <defaultValue>false</defaultValue> </component> <component componentID="6" access="read-write"> <name>RxFlowControl</name> <synopsis> A flag indicating whether receive flow control is applied or not. Default is not. </synopsis> <optional/> <typeRef>boolean</typeRef> <defaultValue>false</defaultValue> </component> <component componentID="7" access="read-reset"> <name>MACInStats</name> <synopsis> The statistics of the EtherMACIn LFB </synopsis> <optional/> <typeRef>MACInStatsType</typeRef> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="5"> <name>EtherClassifier</name> <synopsis>
EtherClassifier LFB describes the process to decapsulate Ethernet packets and then classify them into various network-layer packets according to information in the Ethernet headers. It is expected the LFB classifies packets by packet types like IPv4, IPv6, MPLS, ARP, ND, etc. </synopsis> <version>1.0</version> <inputPorts> <inputPort> <name>EtherPktsIn</name> <synopsis> Input port of Ethernet packets. PHYPortID metadata is always expected while LogicalPortID metadata is optionally expected to associate with every input Ethernet packet. </synopsis> <expectation> <frameExpected> <ref>EthernetAll</ref> </frameExpected> <metadataExpected> <ref>PHYPortID</ref> <ref dependency="optional" defaultValue="0"> LogicalPortID</ref> </metadataExpected> </expectation> </inputPort> </inputPorts> <outputPorts> <outputPort group="true"> <name>ClassifyOut</name> <synopsis> A group port for output of Ethernet classifying results. </synopsis> <product> <frameProduced> <ref>Arbitrary</ref> </frameProduced> <metadataProduced> <ref>PHYPortID</ref> <ref>SrcMAC</ref> <ref>DstMAC</ref> <ref>EtherType</ref> <ref availability="conditional">VlanID</ref> <ref availability="conditional">VlanPriority</ref> </metadataProduced> </product>
</outputPort> <outputPort group="false"> <name>ExceptionOut</name> <synopsis> A singleton port for output of all Ethernet packets that fail the classifying process. An ExceptionID metadata indicates the failure reason. </synopsis> <product> <frameProduced> <ref>Arbitrary</ref> </frameProduced> <metadataProduced> <ref>ExceptionID</ref> </metadataProduced> </product> </outputPort> </outputPorts> <components> <component access="read-write" componentID="1"> <name>EtherDispatchTable</name> <synopsis> An EtherDispatchTable array component that is defined in the LFB to dispatch every Ethernet packet to output ports according to logical port ID assigned by the VlanInputTable in the LFB and Ethernet type in the Ethernet packet header. </synopsis> <typeRef>EtherDispatchTableType</typeRef> </component> <component access="read-write" componentID="2"> <name>VlanInputTable</name> <synopsis> A VlanInputTable array component that is defined in the LFB to classify VLAN Ethernet packets. Every input packet is assigned with a new LogicalPortID according to the packet's incoming port ID and VLAN ID. </synopsis> <typeRef>VlanInputTableType</typeRef> </component> <component access="read-reset" componentID="3"> <name>EtherClassifyStats</name> <synopsis> A table recording statistics on the Ethernet classifying process in the LFB. </synopsis> <optional/> <typeRef>EtherClassifyStatsTableType</typeRef>
</component> </components> </LFBClassDef> <LFBClassDef LFBClassID="6"> <name>EtherEncap</name> <synopsis> The EtherEncap LFB abstracts the process of encapsulating Ethernet headers onto received packets. The encapsulation is based on passed metadata. </synopsis> <version>1.0</version> <inputPorts> <inputPort group="false"> <name>EncapIn</name> <synopsis> An input port receiving IPv4 and/or IPv6 packets for encapsulation. A MediaEncapInfoIndex metadata is expected, and a VLAN priority metadata is optionally expected with every input packet. </synopsis> <expectation> <frameExpected> <ref>IPv4</ref> <ref>IPv6</ref> </frameExpected> <metadataExpected> <ref>MediaEncapInfoIndex</ref> <ref dependency="optional" defaultValue="0"> VlanPriority</ref> </metadataExpected> </expectation> </inputPort> </inputPorts> <outputPorts> <outputPort group="false"> <name>SuccessOut</name> <synopsis> An output port for packets that have found Ethernet L2 information and have been successfully encapsulated into an Ethernet packet. An L2PortID metadata is produced for every output packet. </synopsis> <product> <frameProduced> <ref>IPv4</ref> <ref>IPv6</ref> </frameProduced> <metadataProduced>
<ref>L2PortID</ref> </metadataProduced> </product> </outputPort> <outputPort group="false"> <name>ExceptionOut</name> <synopsis> An output port for packets that fail encapsulation in the LFB. An ExceptionID metadata indicates failure reason. </synopsis> <product> <frameProduced> <ref>IPv4</ref> <ref>IPv6</ref> </frameProduced> <metadataProduced> <ref>ExceptionID</ref> <ref>MediaEncapInfoIndex</ref> <ref availability="conditional">VlanPriority</ref> </metadataProduced> </product> </outputPort> </outputPorts> <components> <component componentID="1" access="read-write"> <name>EncapTable</name> <synopsis> An array table for Ethernet encapsulation information lookup. Each row of the array contains destination MAC address, source MAC address, VLAN ID, and output logical L2 port ID. </synopsis> <typeRef>EncapTableType</typeRef> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="7"> <name>EtherMACOut</name> <synopsis> EtherMACOut LFB abstracts an Ethernet port at MAC data link layer. It specifically describes Ethernet packet process for output to physical port. A downstream LFB is usually an Ethernet physical LFB like EtherPHYCop LFB. Note that Ethernet output functions are closely related to Ethernet input functions; therefore, some components defined in this LFB are aliases of EtherMACIn LFB components. </synopsis>
<version>1.0</version> <inputPorts> <inputPort group="false"> <name>EtherPktsIn</name> <synopsis> The input port of the EtherMACOut LFB. It expects any type of Ethernet frame. </synopsis> <expectation> <frameExpected> <ref>EthernetAll</ref> </frameExpected> <metadataExpected> <ref>PHYPortID</ref> </metadataExpected> </expectation> </inputPort> </inputPorts> <outputPorts> <outputPort group="false"> <name>EtherPktsOut</name> <synopsis> A port to output all Ethernet packets, each with a metadata indicating the ID of the physical port that the packet is to go through. </synopsis> <product> <frameProduced> <ref>EthernetAll</ref> </frameProduced> <metadataProduced> <ref>PHYPortID</ref> </metadataProduced> </product> </outputPort> </outputPorts> <components> <component componentID="1" access="read-write"> <name>AdminStatus</name> <synopsis> The LFB status administratively requested, which has the same data type with a port status. The component is defined as an alias of AdminStatus component in EtherMACIn LFB. </synopsis> <alias>PortStatusType</alias> </component> <component componentID="2" access="read-write">
<name>MTU</name> <synopsis>Maximum transmission unit (MTU) </synopsis> <typeRef>uint32</typeRef> </component> <component componentID="3" access="read-write"> <name>TxFlowControl</name> <synopsis> A flag indicating whether transmit flow control is applied, defined as an alias of TxFlowControl component in EtherMACIn LFB. </synopsis> <optional/> <alias>boolean</alias> </component> <component componentID="4" access="read-write"> <name>RxFlowControl</name> <synopsis> A flag indicating whether receive flow control is applied, defined as an alias of RxFlowControl component in EtherMACIn LFB. </synopsis> <optional/> <alias>boolean</alias> </component> <component componentID="5" access="read-reset"> <name>MACOutStats</name> <synopsis> The statistics of the EtherMACOut LFB </synopsis> <optional/> <typeRef>MACOutStatsType</typeRef> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="8"> <name>IPv4Validator</name> <synopsis> This LFB performs IPv4 validation according to RFC 1812 and its updates. The IPv4 packet will be output to the corresponding LFB port, indicating whether the packet is unicast or multicast or whether an exception has occurred or the validation failed. </synopsis> <version>1.0</version> <inputPorts> <inputPort> <name>ValidatePktsIn</name> <synopsis>
Input port for data packets to be validated </synopsis> <expectation> <frameExpected> <ref>Arbitrary</ref> </frameExpected> </expectation> </inputPort> </inputPorts> <outputPorts> <outputPort> <name>IPv4UnicastOut</name> <synopsis> Output port for validated IPv4 unicast packets </synopsis> <product> <frameProduced> <ref>IPv4Unicast</ref> </frameProduced> </product> </outputPort> <outputPort> <name>IPv4MulticastOut</name> <synopsis> Output port for validated IPv4 multicast packets </synopsis> <product> <frameProduced> <ref>IPv4Multicast</ref> </frameProduced> </product> </outputPort> <outputPort> <name>ExceptionOut</name> <synopsis> Output port for all packets with exceptional cases when validating. An ExceptionID metadata indicates the exception case type. </synopsis> <product> <frameProduced> <ref>IPv4</ref> </frameProduced> <metadataProduced> <ref>ExceptionID</ref> </metadataProduced> </product> </outputPort>
<outputPort> <name>FailOut</name> <synopsis> Output port for packets that failed validating process. A ValidateErrorID metadata indicates the error type or failure reason. </synopsis> <product> <frameProduced> <ref>IPv4</ref> </frameProduced> <metadataProduced> <ref>ValidateErrorID</ref> </metadataProduced> </product> </outputPort> </outputPorts> <components> <component access="read-write" componentID="1"> <name>IPv4ValidatorStats</name> <synopsis> The statistics information for validating process in the LFB. </synopsis> <optional/> <typeRef>IPv4ValidatorStatsType</typeRef> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="9"> <name>IPv6Validator</name> <synopsis> This LFB performs IPv6 validation according to RFC 2460 and its updates. Then, the IPv6 packet will be output to the corresponding port, indicating whether the packet is unicast or multicast or whether an exception has occurred or the validation failed. </synopsis> <version>1.0</version> <inputPorts> <inputPort> <name>ValidatePktsIn</name> <synopsis> Input port for data packets to be validated </synopsis> <expectation> <frameExpected> <ref>Arbitrary</ref>
</frameExpected> </expectation> </inputPort> </inputPorts> <outputPorts> <outputPort> <name>IPv6UnicastOut</name> <synopsis> Output port for validated IPv6 unicast packets </synopsis> <product> <frameProduced> <ref>IPv6Unicast</ref> </frameProduced> </product> </outputPort> <outputPort> <name>IPv6MulticastOut</name> <synopsis> Output port for validated IPv6 multicast packets </synopsis> <product> <frameProduced> <ref>IPv6Multicast</ref> </frameProduced> </product> </outputPort> <outputPort> <name>ExceptionOut</name> <synopsis> Output port for packets with exceptional cases when validating. An ExceptionID metadata indicates the exception case type. </synopsis> <product> <frameProduced> <ref>IPv6</ref> </frameProduced> <metadataProduced> <ref>ExceptionID</ref> </metadataProduced> </product> </outputPort> <outputPort> <name>FailOut</name> <synopsis> Output port for packets failed validating process. A ValidateErrorID metadata indicates the error type
or failure reason. </synopsis> <product> <frameProduced> <ref>IPv6</ref> </frameProduced> <metadataProduced> <ref>ValidateErrorID</ref> </metadataProduced> </product> </outputPort> </outputPorts> <components> <component access="read-write" componentID="1"> <name>IPv6ValidatorStats</name> <synopsis> The statistics information for validating process in the LFB. </synopsis> <optional/> <typeRef>IPv6ValidatorStatsType</typeRef> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="10"> <name>IPv4UcastLPM</name> <synopsis> The IPv4UcastLPM LFB abstracts the IPv4 unicast Longest Prefix Match (LPM) process. This LFB supports implementing equal-cost multipath (ECMP) routing and reverse path forwarding (RPF). </synopsis> <version>1.0</version> <inputPorts> <inputPort group="false"> <name>PktsIn</name> <synopsis> A port for input of packets to be processed. IPv4 unicast packets are expected. </synopsis> <expectation> <frameExpected> <ref>IPv4Unicast</ref> </frameExpected> </expectation> </inputPort> </inputPorts> <outputPorts>
<outputPort group="false"> <name>NormalOut</name> <synopsis> An output port to output IPv4 unicast packets that successfully passed the LPM lookup. A HopSelector metadata is produced to associate every output packet for downstream LFB to do next-hop action. </synopsis> <product> <frameProduced> <ref>IPv4Unicast</ref> </frameProduced> <metadataProduced> <ref>HopSelector</ref> </metadataProduced> </product> </outputPort> <outputPort group="false"> <name>ECMPOut</name> <synopsis> The port to output packets needing further ECMP processing. A downstream ECMP processing LFB is usually followed to the port. If ECMP is not required, no downstream LFB may be connected to the port. </synopsis> <product> <frameProduced> <ref>IPv4Unicast</ref> </frameProduced> <metadataProduced> <ref>HopSelector</ref> </metadataProduced> </product> </outputPort> <outputPort group="false"> <name>ExceptionOut</name> <synopsis> The port to output all packets with exceptional cases happened during LPM process. An ExceptionID metadata is associated to indicate what caused the exception. </synopsis> <product> <frameProduced> <ref>IPv4Unicast</ref> </frameProduced> <metadataProduced> <ref>ExceptionID</ref>
</metadataProduced> </product> </outputPort> </outputPorts> <components> <component componentID="1" access="read-write"> <name>IPv4PrefixTable</name> <synopsis> A table for IPv4 Longest Prefix Match(LPM). 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> <typeRef>IPv4PrefixTableType</typeRef> </component> <component componentID="2" access="read-reset"> <name>IPv4UcastLPMStats</name> <synopsis> The statistics information for the IPv4 unicast LPM process in the LFB. </synopsis> <optional/> <typeRef>IPv4UcastLPMStatsType</typeRef> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="11"> <name>IPv6UcastLPM</name> <synopsis> The IPv6UcastLPM LFB abstracts the IPv6 unicast Longest Prefix Match (LPM) process. This LFB supports implementing equal-cost multipath (ECMP) routing and reverse path forwarding (RPF). </synopsis> <version>1.0</version> <inputPorts> <inputPort group="false"> <name>PktsIn</name> <synopsis> A port for input of packets to be processed. IPv6 unicast packets are expected. </synopsis> <expectation> <frameExpected> <ref>IPv6Unicast</ref> </frameExpected> </expectation> </inputPort>
</inputPorts> <outputPorts> <outputPort group="false"> <name>NormalOut</name> <synopsis> An output port to output IPv6 unicast packets that successfully passed the LPM lookup. A HopSelector metadata is produced to associate every output packet for downstream LFB to do next-hop action. </synopsis> <product> <frameProduced> <ref>IPv6Unicast</ref> </frameProduced> <metadataProduced> <ref>HopSelector</ref> </metadataProduced> </product> </outputPort> <outputPort group="false"> <name>ECMPOut</name> <synopsis> The port to output packets needing further ECMP processing. A downstream ECMP processing LFB is usually followed to the port. If ECMP is not required, no downstream LFB may be connected to the port. </synopsis> <product> <frameProduced> <ref>IPv6Unicast</ref> </frameProduced> <metadataProduced> <ref>HopSelector</ref> </metadataProduced> </product> </outputPort> <outputPort group="false"> <name>ExceptionOut</name> <synopsis> The port to output all packets with exceptional cases happened during LPM process. An ExceptionID metadata is associated to indicate what caused the exception. </synopsis> <product> <frameProduced> <ref>IPv6Unicast</ref> </frameProduced>
<metadataProduced> <ref>ExceptionID</ref> </metadataProduced> </product> </outputPort> </outputPorts> <components> <component componentID="1" access="read-write"> <name>IPv6PrefixTable</name> <synopsis> A table for IPv6 Longest Prefix Match (LPM). 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> <typeRef>IPv6PrefixTableType</typeRef> </component> <component componentID="2" access="read-reset"> <name>IPv6UcastLPMStats</name> <synopsis> The statistics information for the IPv6 unicast LPM process in the LFB. </synopsis> <optional/> <typeRef>IPv6UcastLPMStatsType</typeRef> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="12"> <name>IPv4NextHop</name> <synopsis> The IPv4NextHop LFB abstracts the process of next-hop information application to IPv4 packets. It receives an IPv4 packet with an associated next-hop identifier (HopSelector) and uses the identifier as a table index to look up a next-hop table to find an appropriate output port. The data processing also involves the forwarding TTL decrement and IP checksum recalculation. </synopsis> <version>1.0</version> <inputPorts> <inputPort group="false"> <name>PktsIn</name> <synopsis> A port for input of unicast IPv4 packets, along with a HopSelector metadata. </synopsis> <expectation>
<frameExpected> <ref>IPv4Unicast</ref> </frameExpected> <metadataExpected> <ref>HopSelector</ref> </metadataExpected> </expectation> </inputPort> </inputPorts> <outputPorts> <outputPort group="true"> <name>SuccessOut</name> <synopsis> The group port for output of packets that successfully found next-hop information. Some metadata are associated with every packet. </synopsis> <product> <frameProduced> <ref>IPv4Unicast</ref> </frameProduced> <metadataProduced> <ref>L3PortID</ref> <ref>NextHopIPv4Addr</ref> <ref availability="conditional"> MediaEncapInfoIndex</ref> </metadataProduced> </product> </outputPort> <outputPort group="false"> <name>ExceptionOut</name> <synopsis> The output port for packets with exceptional or failure cases. An ExceptionID metadata indicates what caused the case. </synopsis> <product> <frameProduced> <ref>IPv4Unicast</ref> </frameProduced> <metadataProduced> <ref>ExceptionID</ref> </metadataProduced> </product> </outputPort> </outputPorts> <components> <component componentID="1">
<name>IPv4NextHopTable</name> <synopsis> The IPv4NextHopTable component. A HopSelector is used to match the table index to find out a row that contains the next-hop information result. </synopsis> <typeRef>IPv4NextHopTableType</typeRef> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="13"> <name>IPv6NextHop</name> <synopsis> The LFB abstracts the process of next-hop information application to IPv6 packets. It receives an IPv6 packet with an associated next-hop identifier (HopSelector) and uses the identifier as a table index to look up a next-hop table to find an appropriate output port. </synopsis> <version>1.0</version> <inputPorts> <inputPort group="false"> <name>PktsIn</name> <synopsis> A port for input of unicast IPv6 packets, along with a HopSelector metadata. </synopsis> <expectation> <frameExpected> <ref>IPv6Unicast</ref> </frameExpected> <metadataExpected> <ref>HopSelector</ref> </metadataExpected> </expectation> </inputPort> </inputPorts> <outputPorts> <outputPort group="true"> <name>SuccessOut</name> <synopsis> The group port for output of packets that successfully found next-hop information. Some metadata are associated with every packet. </synopsis> <product> <frameProduced>
<ref>IPv6Unicast</ref> </frameProduced> <metadataProduced> <ref>L3PortID</ref> <ref>NextHopIPv6Addr</ref> <ref availability="conditional"> MediaEncapInfoIndex</ref> </metadataProduced> </product> </outputPort> <outputPort group="false"> <name>ExceptionOut</name> <synopsis> The output port for packets with exceptional or failure cases. An ExceptionID metadata indicates what caused the case. </synopsis> <product> <frameProduced> <ref>IPv6Unicast</ref> </frameProduced> <metadataProduced> <ref>ExceptionID</ref> </metadataProduced> </product> </outputPort> </outputPorts> <components> <component componentID="1"> <name>IPv6NextHopTable</name> <synopsis> The IPv6NextHopTable component. A HopSelector is used to match the table index to find out a row that contains the next-hop information result. </synopsis> <typeRef>IPv6NextHopTableType</typeRef> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="14"> <name>RedirectIn</name> <synopsis> The RedirectIn LFB abstracts the process for the ForCES CE to inject data packets into the ForCES FE LFBs. </synopsis> <version>1.0</version> <outputPorts> <outputPort group="true">
<name>PktsOut</name> <synopsis> The output port of RedirectIn LFB, which is defined as a group port type. From the LFB topology's point of view, the RedirectIn LFB acts as a source point for data packets coming from CE; therefore, the LFB is defined with a singleton output port (and no input port). </synopsis> <product> <frameProduced> <ref>Arbitrary</ref> </frameProduced> </product> </outputPort> </outputPorts> <components> <component componentID="1"> <name>NumPacketsReceived</name> <synopsis> Number of packets received from CE. </synopsis> <optional/> <typeRef>uint64</typeRef> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="15"> <name>RedirectOut</name> <synopsis> The RedirectOut LFB abstracts the process for LFBs in a ForCES FE to deliver data packets to the ForCES CE. </synopsis> <version>1.0</version> <inputPorts> <inputPort group="false"> <name>PktsIn</name> <synopsis> The input port for the RedirectOut LFB. From the LFB topology's point of view, the RedirectOut LFB acts as a sink point for data packets going to the CE; therefore, RedirectOut LFB is defined with a singleton input port (and no output port). </synopsis> <expectation> <frameExpected> <ref>Arbitrary</ref> </frameExpected>
</expectation> </inputPort> </inputPorts> <components> <component componentID="1"> <name>NumPacketsSent</name> <synopsis> Number of packets sent to CE. </synopsis> <optional/> <typeRef>uint64</typeRef> </component> </components> </LFBClassDef> <LFBClassDef LFBClassID="16"> <name>BasicMetadataDispatch</name> <synopsis> The BasicMetadataDispatch LFB is defined to abstract the process by which packets are dispatched to various output paths based on associated metadata value. Current version of the LFB only allows the metadata value to be a 32-bit integer. </synopsis> <version>1.0</version> <inputPorts> <inputPort> <name>PktsIn</name> <synopsis> The packet input port for dispatching. Every input packet should be associated with a metadata that will be used by the LFB to do the dispatch. </synopsis> <expectation> <frameExpected> <ref>Arbitrary</ref> </frameExpected> <metadataExpected> <ref>Arbitrary</ref> </metadataExpected> </expectation> </inputPort> </inputPorts> <outputPorts> <outputPort group="true"> <name>PktsOut</name> <synopsis> The group output port that outputs dispatching results. A packet with its associated metadata
having found an OutputIndex by successfully looking up the dispatch table will be output to the group port instance with the corresponding index. </synopsis> <product> <frameProduced> <ref>Arbitrary</ref> </frameProduced> </product> </outputPort> <outputPort group="false"> <name>ExceptionOut</name> <synopsis> The output port that outputs packets that failed to process. An ExceptionID metadata indicates what caused the exception. </synopsis> <product> <frameProduced> <ref>Arbitrary</ref> </frameProduced> <metadataProduced> <ref>ExceptionID</ref> </metadataProduced> </product> </outputPort> </outputPorts> <components> <component access="read-write" componentID="1"> <name>MetadataID</name> <synopsis> The ID of the metadata to be used for dispatching packets. </synopsis> <typeRef>uint32</typeRef> </component> <component access="read-write" componentID="2"> <name>MetadataDispatchTable</name> <synopsis> The MetadataDispatchTable component, which contains entries of a metadata value and an output index, specifying that a packet with the metadata value must go out from the instance with the output index of the LFB group output port. </synopsis> <typeRef>MetadataDispatchTableType</typeRef> </component> </components>
</LFBClassDef> <LFBClassDef LFBClassID="17"> <name>GenericScheduler</name> <synopsis> This is a preliminary generic scheduler LFB abstracting a simple scheduling process, which may be used as a basic LFB to construct a more complex scheduler LFB. </synopsis> <version>1.0</version> <inputPorts> <inputPort group="true"> <name>PktsIn</name> <synopsis> The group input port of the LFB. Inside the LFB, each instance of the group port is connected to a queue marked with a queue ID, whose value is index of the port instance. </synopsis> <expectation> <frameExpected> <ref>Arbitrary</ref> </frameExpected> </expectation> </inputPort> </inputPorts> <outputPorts> <outputPort> <name>PktsOut</name> <synopsis> The output port of the LFB. Scheduled packets are output from the port. </synopsis> <product> <frameProduced> <ref>Arbitrary</ref> </frameProduced> </product> </outputPort> </outputPorts> <components> <component access="read-write" componentID="1"> <name>SchedulingDiscipline</name> <synopsis> The SchedulingDiscipline component, which is for the CE to specify a scheduling discipline to the LFB. </synopsis> <typeRef>SchdDisciplineType</typeRef> <defaultValue>1</defaultValue>
</component> <component access="read-only" componentID="2"> <name>QueueStats</name> <synopsis> The QueueStats component, which is defined to allow the CE to query every queue statistics in the scheduler. </synopsis> <optional/> <typeRef>QueueStatsTableType</typeRef> </component> </components> <capabilities> <capability componentID="30"> <name>QueueLenLimit</name> <synopsis> The QueueLenLimit capability, which specifies maximum length of each queue. The length unit is in bytes. </synopsis> <typeRef>uint32</typeRef> </capability> </capabilities> </LFBClassDef> </LFBClassDefs> </LFBLibrary>7. LFB Class Use Cases
This section demonstrates examples on how the LFB classes defined by the base LFB library in Section 6 can be applied to achieve some typical router functions. The functions demonstrated are: o IPv4 forwarding o ARP processing It is assumed the LFB topology on the FE described has already been established by the CE and maps to the use cases illustrated in this section. The use cases demonstrated in this section are mere examples and by no means should be treated as the only way one would construct router functionality from LFBs; based on the capability of the FE(s), a CE should be able to express different NE applications.
7.1. IPv4 Forwarding
Figure 2 shows the typical LFB processing path for an IPv4 unicast forwarding case with Ethernet media interfaces by use of the base LFB classes. Note that in the figure, to focus on the IP forwarding function, some inputs or outputs of LFBs that are not related to the IPv4 forwarding function are not shown. For example, an EtherClassifier LFB normally has two output ports: a "ClassifyOut" group output port and an "ExceptionOut" singleton output port, with the group port containing various port instances according to various classified packet types (Section 5.1.3). In this figure, only the IPv4 and IPv6 packet output port instances are shown for displaying the mere IPv4 forwarding processing function.
+-----+ +------+ | | | | | |<---------------|Ether |<----------------------------+ | | |MACOut| | | | | | | |Ether| +------+ | |PHY | | |Cop | +---+ | |#1 | +-----+ | |----->IPv6 Packets | | | | | | | | | | |Ether| | | IPv4 Packets | | |->|MACIn|-->| |-+ +----+ | +-----+ | | | | | | |---> Multicast Packets | +-----+ +---+ | | | +-----+ +---+ | Ether +->| |------->| | | | | . Classifier| | |Unicast |IPv4 | | | | . | | |Packets |Ucast|->| |--+ | . | +----+ |LPM | | | | | +---+ | IPv4 +-----+ +---+ | | +-----+ | | | Validator IPv4 | | | | | | | NextHop| | +-----+ |Ether| | |-+ IPv4 Packets | | | |->|MACIn|-->| | | | | | | | | |----->IPv6 Packets | | |Ether| +-----+ +---+ | | |PHY | Ether +----+ | | |Cop | Classifier | | +-------+ | | |#n | +------+ | | |Ether | | | | | | | | |<--|Encap |<-+ | | | | |<------| | | | | | |<---------------|Ether | ...| | +-------+ | | | |MACOut| +---| | | | | | | | +----+ | +-----+ +------+ | BasicMetadataDispatch | +----------->-------------+ Figure 2: LFB Use Case for IPv4 Forwarding In the LFB use case, a number of EtherPHYCop LFB (Section 5.1.1) instances are used to describe physical-layer functions of the ports. PHYPortID metadata is generated by the EtherPHYCop LFB and is used by all the subsequent downstream LFBs. An EtherMACIn LFB (Section 5.1.2), which describes the MAC-layer processing, follows every EtherPHYCop LFB. The EtherMACIn LFB may do a locality check of MAC addresses if the CE configures the appropriate EtherMACIn LFB component.
Ethernet packets out of the EtherMACIn LFB are sent to an EtherClassifier LFB (Section 5.1.3) to be decapsulated and classified into network-layer types like IPv4, IPv6, ARP, etc. In the example use case, every physical Ethernet interface is associated with one Classifier instance; although not illustrated, it is also feasible that all physical interfaces are associated with only one Ethernet Classifier instance. EtherClassifier uses the PHYPortID metadata, the Ethernet type of the input packet, and VlanID (if present in the input Ethernet packets) to decide the packet network-layer type and the LFB output port to the downstream LFB. The EtherClassifier LFB also assigns a new logical port ID metadata to the packet for later use. The EtherClassifier may also generate some new metadata for every packet, like EtherType, SrcMAC, DstMAC, LogicPortID, etc., for consumption by downstream LFBs. If a packet is classified as an IPv4 packet, it is sent downstream to an IPv4Validator LFB (Section 5.2.1) to validate the IPv4 packet. In the validator LFB, IPv4 packets are validated and are additionally classified into either IPv4 unicast packets or multicast packets. IPv4 unicast packets are sent to downstream to the IPv4UcastLPM LFB (Section 5.3.1). The IPv4UcastLPM LFB is where the longest prefix match decision is made, and a next-hop selection is selected. The next-hop ID metadata is generated by the IPv4UcastLPM LFB to be consumed downstream by the IPv4NextHop LFB (Section 5.3.2). The IPv4NextHop LFB uses the next-hop ID metadata to derive where the packet is to go next and the media encapsulation type for the port, etc. The IPv4NextHop LFB generates the L3PortID metadata used to identify a next-hop output physical/logical port. In the example use case, the next-hop output port is an Ethernet type; as a result, the packet and its L3 port ID metadata are sent downstream to an EtherEncap LFB (Section 5.1.4). The EtherEncap LFB encapsulates the incoming packet into an Ethernet frame. A BasicMetadataDispatch LFB (Section 5.5.1) follows the EtherEncap LFB. The BasicMetadataDispatch LFB is where packets are finally dispatched to different output physical/logical ports based on the L3PortID metadata sent to the LFB.
7.2. ARP Processing
Figure 3 shows the processing path for the Address Resolution Protocol (ARP) in the case the CE implements the ARP processing function. By no means is this the only way ARP processing could be achieved; as an example, ARP processing could happen at the FE, but that discussion is out of the scope of this use case. +---+ +---+ | | ARP packets | | | |-------------->---------+--->| | To CE ...-->| | . | | | | | . | +---+ | | . | RedirectOut +---+ ^ Ether EtherEncap | IPv4 packets lack Classifier +---+ | address resolution information | | | Packets need | |--------->---+ ...--------->| | L2 Encapsulation| | +---+ | | +------+ | | +-->| |--+ +---+ |Ether | | | | +---+ | | |--------->|MACOut|-->... From CE| |--+ +-->| | . +------+ | |ARP Packets | | . | |from CE | | . +------+ | | | |--------> |Ether |-->... +---+ +---+ |MACOut| RedirectIn BasicMetadata +------+ Dispatch Figure 3: LFB Use Case for ARP There are two ways ARP processing could be triggered in the CE as illustrated in Figure 3: o ARP packets arriving from outside of the NE. o IPV4 packets failing to resolve within the FE. ARP packets from network interfaces are filtered out by EtherClassifier LFB. The classified ARP packets and associated metadata are then sent downstream to the RedirectOut LFB (Section 5.4.2) to be transported to CE.
The EtherEncap LFB, as described in Section 5.1.4, receives packets that need Ethernet L2 encapsulating. When the EtherEncap LFB fails to find the necessary L2 Ethernet information with which to encapsulate the packet, it outputs the packet to its ExceptionOut LFB port. Downstream to EtherEncap LFB's ExceptionOut LFB port is the RedirectOut LFB, which transports the packet to the CE (see Section 5.1.4 on EtherEncap LFB for details). To achieve its goal, the CE needs to generate ARP request and response packets and send them to external (to the NE) networks. ARP request and response packets from the CE are redirected to an FE via a RedirectIn LFB (Section 5.4.1). As was the case with forwarded IPv4 packets, outgoing ARP packets are also encapsulated to Ethernet format by the EtherEncap LFB, and then dispatched to different interfaces via a BasicMetadataDispatch LFB. The BasicMetadataDispatch LFB dispatches the packets according to the L3PortID metadata included in every ARP packet sent from CE.