Subject: the definition of some LFBs

From: Dong Ligang <[email-masked]>
Date: Thu, 16 Feb 2006 08:58:42 -0500

Sorry I forgot to enclose the definition file.

----- Original Message ----- 
From: "Dong Ligang" <[email-masked]>
To: <[email-masked]>
Sent: Thursday, February 16, 2006 7:28 PM
Subject: the definition of some LFBs

hi, 

During our implementation of ForCES-based router, we summarize the 
definition of some LFBs, including IPv4LPMClassifier LFB, DSCPClassifier 

LFB, NextHopApplicator LFB, GenericConnectivity LFB, MetaDataMarker LFB, 

Scheduler LFB, and QueueManagement LFB. This file also defines data types
 
and metadata that are related to the LFBs. This definition file is enclos
ed 
in this email.
Our work needs much improvement. We believe your comments will help impro
ve 
it. 

regards
Dong, Ligang

<?xml version="1.0" encoding="UTF-8"?> 
<LFBLibrary xmlns="http://ietf.org/forces/1.0/lfbmodel" provides="this_library">            
<!-- This file define IPv4LPMClassifier LFB, DSCPClassifier LFB, NextHopApplicator LFB, GenericConnectivity LFB, MetaDataMarker LFB, Scheduler LFB, and QueueManagement LFB. 
This file also defines data types and metadata that are related to the LFBs. 
Some basic data types are just duplicated from existing work. -->
<!-- Authors and Contributors of the work are: 
Ligang Dong, Weiming Wang, Fenggen Jia, Ming Gao, and Jin Yu. -->

<dataTypeDefs>
        <dataTypeDef> 
        		<name>IEEEMACAddr</name> 
          	<synopsis>48-bit IEEE MAC address</synopsis> 
        		<typeRef>byte[6]</typeRef>
        </dataTypeDef> 
        <dataTypeDef> 
          	<name>ipv4Addr</name> 
          	<synopsis>IPv4 address</synopsis> 
             <typeRef> uint32</typeRef>
</dataTypeDef>
      	<dataTypeDef> 
        		<name>dscp</name> 
        		<synopsis>Diffserv code point.</synopsis> 
        		<atomic> 
          		<baseType>uchar</baseType> 
          		<rangeRestriction> 
            			<allowedRange min="0" max="63"/> 
          		</rangeRestriction> 
          		<specialValues> 
            			<specialValue value="0"> 
              			<name>DSCP-BE</name> 
              			<synopsis>Best Effort</synopsis> 
            			</specialValue> 
            			... 
          		</specialValues> 
        		</atomic> 
</dataTypeDef>
<dataTypeDef> 
        		<name>dscp-mapping-table</name> 
        		<synopsis> 
          		A table of 64 DSCP values, used to re-map code space. 
        		</synopsis> 
        		<array type="fixed-size" length="64"> 
            		<typeRef>dscp</typeRef> 
        		</array> 
</dataTypeDef>
      	<dataTypeDef> 
        		<name>mac-alias-table</name> 
        		<synopsis>A table with up to 8 IEEE MAC addresses</synopsis> 
        		<array type="variable-size" max-length="8"> 
            		<typeRef>IEEEMACAddr</typeRef> 
        		</array> 
      	</dataTypeDef>
      	<dataTypeDef> 
        		<name>classification-table</name> 
        		<synopsis> 
          		A table of classification rules and result opcodes. 
        		</synopsis> 
        		<array type="variable-size"> 
          		<struct> 
            			<element elementID="1"> 
              			<name>rule</name> 
              			<synopsis>The rule to match</synopsis> 
              			<typeRef>classrule</typeRef> 
            			</element> 
            			<element elementID="2"> 
              			<name>opcode</name> 
              			<synopsis>The result code</synopsis> 
              			<typeRef>opcode</typeRef> 
            			</element> 
          		</struct> 
        		</array> 
      	</dataTypeDef>
      	<dataTypeDef> 
        		<name>ipv4Prefix</name> 
        		<synopsis> 
          		IPv4 prefix defined by an address and a prefix length 
        		</synopsis> 
        		<struct> 
         		<element elementID="1"> 
            			<name>address</name> 
            			<synopsis>Address part</synopsis> 
            			<typeRef>ipv4addr</typeRef> 
          		</element> 
          		<element elementID="2"> 
            			<name>prefixlen</name> 
            			<synopsis>Prefix length part</synopsis> 
            			<atomic> 
              			<baseType>uchar</baseType> 
              			<rangeRestriction> 
                				<allowedRange min="0" max="32"/> 
              			</rangeRestriction> 
            			</atomic> 
          		</element> 
       		</struct> 
      	</dataTypeDef>
<dataTypeDef> 
        		<name>ipv4PrefixInfoTable</name> 
        		<synopsis> 
          		A table of information about known prefixes 
        		</synopsis> 
        		<array type="variable-size"> 
          		<struct> 
            			<element elementID="1"> 
              			<name>address-prefix</name> 
              			<synopsis>the prefix being described</synopsis> 
              			<typeRef>ipv4Prefix</typeRef> 
            			</element> 
            			<element elementID="2"> 
              			<name>source</name> 
              			<synopsis>where is this from</synopsis> 
              			<typeRef>uint16</typeRef> 
            			</element> 
            			<element elementID="3"> 
              			<name>prefInfo</name> 
              			<synopsis>the information we care about</synopsis> 
              			<typeRef>hypothetical-info-type</typeRef> 
            			</element> 
          		</struct> 
          		<key keyID="1"> 
            			<keyField> address-prefix.ipv4addr </keyField> 
            			<keyField> address-prefix.prefixlen </keyField> 
            			<keyField> source </keyField> 
          		</key> 
        		</array> 
      	</dataTypeDef> 
<dataTypeDef>
       		<name>MatchTargetType</name>
       		<synopsis>
         Indicator for the kind of field to be matched by this
         entry in a classifier.
       		</synopsis>
       		<atomic>
         		<baseType>uint8</baseType>
         		<specialValues>
           			<specialValue value="0">
             		<name>MatchNone</name>
             		<synopsis>A matcher against no field</synopsis>
           		</specialValue>
           		<specialValue value="1">
             		<name>MatchMetaData</name>
             		<synopsis>A matcher against a metadata item</synopsis>
           		</specialValue>
           		<specialValue value="2">
             		<name>MatchPacketField</name>
             		<synopsis>A matcher that works against an identified packet field.
</synopsis>
           		</specialValue>
<specialValue value="3">
             		<name>MatchOffsetLength</name>
             		<synopsis>The match target is a specified portion of the packet.
             		</synopsis>
           		</specialValue>
				</specialValues>
       		</atomic>
     	</dataTypeDef>
     	<dataTypeDef>
       		<name>MatchTargetIdentifier</name>
<synopsis>Identify the specific target of a match condition.     </synopsis>
       		<union>
         		<element elementID="1">
           			<name>MetaDataID</name>
           			<synopsis>The ID of a metadata item</synopsis>
           			<typeRef>uint32</typeRef>
         		</element>
         		<element elementID="2">
           			<name>packetFieldID</name>
           			<synopsis>
             The identifier for a packet Field, such as SA, DA,
             Protocol, SPort, DPort, etc.  These identifiers allow
             references to fields with varialbe amounts before them.
           			</synopsis>
           			<typeRef>uint32</typeRef>
         		</element>
         		<element elementID="3">
           			<name>OffSetLengthPacketField</name>
           			<synopsis>
             A field in the packet identified by its offset and
             length in bits.  This does not allow for matching fields
             whose position depends upon earlier field sizes.
           			</synopsis>
           			<struct>
             			<element elementId="1">
               				<name>fieldOffset</name>
               				<synopsis> The offset in bits from the start of the packet to the start of the field.
               				</synopsis>
               				<typeRef>uint32</typeRef>
             			</element>
             			<element elementID="2">
               				<name>fieldLength</name>
               				<synopsis>The length of the field, in bits</synopsis>
               				<typeRef>uint32</typeRef>
             			</element>
           			</struct>
         		</element>
       		</union>
    		</dataTypeDef>
     	<dataTypeDef>
       		<name>MatchBitString</name>
       		<synopsis>A bit string for use in a match condition.</synopsis>
       		<struct>
         		<element elementID="1">
           			<name>MatchBits</name>
           			<synopsis>The bits to match</synopsis>
           			<typeRef>OctetString[16]</typeRef>
        		 	</element>
         		<element elementID="2">
           			<name>MatchLength</name>
           			<synopsis>The number of bits to match</synopsis>
           			<typeRef>uint8</typeRef>
         		</element>
       		</struct>
     	</dataTypeDef>
<dataTypeDef>
       		<name>MatchCondition</name>
       		<synopsis>structure for a single condition to be applied.
       		</synopsis>
       		<struct>
         		<element elementID="1">
           			<name>TargetType</name>
           			<synopsis>The category of target to match</synopsis>
           			<typeRef>MatchTargetType</typeRef>
         		</element>
         		<element elementID="2">
           			<name>TargetID</name>
           			<synopsis>The specific target to compare</synopsis>
           			<typeRef>MatchTargetIdentifier</typeRef>
         		</element>
         		<element elementID="3">
           			<name>MatchType</name>
           			<synopsis>The kind of match to apply.</synopsis>
           			<typeRef>MatchConditionType</typeRef>
         		</element>
         		<element elementID="4">
           			<name>MatchParamOne</name>
           			<synopsis>The first parameter for the match</synopsis>
           			<optional/>
           			<typeRef>MatchBitString</typeRef>
         	</element>
         		<element elementID="5">
           			<name>MatchParamTwo</name>
           			<synopsis>The second parameter for the match</synopsis>
           			<optional/>
           			<typeRef>MatchBitString</typeRef>
         		</element>
       		</struct>
     	</dataTypeDef>
     	<dataTypeDef>
      		<name>MatchConditiontType</name>
       		<synopsis>Indicator for the kind of match condition to be applied.
       		</synopsis>
       		<atomic>
         		<baseType>uint8</baseType>
         		<specialValues>
           			<specialValue value="0">
             			<name>MatchNone</name>
             			<synopsis>A matcher which always fails</synopsis>
           			</specialValue>
           			<specialValue value="1">
             			<name>MatchExact</name>
             			<synopsis>
               The target and the match value must be the same, with no
               padding. Only the first value of the match condition is
               used.  The first match value must be occur.
             			</synopsis>
           			</specialValue>
           			<specialValue value="2">
             			<name>MatchLeft</name>
             			<synopsis>
               The target must begin with the first match value.
               If there is a second match value, the remainder of the
               target must match repeated occurrances of the second
               value.  Thus, this can be used to allow any terminal
               content, or specific ending pad. The first match value
            must occur.
             			</synopsis>
           			</specialValue>
           			<specialValue value="3">
             			<name>MatchRight</name>
             			<synopsis>
               The target must end with the first match value.
               If there is a second match value, the preceding part
               of the target must match repeated occurrances of the
               second value.  Thus, this can be used to allow any
               leading content, or specific leading fill.  The first
               match value must occur.
             			</synopsis>
           			</specialValue>
           			<specialValue value="4">
            		 		<name>MatchRange</name>
             			<synopsis>
               The match values will be considered as numbers, and
               the target must be greater than or equal to the
               first match value, and less than or equal to the
               second match value.  An omitted match value means
               that end of the range is unlimitted.
             			</synopsis>
           			</specialValue>
           			<specialValue value="5">
             			<name>MatchMaskedValue</name>
             			<synopsis>
               The target the the first value are each anded with the
               second value.  The match succeeds if the results of these
               and operations are identical.  Both values are required.
             			</synopsis>
           			</specialValue>
           			<specialValue value="6">
             			<name>MatchSucceed</name>
             			<synopsis>A Match which always succeeds</synopsis>
           			</specialValue>
         		</specialValues>
       		</atomic>
     	</dataTypeDef>
     	<dataTypeDef>
       		<name>MatchMetaDataAction</name>
       		<synopsis>
         An action to set a metadata item to either a specific value
         or a field from the incoming meta data or packet.
       		</synopsis>
       		<struct>
         		<element elementID="1">
           			<name>MetaDataToSet</name>
           			<synopsis>The Meta Data Item to set</synopsis>
           			<typeRef>uint32</typeRef>
         		</element>
         		<element elementID="2">
           			<name>ExplicitValueToSet</name>
           			<synopsis>A value to set the metadata to</synopsis>
           			<optional/>
           			<typeRef>OctetString[16]</typeRef>
         		</element>
         		<element elementID="3">
           			<name>ValueFromCondition</name>
           			<synopsis>
             This is an index into the corresponding match conditions,
             and the meta data will be set to the value that was tested
             by that condition.
           			</synopsis>
           			<optional/>
           			<typeRef>uint32</typeRef>
         		</element>
       		</struct>
     	</dataTypeDef>
<dataTypeDef> 
          	<name>accessPermissionValues</name> 
          	<synopsis> 
            The possible values of attribute access permission 
          	</synopsis> 
          	<atomic> 
            		<baseType>uchar</baseType> 
            		<specialValues> 
              		<specialValue value="0"> 
                			<name>None</name> 
                			<synopsis>Access is prohibited</synopsis> 
              		</specialValue> 
              		<specialValue value="1"> 
                			<name> Read-Only </name> 
                			<synopsis>Access is read only</synopsis> 
              		</specialValue> 
              		<specialValue value="2"> 
                			<name>Write-Only</name> 
                			<synopsis> 
                  		The attribute may be written, but not read 
                			</synopsis> 
              		</specialValue> 
              		<specialValue value="3"> 
               			<name>Read-Write</name> 
                			<synopsis> 
                  	The attribute may be read or written 
                			</synopsis> 
              		</specialValue> 
            		</specialValues> 
          	</atomic> 
        </dataTypeDef>
<dataTypeDef> 
          	<name>baseElementProperties</name> 
          	<synopsis>basic properties, accessibility</synopsis> 
          	<struct> 
            		<element elementID="1"> 
              		<name>accessibility</name> 
              		<synopsis> 
                does the element exist, and can it be read or written 
              		</synopsis> 
              		<typeRef>accessPermissionValues</typeRef> 
            		</element> 
          	</struct> 
        </dataTypeDef> 
        <dataTypeDef> 
          	<name>arrayElementProperties</name> 
          	<struct> 
            		<derivedFrom>baseElementProperties</derivedFrom> 
            		<element elementID="1"> 
              		<name>entryCount</name> 
              		<synopsis>the number of entries in the array</synopsis> 
              		<typeRef>uint32</typeRef> 
            		</element> 
            		<element elementID="2"> 
              		<name>highestUsedSubscript</name> 
              		<synopsis>the last used subscript in the array</synopsis> 
              		<typeRef>uint32</typeRef> 
            		</element> 
            		<element elementID="3"> 
              		<name>firstUnusedSubscript</name> 
              		<synopsis> 
                 	The subscript of the first unused array element 
              		</synopsis> 
                		<typeRef>uint32</typeRef> 
            		</element> 
          	</struct> 
        </dataTypeDef>
<dataTypeDef> 
          	<name>eventElementProperties</name> 
          	<struct> 
            		<derivedFrom>baseElementProperties</derivedFrom> 
            		<element elementID="1"> 
              		<name>registration</name> 
              		<synopsis>
has the CE registered to be notified of this event 
              		</synopsis> 
              		<typeRef>uint32</typeRef> 
            		</element> 
            		<element elementID="2"> 
              		<name>hysteresis</name> 
              		<synopsis>region to suppress event recurrence notices 
              		</synopsis> 
              		<typeRef>uint32</typeRef> 
            		</element> 
            		<element elementID="3"> 
              		<name>threshold</name> 
              		<synopsis> comparison value for level crossing events 
              		</synopsis> 
              		<typeRef>uint32</typeRef> 
            		</element> 
          	</struct> 
        </dataTypeDef>
        <dataTypeDef> 
          	<name>aliasElementProperties</name> 
          	<struct> 
            		<derivedFrom>baseElementProperties</derivedFrom> 
            		<element elementID="1"> 
              		<name>targetLFBClass</name> 
              		<synopsis>the class ID of the alias target</synopsis> 
              		<typeRef>uint32</typeRef> 
            		</element> 
            		<element elementID="2"> 
              		<name>targetLFBInstance</name> 
              		<synopsis>the instance ID of the alias target</synopsis> 
              		<typeRef>uint32</typeRef> 
            		</element> 
            		<element elementID="3"> 
              		<name>targetElementPath</name> 
              		<synopsis> 
                The path to the element target, each 4 octets is read  
                as one path element, using the path construction in  
                the PL protocol. 
              		</synopsis> 
              		<typeRef>octetstring[128]</typeRef> 
            		</element> 
          	</struct> 
        </dataTypeDef>
         <dataTypeDef> 
           <name>PortStatusValues</name> 
           <synopsis>  
              The possible values of status.  Used for both  
              administrative and operation status 
           </synopsis> 
           <atomic> 
             <baseType>uchar</baseType> 
             <specialValues> 
               <specialValue value="0"> 
                 <name>Disabled </name> 
                 <synopsis>the port is disabled</synopsis> 
               </specialValue> 
               <specialValue value="1"> 
                 <name>Enable</name> 
                 <synopsis>the port is operatively disabled</synopsis> 
               </specialValue> 
             </specialValues> 
           </atomic> 
         </dataTypeDef> 

       	<dataTypeDef> 
           	<name> metadataConfigTableEntry </name> 
           	<synopsis>...</synopsis>
            	<struct> 
               	<element elementID="1"> 
                		<name>metadataID</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
               	</element> 
                	<element elementID="2"> 
                		<name>metadataName</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
               	</element> 
                	<element elementID="3"> 
                		<name>metadataLength</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
               	</element>
</struct>
       	</dataTypeDef>
       	<dataTypeDef> 
           	<name> metadataConfigTableType</name> 
           	<synopsis>...</synopsis>
            	<struct> 
               	<element elementID="1">
                		<name>metadataConfigTableID</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
               	</element>
               	<element elementID="2">
                		<name>metadataConfigTable</name> 
                		<synopsis>...</synopsis>
                 	<array type="variable-size"> 
                     	<typeRef> metadataConfigTableEntry </typeRef> 
                 </array>
               	</element>
</struct>
       	</dataTypeDef>
       	<dataTypeDef> 
           	<name>FEMetadataConfig</name> 
           	<synopsis>...</synopsis>
            	<struct>
               	<element elementID="1">
                		<name>FEID</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
               	</element>
               	<element elementID="2">
                		<name>metadataConfigTables</name> 
                		<synopsis>...</synopsis>
                 	<array type="variable-size"> 
                     	<typeRef> metadataConfigTableType</typeRef> 
                 </array>
               	</element>
</struct>
       	</dataTypeDef>
       	<dataTypeDef> 
           	<name>statisticsTable</name>
           	<synopsis>...</synopsis>
            	<struct> 
               	<element elementID="1">
                		<name>TxIPv4UnicastPkts</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="2">
                		<name>TxIPv4UnicastOctets</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="3">
                		<name>RxIPv4UnicastPkts</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="4">
                		<name>RxIPv4UnicastOctets</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="5">
                		<name>TxIPv4MulticastPkts</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="6">
                		<name>TxIPv4MulticastOctets</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="7">
                		<name>RxIPv4MulticastPkts</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="8">
                		<name>RxIPv4MulticastOctets</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="9">
                		<name>TxIPv4BroadcastPkts</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="10">
                		<name>TxIPv4BroadcastOctets</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="11">
                		<name>RxIPv4BroadcastPkts</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="12">
                		<name>RxIPv4BroadcastOctets</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="13">
                		<name>rxPkts</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="14">
                		<name>fwdPkts</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="15">
                		<name>dropPkts</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="16">
                		<name>excpPkts</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
</struct>
       	</dataTypeDef>
     	<dataTypeDef> 
           	<name>FEStatisticsTable</name> 
           	<synopsis>...</synopsis>
            	<struct>
               	<element elementID="1">
                		<name>FEID</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
               	</element>
               	<element elementID="2">
                		<name>statistics</name> 
                		<synopsis>...</synopsis>
                    	<typeRef>statisticsTable</typeRef> 
               	</element>
</struct>
       	</dataTypeDef>
<dataTypeDef> 
        	<name>LFBStatusValues</name> 
            <synopsis>The possible values of LFB status</synopsis> 
            <atomic> 
            	<baseType>uchar</baseType> 
                <specialValues> 
                	<specialValue value="1"> 
                    	<name>OperDisable</name> 
                    	<synopsis>FE is operatively disabled</synopsis> 
                   	</specialValue> 
                   	<specialValue value="2"> 
                     	<name> Operenable </name> 
                     	<synopsis>FE is operating</synopsis> 
                   	</specialValue> 
                 </specialValues> 
</atomic> 
        </dataTypeDef>

<dataTypeDef> 
        	<name> callbackFunction </name>
<synopsis>...</synopsis>
<typeRef>String</typeRef>
</dataTypeDef> 

<dataTypeDef> 
        	<name>eventNode</name> 
<synopsis>...</synopsis>
            	<struct> 
               	<element elementID="1">
                		<name>ID</name> 
                		<synopsis>event ID</synopsis> 
                		<typeRef>uint32</typeRef> 
               	</element>
               	<element elementID="2">
                		<name> pFun </name> 
                		<synopsis>function for dealing with events</synopsis> 
                		<typeRef> callbackFunction </typeRef> 
    	</element>
            	</struct> 
</dataTypeDef>
<dataTypeDef> 
        	<name>FEPort</name> 
<synopsis>...</synopsis>
    <struct>
               	<element elementID="1">
                 	<name>FEID</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
               	</element>
               	<element elementID="2">
                   	<name>portID</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="3">
           			<name>linkState</name> 
                		<synopsis>...</synopsis> 
                		<typeRef> PortStatusValues </typeRef> 
        	</element>
               	<element elementID="4">
               		<name>MTU</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="5">
               		<name>linkSpeed</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="6">
               		<name>MACAddr</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>IEEEMACAddr</typeRef> 
        	</element>
               	<element elementID="7">
               		<name> mediaType </name> 
                		<synopsis> Ethernet, ATM, Token, or...</synopsis> 
                		<typeRef> uint32</typeRef> 
        	</element>
               	<element elementID="8">
               		<name> Address </name> 
                		<synopsis>...</synopsis> 
                		<typeRef> ipv4Prefix </typeRef> 
        	</element>
               	<element elementID="9">
               		<name> BroadcastAddr </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="10">
               		<name> Gateway </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="11">
                		<name>statistics</name> 
                		<synopsis>...</synopsis>
                    	<typeRef>statisticsTable</typeRef> 
         </element>
    </struct>
</dataTypeDef> 

<dataTypeDef> 
        	<name> ipv4NextHopInfo </name> 
<synopsis>...</synopsis>
    <struct>
               	<element elementID="1">
                 	<name>FEID</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
               	</element>
               	<element elementID="2">
                   	<name>portID</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="3">
               		<name>MTU</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="4">
               		<name> flags </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>nextHopFlags</typeRef> 
        	</element>
               	<element elementID="5">
               		<name> Address </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>ipv4Addr</typeRef> 
        	</element>
               	<element elementID="6">
               		<name> nextHopID </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>nextHopID</typeRef> 
        	</element>
               	<element elementID="7">
               		<name> nextHopIDType </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
    </struct>
</dataTypeDef>
<dataTypeDef> 
        	<name> ipv4FwdTableEntry </name> 
<synopsis>...</synopsis>
    <struct>
               	<element elementID="1">
                 	<name> matchPrefix </name> 
                		<synopsis>...</synopsis> 
                		<typeRef> ipv4Prefix </typeRef> 
               	</element>
               	<element elementID="2">
                   	<name> actionNextHop </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>ipv4NextHopInfo</typeRef> 
        	</element>
    </struct>
</dataTypeDef>
<dataTypeDef> 
        	<name> ipv4LPMClassiferStatistics </name> 
<synopsis>...</synopsis>
    <struct>
               	<element elementID="1">
                		<name> rcvdPkts </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
               	</element>
               	<element elementID="2">
                		<name> fwdPkts </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
        	</element>
               	<element elementID="3">
                		<name> dropPkts </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
        	</element>
               	<element elementID="4">
                		<name> excpPkts </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
        	</element>
               	<element elementID="5">
                		<name> noRoutePkts </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
        	</element>
    </struct>
</dataTypeDef>
<dataTypeDef>
        	<name> ipv4ValidatorStatistics </name> 
<synopsis> A table of IPv4 validator LFB statistics</synopsis>
    <struct>
               	<element elementID="1">
                		<name> badHeaderPkts </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
        	</element>
               	<element elementID="2">
                		<name> badTotalLengthPkts </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
        	</element>
               	<element elementID="3">
                		<name> badTTLPkts </name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint64</typeRef> 
        	</element>
               	<element elementID="4">
                		<name> badChecksum</name> 
                		<synopsis>...</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
    </struct>
</dataTypeDef>
<dataTypeDef> 
        	<name> DSCPClassifierMatchCondition </name> 
<synopsis>...</synopsis>
    <struct>
               	<element elementID="1">
                		<name> port </name> 
                		<synopsis> Port number from which the packet stream will be classified </synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="2">
                		<name> dscp </name> 
                		<synopsis> DSCP value in the packet which determines a flow</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
    </struct>
</dataTypeDef>
<dataTypeDef> 
        	<name> DSCPClassifierRuleAction </name> 
<synopsis>...</synopsis>
    <struct>
               	<element elementID="1">
                		<name> flowID </name> 
                		<synopsis> Identifier of a traffic flow to which the packet belongs </synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="2">
                		<name> classID </name> 
                		<synopsis> A relative queue number within an output port </synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="3">
                		<name> ipcFlag </name> 
                		<synopsis> Input Port Configured flag. This flag indicates whether the input port corresponding to the entry has its own configuration.</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="4">
                		<name> statsFlag </name> 
                		<synopsis> indicates whether the microblock should gather statistics for the rule</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="5">
                		<name> tcFlag </name> 
                		<synopsis> Trafic Conditioning flag. This flag indicates whether the packets must be metered (meaningful only if ipcFlag is set)</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="6">
                		<name> remarkFlag </name> 
                		<synopsis> This flag indicates whether DSCP value in the packets must be remarked (meaningful only if ipcFlag is set)</synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
               	<element elementID="7">
                		<name> colorID </name> 
                		<synopsis> Packet drop precendence level: green, yellow or red color </synopsis> 
                		<typeRef>uint32</typeRef> 
        	</element>
    </struct>
</dataTypeDef>
<dataTypeDef> 
        	<name> DSCPClassifierRule </name> 
<synopsis>...</synopsis>
    <struct>
               	<element elementID="1">
                		<name> matchCondition </name> 
                		<synopsis> ...</synopsis> 
                		<typeRef> DSCPClassifierMatchCondition </typeRef> 
        	</element>
              	<element elementID="2">
                		<name> matchAction </name> 
                		<synopsis> ...</synopsis> 
                		<typeRef> DSCPClassifierRuleAction </typeRef> 
        	</element>
    </struct>
</dataTypeDef>
<dataTypeDef> 
        	<name> DSCPClassifierRuleStatistics </name> 
<synopsis>...</synopsis>
    <struct>
              	<element elementID="1">
                		<name> recvPackets </name> 
                		<synopsis> number of packets for the (dscp,input_port) pair </synopsis> 
                		<typeRef> uint64 </typeRef> 
        	</element>
              	<element elementID="2">
                		<name> recvBytes </name> 
                		<synopsis> number of bytes for the (dscp,input_port) pair </synopsis> 
                		<typeRef> uint64 </typeRef> 
        	</element>
    </struct>
</dataTypeDef>
<dataTypeDef> 
        	<name> queueOfPort </name> 
<synopsis>...</synopsis>
    <struct>
              	<element elementID="1">
                		<name> queueID </name> 
                		<synopsis> </synopsis> 
                		<typeRef> uint32 </typeRef> 
        	</element>
              	<element elementID="2">
                		<name> credit </name> 
                		<synopsis> </synopsis> 
                		<typeRef> uint32 </typeRef> 
        	</element>
              	<element elementID="3">
                		<name> stats </name> 
                		<synopsis> </synopsis> 
                		<typeRef> statisticsTable </typeRef> 
        	</element>
   </struct>
</dataTypeDef>
<dataTypeDef> 
        	<name> portOfQM </name> 
<synopsis>...</synopsis>
    <struct>
              	<element elementID="1">
                		<name> portID </name> 
                		<synopsis> </synopsis> 
                		<typeRef> uint32 </typeRef> 
        	</element>
              	<element elementID="2">
                		<name> weight </name> 
                		<synopsis> </synopsis> 
                		<typeRef> uint32 </typeRef> 
        	</element>
              	<element elementID="3">                		
                		<name> stats </name> 
                		<synopsis> </synopsis> 
    <array type="variable-size"> 
            				<typeRef> statisticsTable </typeRef> 
        				</array>
        	</element>
   </struct>
</dataTypeDef>
<dataTypeDef> 
        	<name> nextHopFlags </name> 
<synopsis>...</synopsis>
         	<atomic> 
            		<baseType>uint32</baseType> 
            		<specialValues> 
              		<specialValue value="0x00030001"> 
                			<name>local</name> 
                			<synopsis>...</synopsis> 
</specialValue>
              		<specialValue value="0x00030002"> 
                 		<name>down</name> 
                 		<synopsis>...</synopsis>
</specialValue>
              		<specialValue value="0x00030003"> 
                			<name>drop</name> 
                			<synopsis>...</synopsis> 
              		</specialValue> 
              		<specialValue value="0x00030004"> 
                  		<name>broadcast</name> 
                  		<synopsis>...</synopsis> 
              		</specialValue>
              		<specialValue value="0x00030005"> 
                  		<name>multicast</name> 
                  		<synopsis>...</synopsis> 
              		</specialValue>
           		</specialValues>
          	</atomic> 
</dataTypeDef>
<dataTypeDef> 
        	<name> targetPacketField </name> 
<synopsis>...</synopsis>
    <struct>
              	<element elementID="1">
                		<name> offset</name> 
                		<synopsis> </synopsis> 
                		<typeRef> uint32 </typeRef> 
    </element>
              	<element elementID="2">
                		<name> length</name> 
                		<synopsis> </synopsis> 
                		<typeRef> uint32 </typeRef> 
    </element>
    </struct>
</dataTypeDef>
<dataTypeDef> 
        	<name> targetAction </name> 
<synopsis>...</synopsis>
<atomic> 
            		<baseType>uint32</baseType> 
            		<specialValues> 
              		<specialValue value="0x00030001"> 
                			<name>READ</name> 
                			<synopsis>...</synopsis> 
</specialValue>
              		<specialValue value="0x00030002"> 
                 		<name>WRITE</name> 
                 		<synopsis>...</synopsis>
</specialValue>
            		</specialValues> 
</atomic>
</dataTypeDef>
<dataTypeDef> 
        	<name> targetInstruction </name> 
<synopsis>...</synopsis>
    <struct>
              	<element elementID="1">
                		<name> metadataID</name> 
                		<synopsis> </synopsis> 
                		<typeRef> uint32 </typeRef> 
    </element>
              	<element elementID="2">
                		<name> packetField</name> 
                		<synopsis> </synopsis> 
                		<typeRef>targetPacketField</typeRef> 
    </element>
              	<element elementID="3">
                		<name>action</name> 
                		<synopsis> </synopsis> 
                		<typeRef> targetAction </typeRef> 
    </element>
    </struct>
</dataTypeDef>
</dataTypeDefs>

<metadataDefs>
    		<metadataDef> 
        		<name>nextHopID</name> 
          	<synopsis>Refers to a Next Hop entry in NH LFB</synopsis> 
          	<typeRef>int32</typeRef> 
        </metadataDef> 
        <metadataDef> 
        		<name>classID</name> 
             <synopsis>Result of classification (0 means no match). </synopsis> 
          	<atomic> 
            		<baseType>int32</baseType> 
            		<specialValues> 
              		<specialValue value="0"> 
                			<name>NOMATCH</name> 
                			<synopsis>Classification didn't result in match. </synopsis> 
              		</specialValue> 
            		</specialValues> 
          	</atomic> 
        	</metadataDef> 
        <metadataDef> 
        		<name>LFBClassID</name> 
             <synopsis> </synopsis> 
             <typeRef> uint32</typeRef>
        	</metadataDef>
        <metadataDef> 
          	<name>errorID</name> 
            <synopsis>Error Types</synopsis> 
          	<atomic> 
            		<baseType>int32</baseType> 
            		<specialValues> 
              		<specialValue value="0x00020001"> 
                			<name>WrongIpVersion</name> 
                			<synopsis>the IP version wrong</synopsis> 
</specialValue>
              		<specialValue value="0x00020002"> 
                 		<name>WrongLength</name> 
                 		<synopsis>the packet length is not as long as the header indicates             	</synopsis>
</specialValue>
              		<specialValue value="0x00020003"> 
                			<name>BadTTLs</name> 
                			<synopsis>the ip packet with bad TTLs</synopsis> 
</specialValue>
              		<specialValue value="0x00020004"> 
                			<name>BadChecksum</name> 
                			<synopsis>the ip packet with bad checksum</synopsis>   
</specialValue>
               		<specialValue value="0x000200FF"> 
                  		<name>otherError</name> 
                  		<synopsis>The errors we not defined now</synopsis> 
                		</specialValue>
              	</specialValues> 
          	</atomic> 
        	</metadataDef>
        <metadataDef> 
          	<name>exceptionID(for ipv4LPMClassifier and nextHopApplicator)</name> 
            <synopsis>Exception Types</synopsis> 
         	<atomic>
            		<baseType>int32</baseType> 
            		<specialValues> 
              		<specialValue value="0x00030001"> 
                			<name>exceptionOptions</name> 
                			<synopsis></synopsis> 
</specialValue>
              		<specialValue value="0x00030002"> 
                			<name>lengthMismatch</name> 
                			<synopsis></synopsis> 
</specialValue>
              		<specialValue value="0x00030003"> 
                			<name> badTTL </name> 
                			<synopsis></synopsis> 
</specialValue>
              		<specialValue value="0x00030004"> 
                			<name> multicast </name> 
                			<synopsis></synopsis> 
</specialValue>
              		<specialValue value="0x00030005"> 
                			<name>fragRequired</name> 
                			<synopsis></synopsis> 
</specialValue>
              		<specialValue value="0x00030006"> 
                			<name>redirect</name> 
                			<synopsis></synopsis> 
</specialValue>
              		<specialValue value="0x00030007"> 
                			<name>down</name> 
                			<synopsis></synopsis> 
</specialValue>
              		<specialValue value="0x00030008"> 
                			<name>noRoute</name> 
                			<synopsis></synopsis> 
</specialValue>
              		<specialValue value="0x00030009"> 
                			<name>localDelivery</name> 
                			<synopsis></synopsis> 
</specialValue>
              		<specialValue value="0x00030010"> 
                			<name>limitedBroadcast</name> 
                			<synopsis></synopsis> 
</specialValue>
</specialValues>
          	</atomic> 
        </metadataDef>
        <metadataDef> 
          	<name>exceptionID(for ipv4Validator)</name> 
            <synopsis>Exception Types</synopsis> 
         	<atomic> 
            		<baseType>int32</baseType> 
            		<specialValues> 
              		<specialValue value="0x00030001"> 
                			<name>PacketsWithOptions</name> 
                			<synopsis>IP packet with header length great than 5</synopsis> 
</specialValue>
              		<specialValue value="0x00030002"> 
                 		<name>BroadcastPackets</name> 
                 		<synopsis>the packet with the destination address equal to 255.255.255.255
                 		</synopsis>
</specialValue>
              		<specialValue value="0x00030003"> 
                			<name>ExpiredTTLs</name> 
                			<synopsis>the IP packet with expired TTLs</synopsis> 
              	</specialValue> 
              	<specialValue value="0x000300FF"> 
                  	<name>otherError</name> 
                  	<synopsis>The exceptions we havn't defined now</synopsis> 
              	</specialValue>
				              	</specialValues>
          </atomic> 
        </metadataDef>
        <metadataDef> 
          	<name>inputPortID</name> 
<synopsis>...</synopsis>
<typeRef> uint32</typeRef>
</metadataDef>
        <metadataDef> 
          	<name>outputPortID</name> 
<synopsis>...</synopsis>
<typeRef> uint32</typeRef>
</metadataDef>
        <metadataDef> 
          	<name> nextHopIP </name> 
<synopsis>...</synopsis>
<typeRef> ipv4Addr </typeRef>
</metadataDef>
        <metadataDef> 
          	<name> nextHopIDType </name> 
<synopsis>...</synopsis>
<typeRef> uint32 </typeRef>
</metadataDef>
        <metadataDef> 
          	<name>srcFEID </name> 
<synopsis>...</synopsis>
<typeRef> uint32 </typeRef>
</metadataDef>
        <metadataDef> 
          	<name> flowID </name> 
<synopsis>...</synopsis>
<typeRef> uint32 </typeRef>
</metadataDef>
        <metadataDef> 
          	<name> frameType </name> 
<synopsis>...</synopsis>
        		<atomic> 
          		<baseType>uint32</baseType>  
          		<specialValues> 
            			<specialValue value="1"> 
              			<name> IPv4Frame </name> 
            			</specialValue> 
            			<specialValue value="2"> 
              			<name> IPv5Frame </name> 
            			</specialValue>
            			<specialValue value="3"> 
              			<name> taggedFrame </name> 
            			</specialValue>
            			<specialValue value="4"> 
              			<name> metaDataFrame </name> 
            			</specialValue>
          		</specialValues> 
</atomic>
</metadataDef>
        <metadataDef> 
          	<name> queueID </name> 
<synopsis>...</synopsis>
<typeRef> uint32</typeRef>
</metadataDef>
        <metadataDef> 
          	<name> bufHandle </name> 
<synopsis>...</synopsis>
    <struct>
              	<element elementID="1">
                		<name> endOfPacketFlag</name> 
                		<synopsis>...</synopsis> 
                		<typeRef> uchar </typeRef> 
    </element>
              	<element elementID="2">
                		<name> startOfPacketFlag</name> 
                		<synopsis>...</synopsis> 
                		<typeRef> uchar </typeRef> 
    </element>
              	<element elementID="3">
                		<name> segmentCount</name> 
                		<synopsis>...</synopsis> 
                		<typeRef> uint8 </typeRef> 
    </element>
              	<element elementID="4">
                		<name> packetMetadataAddress </name> 
                		<synopsis>...</synopsis> 
                		<typeRef> uint32 </typeRef> 
    </element>
         		<element elementID="5">
                		<name> packetBufAddress </name> 
                		<synopsis>...</synopsis> 
                		<typeRef> uint32 </typeRef> 
    </element>
</struct>
</metadataDef>
     	<metadataDef> 
          	<name> bufferSize </name> 
<synopsis>...</synopsis>
<typeRef> uint32</typeRef>
</metadataDef>
     	<metadataDef> 
          	<name> payloadOffset </name> 
<synopsis>...</synopsis>
<typeRef> uint32</typeRef>
</metadataDef>
     	<metadataDef> 
          	<name> portWeight </name> 
<synopsis>...</synopsis>
<typeRef> uint32</typeRef>
</metadataDef>
     	<metadataDef> 
          	<name> queueWeight </name> 
<synopsis>...</synopsis>
<typeRef> uint32</typeRef>
</metadataDef>
</metadataDefs>
<LFBClassDefs>
	<LFBClassDef LFBClassID="7"> 
        	<name>IPv4LPMClassifier</name> 
          	<synopsis>IPv4 Longest Prefix Match Lookup LFB</synopsis> 
          	<version>1.0</version> 
          	<derivedFrom>...</derivedFrom> 
		<inputPorts> 
  			<inputPort>
    				<name>input</name>
    				<synopsis>normalInput</synopsis>
    				<expectation>
      					<frameExpected>
        				<ref>IPv4Frame</ref>
      					</frameExpected>
      				</expectation>
  			</inputPort>
          	</inputPorts> 
		<outputPorts> 
  			<outputPort>
    				<name>normalOutput</name>
    				<synopsis>Output to NextHop Applicator LFB</synopsis>
    				<product>
      					<frameProduced>
        					<ref>IPv4Frame</ref>
      					</frameProduced>
      					<metadataProduced>
        					<ref> nextHopID</ref>
      					</metadataProduced>
    				</product>
  			</outputPort>   
  			<outputPort>
    				<name>exceptionOutput</name>
    				<synopsis>Exception output</synopsis>
    				<product>
      					<frameProduced>
        					<ref>IPv4Frame</ref>
      					</frameProduced>
      					<metadataProduced>
        					<ref>LFBClassID</ref>
        					<ref>inputPortID </ref>
        					<ref>exceptionID</ref>
      					</metadataProduced>
   	 			</product>
  			</outputPort>
  			<outputPort>
    				<name>failOutput</name>
    				<synopsis>Dropper</synopsis>
    				<product>
      					<frameProduced>
        					<ref> IPv4Frame </ref>
      					</frameProduced>
    				</product>
  			</outputPort>
		</outputPorts> 
		<attributes> 
			<attribute elementID="1">
      		    	    	<name>LFBState</name> <!--added-->
     		   	       	<synopsis>...</synopsis> 
				<typeRef>LFBStatusValues</typeRef>
			</attribute>
			<attribute elementID="2">
 		              	<name>LFBstats</name> 
 		             	<synopsis>...</synopsis>
  		  		<typeRef> ipv4LPMClassiferStatistics </typeRef>
			</attribute>
			<attribute elementID="3">
     	        		<name> maxnumOfFwdRoutes </name> 
				<synopsis>maxnum of supported forwarding routes by this LFB</synopsis>
    				<typeRef> uint32 </typeRef>
			</attribute>
			<attribute elementID="4">
      	       		   	<name> maxnumOfDBTableEntry </name> 
				<synopsis> maxnum of supported direct broardcast table entries by this LFB</synopsis>
    				<typeRef> uint32 </typeRef>
			</attribute>
			<attribute elementID="5">
       	        		<name> prefixFwdTable </name> 
       	        		<synopsis>...</synopsis>
        	  	     	<array type="variable-size"> 
        	    	   		<typeRef> ipv4FwdTableEntry </typeRef> 
        	     	  	</array>
			</attribute>
			<attribute elementID="5">
      	        		<name> DBTable </name> 
       	        		<synopsis> Directed connected broadcast table </synopsis>
       	        		<array type="variable-size"> 
       	        			<typeRef> uint32 </typeRef> 
        	   	    	</array>
			</attribute>
  		</attributes> 
        	<capabilities> 
        	</capabilities> 
        	<description>This LFB represents the IPv4 longest prefix match lookup operation.      
	      	</description> 
		<events>...</events>
	</LFBClassDef> 

	<LFBClassDef LFBClassID="9"> 
       		<name> DSCPClassifier</name> 
          	<synopsis>... </synopsis> 
          	<version>1.0</version> 
          	<derivedFrom>...</derivedFrom> 
		<inputPorts> 
  			<inputPort>
		    		<name>input</name>
			    	<synopsis>Normal input</synopsis>
			    	<expectation>
      					<frameExpected>
		        			<ref> IPv4Frame </ref>
		        			<ref> IPv6Frame </ref>
			      		</frameExpected>
		      			<metadataExpected>
        					<ref>inputPortID</ref>
		      			</metadataExpected>
	       			</expectation>
  			</inputPort>
          	</inputPorts> 
		<outputPorts> 
  			<outputPort>
			    	<name>outputToLPM</name>
			    	<synopsis>Output to IPv4 LPM</synopsis>
			    	<product>
			      		<frameProduced>
        					<ref> IPv4Frame </ref>
			      		</frameProduced>
			      		<metadataProduced>
			        		<ref>flowID</ref>
			      		</metadataProduced>
			    	</product>
		  	</outputPort>  
		  	<outputPort>
    				<name>outputToMeter</name>
			    	<synopsis>Output to TC Meter</synopsis>
			    	<product>
			      		<frameProduced>
			        		<ref> IPv4Frame </ref>
			      		</frameProduced>
			      		<metadataProduced>
        					<ref>flowID</ref>
			      		</metadataProduced>
			    	</product>
			  	</outputPort>
			  	<outputPort>
 				   	<name>outputToMarker</name>
				    	<synopsis>Output to DSCP Marker</synopsis>
				    	<product>
				      		<frameProduced>
				        		<ref> IPv4Frame </ref>
				      		</frameProduced>
				      		<metadataProduced>
				        		<ref>flowID</ref>
				      		</metadataProduced>
				    	</product>
			  	</outputPort>
	             	</outputPorts> 
		<attributes> 
			<attribute elementID="1">
      		      		<name>LFBState</name> <!--added-->
	     		      	<synopsis>...</synopsis> 
				<typeRef>LFBStatusValues</typeRef>
			</attribute>		
			<attribute elementID="2">
        	           	<name>LFBstats</name> 
                		<synopsis>...</synopsis>
                    		<typeRef>statisticsTable</typeRef>
			</attribute>
			<attribute elementID="3">
                	   	<name> ruleTable </name> 
				<synopsis></synopsis>
	                   	<array type="variable-size"> 
        	             		<typeRef> DSCPClassifierRule </typeRef> 
    				</array>
			</attribute>
			<attribute elementID="4">
          		    	<name> statisticsTable </name> 
				<synopsis></synopsis>
	        	        <array type="variable-size"> 
        	 	            	<typeRef> DSCPClassifierRuleStatistics </typeRef> 
			    	</array>
			</attribute>
		</attributes>
	        <capabilities>...</capabilities> 
        	<description>...</description> 
		<events>...</events>
	</LFBClassDef>

	<LFBClassDef LFBClassID="8"> 
        	<name> NextHopApplicator </name> 
          	<synopsis></synopsis> 
          	<version>1.0</version> 
          	<derivedFrom>...</derivedFrom> 
		<inputPorts>
  			<inputPort>
    				<name>input</name>
    				<synopsis>Normal input</synopsis>
    				<expectation>
	      				<frameExpected>
        					<ref> IPv4Frame </ref>
				    	</frameExpected>
      					<metadataExpected>
        					<ref>nextHopID</ref>
	      				</metadataExpected>
				</expectation>
  			</inputPort>
		</inputPorts>
		<outputPorts>
  			<outputPort>
    				<name>normalOutput</name>
    				<synopsis>successful output</synopsis>
    				<product>
      					<frameProduced>
        					<ref> IPv4Frame </ref>
      					</frameProduced>
      					<metadataProduced>
        					<ref>FEID</ref>
        					<ref>outputPortID</ref>
        					<ref>L2Index</ref>
        					<ref>nextHopIP</ref>
        					<ref>nextHopIDType</ref>
      					</metadataProduced>
    				</product>
  			</outputPort>  
  			<outputPort>
    				<name>outputToEncap</name>
    				<synopsis>Output to tagged interface Tx LFB</synopsis>
    				<product>
      				<frameProduced>
        				<ref> IPv4Frame </ref>        		
      				</frameProduced>
      				<metadataProduced>
        				<ref> FEID </ref>
        				<ref>outputPortID</ref>
        				<ref>L2Index</ref>
        				<ref>nextHopIP</ref>
        				<ref>nextHopIDType</ref>
      				</metadataProduced>
    				</product>
  			</outputPort>
  			<outputPort>
    				<name>exceptionOutput</name>
    				<synopsis>Exception output</synopsis>
    				<product>
	      				<frameProduced>
        					<ref> IPv4Frame </ref>
      					</frameProduced>
      					<metadataProduced>
        					<ref>LFBClassID</ref>
        					<ref>inputPortID</ref>
	        				<ref>exceptionID</ref>
					</metadataProduced>
				</product>
  			</outputPort>
  			<outputPort>
    				<name>failOutput</name>
    				<synopsis>Dropper</synopsis>
    				<product>
      					<frameProduced>
        					<ref> IPv4Frame </ref>
      					</frameProduced>
			   	</product>
  			</outputPort>
		</outputPorts> 
		<attributes> 
			<attribute elementID="1">
      				<name>LFBState</name> <!--added-->
	     		      	<synopsis>...</synopsis> 
				<typeRef>LFBStatusValues</typeRef>
			</attribute>
			<attribute elementID="2">
                   		<name>maxnnumOfNextHops</name> 
                			<synopsis>...</synopsis>
			    	<typeRef> uint32</typeRef>
			</attribute>
			<attribute elementID="3">
                   		<name> NextHopTable </name> 
                		<synopsis>...</synopsis>
	           		<array type="variable-size"> 
        		             	<typeRef> ipv4NextHopInfo </typeRef> 
				</array>
			</attribute>
		</attributes>
             	<capabilities>...</capabilities> 
	        <description>...</description> 
		<events>...</events>
	</LFBClassDef>
	<LFBClassDef LFBClassID="3">
         	<name>GenericConnectivity</name>
         	<synopsis>
           	An LFB Class for providing connectivity between an FE and     communications media.
</synopsis>
         	<version>0.0</version>
         	<description>
           This LFB Class provides a generic basis for representing
           connectivity between the FE and the outside world.

           The LFB has one or more ports for packets that the FE
           processing logic is forwrding for transmission by this
           Connectivity LFB.  It has one or more ports for packets
           that the Connectivity LFB has received and is handing to
           the FE processing logic.

           Multiple ports for handline packets are supported so that
           protocol specific encapsulation and demultiplexing can be
           provided by this LFB.

           This LFB also has ports for sending packets to lower layer
           Connectivity LFBs and receiving packets from such lower
           layer Connectivity LFBs.  This enables support for the
           processing components of interface stacks, such as PPP over
           Ethernet or Ethernet over MPLS.

           For packets arriving from Media or lower layer connectivity,
           this LFB will perform appropriate media validation, then
           remove media specific headers, and place the relevant
           information in meta-data.  For ethernet, the Source MAC would
           be in meta-data.  For Frame Relay or ATM, a circuit identifier
           would be in meta-data.  For Ethernet with VLANs, this
           meta-data would indicate which VLAN the packet came from.

           For packets to be transmitted, meta-data indicating the
           destination (destination MAC or outgoing circuit, etc.) is
           required.

           This LFB will also include statistical attributes such as the
           number of octets and packets sent and received, the number of
           various input and output errors, etc.
        		</description>
<inputPorts group="yes">
           		<inputPort>
            			<name>inputFromOutside</name>
            			<synopsis>Ipv4Frame packet input,the packet arrive at this port needed to be procced by following LFB,such as Ipv4 Validator,LPM. 
Note:this input used by Rx LFB.
</synopsis>
             		<expectation>
             			<frameExpected>
                 			<ref>IPv4Frame</ref>
               			</frameExpected>
<metadataExpected>
        						<ref> frameType </ref>
      					</metadataExpected>
             		</expectation>
           		</inputPort>
           		<inputPort>
            			<name>inputFromInside</name>
            			<synopsis>meta data input,find the l2tm to get the l2 address
						Note:this input used by Tx LFB</synopsis>
             		<expectation>
<frameExpected>
        <ref>metaDataFrame</ref>
      	</frameExpected>
      	<metadataExpected>
			<ref>bufHandle</ref>
		<ref>bufferSize</ref>
<ref>payloadOffset</ref>
<ref>nextHopID</ref>
  	</metadataExpected>
             		</expectation>
           		</inputPort>
         	</inputPorts>
         	<outputPorts group="yes">
           		<outputPort>
    				<name>outputToInside</name>
    				<synopsis> meta data output,this data need by following LFB,such as Ipv4 Validator,LPM. Note:this output used by Rx LFB.
</synopsis>
    				<product>
      					<frameProduced>
							<ref>MetaDataFrame</ref>
      					</frameProduced>
<metadataProduced>
			<ref>bufHandle</ref>
<ref>payloadOffset</ref>
<ref>bufferSize</ref>
<ref>packetSize</ref>
<ref>inputPortID</ref>
							<ref>srcFEID</ref>
      					</metadataProduced>
    				</product>
  				</outputPort>
  				<outputPort>
    				<name>outputToOutside</name>
    				<synopsis>output Ipv4Frame to line card interface 
Note: this output used by Tx LFB.
</synopsis>
    				<product>
      					<frameProduced>
        					<ref>IPv4Frame</ref>
      					</frameProduced>
    				</product>
  				</outputPort>  
</outputPorts>
         	<attributes>
<attribute elementID="1">
                   	<name>LFBState</name> <!--added-->
                   	<synopsis>...</synopsis> 
  	<typeRef>LFBStatusValues</typeRef>
</attribute>
<attribute elementID="2">
                   	<name>LFBstats</name> 
                		<synopsis>...</synopsis>
                    	<typeRef>statisticsTable</typeRef>
</attribute>
<attribute elementID="3">
                   	<name>ports</name> 
                   	<synopsis>...</synopsis>
                   	<array type="variable-size"> 
                     	<typeRef>FEPort</typeRef> 
                   	</array>
</attribute>
         	</attributes>
<events>...</events>
</LFBClassDef>
<LFBClassDef LFBClassID="10"> 
        		<name> MetaDataMarker </name> 
          	<synopsis></synopsis> 
          	<version>1.0</version> 
          	<derivedFrom>...</derivedFrom>
         	<inputPorts>
  				<inputPort>
    					<name>input</name>
    					<synopsis>packets needs to be marked</synopsis>
    					<expectation>
      					<frameExpected>
       						<ref>taggedFrame</ref>
      					</frameExpected>
  				<!-- no metadataExpected item as any and all meta data is allowed -->
    					</expectation>
  				</inputPort>
         	</inputPorts>
<outputPorts>
  				<outputPort>
    					<name>output</name>
    					<synopsis>successful output</synopsis>
    					<product>
      					<frameProduced>
        						<ref>taggedFrame</ref>
      					</frameProduced>
    					</product>
  				</outputPort>   
</outputPorts>
<attributes>
<attribute elementID="1">
                   	<name>LFBState</name> <!--added-->
                   	<synopsis>...</synopsis> 
  	<typeRef>LFBStatusValues</typeRef>
</attribute>
<attribute elementID="2">
                   	<name>instructions</name> 
                		<synopsis>...</synopsis>
             		<array type="variable-size">
                     	<typeRef>targetInstruction</typeRef>
    	</array>
</attribute>
        		</attributes> 
        		<capabilities> 
     		</capabilities> 
    			<description>     
It is sometimes necessary to move information from the packet to
   meta-data, or from one meta-data field to another.  This LFB class
   provides that capability.  It consists of a series of processing
   instructions.  Each instruction identifes either a meta-data element,
   a named packet field, or a portion of the packet identified by offset
   and length.  The instruction also indicates what meta-data element to
   copy the selected data into.  The target field is identified using
   the same data types used for the matcher target identification.  
    			</description> 
			<events>...</events>
</LFBClassDef>
<LFBClassDef LFBClassID="12"> 
        		<name>Scheduler</name> 
          	<synopsis></synopsis> 
          	<version>1.0</version> 
          	<derivedFrom>...</derivedFrom> 
<inputPorts> 
				<inputPort> 
            			<name>input</name>
            			<synopsis>according to queue_id,schedule the packet to Tx LFB.
</synopsis>
             		<expectation>
             			<frameExpected>
                 			<ref>MetaDataFrame</ref>
               			</frameExpected>
<metadataExpected>
<ref>bufHandle</ref>
							<ref>bufferSize</ref>
<ref>payloadOffset</ref>
<ref>outputPortID</ref>
							<ref>queueID</ref>
							<ref>portWeight</ref>
							<ref>queueWeight</ref>
      					</metadataExpected>
             		</expectation>
    </inputPort>
          	</inputPorts> 
<outputPorts> 
				<outputPort>
    				<name>output</name>
    				<synopsis> </synopsis>
    				<product>
      					<frameProduced>
        					<ref>MetaDataFrame</ref>
      					</frameProduced>
    				</product>
</outputPort>
             </outputPorts> 
<attributes>
<attribute elementID="1">
                   	<name>LFBState</name> <!--added-->
                   	<synopsis>...</synopsis> 
  	<typeRef>LFBStatusValues</typeRef>
</attribute>
<attribute elementID="2">
                   	<name>LFBstats</name> 
                		<synopsis>...</synopsis>
                    	<typeRef>statisticsTable</typeRef>
</attribute>
<attribute elementID="4">
                   	<name> schedulerType </name> 
	<synopsis>scheduling algorithm type</synopsis>
                    	<typeRef> uint32 </typeRef> 
</attribute>
</attributes>
             <capabilities> 
             </capabilities> 
             <description>   
          	</description> 
			<events>...</events>
</LFBClassDef>
<LFBClassDef LFBClassID="13"> 
        		<name> QueueManagement </name> 
          	<synopsis></synopsis> 
          	<version>1.0</version> 
          	<derivedFrom>...</derivedFrom> 
<inputPorts> 
				<inputPort> 
            			<name>inputFromScheduler</name>
            			<synopsis>meta data input</synopsis>
             		<expectation>
             			<frameExpected>
                 			<ref>MetaDataFrame</ref>
               			</frameExpected>
             		</expectation>
    </inputPort>
				<inputPort> 
            			<name>inputFromInside</name>
            			<synopsis> </synopsis>
             		<expectation>
             			<frameExpected>
                 			<ref>IPv4Frame</ref>
               			</frameExpected>
<metadataExpected>
<ref>bufHandle</ref>
							<ref>bufferSize</ref>
<ref>payloadOffset</ref>
        						<ref>outputPortID</ref>
							<ref>classID</ref>
      					</metadataExpected>
             		</expectation>
    </inputPort>
          	</inputPorts> 
<outputPorts> 
				<outputPort>
    				<name>outputToScheduler</name>
    				<synopsis> Meta data output to scheduler</synopsis>
    				<product>
      					<frameProduced>
        					<ref>MetaDataFrame</ref>
      					</frameProduced>
      					<metadataProduced>
        						<ref>queueID</ref>
      					</metadataProduced>
    				</product>
  	</outputPort>
				<outputPort>
    				<name>outputToTx</name>
    				<synopsis> ...</synopsis>
    				<product>
      					<frameProduced>
        					<ref>IPv4Frame</ref>
      					</frameProduced>
    				</product>
  	</outputPort>
             </outputPorts> 
<attributes>
<attribute elementID="1">
                   	<name>LFBState</name> <!--added-->
                   	<synopsis>...</synopsis> 
  	<typeRef>LFBStatusValues</typeRef>
</attribute>
<attribute elementID="2">
                   	<name>LFBstats</name> 
                		<synopsis>...</synopsis>
                    	<typeRef>statisticsTable</typeRef>
</attribute>

<attribute elementID="3">
                   	<name> portsQMLFBsupported </name> 
	<synopsis></synopsis>
                   	<array type="variable-size"> 
                     	<typeRef> portOfQM </typeRef> 
    </array>
</attribute>
<attribute elementID="4">
                   	<name> numberOfQueueQMLFBSupported </name> 
	<synopsis></synopsis>
                    	<typeRef> uint32 </typeRef> 
</attribute>
</attributes>
             <capabilities> 
             </capabilities> 
             <description>   
          	</description> 
			<events>...</events>
</LFBClassDef>

</LFBClassDefs>
</LFBLibrary>