Subject: iSCSI: Nailing down CRC-32C

From: Mark Bakke <[email-masked]>
Date: Fri, 04 May 2001 16:13:09 -0500

At the interim meeting, it was stated that iSCSI has selected
the CRC-32C polynomial as its required iSCSI-level header and
data CRC.  Now that we have it, it's time to move on and make
sure we can implement it.

In the interest of interoperability, we need to not only specify
the polynomial, but also the initial values, bit and byte
ordering, etc.

"A Painless Guide to CRC Error Detection Algorithms"
(http://www.ross.net/crc/crcpaper.html) specifies a
method to unambiguously characterize these parameters
(sections 15 and 16).  Has anyone taken a shot at defining
these yet?  Otherwise, here is what it might look like:

Name   : "CRC-32C"
Width  : 32
Poly   : 1EDC6F41   (note that the leading "1" is implied)
Init   : FFFFFFFF
RefIn  : True
RefOut : True
XorOut : FFFFFFFF
Check  : ?

I haven't attempted to create check data based on these yet.  As
soon as the other parameters are nailed down, we need to do this.

Anyway, I am not a CRC expert, and can't make any statement about
the above values being the "best" way to do this, but instead just
copied them (except the polynomial itself) from the Ethernet CRC,
since that is likely the easiest for everyone implementing hardware
to deal with.

If someone else is already doing this, let me know; I just wanted
to start this thread so we can get closure.

Regards,

Mark

-- 
Mark A. Bakke
Cisco Systems
[email-masked]
763.398.1054

---

From: Mark Bakke <[email-masked]>
Date: Fri, 04 May 2001 16:27:12 -0500

BTW, I just ran the algorithm from the paper with these parameters.
If they are specified correctly, the CRC of the string "123456789"
should be 0xe3069283.  Note that's without padding, which we have
to unambiguously specify as well.

--
Mark

-- 
Mark A. Bakke
Cisco Systems
[email-masked]
763.398.1054