Apparatus for verifying a crc code of a message transmitted as a succession of sub-blocks comprises dedicated hardware including a linear feedback shift register for deriving a `partial` crc code for each individual sub-block. These partial crc codes are held in a store for subsequent combination under software program control. The combination is performed in a iterative manner, each partial crc code being added modulo 2 to values selected from look-up tables in accordance with the result of the previous step of the iteration. The division of the crc verification into two operations and the use of precalculated look-up tables facilitate the efficient, simultaneous reception of many messages having interleaved sub-blocks without incurring serious time penalties.

Patent
   5778013
Priority
Feb 05 1993
Filed
Jan 11 1996
Issued
Jul 07 1998
Expiry
Jan 31 2014
Assg.orig
Entity
Large
77
9
all paid
1. A method of verifying a crc code for a data block transferred as a plurality of segmented sub-blocks via a communications medium, said crc code including a remainder after division by a predetermined polynomial of an operand derived from said data block, said method comprising the steps of:
deriving a respective partial crc code for a first received sub-block of data, from a predetermined initializing value and using said predetermined polynomial;
deriving a respective partial crc code for each subsequent received sub-block of data, from said predetermined initializing value and using said predetermined polynomial, segmentally independent of any partial crc code derived from any preceding sub-block of data;
combining said partial crc codes to derive a crc verification value for the data block transferred as a plurality of sub-blocks and which is indicative of whether the data block transferred is consistent with a crc code which would be derived using said predetermined polynomial for said data block considered as a whole; and
testing validity of said crc verification value for the data block transferred.
8. Apparatus for verifying a crc code for a data block transferred as a plurality of segmented sub-blocks via a communications medium, said crc code including a remainder after division by a predetermined polynomial of an operand derived from said data block, said apparatus comprising:
means for deriving a respective partial crc code for a first received sub-block of data, from a predetermined initializing value and using said predetermined polynomial;
means for deriving a respective partial crc code for each subsequent received sub-block of data, from said predetermined initializing value and using said predetermined polynomial, and segmentally independent of any partial crc code derived from any preceding sub-block of data;
means for combining said partial crc codes to derive a crc verification value for the data block transferred as a plurality of sub-blocks and which is indicative of whether the data block transferred is consistent with a crc code which would be derived using said predetermined polynomial for said data block considered as a whole; and
means for testing validity of said crc verification value for the data block transferred.
2. The method of claim 1, wherein the step of deriving a respective partial crc code for a first received sub-block of data and the step of deriving a respective partial crc code for each subsequent received sub-block of data each include the step of using hardware circuitry dedicated to derivation, and the step of combining said partial crc codes to derive the crc verification value for the data block transferred includes the step of using general-purpose hardware circuitry controlled by program instructions to combine the partial crc codes.
3. The method of claim 1, wherein said partial crc codes are derived by:
presetting a shift register with said initializing value, said shift register having feedback via exclusive-OR gates from its output to predetermined shift register stages;
shifting one data sub-block into said shift register; and
storing the resulting contents of said shift register.
4. The method of claim 1, wherein said initializing value is zero.
5. The method of claim 1, wherein said crc verification value is derived by combining the partial crc code for a second sub-block of data and the partial crc code for each subsequent sub-block of data with one or more values selected from one or more predetermined tables in accordance with a result of such combining step for a preceding partial crc code, a value or values for combination with the partial crc code for the first received sub-block of data being selected from said table or tables in accordance with a predetermined starting value.
6. The method of claim 5, wherein there are a plurality of predetermined tables and values are selected from said predetermined tables in accordance with values of respective portions of a result of said combining step for a preceding partial crc code or of said predetermined starting value.
7. The method of claim 6, wherein said partial crc codes and said table or tables are stored as hexadecimal values, said respective portions are adjacent pairs of hexadecimal digits, and said combining step is performed using bit-wise modulo 2 addition.
9. The apparatus of claim 8, comprising hardware circuity dedicated to derivation of said partial crc codes, and general-purpose hardware circuitry controlled by program instructions for deriving the crc verification value for the data block transferred.

This is a continuation of application Ser. No. 08/189,319 filed Jan. 31, 1994 now abandoned.

This invention relates to methods and apparatus for verifying cyclic redundancy check (CRC) codes.

CRC codes are used extensively in digital data communications for detection of errors which can occur during the communications process. Typically a message to be communicated is assembled and encoded in binary digital form, and a CRC code is derived from it using a predetermined algorithm together with a predetermined multi-bit number. One particular number in widespread use for this purpose can be represented by the following polynomial of degree thirty-two:

g(x)=x32 +x26 +x23 +x22 +x16 +x12 +x11 +x10 +x8 +x7 +x5 +x4 +x2 +x+1.(1)

In one implementation of this technique, a 32-stage shift register is provided with an exclusive-OR gate at its output (stage 31, numbering from zero) to add the output signal, modulo 2, to successive bits of the message to be communicated, in synchronism with shifting of the contents of the register. The output of this exclusive-OR gate is fed directly to the first stage (stage 0), and to further exclusive-OR gates coupling each of the remaining stages corresponding to the terms of g(x) (that is stages 26, 23, . . . , 2 and 1) to its preceding stage (see FIG. 1). The shift register is initially loaded with all ones, and then receives the message to be communicated as described; when the whole message has been input, the contents of the shift register are output and inverted to produce the CRC code, which is conventionally appended to the message. Upon reception the message and its appended CRC code are input in the same manner into a similarly-arranged shift register pre-loaded with all ones; when the whole message and the CRC code have been input, the shift register should contain the binary value 1100 0111 0000 0100 1101 1101 0111 1011 (C704DD7BH), corresponding to the remainder of dividing the polynomial x63 +x62 + . . . +x33 +x32 by the polynomial g(x). If any other value results, the message has sustained one or more errors.

Although such an implementation is effective and reliable, there are circumstances where it is disadvantageous. One technique currently being implemented for high-speed data transfer is known as Asynchronous Transfer Mode (ATM). In implementations of ATM for `local` use, e.g. within buildings, a single message may be relatively large (up to 65568 bytes for example). For transmission purposes, this message is padded to an exact multiple of 48 bytes in length and then split into consecutive 48-byte segments. Although in accordance with the ATM protocol these segments are received in the same order in which they are transmitted, they may be interspersed with segments from other transmissions, intended for the same or another recipient.

One possible approach to verifying the CRC code for the received message would be to derive the CRC verification result as part of general processing of the message. However, such processing is typically carried out by data processing equipment under software program control, imposing a serious time penalty on the speed of processing of each message.

In principle it would be possible to derive the CRC verification result for each message in real time by supplying its successive segments to a shift register as they are received; interspersed segments for other messages could be handled either by providing an individual shift register for each distinct message, or by saving and restoring the contents of the shift register each time a segment for a different message is received. However, the first option is very expensive in terms of circuit hardware, while the second imposes an undesirable delay as the current contents of the shift register for one message and the message's identity are saved, and the message whose next segment has arrived is identified and the previously-saved contents for that message are retrieved and loaded into the register. Furthermore, both approaches require setting some arbitrary limit to the number of different messages which may be received simultaneously.

According to one aspect of this invention there is provided a method of verifying a CRC code relating to a block of data transferred as a plurality of sub-blocks via a communications medium, comprising the steps of:

deriving, from a predetermined initializing value, a respective partial CRC code for each received sub-block of data;

combining said partial CRC codes to derive a CRC verification value for the complete data block as received; and

testing validity of said verification value for the complete received data block.

Using this method a separate partial CRC code is derived for each ATM segment and saved in association with it; the starting value for CRC code generation (e.g. the contents of the shift register described above) is then reset to a predetermined initializing value (e.g. all zeroes). Subsequently the partial CRC codes for all the segments comprising a complete message are combined, as described herein, to derive a CRC verification value which relates to the complete message and which can be used to check whether the message has been affected by errors. The derivation of the partial CRC codes can conveniently be accomplished at high speed in dedicated hardware circuitry, whilst the combination of partial CRC codes can be accomplished using circuitry under software program control without incurring a serious time penalty. With this invention there is no need to identify which message a segment belongs to as part of the partial CRC code derivation, and there is no limit in principle to the number of messages which may be received simultaneously.

According to another aspect of this invention apparatus for verifying a CRC code relating to a block of data transferred as a plurality of sub-blocks via a communications medium, comprises:

means for deriving, from a predetermined initializing value, a respective partial CRC code for each received sub-block of data;

means for combining said partial CRC codes to derive a CRC verification value for the complete data block as received; and

means for testing validity of said verification value for the complete received data block.

A method and apparatus in accordance with this invention for verifying CRC codes will now be described, by way of example, with reference to the accompanying drawings, in which:

FIG. 1 shows a shift register for deriving a CRC code based on the polynomial g(x);

FIG. 2 is a block diagram of apparatus for verifying CRC codes in accordance with this invention;

FIG. 3 is a flow chart of a procedure implemented in part of the apparatus of FIG. 2; and

FIGS. 4a to 7b are look-up tables of hexadecimal values used in the procedure of FIG. 3.

Referring to FIG. 2, apparatus for receiving an ATM data stream on an optical fibre input line 10 and for verifying CRC codes of messages in the data stream has an input interface 12 coupled to the line 10. As shown in FIG. 2, the ATM data stream is treated as comprising a sequence of cells, each cell having a five-byte header H which carries system operating information and a 48-byte payload comprising one segment of a complete ATM message. Successive cells may contain segments for different messages, and the identity of the message to which a segment belongs is included in the information in the header H of the cell containing that segment.

The input interface 12 converts the signal from the line 10 from optical form to electrical form, produces a data signal containing the segment data in each cell, produces a clock signal synchronized with the occurrence of binary digits in the signal (clock recovery), locates the boundaries between ATM cells in the received data stream to produce a start-of-cell (SOC) signal, and extracts from the cell header the identity of the message to which each segment belongs. Techniques and circuitry for performing these functions are well known to those skilled in the art and do not form part of this invention, and so will not be described here.

The data signal, clock signal and SOC signal are supplied to a 32-bit shift register 14 arranged to implement a CRC code as described above and as shown in FIG. 1. In addition to the connections shown in FIG. 1, the shift register 14 has two further inputs: a clock input which receives the clock signal and synchronizes shifting of data through the register; and a control input which receives the SOC signal and causes the current contents of the shift register to be output (saved) and the shift register to be reset to a predetermined initializing value of all zeroes. Implementation of these inputs will also be evident to those skilled in the art.

The output of the shift register 14 is coupled to a store 16 which also receives the data signal, clock signal and message identity from the input interface 12. When an SOC signal occurs the current contents of the shift register 14 (a `partial` CRC code, PCRC) are output to the store 16 which stores them in conjunction with the corresponding segment data and the identity of the message (MsgID) to which that segment belongs. The store 16 may have as large a capacity as desired, typically several thousands of segments and associated PCRC's and MsgID's.

Although the derivation of partial CRC codes by the shift register 14 and the transfer of data through the circuitry have been described and illustrated in terms of serial techniques for the sake of clarity, it will be understood by those skilled in the art that these operations may equally be implemented using parallel mechanisms to operate on several bits simultaneously if desired.

When all the segments comprising a message have been received, the complete message is assembled and its CRC code is verified by a verification device 18. This device may conveniently be implemented by means of a data processor unit controlled by an appropriate software program; the data processor unit may also be used to implement further processing of the received messages, for example in accordance with higher-level communication protocols.

The verification device 18 extracts from the store 16 the PCRC for each segment having the MsgID for that message, and combines it with the PCRC's for the other segments of the message in accordance with the procedure shown in FIG. 3.

Referring to FIG. 3, the procedure starts at step 30 by setting a counter s equal to one, and initializing a four-byte hexadecimal variable CRC to a value of FFFFFFFFH.

At the next step 32 the procedure derives a value for an index I into each of four look-up tables in accordance with the values of respective bytes of the variable CRC. Thus an index I408 is set equal to the value of the most significant byte of CRC, an index I400 is set equal to the second most significant byte, an index I392 is set equal to the third most significant byte and an index I384 is set equal to the least significant byte.

Each look-up table has 256 entries, the values of which will depend upon the particular polynomial upon which the CRC code algorithm is based and can be calculated as described hereinafter. A set of tables T384, T392, T400 and T408 for the polynomial g(x) are given in FIGS. 4a to 7b.

At step 34 the procedure retrieves the value of the PCRC for segment s, the segments being numbered in the order in which they were received; thus the first PCRC retrieved (s=1) is for the most significant segment, which is the first segment to be received; the last segment retrieved is the least significant segment, for s equal to the total number of segments in the message.

An updated value for CRC is derived at step 36, in accordance with the relationship

CRC=PCRC(s)⊕T408 (I408)⊕T400 (I400)⊕T392 (I392)⊕T384 (I384)(2)

where ⊕ indicates a bit-wise exclusive-OR operation and T408 (I408) indicates the entry in the table T408 for the current value of the index I408.

The value of s is incremented by one at step 38, and the incremented value is tested at step 40. If s is less than or equal to the total number of segments in the message, the procedure returns to step 32 to derive new values for the indexes I384, I392, I400 and I408 in accordance with the respective bytes comprising the updated value of CRC.

If the incremented value of s is greater than the total number of segments in the message the value of CRC is the CRC verification value for the complete message. This is tested at step 42 for equality with the expected value of C704DD7BH for an error-free message. If CRC has this value, then a valid CRC code is indicated at step 44; otherwise an invalid CRC code, and therefore the occurrence of one or more errors in the received message, is indicated at step 46. In the latter case appropriate steps would be taken, such as requesting retransmission of the message, depending on the particular communication protocol being used.

Although the procedure of FIG. 3 has been described in the context of completing reception of an entire message before derivation of the overall CRC verification value commences, it should be noted that the procedure may equally be applied to derivation of the CRC verification value contemporaneously with reception of each successive segment.

By way of example, a three-segment message and appended CRC code may be received having successive segments with partial CRC's derived by the shift register 14 as follows:

PCRC(1)=A07C4DD8H

PCRC(2)=072FEB03H

PCRC(3)=2E24F35DH.

The values of I384, I392, I400 and I408 for the initial value of CRC of FFFFFFFFH are

I384 =I392 =I400 =I408 =FFH

for which the look-up table entries are

T384 =580FA91EH, T392 =513658BFH, T400 =4A0E09B0H and T408 =150516A1H.

The first calculation of CRC at step 36 yields

CRC=A07C4DD8⊕580FA91E⊕513658BF⊕4A0E09B0⊕150516A1=F64EA368.s ub.H.

The next values of I384, I392, I400 and I408 are

I384 =68H, I392 =A3H, I400 =4EH and I408 =F6H

and the look-up table entries are

T384 =267A5A62H, T392 =D5B60D44H, T400 =859250ACH and T408 =1EE6098CH.

So the next calculation of CRC at step 36 yields

CRC=072FEB03⊕267A5A62⊕D5B60D44⊕859250AC⊕1EE6098C=6F97E505.s ub.H.

The new values of I384, I392, I400 and I408 are therefore

I384 =05H, I392 =E5H, I400 =97H and I408 =6FH

and the corresponding look-up table entries are

T384 =B55AB166H, T392 =ED693030H, T400 =1A274B01H and T408 =AB34E471H.

So the final calculation of CRC at step 36 yields

CRC=2E24F35D⊕B55AB166⊕ED693030⊕1A274B01⊕AB34E471=C704DD7B.s ub.H.

This is the expected value for CRC verification, so the CRC process does not indicate any transmission errors.

The look-up tables T384, T392, T400 and T408 contain values calculated according to the following relationships, for 0≦i<256:

T384 [i]=(x384 i(x)) mod g(x) (3)

T392 [i]=(x392 i(x)) mod g(x) (4)

T400 [i]=(x400 i(x)) mod g(x) (5)

T408 [i]=(x408 i(x)) mod g(x) (6)

where i(x) is the polynomial corresponding to the eight-bit value i. The following routine in C program code may be used for this purpose:

______________________________________
#define MASK 0x80000000L
/* mask for most significant bit */
#define P 0x04c11db7L
/* Generator polynomial g(x) = x {32} +
P(x) */
void table( );
unsigned long x-- power ( );
main( )
unsigned long t384[256], t392[256], t400[256], t408[256];
unsigned long h384;
/* Set h384(x) = x {384} mod g(x) */
h384 = x-- power(384, 1);
/* Make look-up tables for x {j}i(x) mod (g(x) for all 8-bit i
and j = 384, 392, 400, 408 */
table(t384, h384);
table(t392, x-- power(8, h384));
table(t400, x-- power(16, h384));
table(t408, x-- power(24, h384));
}
/* Makes look-up table for h(x)i(x) mod g(x) for all 8-bit i (h is 32
bits)
*/
void table(t, h)
unsigned long t[256], h;
{
int u, i, k;
unsigned long x-- table[8];
unsigned long mask;
/* Set x-- table[u] = h(x)x {u} mod g(x) for 0 <= u < 8 */
x-- table[0] = h;
for (u=1; u<8; u++)
x-- table[u] = x-- power(1, x-- table[u-1]);
/* Set t[i] = h(x)i(x) mod g(x) for all 8-bit i */
for (i=0; i<256; i++)
{
t[i] = 0;
/* Pick out terms h(x)x {u} mod g(x) from x-- table[ ]
according to positions of 1's in i */
for (mask=1, k=0; k<8; mask<<=1, k++)
if (i & mask)
t[i] = x-- table[k];
}
}
/* Returns (x {r} h(x)) mod g(x) */
unsigned long x-- power(r, h)
int r;
unsigned long h;
{
int i;
for (i=1; i<=r; i++)
{
/* Shift h left once, XOR with P if most sig bit was 1 */
if (h & MASK)
h = (h << 1) P;
else
h <<= 1;
}
return(h);
}
______________________________________

Jedwab, Jonathan

Patent Priority Assignee Title
10489576, May 08 2014 ADVANCED NEW TECHNOLOGIES CO , LTD Method and system for generating verification codes
10771095, Jun 07 2016 Mitsubishi Electric Corporation Data processing device, data processing method, and computer readable medium
11574040, May 08 2014 ADVANCED NEW TECHNOLOGIES CO , LTD Method and system for generating verification codes
6223320, Feb 10 1998 IBM Corporation Efficient CRC generation utilizing parallel table lookup operations
6405340, Jul 02 1999 Unwired Planet, LLC Flexible method of error protection in communications systems
6665834, Jul 02 1999 Flexible method of error protection in communications systems
6681364, Sep 24 1999 International Business Machines Corporation Cyclic redundancy check for partitioned frames
6804220, May 07 2001 Qualcomm Incorporated Method and apparatus for generating control information for packet data
6912683, Feb 17 2000 Analog Devices, Inc Method, apparatus, and product for use in generating CRC and other remainder based codes
6928608, Aug 14 2001 TranSwitch Corporation Apparatus and method for accelerating cyclic redundancy check calculations
6941386, Oct 14 1997 ALACRITECH, INC Protocol processing stack for use with intelligent network interface device
6996070, Dec 05 2003 Alacritech, Inc. TCP/IP offload device with reduced sequential processing
7065702, Apr 12 2001 AVAGO TECHNOLOGIES INTERNATIONAL SALES PTE LIMITED Out-of-order calculation of error detection codes
7076568, Oct 14 1997 ALACRITECH, INC Data communication apparatus for computer intelligent network interface card which transfers data between a network and a storage device according designated uniform datagram protocol socket
7089326, Oct 14 1997 ALACRITECH, INC Fast-path processing for receiving data on TCP connection offload devices
7124205, Oct 02 2001 ALACRITECH, INC Network interface device that fast-path processes solicited session layer read commands
7133940, Oct 14 1997 ALACRITECH, INC Network interface device employing a DMA command queue
7167926, Aug 27 1998 ALACRITECH, INC TCP/IP offload network interface device
7167927, Feb 26 2002 ALACRITECH, INC TCP/IP offload device with fast-path TCP ACK generating and transmitting mechanism
7174393, Mar 12 2002 ALACRITECH, INC TCP/IP offload network interface device
7185266, Feb 12 2003 Alacritech, Inc. Network interface device for error detection using partial CRCS of variable length message portions
7337241, Sep 27 2002 ALACRITECH, INC Fast-path apparatus for receiving data corresponding to a TCP connection
7343541, Jan 14 2003 AVAGO TECHNOLOGIES INTERNATIONAL SALES PTE LIMITED Data integrity in protocol offloading
7360142, Mar 03 2004 MARVELL ISRAEL M I S L LTD Methods, architectures, circuits, software and systems for CRC determination
7428693, Apr 22 2002 Fujitsu Limited Error-detecting encoding and decoding apparatus and dividing apparatus
7434150, Mar 03 2004 MARVELL ISRAEL M I S L LTD Methods, circuits, architectures, software and systems for determining a data transmission error and/or checking or confirming such error determinations
7461160, Oct 14 1997 ALACRITECH, INC Obtaining a destination address so that a network interface device can write network data without headers directly into host memory
7472156, Oct 14 1997 ALACRITECH, INC Transferring control of a TCP connection between devices
7496689, Apr 22 2002 ALACRITECH, INC TCP/IP offload device
7502869, Oct 14 1997 ALACRITECH, INC Intelligent network interface system and method for accelerated protocol processing
7543087, Apr 22 2002 ALACRITECH, INC Freeing transmit memory on a network interface device prior to receiving an acknowledgement that transmit data has been received by a remote device
7584260, Oct 14 1997 ALACRITECH, INC Method to synchronize and upload an offloaded network stack connection with a network stack
7620726, Oct 14 1997 ALACRITECH, INC Zero copy method for receiving data by a network interface
7627001, Oct 14 1997 ALACRITECH, INC Protocol stack that offloads a TCP connection from a host computer to a network interface device
7627684, Oct 14 1997 ALACRITECH, INC Network interface device that can offload data transfer processing for a TCP connection from a host CPU
7640364, Mar 07 2001 ALACRITECH, INC Port aggregation for network connections that are offloaded to network interface devices
7664868, Nov 07 2001 ALACRITECH, INC TCP/IP offload network interface device
7664883, Aug 28 1998 ALACRITECH, INC Network interface device that fast-path processes solicited session layer read commands
7673072, Oct 14 1997 ALACRITECH, INC Fast-path apparatus for transmitting data corresponding to a TCP connection
7694024, Oct 14 1997 ALACRITECH, INC TCP/IP offload device with fast-path TCP ACK generating and transmitting mechanism
7738500, Dec 14 2005 ALACRITECH, INC TCP timestamp synchronization for network connections that are offloaded to network interface devices
7809847, Oct 14 1997 ALACRITECH, INC Network interface device that can transfer control of a TCP connection to a host CPU
7844743, Oct 14 1997 ALACRITECH, INC Protocol stack that offloads a TCP connection from a host computer to a network interface device
7853723, Oct 14 1997 ALACRITECH, INC TCP/IP offload network interface device
7870466, Aug 28 2007 NEC Corporation Parallel cyclic code generation device and parallel cyclic code error detection device
7937643, Sep 18 2006 MEDIATEK INC. Mobile communication device and data reception method
7945699, Oct 14 1997 ALACRITECH, INC Obtaining a destination address so that a network interface device can write network data without headers directly into host memory
8019901, Sep 29 2000 ALACRITECH, INC Intelligent network storage interface system
8055990, Jan 14 2003 AVAGO TECHNOLOGIES INTERNATIONAL SALES PTE LIMITED Method and system for error detection for improving data integrity in protocol offloading
8107441, May 07 2001 Qualcomm Incorporated Method and apparatus for generating control information for packet data
8131880, Oct 14 1997 ALACRITECH, INC Intelligent network interface device and system for accelerated communication
8161349, Aug 01 2007 Samsung Electronics Co., Ltd. Data parallelizing receiver
8248939, Oct 08 2004 Alacritech, Inc. Transferring control of TCP connections between hierarchy of processing mechanisms
8312362, Mar 03 2004 MARVELL ISRAEL M I S L LTD Determining data transmission error and/or checking or confirming such error determinations
8341286, Jul 31 2008 Alacritech, Inc. TCP offload send optimization
8447803, Oct 14 1997 ALACRITECH, INC Method and apparatus for distributing network traffic processing on a multiprocessor computer
8539112, Oct 14 1997 ALACRITECH, INC TCP/IP offload device
8539513, Apr 01 2008 Alacritech, Inc. Accelerating data transfer in a virtual computer system with tightly coupled TCP connections
8621101, Sep 29 2000 ALACRITECH, INC Intelligent network storage interface device
8631140, Oct 14 1997 ALACRITECH, INC Intelligent network interface system and method for accelerated protocol processing
8782199, Oct 14 1997 ALACRITECH, INC Parsing a packet header
8805948, Oct 14 1997 ALACRITECH, INC Intelligent network interface system and method for protocol processing
8856379, Oct 14 1997 ALACRITECH, INC Intelligent network interface system and method for protocol processing
8893159, Apr 01 2008 Alacritech, Inc. Accelerating data transfer in a virtual computer system with tightly coupled TCP connections
9009223, Oct 14 1997 ALACRITECH, INC Method and apparatus for processing received network packets on a network interface for a computer
9055104, Apr 22 2002 ALACRITECH, INC Freeing transmit memory on a network interface device prior to receiving an acknowledgment that transmit data has been received by a remote device
9081700, May 16 2013 Western Digital Technologies, INC High performance read-modify-write system providing line-rate merging of dataframe segments in hardware
9304709, Sep 06 2013 Western Digital Technologies, INC High performance system providing selective merging of dataframe segments in hardware
9306793, Oct 22 2008 ALACRITECH, INC TCP offload device that batches session layer headers to reduce interrupts as well as CPU copies
9413788, Jul 31 2008 Alacritech, Inc. TCP offload send optimization
9525513, Mar 16 2007 Samsung Electronics Co., Ltd. Methods and apparatus to improve performance and enable fast decoding of transmissions with multiple code blocks
9542261, Jul 01 2013 KEYSIGHT TECHNOLOGIES SINGAPORE SALES PTE LTD Methods, systems, and computer readable media for multi-packet cyclic redundancy check engine
9590765, Mar 16 2007 Samsung Electronics Co., Ltd. Methods and apparatus to improve performance and enable fast decoding of transmissions with multiple code blocks
9667729, Jul 31 2008 Alacritech, Inc. TCP offload send optimization
9684580, Nov 05 2013 KEYSIGHT TECHNOLOGIES SINGAPORE SALES PTE LTD Methods, systems, and computer readable media for efficient scrambling of data for line rate transmission in high speed communications networks
9760304, Sep 06 2013 Western Digital Technologies, INC High performance system for selective merging of dataframe segments
9948322, May 16 2013 Western Digital Technologies, INC High performance read-modify-write system providing line-rate merging of dataframe segments in hardware
Patent Priority Assignee Title
4703485, Feb 10 1986 International Business Machines Corporation; INTERNATIONAL BUSINESS MACHINES CORPORATION, A CORP OF NEW YORK Method and apparatus for computing and implementing error detection check bytes
4910736, Jan 30 1987 Sony Corporation Encoding method and apparatus for recording data with an identification code and an error check code
4933969, Mar 03 1987 Hewlett-Packard Company Data authentication and protection system
5303302, Jun 18 1992 ENTERASYS NETWORKS, INC Network packet receiver with buffer logic for reassembling interleaved data packets
5321704, Jan 16 1991 XILINX, Inc. Error detection structure and method using partial polynomial check
5361266, Nov 04 1992 Mitsubishi Denki Kabushiki Kaisha Error correction circuit
5410546, Nov 01 1993 Storage Technology Corporation Apparatus and method for CRC computation over fixed length blocks containing variable length packets of data received out of order
EP233075,
EP465006,
///////
Executed onAssignorAssigneeConveyanceFrameReelDoc
Jan 11 1996Hewlett-Packard Company(assignment on the face of the patent)
May 20 1998HEWLETT-PACKARD COMPANY, A CALIFORNIA CORPORATIONHEWLETT-PACKARD COMPANY, A DELAWARE CORPORATIONMERGER SEE DOCUMENT FOR DETAILS 0108410649 pdf
Nov 01 1999Hewlett-Packard CompanyAgilent Technologies IncASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0109770540 pdf
Oct 30 2009Agilent Technologies, IncIXIAASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS 0235740675 pdf
Dec 21 2012IXIABANK OF AMERICA, N A , AS ADMINISTRATIVE AGENTSECURITY AGREEMENT0296980060 pdf
Jan 30 2015BANK OF AMERICA, N A , RESIGNING ADMINISTRATIVE AGENTSILICON VALLEY BANK, AS SUCCESSOR ADMINISTRATIVE AGENTNOTICE OF SUBSTITUTION OF ADMINISTRATIVE AGENT0348700598 pdf
Apr 17 2017SILICON VALLEY BANK, AS SUCCESSOR ADMINISTRATIVE AGENTIXIARELEASE BY SECURED PARTY SEE DOCUMENT FOR DETAILS 0423350465 pdf
Date Maintenance Fee Events
Jan 03 2002ASPN: Payor Number Assigned.
Jan 04 2002M183: Payment of Maintenance Fee, 4th Year, Large Entity.
Jan 30 2002REM: Maintenance Fee Reminder Mailed.
Jan 09 2006M1552: Payment of Maintenance Fee, 8th Year, Large Entity.
Feb 08 2010REM: Maintenance Fee Reminder Mailed.
Jul 07 2010M1553: Payment of Maintenance Fee, 12th Year, Large Entity.
Jul 07 2010M1556: 11.5 yr surcharge- late pmt w/in 6 mo, Large Entity.


Date Maintenance Schedule
Jul 07 20014 years fee payment window open
Jan 07 20026 months grace period start (w surcharge)
Jul 07 2002patent expiry (for year 4)
Jul 07 20042 years to revive unintentionally abandoned end. (for year 4)
Jul 07 20058 years fee payment window open
Jan 07 20066 months grace period start (w surcharge)
Jul 07 2006patent expiry (for year 8)
Jul 07 20082 years to revive unintentionally abandoned end. (for year 8)
Jul 07 200912 years fee payment window open
Jan 07 20106 months grace period start (w surcharge)
Jul 07 2010patent expiry (for year 12)
Jul 07 20122 years to revive unintentionally abandoned end. (for year 12)