Method and apparatus for fast integer within-range compare
Claim Score by NHIP
Abstract
A fast with-in range comparator is implemented in digital logic. A packet arrives at a device for processing. Initial packet data that is available in a first read cycle, is used to compute data that is necessary for later cycles. The initial data and the subsequently data are then used to test a single value against a range of values. In a method of the present invention a range is separated into two ranges. An upper limit of the first range is tested to determine whether the value is below the upper limit. If this test fails, the value is tested to determine whether the value is between the upper limit of the first range and the upper limit of the full range. The ranges are tested by constructing a bit vector. Data representing the capability of a communicating port, is then used to index into the bit vector. The outcome of the index is a value that signifies whether the port can support the packet or not.

Term
Term ended
Projected expiry passed 6 January 2025, 1.7 years ago.
- Priority and filed
- Published
- Projected expiry
- Today
14 claims: 4 independent, 10 dependent
- 1A system comprising:an encoder constructing a bit vector in response to packet information, the bit vector including bit positions;a memory storing port information;and indexing logic coupled to the encoder and coupled to the memory, the indexing logic generating an output signal by using the port information to index into a bit position in the bit vector.
- 10A system comprising:an encoder means for constructing a bit vector in response to packet information, the bit vector including bit positions;a memory means for storing port information;and indexing logic means coupled to the encoder means and coupled to the memory means, the indexing logic means for generating an output signal by using the port information to index into a bit position in the bit vector.
- 11Broadest claimClaim Score 86, broad(NHIP)A method of operating a system comprising the steps of:constructing a bit vector in response to packet information, the bit vector including bit positions;storing port information;and generating an output signal by using the port information to index into a bit position in the bit vector.
- 12A method of operating a system comprising the steps of:receiving a first value associated with a packet;constructing a first range of values in response to the first value associated with the packet;storing a second range of values;synthesizing a second value from the second range of values;and generating an output signal by using the second single value to index into the first range of values.
Independent claims4
85 paragraphs in 4 sections, as filed
BACKGROUND OF THE INVENTION
P-0001[0001] 1. Field of the Invention
P-0002[0002] This invention relates to packet processing. Specifically, the present invention relates to packet testing and validation.
P-0003[0003] 1. Description of the Related Art
P-0004[0004] Communications networks have grown and developed over the past several years. Modern data communications networks are complaint with several communications protocols. The communications protocols set standards and provide specifications for compliance. For example, in a packet network a communication protocol would define the structure of packets (e.g. packet format) implementing the protocol and determine how the packets are communicated across a network.
P-0005[0005] In addition, the protocols define methods for routing and processing the packets. Since packets often include their source and destination address, communications protocols define how these addresses are formatted and how the addresses are used to forward the packets. However, although a protocol may define that a specific field may be used to format or process packets, these protocols don't often define how these processes should be implemented. This is often a task for the designer or manufacturer.
P-0006[0006] Therefore, it is common for communications protocols to define the format of a packet, but not define the process for testing or processing the packet. For example, packets communicated across a network have fields that often need to be compared with a range of fields. However, communications protocols don't often define exactly how these values should be compared or when during the packet processing that the value should be compared.
P-0007[0007] Packet lengths are often defined in a packet and often have to be compared with a range of values. For example, a port in a device may support a range of packet sizes. As a result, when a packet arrives at a port, the specific packet size encoded in the packet has to be compared with the range of packet sizes accepted by the port. The method for performing this comparison is not often defined by a communication protocol. However, single value to multiple value range comparison, is typically performed a number of times as a packet is processed through a network.
P-0008[0008] In addition, the method used to perform functions that are not defined by communications protocols, such as single value to multiple value range comparisons, may make a substantial difference in the performance of a system. Therefore, this specific aspect of packet processing has received some attention by designers.
P-0009[0009] A few conventional methods have been developed for performing range comparisons. In some implementations, the single value is compared with every value in the range. If the range is 16 values long, this would mean 16 comparisons. However, the speed of performing this type of comparison every time a comparison has to be made, on every packet, is slow. A second method would involve storing the upper limit of the range in a memory at every port and performing a simple test on the single value. However, this does not work when the range values are not incremental, in addition it requires additional memory to store the upper limit range value. Lastly, it is slow to implement in digital logic.
P-0010[0010] There is a need for an efficient method of making a single value to multiple value range comparison. There is a need for a method of implementing a range comparison that is fast compared with conventional methods. Lastly, there is a need for implementing a range comparison that uses simple digital logic.
SUMMARY OF THE INVENTION
P-0011[0011] A method and apparatus for performing a fast within range comparison of a first value with a second range of values is presented. An incoming packet is received in a processing device. The incoming packet includes information related to the length of the packet and information related to the virtual lane designated for the packet. Two six bit vectors are constructed. The first six bit vector is a packet length bit vector. The second six bit vector is a virtual lane bit vector. Packet length related and virtual lane related port information is retrieved from a table. The packet length port information is used to index a value in the packet length bit vector. The virtual lane port information is used to index a value in the virtual lane bit vector. The output of the indexing is an indication of whether a port can support a specific packet length or virtual lane.
P-0012[0012] A system is presented which comprises an encoder that constructs a bit vector in response to packet information. The bit vector including bit positions. A memory storing port information is presented. Indexing logic is coupled to the encoder and coupled to the memory. The indexing logic generates an output signal by using the port information to index into a bit position in the bit vector.
P-0013[0013] A method of operating a system is presented comprising the steps of receiving a first value associated with a packet. A first range of values is constructed in response to the first value associated with the packet. A second range of values is stored. A second value is synthesized from the second range of values. An output signal is generated by using the second single value to index into the first range of values.
BRIEF DESCRIPTION OF THE DRAWINGS
P-0014[0014]FIG. 1 is a block diagram of a switch implementing the method and apparatus of the present invention.
P-0015[0015]FIG. 2 is a block diagram of an Arbiter implementing the method and apparatus of the present invention.
P-0016[0016]FIG. 3 is a flow diagram of the method of the present invention.
P-0017[0017]FIG. 4 is an implementation diagram of the present invention.
P-0018[0018]FIG. 5 is a timing implementation diagram of the present invention.
DESCRIPTION OF THE INVENTION
P-0019[0019] While the present invention is described herein with reference to illustrative embodiments for particular applications, it should be understood that the invention is not limited thereto. Those having ordinary skill in the art and access to the teachings provided herein will recognize additional modifications, applications, and embodiments within the scope thereof and additional fields in which the present invention would be of significant utility.
P-0020[0020] The method and apparatus of the present invention is discussed within the context of an Infiniband (e.g. Infiniband Release 1.0, 2000 by Infiniband Trade Association) Architecture. Specifically, one embodiment of the present invention is implemented in a switch. However, it should be appreciated that the present invention may be implemented with respect to other standards compliant technologies and may be implemented in a variety of communications technologies such as switches, routers, channel adapters, repeaters and links that interconnect switches, routers, repeaters and channel adapters.
P-0021[0021] The Infiniband protocol stack works within the context of the Open System Interconnection (OSI) model, which is promulgated by the International Standards Organization (ISO). The OSI model defines a physical layer, a link layer, a network layer, a transport layer and upper level protocol layers. The Infiniband specification defines a media access control layer and a link-encoding layer that performs the link layer functionality of the OSI model. The Infiniband specification defines a network layer that performs the network layer functionality of the OSI model. Lastly, the Infiniband Architecture defines an Infiniband Architecture (IBA) Operations Layer which performs the transport layer functionality of the OSI model.
P-0022[0022] A switch compliant with the Infiniband Architecture implements the media access control functions and link encoding functionality of the Infiniband Architecture, with media access control functions and packet relay functions. Routers compliant with the Infiniband Architecture implement the media access control and the link encoding functionality of the Infiniband Architecture with a combination of media access control functions and link layer functions. Lastly, routers implement network layer functionality, with a packet relay implementation.
P-0023[0023] Infiniband compliant communications are organized as transactions between end-users. The transactions are fragmented into message units and the message units are fragmented into data packets. The data packets are the end-to-end routable unit of transfer within the Infiniband Architecture. Packets communicated within a network (e.g. subnet routing), use the media access control and link encoding functionality of the Infiniband Architecture. Packets transmitted between networks (e.g. inter-subnet routing), use the network layer functionality of the Infiniband architecture.
P-0024[0024] In the Infiniband Architecture packets are communicated in virtual lanes. A virtual lane is a communication path (e.g. communications link) shared by packets from several different end-nodes, end-users or transactions. In the present embodiment of the invention, eight virtual lanes are defined, however, the Infiniband Architecture provides for 15 virtual lanes. It should be appreciated that the method and apparatus of the present invention may be applied irrespective of the number of virtual lanes. Separate buffering and flow control is provided for each virtual lane and an arbiter is used to control virtual lane usage and manage the flow of packets across virtual lanes.
P-0025[0025] An Infiniband compliant data packet includes, in data order, a local route header for subnet routing, a global route header for inter-subnet routing, a base transport header, an extended transport header, an immediate data header, a message payload, an invariant cyclical redundancy check and a variant cyclical redundancy check. Each of these data groupings has a pre-defined length. As noted from the ordering of the information, the local route header is the first portion of the packet to enter a processing device.
P-0026[0026] The local route header (LRH) includes the information for local routing within an Infiniband Architecture. The LRH is eight bytes long and resides at the start of every packet. The local route header includes, in data order, a virtual lane field (VL), a link version field (Lver), a service level field (SL), a first reserve field, a link next header field (LNH), a destination local identifier (DLID), a second reserve field, a packet length field (PLEN) and a source local identifier (SLID).
P-0027[0027] The virtual lane field is four bits long. The virtual lane field identifies the virtual lane that the packet will be communicated on and identifies which receive buffer should receive the packet. The link version field is four bits long. The Link version field specifies the version of the local route header that the packet is using. The service level field is four bits long. The service level field is used by switches to determine the virtual lane to transmit the packet on. The first reserve field is two bits long, the first reserve field is presented in the local route header for future use. The link next header field is two bits long and specifies which headers follow the local route header.
P-0028[0028] Source and destination local identifiers are present in the local route header (LRH). A local identifier (LID) is an address assigned to a port by a subnet manager. The local identifier (LID) field is unique within the subnet and is used for directing packets within the subnet. The destination local identifier (DLID) follows the Link Next header field and is 16 bits long. The destination local identifier (DLID) specifies a destination port. In addition, the DLID identifies the route the packet should take to the destination port. If the packet will be routed to another subnet (e.g. through a router), the destination local identifier is the local identifier of the router. A second reserve field of five bits is also included in an Infiniband compliant packet. The second reserve field is provided for future use. The packet length (PLEN) field is 11 bits long. The packet length field represents the number of four-bytes words included in a packet. In an Inifinband compliant packet, the value of the packet length field is equal to the number of bytes in all fields starting from the first byte of the local route header and ending with the last byte before the CRC check, divided by four. The source local identifier (SLID) field is 16 bits long. The source local identifier (SLID) is the port that communicated the packet onto the subnet.
P-0029[0029]FIG. 1 is a block level diagram of a switch implementing the method and apparatus of the present invention. In FIG. 1 a physical layer block <b>102</b> is shown. The physical layer block <b>102</b> provides physical layer management such as media interface (e.g. twisted pair cable, fiber optics) and signaling. For example, in the present embodiment, each physical layer block <b>102</b>, has 1× or 4× (e.g. Infiniband specification provides for 1×, 4×, 12×) capacity as shown by <b>104</b>. As a result, four pairs of twisted pair wires (e.g. 4×) are used for incoming traffic and four pairs of twisted pair wires (e.g. 4×) are used for outgoing traffic. In the 4× implementation, data is striped across all four incoming and outgoing twisted pairs, increasing the bandwidth by a factor of four over a 1× implementation (e.g. where incoming and outgoing data would communicate across 1 pair of twisted pair wires).
P-0030[0030] The physical layer block <b>102</b> interfaces with a link layer block <b>106</b>. The link layer block implements the media access control and link encoding functionality of the Infiniband specification. The link layer block interfaces with input buffers <b>108</b>. After packets enter the switch and are processed through the physical layer <b>102</b> and the link layer <b>106</b>, the packets are then buffered in the input buffers <b>108</b>. The input buffers <b>108</b> connect to a crossbar switch <b>110</b> which switches incoming and outgoing traffic buffered in the input buffers <b>108</b>. The Arbiter <b>112</b> manages the crossbar switch <b>110</b>. In addition, a management block <b>114</b> is shown. The management block <b>114</b> performs Infiniband designated management functions and vendor specific functionality such as Built In Self Test (BIST).
P-0031[0031]FIG. 2 displays a block diagram of the Arbiter <b>112</b>, shown in FIG. 1. The Arbiter grants and denies request to use the crossbar switch. The request come in from packets stored in the input buffers located on each port. An initial request <b>200</b> comes into the Arbiter. The initial requests <b>200</b> includes information such as destination local identifier (DLID), service level (SL) and Packet Length (PLEN). The request <b>200</b> is input into a routing table lookup <b>202</b>, which determines an output port (OP) based on the DLID. The IP, SL and OP from the routing table lookup <b>202</b> are input into the virtual lane mapper <b>204</b>. The virtual lane mapper <b>204</b> maps packets to virtual lanes based on the IP, SL and OP. The virtual lane mapper <b>204</b> also inputs into a request builder <b>206</b>.
P-0032[0032] The method and apparatus of the present invention are primarily implemented in the request builder <b>206</b>. The request builder <b>206</b> builds a packet initiated request for the switch. The request are collected and queued at block <b>208</b> and then input directly (e.g. direct request as shown by <b>210</b>) into a priority selector <b>214</b> or in the alternative, the request are queued in a new request queue <b>212</b>. The priority selector <b>214</b> serves as an input to the resource allocator <b>216</b>. The priority selector <b>214</b> selects a request based on priority. The resource allocator <b>216</b> allocates resources in the switch. A request grant is shown as <b>218</b>. Request are moved into and out of a virtual lane request queue <b>222</b> and an input port request queue <b>226</b>, through a feedback loop <b>220</b>. Virtual lane request are selected from virtual lane queue <b>222</b>, by the virtual lane request selector <b>224</b>. Input port request are selected from the input port queue <b>226</b>, by the input port request selector <b>228</b>. Ultimately, the priority selector <b>214</b>, selects request from the direct request <b>210</b>, the new request queue <b>212</b>, the virtual lane request selector <b>224</b> and the input port request selector <b>228</b>. The priority selector <b>214</b> then inputs into the resource allocator <b>216</b> and resources are allocated.
P-0033[0033]FIG. 3 displays a flow diagram of a method implemented in the present invention. The method presented in association with FIG. 3 is applicable for testing a single value against a range of values during packet processing. In the present embodiment, the method is applied to determine whether a port can support a packet based on the packets length or virtual lane designation. However, it should be appreciated that the method may be applied in other context (e.g. against other fields in a packet) and using different protocols.
P-0034[0034] In FIG. 3 a packet comes into a port during the first half of a read cycle and is stored in an input buffer as shown at <b>300</b>. The packet length field and the virtual lane field are assessed to construct a bit vector. A bit vector (e.g. one for packet length and one for virtual lanes) is constructed as shown by <b>302</b>, using a methodology presented below. A table storing packet length capacity (maximum MTU) for a specific port and the virtual lanes supported by the port, is accessed to determine the maximum MTU and the virtual lanes supported by the port. Values representing the maximum MTU and the allowable virtual lanes are accessed from the table, as shown at <b>304</b>. The values representing the maximum MTU and the virtual lane are used as an index into the bit vector as shown by <b>304</b>. The bit location is an indication of whether the port can support the packet or not. A value of 1 as shown at <b>308</b>, refers to the packet passing (e.g. port supports the packet length, the virtual lane). A value of 0, as shown at <b>310</b>, refers to the packet failing (e.g. port does not support the packet length, virtual lane).
P-0035[0035] The method associated with FIG. 3, results in a fast method of performing single value to multiple value comparisons. Since the single value designation (e.g. packet length) is available early in the packet processing cycle, the single value is used to develop a range of values (e.g. a packet length bit vector). The range of values (e.g. maximum MTU for a port) acceptable by a port is then synthesized into a single value (e.g. “value” included in the Maximum MTU table, Table II given below) and used to index into bit positions in the packet length bit vector. A detailed description of this process is provided below.
P-0036[0036] The methodology described in FIG. 3 is shown with respect to two examples. The first example, is an implementation of the method applied to the packet length. The second example, is an implementation of the method applied to the virtual lane.
P-0037[0037] The method of FIG. 3 may be implemented to test the packet length. An incoming packet is received as shown at <b>300</b> and the packet length field is analyzed. A packet length bit-vector is constructed using the packet length field from the incoming packet as shown at <b>302</b>. A maximum MTU size (e.g. maximum packet size that a port can support) is retrieved from a memory (e.g. latch array) storing the maximum MTU size per port as shown by <b>304</b>. Table I given below, details the maximum MTU size for a port compliant with the Infiniband specification. A value representing the maximum MTU size is then used as an index into the packet length bit vector as shown at <b>306</b>. Based on the bit value selected by the value representing the maximum MTU size, a packet either passes as shown at <b>308</b> or fails as shown at <b>310</b>.
P-0038[0038] The maximum packet size of an Infiniband compliant packet is given in Table 1. <tables id="TABLE-US-00001" num="1"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217PT" align="center" /><thead><row><entry namest="1" nameend="1" align="center">TABLE I</entry></row></thead><tbody valign="top"><row><entry /></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Packet Size (Maximum MTU)</entry></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="3"><colspec colname="1" colwidth="63PT" align="center" /><colspec colname="2" colwidth="49PT" align="center" /><colspec colname="3" colwidth="105PT" align="center" /><tbody valign="top"><row><entry /><entry>Maximum</entry><entry /></row><row><entry /><entry>Packet Length</entry><entry>Maximum Bytes</entry></row><row><entry>MTU</entry><entry>(Bytes/4):(Hex)</entry><entry>(MTU + 126)</entry></row><row><entry namest="1" nameend="3" align="center" rowsep="1" /></row><row><entry> 256</entry><entry>95:(5F)</entry><entry> 382</entry></row><row><entry> 512</entry><entry>159:(9F) </entry><entry> 638</entry></row><row><entry>1024</entry><entry>287:(11F)</entry><entry>1150</entry></row><row><entry>2048</entry><entry>543:(21F)</entry><entry>2174</entry></row><row><entry>4096</entry><entry>1055:(41F) </entry><entry>4222</entry></row><row><entry namest="1" nameend="3" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
P-0039[0039] A maximum MTU is the maximum packet size that a port is configured to communicate. The maximum MTU size for a given port is stored in a table. In the method of the present invention, a value representing the maximum MTU size is read from the table, in accordance with <b>304</b> of FIG. 3.
P-0040[0040] The Maximum MTU Value table (e.g. Table II) given below, displays a table including the values for a maximum MTU size. Table II represents the table associated with each port, as mentioned above (e.g. item <b>304</b> of FIG. 3). As shown by Table II given below, a maximum MTU of 256 bytes would be represented by 0x0 hexadecimal. A maximum MTU of 512 would be represented by 0x2. A maximum MTU of 1024 would be represented by 0x3. A maximum MTU of 2048 would be represented by 0x4. Lastly, a maximum MTU of 4096 would be represented with a value of 0x5. The hexadecimal values are used to index into the packet length bit vector. <tables id="TABLE-US-00002" num="2"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217PT" align="center" /><thead><row><entry namest="1" nameend="1" align="center">TABLE II</entry></row></thead><tbody valign="top"><row><entry /></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Maximum MTU Value</entry></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="3"><colspec colname="1" colwidth="98PT" align="center" /><colspec colname="2" colwidth="28PT" align="center" /><colspec colname="3" colwidth="91PT" align="center" /><tbody valign="top"><row><entry>Value</entry><entry>Binary</entry><entry>Meaning</entry></row><row><entry namest="1" nameend="3" align="center" rowsep="1" /></row><row><entry>0x0</entry><entry>000</entry><entry>Reserved</entry></row><row><entry>0x1</entry><entry>001</entry><entry> 256 bytes</entry></row><row><entry>0x2</entry><entry>010</entry><entry> 512 bytes</entry></row><row><entry>0x3</entry><entry>011</entry><entry>1024 bytes</entry></row><row><entry>0x4</entry><entry>100</entry><entry>2048 bytes</entry></row><row><entry>0x5</entry><entry>101</entry><entry>4096 bytes</entry></row><row><entry>6-15 Reserved</entry></row><row><entry namest="1" nameend="3" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
P-0041[0041] In the method of the present invention, a 6-bit packet length vector is constructed as shown by <b>302</b> of FIG. 3. The 6-bit packet length vector is tested to determine whether a packet (e.g. based on the packet length field) is larger than the maximum MTU size for a port. The Packet Length Bit Vector table (e.g. Table III) given below, displays the packet length bit vector for 256, 512, 1024, 2048 and 4096 maximum MTU's. <tables id="TABLE-US-00003" num="3"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217PT" align="center" /><thead><row><entry namest="1" nameend="1" align="center">TABLE III</entry></row></thead><tbody valign="top"><row><entry /></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Packet Length Bit Vector</entry></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="3"><colspec colname="1" colwidth="56PT" align="center" /><colspec colname="2" colwidth="147PT" align="center" /><colspec colname="3" colwidth="14PT" align="left" /><tbody valign="top"><row><entry>Maximum</entry><entry>Bit position</entry><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="7"><colspec colname="1" colwidth="56PT" align="center" /><colspec colname="2" colwidth="14PT" align="center" /><colspec colname="3" colwidth="42PT" align="center" /><colspec colname="4" colwidth="14PT" align="center" /><colspec colname="5" colwidth="35PT" align="center" /><colspec colname="6" colwidth="14PT" align="center" /><colspec colname="7" colwidth="42PT" align="center" /><tbody valign="top"><row><entry>MTU</entry><entry>5</entry><entry>4</entry><entry>3</entry><entry>2</entry><entry>1</entry><entry>0</entry></row><row><entry namest="1" nameend="7" align="center" rowsep="1" /></row><row><entry> 256</entry><entry>1</entry><entry>1</entry><entry>1</entry><entry>1</entry><entry>1</entry><entry>0</entry></row><row><entry> 512</entry><entry>1</entry><entry>1</entry><entry>1</entry><entry>1</entry><entry>0</entry><entry>0</entry></row><row><entry>1024</entry><entry>1</entry><entry>1</entry><entry>1</entry><entry>0</entry><entry>0</entry><entry>0</entry></row><row><entry>2048</entry><entry>1</entry><entry>1</entry><entry>0</entry><entry>0</entry><entry>0</entry><entry>0</entry></row><row><entry>4096</entry><entry>1</entry><entry>0</entry><entry>0</entry><entry>0</entry><entry>0</entry><entry>0</entry></row><row><entry namest="1" nameend="7" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
P-0042[0042] The 6-bit packet length vectors shown in Table III are constructed as follows, if the packet has a data length of 256 bytes or less, bit positions <b>1</b> through <b>5</b> of the packet length bit vector are set to one; indicating that a maximum MTU value of 0x1, 0x2, 0x3, 0x4 or 0x5 (e.g. see Table II), is required for the packet to be valid. If the packet length has a data length of 512 bytes or less, bit positions <b>2</b> through <b>5</b> of the packet length bit vector are set to one, indicating that a maximum MTU value of 0x2, 0x3, 0x4 or 0x5 is required for the packet to be valid. If the packet has a data length of 1024 bytes or less, bit positions <b>3</b> through <b>5</b> of the packet length bit vector are set to one, indicating that a maximum MTU value of 0x3, 0x4 or 0x5 is required for the packet to be valid.
P-0043[0043] If the packet has a data length of 2048 bytes or less, bit positions <b>4</b> through <b>5</b> of the packet length bit vector is set to one, indicating that a maximum MTU value of 0x4 or 0x5 is required for the packet to be valid. If the packet length results in a data length of 4096 bytes or less, bit position <b>5</b> of the packet length bit vector is set to one, indicating that a maximum MTU value of 0x5 is required for the packet length to be valid.
P-0044[0044] An example of the methodology used for generating the packet length bit-vector is provided below. In one embodiment of the present invention a port with a maximum MTU size of 256 bytes may be used. An Infiniband compliant port with a maximum MTU size of 256 bytes would be able to transmit a packet with a maximum of 382 bytes long or a packet length field of 95 quadlets, where a quadlet is 4 bytes long (e.g. 0x5F hexadecimal) as shown in Table I. Assuming in our example, that the incoming packet is 382 bytes. Using a 382 byte long packet a bit-vector is constructed, as discussed with respect to <b>302</b> of FIG. 3. A 382 byte long packet is represented as 1011111 in binary. Since the Infiniband packet length field is eleven bits long, the packet would be formatted as follows in Table IV: <tables id="TABLE-US-00004" num="4"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217PT" align="center" /><thead><row><entry namest="1" nameend="1" align="center">TABLE IV</entry></row><row><entry /></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Infiniband compliant Packet</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="11"><colspec colname="1" colwidth="42PT" align="left" /><colspec colname="2" colwidth="21PT" align="center" /><colspec colname="3" colwidth="14PT" align="center" /><colspec colname="4" colwidth="21PT" align="center" /><colspec colname="5" colwidth="14PT" align="center" /><colspec colname="6" colwidth="21PT" align="center" /><colspec colname="7" colwidth="14PT" align="center" /><colspec colname="8" colwidth="21PT" align="center" /><colspec colname="9" colwidth="14PT" align="center" /><colspec colname="10" colwidth="21PT" align="center" /><colspec colname="11" colwidth="14PT" align="center" /><tbody valign="top"><row><entry>Bit-position:</entry><entry>10</entry><entry>9</entry><entry>8</entry><entry>7</entry><entry>6</entry><entry>5</entry><entry>4</entry><entry>2</entry><entry>1</entry><entry>0</entry></row><row><entry>Bit-value:</entry><entry>0</entry><entry>0</entry><entry>0</entry><entry>1</entry><entry>0</entry><entry>1</entry><entry>1</entry><entry>1</entry><entry>1</entry><entry>1</entry></row><row><entry namest="1" nameend="11" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
P-0045[0045] In Table IV bit-position <b>0</b> is the least significant bit and bit-position <b>10</b> is the most significant bit.
P-0046[0046] Since 382 bytes-95 quadlets-0x5F hexadecimal is not an easy computational power of two, an easy computational power of two is selected to analyze the packet length. As a result, the analysis will segment into two steps. First a test is performed to determine if the packet is less than the easy computational power of two. Then a test is performed to determine if the packet is between the easy computational power of two and 95 quadlets (e.g. Ox5F), which is the maximum number of quadlets acceptable by a port with an MTU of 256 bytes. The two step analysis will result in a 0 bit value or a 1 bit value which will be placed in the 256 byte bit position (e.g. bit position <b>1</b>, of Table III) in the packet length bit vector. The process is then be repeated for 512, 1024, 2048 and 4096. As a result, the bit positions for each of these maximum MTU values (e.g. bit position <b>2</b>, <b>3</b>, <b>4</b>, <b>5</b> of Table III) will be filled with a 0 bit value or a 1 bit value.
P-0047[0047] In the present embodiment, 64 decimal or 0x40 hexadecimal is chosen as an easy computational power of two, because of the ease of implementation in binary logic. Therefore, the first test is performed to determine if the packet size is below 0x40. The second test is then performed to determine if the packet size is between 0x40 and 0x5F, the maximum packet size of a port with a maximum MTU of 256 (e.g. see Table I).
P-0048[0048] In the first step of our analysis, we look at the five most significant bits (e.g. bit-positions <b>10</b> to <b>6</b> of Table IV) and XNOR the five most significant bits (e.g. from Table IV, 00010) with the value 00000. The XNOR logical operator makes a comparison of two numbers. When two bits are the same the XNOR value is true (e.g. 1). When two bits are different the XNOR value is false (e.g. 0). As a result, if a 1 appears in any one of the five most significant positions, performing a logical XNOR operation on the five bit positions, with 00000 will produce a 0 value. Comparing bit positions <b>10</b> to <b>6</b> with 00000, serves as a fast test to determine if the packet size is less than 0x40 hexadecimal or 64 bytes decimal (e.g. the easy computational power of two).
P-0049[0049] The XNOR computation for bit-positions <b>10</b> to <b>6</b> is given in Table V.: <tables id="TABLE-US-00005" num="5"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217PT" align="center" /><thead><row><entry namest="1" nameend="1" align="center">TABLE V</entry></row><row><entry /></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>First XNOR computation</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="6"><colspec colname="1" colwidth="112PT" align="left" /><colspec colname="2" colwidth="21PT" align="center" /><colspec colname="3" colwidth="21PT" align="center" /><colspec colname="4" colwidth="21PT" align="center" /><colspec colname="5" colwidth="21PT" align="center" /><colspec colname="6" colwidth="21PT" align="center" /><tbody valign="top"><row><entry>(Bit positions 10 to 6 see Table IV)</entry><entry>0</entry><entry>0</entry><entry>0</entry><entry>0</entry><entry>1</entry></row><row><entry>(256 packet size limit)</entry><entry>0</entry><entry>0</entry><entry>0</entry><entry>0</entry><entry>0</entry></row><row><entry>Result 1:</entry><entry>1</entry><entry>1</entry><entry>1</entry><entry>1</entry><entry>0</entry></row><row><entry namest="1" nameend="6" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
P-0050[0050] A logical “AND” is then performed on Result 1, to determine if a zero value occurred in Result 1. A zero value would mean that there is a value of 1 in bit positions <b>10</b> through <b>6</b>. For example, the following logical operation is performed: 1+1+1+1+0=0. From the logical “AND,” outcome one is computed, which is 0. The resulting 0 (e.g. outcome one), signifies that the packet size is greater than 0x40 hexadecimal since at least one of the bits in the XNOR computation resulted in a zero. If all the bits in the XNOR computation were 1, the logical “AND” computation would have produced a 1, which would signify that the packet length is less than 0x40 hexadecimal. After determining that the value of the packet length is greater than 0x40 hexadecimal, we then test whether the packet length is between 0x40 hexadecimal and 0x5F hexadecimal (e.g. the value of the maximum packet size for a 256 maximum MTU port).
P-0051[0051] An alternative approach for performing the first step of the method of the present invention is to NOR the five most significant bits together. If the bitwise NOR results in a 1, then all the bits are zero. If the bitwise NOR results in a zero, then one or more bits are 1.
P-0052[0052] The second test determines if the packet length is between 0x40, the easy computations power of two and 0x5F, the maximum MTU size for a 256 byte packet. To determine whether the packet is between 0x40 hexadecimal and 0x5F hexadecimal, bit positions <b>10</b> through <b>5</b> are tested. To perform the second step of the analysis we first observe the bit pattern of the numbers between 0x40 and 0x5F. An example of the bit pattern is given below in Table VI. <tables id="TABLE-US-00006" num="6"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217PT" align="center" /><thead><row><entry namest="1" nameend="1" align="center">TABLE VI</entry></row></thead><tbody valign="top"><row><entry /></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Range Table</entry></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="5"><colspec colname="OFFSET" colwidth="21PT" align="left" /><colspec colname="1" colwidth="21PT" align="center" /><colspec colname="2" colwidth="77PT" align="center" /><colspec colname="3" colwidth="21PT" align="center" /><colspec colname="4" colwidth="77PT" align="center" /><tbody valign="top"><row><entry /><entry /><entry>Binary</entry><entry /><entry>Binary</entry></row><row><entry /><entry>HEX</entry><entry>(76543210)</entry><entry>HEX</entry><entry>(76543210)</entry></row><row><entry /><entry namest="OFFSET" nameend="4" align="center" rowsep="1" /></row><row><entry /><entry>40</entry><entry>01000000</entry><entry>50</entry><entry>01010000</entry></row><row><entry /><entry>41</entry><entry>01000001</entry><entry>51</entry><entry>01010001</entry></row><row><entry /><entry>42</entry><entry>01000010</entry><entry>52</entry><entry>01010010</entry></row><row><entry /><entry>43</entry><entry>01000011</entry><entry>53</entry><entry>01010011</entry></row><row><entry /><entry>44</entry><entry>01000100</entry><entry>54</entry><entry>01010100</entry></row><row><entry /><entry>45</entry><entry>01000101</entry><entry>55</entry><entry>01010101</entry></row><row><entry /><entry>46</entry><entry>01000110</entry><entry>56</entry><entry>01010110</entry></row><row><entry /><entry>47</entry><entry>01000111</entry><entry>57</entry><entry>01010111</entry></row><row><entry /><entry>48</entry><entry>01001000</entry><entry>58</entry><entry>01011000</entry></row><row><entry /><entry>49</entry><entry>01001001</entry><entry>59</entry><entry>01011001</entry></row><row><entry /><entry>4a</entry><entry>01001010</entry><entry>5a</entry><entry>01011010</entry></row><row><entry /><entry>4b</entry><entry>01001011</entry><entry>5b</entry><entry>01011011</entry></row><row><entry /><entry>4c</entry><entry>01001100</entry><entry>5c</entry><entry>01011100</entry></row><row><entry /><entry>4d</entry><entry>01001101</entry><entry>5d</entry><entry>01011101</entry></row><row><entry /><entry>4e</entry><entry>01001110</entry><entry>5e</entry><entry>01011110</entry></row><row><entry /><entry>4f</entry><entry>01001111</entry><entry>5f</entry><entry>01011111</entry></row><row><entry /><entry namest="OFFSET" nameend="4" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
P-0053[0053] Analyzing the pattern presented by the range in Table VI, bits in positions <b>7</b> to <b>5</b> do not change. However, bits in positions <b>0</b> through <b>4</b> do change. Therefore, any packet between the values of 0x40 and 0x5F would have the bit pattern 010 in the most significant bit positions. Therefore we take the value 010 and add three additional zero values to build a six bit value for testing. Adding an additional three bits results in the bit pattern 010000. When this bit pattern is turned around to match the most significant bits of the incoming packet, a bit pattern of 000010 results. XNORing bits <b>10</b> through <b>6</b> of the incoming packet with bit pattern 000010, results in the following computation. <tables id="TABLE-US-00007" num="7"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217PT" align="center" /><thead><row><entry namest="1" nameend="1" align="center">TABLE VII</entry></row><row><entry /></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Second XNOR computation</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="7"><colspec colname="OFFSET" colwidth="14PT" align="left" /><colspec colname="1" colwidth="70PT" align="left" /><colspec colname="2" colwidth="35PT" align="center" /><colspec colname="3" colwidth="14PT" align="center" /><colspec colname="4" colwidth="35PT" align="center" /><colspec colname="5" colwidth="14PT" align="center" /><colspec colname="6" colwidth="35PT" align="center" /><tbody valign="top"><row><entry /><entry>(Bit positions 10 to 6)</entry><entry>0</entry><entry>0</entry><entry>0</entry><entry>1</entry><entry>0</entry></row><row><entry /><entry>(256 packet size limit)</entry><entry>0</entry><entry>0</entry><entry>0</entry><entry>1</entry><entry>0</entry></row><row><entry /><entry>Result 2:</entry><entry>1</entry><entry>1</entry><entry>1</entry><entry>1</entry><entry>1</entry></row><row><entry /><entry namest="OFFSET" nameend="6" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
P-0054[0054] A logical “AND” is then performed on Result 2. The following logical operation is performed: 1+1+1+1+1=1. From the logical “AND” outcome 2 is computed which is a one.
P-0055[0055] A logical OR operation is then performed on the first outcome (e.g. outcome 1) and the second outcome (e.g. outcome 2), to determine if the packet is below 0x40 or between 0x40 and 0x5F. As such, if the packet is less than 0x40 hexadecimal bytes long or the packet is between 0x40 hexadecimal and 5F hexadecimal, the OR would result in a true combined outcome (e.g. 1). In our example, the combined outcome computation, is given below as Table VIII. <tables id="TABLE-US-00008" num="8"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217PT" align="center" /><thead><row><entry namest="1" nameend="1" align="center">TABLE VIII</entry></row><row><entry /></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Combined Outcome computation</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="3"><colspec colname="OFFSET" colwidth="21PT" align="left" /><colspec colname="1" colwidth="140PT" align="left" /><colspec colname="2" colwidth="56PT" align="center" /><tbody valign="top"><row><entry /><entry>(Outcome one: packet position 10 through 6)</entry><entry>0</entry></row><row><entry /><entry>(Outcome two: packet positions 10 through 6)</entry><entry>1</entry></row><row><entry /><entry>(Combined outcome)</entry><entry>1</entry></row><row><entry /><entry namest="OFFSET" nameend="2" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
P-0056[0056] The packet length bit-vector is then constructed with the combined outcome serving as the first input for the bit vector. The Bit vector is constructed with the most significant bits as the left most bit position and the least significant bits as the right most bit position. The zero position in the bit vector is reserved. The 1st bit position corresponds to a packet length that is less than 256 maximum MTU size. The 2nd bit position corresponds to a packet length that is less than 512 maximum MTU size. The 3rd bit position corresponds to a packet length that is less than 1028 maximum MTU size. The 4th bit position corresponds to a packet length that is less than 2048 maximum MTU size. The 5th bit position corresponds to a packet length that is less than 4096 maximum MTU size. Therefore, in the current example, the bit in the one position would be set which corresponds to a maximum MTU size of 256. At this stage of the process, the packet length bit vector would look as follows in Table VIII given below: <tables id="TABLE-US-00009" num="9"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217PT" align="center" /><thead><row><entry namest="1" nameend="1" align="center">TABLE IX</entry></row><row><entry /></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Packet Length bit vector (e.g. 256 bit set)</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="8"><colspec colname="OFFSET" colwidth="14PT" align="left" /><colspec colname="1" colwidth="63PT" align="left" /><colspec colname="2" colwidth="14PT" align="center" /><colspec colname="3" colwidth="35PT" align="center" /><colspec colname="4" colwidth="14PT" align="center" /><colspec colname="5" colwidth="28PT" align="center" /><colspec colname="6" colwidth="14PT" align="center" /><colspec colname="7" colwidth="35PT" align="center" /><tbody valign="top"><row><entry /><entry>Bit position</entry><entry>5</entry><entry>4</entry><entry>3</entry><entry>2</entry><entry>1</entry><entry>0</entry></row><row><entry /><entry>Bit vector value</entry><entry>0</entry><entry>0</entry><entry>0</entry><entry>0</entry><entry>1</entry><entry>0</entry></row><row><entry /><entry namest="OFFSET" nameend="7" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
P-0057[0057] The process is repeated for a 512 maximum MTU size, a 1024 maximum MTU size, a 2048 maximum MTU size and a 4096 maximum MTU size. Should the incoming packet be less than these respective lengths, a bit position corresponding to each maximum MTU size would be set. Therefore, when a packet is less than 256, bit positions <b>1</b>, <b>2</b>, <b>3</b>, <b>4</b> and <b>5</b> are set. When a packet is less than 512, bit positions <b>2</b>,<b>3</b>, <b>4</b> and <b>5</b> are set. When the packet is less than 1024, bit positions <b>3</b>,<b>4</b>, and <b>5</b> are set. When the packet is less than 2048 bit positions <b>4</b> and <b>5</b> are set. Lastly, when the packet is less than 4096, bit position <b>5</b> is set.
P-0058[0058] The two step method presented above is applied to the 512, 1024, 2048 and 4096 values using the ranges presented in Table X given below: <tables id="TABLE-US-00010" num="10"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217PT" align="center" /><thead><row><entry namest="1" nameend="1" align="center">TABLE X</entry></row></thead><tbody valign="top"><row><entry /></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Test Ranges & Bit Patterns</entry></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="3"><colspec colname="1" colwidth="63PT" align="center" /><colspec colname="2" colwidth="91PT" align="left" /><colspec colname="3" colwidth="63PT" align="center" /><tbody valign="top"><row><entry>Maximum</entry><entry>(1) First step value</entry><entry>Bit Pattern</entry></row><row><entry>MTU</entry><entry>(2) Second step value</entry><entry>Value</entry></row><row><entry namest="1" nameend="3" align="center" rowsep="1" /></row><row><entry> 256</entry><entry>(1) Less than 0x40</entry><entry>000010</entry></row><row><entry /><entry>(2) Between 0x40 & 0x5F</entry></row><row><entry> 512</entry><entry>(1) Less than 0x80</entry><entry>000100</entry></row><row><entry /><entry>(2) Between 0x80 & 0x9F</entry></row><row><entry>1024</entry><entry>(1) Less than 0x100</entry><entry>001000</entry></row><row><entry /><entry>(2) Between 0x100 & 0x11F</entry></row><row><entry>2048</entry><entry>(1) Less than 0x200</entry><entry>010000</entry></row><row><entry /><entry>(2) Between 0x200 & 0x21F</entry></row><row><entry>4096</entry><entry>(1) Less than 0x400</entry><entry>100000</entry></row><row><entry /><entry>(2) Between 0x400 & 0x41F</entry></row><row><entry namest="1" nameend="3" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
P-0059[0059] Once the packet length bit vector has been constructed as shown at <b>302</b> in FIG. 3 data representing the Maximum MTU size (e.g. see Table II) of the port, is read from a table maintained in a memory associated with the port (e.g. <b>304</b> of FIG. 3).
P-0060[0060] As shown in the maximum MTU Table II, a maximum MTU size associated with 256 will test bit <b>1</b> from the packet length bit vector. A maximum MTU size associated with 512 will test bit <b>2</b> in the packet length bit vector. A maximum MTU size associated with 1024 will test bit <b>3</b> in the packet length bit vector. A maximum MTU size associated with 2048 will test bit <b>4</b> in the packet length bit vector. Lastly, a maximum MTU size associated with 4096 will test bit <b>5</b> in the packet length bit vector. Once the appropriate bit is tested (e.g. item <b>306</b> of FIG. 3), a packet pass signal <b>308</b> is generated or a packet fail signal <b>310</b> is generated. It should be appreciated that in the method of the present invention, the testing of the respecting bits in the packet length bit vector is done by indexing into the specific bit position in the packet length bit vector.
P-0061[0061] The final packet length bit vector, shown in Table III includes the following characteristics. Bit <b>0</b> is always 0. If bit <b>0</b> is set, it would indicate that the packet is reserved or has a currently undefined value.
P-0062[0062] Bit <b>1</b> is set if the packet length satisfies a maximum MTU of 256, which is 382 bytes including headers or 95 quadlets=0x5F hex, the maximum value of the packet-length field. To determine bit <b>1</b>, a first test of the packet length field is performed to determine if the packet length field is less than 0x40. The first test is performed by checking that bits positions <b>10</b> to <b>6</b> are 0, meaning the packet length is less than 0x40. The first test generates a first result on which a logical “AND” operation is performed to produce outcome one. In a second test, bit positions <b>10</b> to <b>5</b> are compared to a bit pattern 000010, to determine if the packet length field is between 0x40 or 0x5F. The second test produces a second result, on which a logical “AND” operation is performed to produce outcome two. Outcome one is then compared with outcome two to produce a combined outcome, which is the value placed in the 256 byte position of the packet length bit vector.
P-0063[0063] Bit <b>2</b> is set if the packet length satisfies a maximum MTU of 512, which is 638 bytes including headers or 159 quadlets=0x9F hex, the maximum value of the packet length field. To determine bit <b>2</b>, a first test of the packet length field is performed to determine if the packet length field is less than 0x80. The first test is performed by checking that bits positions <b>10</b> to <b>7</b> are 0, meaning the packet length is less than 0x80. The first test generates a first result on which a logical “AND” operation is performed to produce outcome one. In a second test, bit positions <b>10</b> to <b>5</b> are compared to a bit pattern 000100, to determine if the packet length field is between 0x80 or 0x9F. The second test produces a second result, on which a logical “AND” operation is performed to produce outcome two. Outcome one is then compared with outcome two to produce a combined outcome, which is the value placed in the 512 byte position of the packet length bit vector.
P-0064[0064] Bit <b>3</b> is set if the packet length satisfies a maximum MTU of 1024, which is 1150 bytes including headers, which is 287 quadlets=0x11F hex, the maximum value of the packet length field. This bit is set if the packet length satisfies a maximum MTU of 512, which is 1150 bytes including headers or 287 quadlets=0x11F hex, the maximum value of the packet length field. To determine bit <b>2</b>, a first test of the packet length field is performed to determine if the packet length field is less than 0x100. The first test is performed by checking that bits positions <b>10</b> to <b>8</b> are 0, meaning the packet length is less than 0x100. The first test generates a first result on which a logical “AND” operation is performed to produce outcome one. In a second test, bit positions <b>10</b> to <b>5</b> are compared to a bit pattern 001000, to determine if the packet length field is between 0x100 or 0x11F. The second test produces a second result, on which a logical “AND” function is performed to produce a outcome two. Outcome one is then compared with outcome two to produce a combined outcome, which is the value placed in the 1024 byte position of the packet length bit vector.
P-0065[0065] Bit <b>4</b> is set if the packet length satisfies a maximum MTU of 2048, which is 2174 bytes including headers, which is 543 quadlets=0x21F hex, the maximum value of the packet length field. This bit is set if the packet length satisfies a maximum MTU of 2048, which is 2174 bytes including headers or 543 quadlets=0x21F hex, the maximum value of the packet length field. To determine bit <b>4</b>, a first test of the packet length field is performed to determine if the packet length field is less than 0x200. The first test is performed by checking that bits positions <b>10</b> to <b>9</b> are 0, meaning the packet length is less than 0x200. The first test generates a first result on which a logical “AND” operation is performed to produce outcome one. In a second test, bit positions <b>10</b> to <b>5</b> are compared to a bit pattern 010000, to determine if the packet length field is between 0x200 or 0x21F. The second test produces a second result, on which a logical “AND” function is performed to produce a outcome two. Outcome one is then compared with outcome two to produce a combined outcome, which is the value placed in the 2048 byte position of the packet length bit vector.
P-0066[0066] Bit <b>5</b> is set if the packet length satisfies a maximum MTU of 4096, which is 4222 bytes including headers, which is 1055 quadlets=0x41F hex, the maximum value of the packet length field. This bit is set if the packet length satisfies a maximum MTU of 4096, which is 4222 bytes including headers or 1055 quadlets=0x41F hex, the maximum value of the packet length field. To determine bit <b>5</b>, a first test of the packet length field is performed to determine if the packet length field is less than 0x400. The first test is performed by checking that bits position <b>10</b> is 0, meaning the packet length is less than 0x400. The first test generates a first result on which a logical “AND” operation is performed to produce outcome one. In a second test, bit position <b>10</b> to <b>5</b> compared to a bit pattern 100000, to determine if the packet length field is between 0x400 or 0x41F. The second test produces a second result, on which a logical “AND” operation is performed to produce outcome two. Outcome one is then compared with the outcome two to produce a combined outcome, which is the value placed in the 4096 byte position of the packet length bit vector.
P-0067[0067] As shown by the foregoing method, a single value of the packet length is available in the early clock cycles of a packets processing. As a result, the single value is used to create a packet length bit vector using the foregoing method. In other words, several testable values (e.g. the packet length bit vector) are constructed from the initial value (e.g. the packet length field). The range of packet lengths supported by a port, which are available later in the packet processing cycle, are then synthesized into a single value for testing (e.g. see Table II). The maximum MTU value supported by a port (e.g. the single synthesized value) is then used to index into the range of testable values (e.g. the packet length vector).
P-0068[0068] The method associated with FIG. 3, also results in a fast method of performing single value to multiple value comparisons for virtual lanes. Since the single value designation (e.g. virtual lane) is available early in the packet processing cycle, the single value is used to develop a range of values (e.g. a virtual lane bit vector). The range of virtual lanes supported by a port is then synthesized into a single value (e.g. “bit position value,” included in the Virtual Lane Port Table XII, given below) and used to index into bit positions in the virtual lane bit vector. A detailed description of this process is provided below.
P-0069[0069] The method associated with FIG. 3 may be implemented to test the virtual lanes that a port will support. An incoming packet is received as shown at <b>300</b> and the virtual lane field is analyzed. A virtual lane bit-vector is constructed using the virtual lane field from the incoming packet as shown by <b>302</b>. A value representing a single virtual lane or a range of virtual lanes, is retrieved from a table storing the virtual lanes supported by a port as shown by <b>304</b>. The value representing the range of virtual lanes or the single virtual lane is then used as an index into the virtual lane bit vector as shown by <b>306</b>. Based on the bit value selected by the value representing the range of virtual lanes, a packet either passes as shown by <b>308</b> or fails as shown by <b>310</b>.
P-0070[0070] In FIG. 3, a packet comes into a port as shown by item <b>300</b>. The packet includes information designating a virtual lane that the packet will use. A Infiniband compliant packet includes four bits designating a virtual lane. The bit field corresponding to the virtual lanes is shown in Table XI given below: <tables id="TABLE-US-00011" num="11"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217PT" align="center" /><thead><row><entry namest="1" nameend="1" align="center">TABLE XI</entry></row></thead><tbody valign="top"><row><entry /></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Virtual Lane Field of an</entry></row><row><entry>Infiniband Compliant Packet</entry></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="5"><colspec colname="OFFSET" colwidth="21PT" align="left" /><colspec colname="1" colwidth="28PT" align="center" /><colspec colname="2" colwidth="70PT" align="center" /><colspec colname="3" colwidth="28PT" align="center" /><colspec colname="4" colwidth="70PT" align="center" /><tbody valign="top"><row><entry /><entry>Virtual</entry><entry>Bit</entry><entry>Virtual</entry><entry>Bit</entry></row><row><entry /><entry>Lane</entry><entry>Field</entry><entry>Lane</entry><entry>Field</entry></row><row><entry /><entry namest="OFFSET" nameend="4" align="center" rowsep="1" /></row><row><entry /><entry>VL0</entry><entry>0000</entry><entry>VL8 </entry><entry>1000</entry></row><row><entry /><entry>VL1</entry><entry>0001</entry><entry>VL9 </entry><entry>1001</entry></row><row><entry /><entry>VL2</entry><entry>0010</entry><entry>VL10</entry><entry>1010</entry></row><row><entry /><entry>VL3</entry><entry>0011</entry><entry>VL11</entry><entry>1011</entry></row><row><entry /><entry>VL4</entry><entry>0100</entry><entry>VL12</entry><entry>1100</entry></row><row><entry /><entry>VL5</entry><entry>0101</entry><entry>VL13</entry><entry>1101</entry></row><row><entry /><entry>VL6</entry><entry>0110</entry><entry>VL14</entry><entry>1110</entry></row><row><entry /><entry>VL7</entry><entry>0111</entry><entry>VL15</entry><entry>1111</entry></row><row><entry /><entry namest="OFFSET" nameend="4" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
P-0071[0071] For example, an incoming packet designated for communication on a virtual lane (VL)=2 has a bit field of 0010.
P-0072[0072] Logical operators are used once again to construct the virtual lane bit vector. In the present embodiment, a “NOR” logical operator is used, however, it should be appreciated that various logical operators may be used and still remain within the scope of the present invention. The NOR operator produces a value of 1, when all the values tested by a NOR operation are equal to zero. To construct the virtual lane bit vector, a NOR of each bit is performed, e.g.: 0+0+1+0=0, where the first result of the NOR operation is 0, because one of the values is equal to 1. Next, a NOR operation is performed on the three most significant. In our example, this would result in the equation 0+0+1=0, where the second result of the NOR operation is 0. Next, a NOR operation is performed on the two most significant bits. In the example this would result in the equation 0+0=1, where the third result of the NOR operation is 1. lastly, A NOR operation is performed on the last bit. In the example this would result in the following representation NOR (0)=1.
P-0073[0073] The bits resulting from this process would be organized with the fourth result placed in the most significant position and the first result placed in the least significant position. The combined result would then be 1100. In the present embodiment, a 6-bit virtual lane bit-vector is built, by placing a 1 in the least significant position and a 0 in the most significant position. The result of this operation is shown is the virtual lane bit vector, in Table XII, given below. <tables id="TABLE-US-00012" num="12"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217PT" align="center" /><thead><row><entry namest="1" nameend="1" align="center">TABLE XII</entry></row><row><entry /></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Virtual Lane bit vector</entry></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row></thead><tbody valign="top"><row><entry /></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="3"><colspec colname="OFFSET" colwidth="42PT" align="left" /><colspec colname="1" colwidth="49PT" align="left" /><colspec colname="2" colwidth="126PT" align="center" /><tbody valign="top"><row><entry /><entry>Bit position:</entry><entry>5 4 3 2 1 0</entry></row><row><entry /><entry>VL bit vector:</entry><entry>1 1 1 0 0 0</entry></row><row><entry /><entry namest="OFFSET" nameend="2" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
P-0074[0074] The port is then used to determine which virtual lanes the port is capable of supporting. A virtual bit lane bit position value is accessed from the port and used to index into the virtual lane bit vector. Table XIII is an example of the virtual lane bit position values, for specific virtual lanes supported by a port. <tables id="TABLE-US-00013" num="13"><table frame="none" colsep="0" rowsep="0"><tgroup align="left" colsep="0" rowsep="0" cols="1"><colspec colname="1" colwidth="217PT" align="center" /><thead><row><entry namest="1" nameend="1" align="center">TABLE XIII</entry></row></thead><tbody valign="top"><row><entry /></row><row><entry namest="1" nameend="1" align="center" rowsep="1" /></row><row><entry>Virtual Lane Port table</entry></row></tbody></tgroup><tgroup align="left" colsep="0" rowsep="0" cols="2"><colspec colname="1" colwidth="126PT" align="center" /><colspec colname="2" colwidth="91PT" align="left" /><tbody valign="top"><row><entry /><entry>Virtual Lane</entry></row><row><entry>Value</entry><entry>Supported</entry></row><row><entry namest="1" nameend="2" align="center" rowsep="1" /></row><row><entry>0</entry><entry>Reserved</entry></row><row><entry>1</entry><entry>VL0</entry></row><row><entry>2</entry><entry>VL0-VL1</entry></row><row><entry>3</entry><entry>VL0-VL3</entry></row><row><entry>4</entry><entry>VL0-VL7</entry></row><row><entry>5</entry><entry>VL0-VL15</entry></row><row><entry namest="1" nameend="2" align="center" rowsep="1" /></row></tbody></tgroup></table></tables>
P-0075[0075] Applying this to our example, if this output port could only support VLO (e.g. virtual lane zero), according to Table XIII, bit position one in the virtual lane bit vector is used. Returning to Table XII to index into the virtual lane bit vector, the virtual lane bit position one is 0. If virtual lane bit position one is 0, this packet is illegal for ports that only support packets communicated on virtual lane 0. The same applies for the other virtual lane bit positions, for example in Table XIII, if the output port only supports VL<b>0</b>-<b>3</b>, bit vector position <b>3</b> would be used. A zero in bit position <b>3</b> would show that the packet is illegal (e.g. unsupported) for a port which only supports traffic on virtual lanes <b>0</b> through <b>3</b>. A 1 in bit position value 3 would show that the packet is legal for this port; (e.g. its VL must be in the range 0-3).
P-0076[0076] The characteristics of a virtual lane bit vector resulting from a specific packet are the following: Bit <b>0</b> is always zero. Bit <b>1</b> is set when the packet virtual lane field identifies VL=0 for use. In the method of the present invention, Bit <b>1</b> is set by checking that all bits are equal to zero. This is accomplished by performing a NOR operation between each of the four bits. Bit <b>2</b> is set when the packet virtual lane field identifies VL=0 or 1, for use. In the method of the present invention, Bit <b>2</b> is set by checking that all but the least significant bit is equal to zero. This is accomplished by performing a NOR operation between each of the three bits.
P-0077[0077] Bit <b>3</b> is set when the packet virtual lane field identifies VL=0 to 3 for use. In the method of the present invention, Bit <b>3</b> is set by checking that the next two bits are equal to zero. This is accomplished by performing a NOR operation between the two bits. Bit <b>4</b> is set when the packet virtual lane field identifies VL=0 to 7 for use. In the method of the present invention, Bit <b>4</b> is set by checking that final bit is equal to zero. This is accomplished by performing a NOR operation on the final bit. Bit <b>5</b> is set when the packet virtual lane field identifies VL=0 to 15 for use. In the method of the present invention, Bit <b>5</b> is always set to 1 since any VL will satisfy a valid VL of 0-15.
P-0078[0078] A high level implementation of the present invention is shown in FIG. 4. In FIG. 4 a packet comes into a switch. The packet includes a field representing a packet length and a field representing the virtual lane as shown by <b>400</b>. Although the packet length bit-vector and the virtual lane bit vector are described together, they are two separate bit vectors and are constructed separately. If the packet length is less than 4096, the least significant bit of the packet length bit vector is set as shown by <b>402</b>. In constructing the virtual lane bit vector the least significant bit is always set to one as shown by <b>403</b>. If the packet length is less than 2048 and the virtual lane is between 0 and 7 the next bit in the packet length bit vector is set as shown by <b>404</b> and the next bit in the virtual lane bit vector is set as shown by <b>405</b>. If the packet length is less than 1024 and the virtual lane identified by the packet is between 0 and 3, the third bit in the packet length bit vector and the third bit the virtual lane bit vector are each individually set as shown by <b>406</b> and <b>407</b>, respectively. If the packet length is less than 512 and the virtual lane is between 0 and 1, the second bit in the packet length bit vector and the second bit the virtual lane bit vector are each individually set as shown by <b>408</b> and <b>409</b>. If the packet length is less than 256 and the virtual lane is zero, the first bit in the packet length bit vector and the first bit the virtual lane bit vector are each individually set as shown by <b>410</b> and <b>411</b> respectively. The LSB in both the packet length bit vector and the virtual lane bit vector, is always set to zero in the current implementation as shown by <b>418</b>.
P-0079[0079] The packet length or virtual lane bit vector is stored in a 6 to 1 multiplexer as shown by <b>412</b>. A table <b>414</b> includes the packet length maximums and the virtual lanes enabled on a specific port. For example, if a port is capable of supporting packet lengths of 1024 or virtual lanes between 0 and 3, a bit value of 3 will be used to index into the bit vector stored in the multiplexer <b>412</b>. The bit value of 3 will index into the 6 to 1 multiplexer and test the value in position three of the bit vector. If the bit value of position three in the bit vector is 1, the output signal <b>416</b> will be a pass signal. If the bit value of position three in the bit vector is 0, the output signal <b>416</b> is a fail signal. The pass signal signifies that the port can support a packet with a length of 1024 or a packet that is communicated on virtual lanes <b>0</b> through <b>3</b>. A fail signal will reflect the fact that the port cannot support the packet size or the virtual lane designated by the packet.
P-0080[0080]FIG. 5 displays a detailed timing implementation of the method and apparatus of the present invention. In FIG. 5 a first period <b>500</b>, a second period <b>502</b>, a third period <b>504</b> and a fourth period <b>506</b> are shown. In the present embodiment, the first period <b>500</b>, the second period <b>502</b>, the third period <b>504</b> and the fourth period <b>506</b> combine for a total of 16 nanoseconds (e.g. 4*4 nanosecond periods). In the first period <b>500</b> a DLID <b>508</b>, an SL/IP <b>514</b> are read in from the packet and are available for use. In addition, the packet length <b>516</b> is available during the first period. Since the DLID, SL, IP and PLEN are available in the first period from the incoming packet, construction of the packet length bit vector and the virtual lane bit vector can begin.
P-0081[0081] The DLID is used to index into a route table <b>510</b> to determine an output port (OP) <b>518</b> in the third period <b>504</b>. The SL and IP are used as an index into a virtual lane map table <b>512</b>, to select a virtual lane. In the present embodiment, sixteen ports are supported by a sixteen to one multiplexer <b>522</b>. In the third period <b>504</b>, the output port <b>518</b> is used as an index into the sixteen to one mulitiplexer <b>522</b> to generate a virtual lane <b>524</b>.
P-0082[0082] The virtual lane <b>524</b> and the packet length <b>516</b> are available in the fourth period <b>506</b>. The virtual lane <b>524</b> and the packet length <b>516</b> are used to construct a bit vector, by a bit vector encoder <b>528</b>. Once the bit vectors have been constructed, using the methodology presented above, the bit vectors are loaded into a six to one multiplexer.
P-0083[0083] The port information table <b>520</b> stores information on the ports. For example, the port information table includes, maximum MTU size for the port and acceptable virtual lanes for the port. A packet length index signal is shown as <b>529</b> and a virtual lane index signal is shown as <b>531</b>. The packet length index signal <b>529</b> indexes into a packet length multiplexer <b>532</b>. The packet length multiplexer <b>532</b> stores a packet length bit vector constructed by the bit vector encoder <b>528</b>. A pass or fail signal <b>536</b> results from indexing a packet length bit vector stored in the packet length multiplexer <b>532</b>, with the packet length index signal <b>529</b>. The pass/fail signal <b>536</b> designates whether the packet length is supported by the port. The virtual lane index signal <b>531</b> indexes into the virtual lane multiplexer <b>530</b>. A pass or fail signal <b>534</b> results from indexing a virtual lane bit vector stored in the virtual lane multiplexer <b>530</b>, with the virtual lane index signal <b>531</b>. The virtual lane pass/fail signal <b>534</b> designates whether the virtual lane is supported by the port.
P-0084[0084] Thus, the present invention has been described herein with reference to a particular embodiment for a particular application. Those having ordinary skill in the art and access to the present teachings will recognize additional modifications, applications and embodiments within the scope thereof.
P-0085[0085] It is therefore intended by the appended claims to cover any and all such applications, modifications and embodiments within the scope of the present invention.
Contents4
6 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| US9521092B2 | Cited by | United States of America | Search report |
| US2003223416A1 | Cited by | United States of America | Pre-grant |
| US8259720B2 | Cited by | United States of America | Applicant |
| US7639616B1 | Cited by | United States of America | Applicant |
| US10419356B1 | Cited by | United States of America | Search report |
| US2015085877A1 | Cited by | United States of America | Pre-grant |
| US7961621B2 | Cited by | United States of America | Applicant |
| US7209478B2 | Cited by | United States of America | Search report |
| US7860096B2 | Cited by | United States of America | Applicant |
| US8964547B1 | Cited by | United States of America | Applicant |
| US9003038B1 | Cited by | United States of America | Applicant |
| US7969971B2 | Cited by | United States of America | Search report |
| US2006059269A1 | Cited by | United States of America | Pre-grant |
| US8532099B2 | Cited by | United States of America | Applicant |
| US8238347B2 | Cited by | United States of America | Applicant |
| US2006056424A1 | Cited by | United States of America | Pre-grant |
| US8307111B1 | Cited by | United States of America | Applicant |
| US7400590B1 | Cited by | United States of America | Search report |
| US7830793B2 | Cited by | United States of America | Applicant |
| US2006098589A1 | Cited by | United States of America | Pre-grant |
| WO2016105393A1 | Cited by | World Intellectual Property Organization (WIPO) | International search |
| US8149710B2 | Cited by | United States of America | Applicant |
| US2006002385A1 | Cited by | United States of America | Pre-grant |
| US2005271073A1 | Cited by | United States of America | Pre-grant |
| US2006098589A1 | Cited by | United States of America | Pre-grant |
| US7801125B2 | Cited by | United States of America | Applicant |
| US2002101919A1 | Cites | United States of America | Pre-grant |
| US2003026268A1 | Cites | United States of America | Pre-grant |
| US2003188015A1 | Cites | United States of America | Pre-grant |
| US5999531A | Cites | United States of America | Pre-grant |
| US6266706B1 | Cites | United States of America | Pre-grant |
| US6529478B1 | Cites | United States of America | Pre-grant |
| US6529508B1 | Cites | United States of America | Pre-grant |
| US6999462B1 | Cites | United States of America | Pre-grant |
2 members in 1 office; this record represents the family
Members2
| Document | Office | Kind | |
|---|---|---|---|
| US2003193942A1 | United States of America | A1 | |
| US7191259B2 | United States of America | B2 |
40 transactions on the USPTO file
Allowed after 1 non-final rejection, 1 final rejection and 1 RCE.
- Non-final rejections
- 1
- Final rejections
- 1
- RCEs
- 1
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Expire PatentEXP. | EXP. | |
| Recordation of Patent Grant MailedPGM/ | PGM/ | |
| Patent Issue Date Used in PTA CalculationAllowedPTAC | PTAC | |
| Issue Notification MailedAllowedWPIR | WPIR | |
| Dispatch to FDCD1935 | D1935 | |
| Application Is Considered Ready for IssuePILS | PILS | |
| Issue Fee Payment VerifiedN084 | N084 | |
| Issue Fee Payment ReceivedIFEE | IFEE | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Date Forwarded to Examiner | – | |
| Date Forwarded to Examiner | – | |
| Disposal for a RCE / CPA / R129AbandonedABN9 | ABN9 | |
| Request for Continued Examination (RCE)RCEX | RCEX | |
| Workflow - Request for RCE - BeginBRCE | BRCE | |
| Mail Final Rejection (PTOL - 326)Final rejectionMCTFR | MCTFR | |
| Final RejectionFinal rejectionCTFR | CTFR | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Correspondence Address ChangeC.ADB | C.ADB | |
| Transfer Inquiry to GAUTI1050 | TI1050 | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Transfer Inquiry to GAUTI1050 | TI1050 | |
| Transfer Inquiry to GAUTI1050 | TI1050 | |
| Transfer Inquiry to GAUTI1050 | TI1050 | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| IFW TSS Processing by Tech Center CompleteTSSCOMP | TSSCOMP | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Transfer Inquiry to GAUTI1050 | TI1050 | |
| Application Dispatched from OIPEOIPE | OIPE | |
| Application Is Now CompleteCOMP | COMP | |
| IFW Scan & PACR Auto Security Review | – | |
| Initial Exam Team nnIEXX | IEXX |
11 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| Lapsed due to failure to pay maintenance feeLapsedFP | FP | |
| Information on status: patent discontinuationPATENT EXPIRED DUE TO NONPAYMENT OF MAINTENANCE FEES UNDER 37 CFR 1.362STCH | STCH | |
| Information on status: patent discontinuationPATENT EXPIRED DUE TO NONPAYMENT OF MAINTENANCE FEES UNDER 37 CFR 1.362STCH | STCH | |
| Lapse for failure to pay maintenance feesLapsedLAPS | LAPS | |
| Maintenance fee reminder mailedREMI | REMI | |
| Fee paymentFPAY | FPAY | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS |
Numbers
- Application
- 11988902
Titles
- English
- Method and apparatus for fast integer within-range compare
Patent term adjustment
- A delay
- +1,004 daysthe office missed an examination deadline
- Applicant delay
- −2 days
- Net adjustment
- 1,002 days
Classification
- CPC, 1
- H04L49/90
- IPC, 1
- H04L12 56