SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


    [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

    RE: effect of initializing CRC reg to 1's depends on implementati on? iSCSI



    
    Folks,
    
    This thread seems to be going on and on. I think that Pat
    has hit the nail on the head. Ethernet Spec does describe CRC 
    computation "precisely". Additionally, if we spec the order of 
    bits in the iSCSI message format, we are done.
    
    All other "stuff" in the discussion is related to implementation
    and could go into papers "outside" the iSCSI spec 
    - "The Art of Implementing iSCSI CRC" or something like that. 
    I do not intend to ridicule, but some implementers may need help 
    in this area while others may not. Anybody trying to realize a 
    high-speed implementation will figure it out either thru' a primer 
    in Galois Field, symbolic simulation, simple plain brute-force 
    or they will go out and buy an IP.
    
    -Shridhar Mukund
    
    
    
    -----Original Message-----
    From: THALER,PAT (A-Roseville,ex1) [mailto:pat_thaler@agilent.com]
    Sent: Monday, December 17, 2001 5:43 PM
    To: Luben Tuikov; Paul Koning; VICENTE V CAVANNA
    Cc: ips@ece.cmu.edu
    Subject: RE: effect of initializing CRC reg to 1's depends on
    implementati on? iSCSI
    
    
    Luben,
    
    The Ethernet spec does not use SMD, D or any other implementation. Here is
    the text from IEEE 802.3 on CRC computation:
    
    "A cyclic redundancy check (CRC)is used by the transmit and receive
    algorithms to generate a CRC value for the FCS field. The frame check
    sequence (FCS)field contains a 4-octet (32-bit)cyclic redundancy check
    (CRC)value. This value is computed as a function of the contents of the
    source address, destination address, length, LLC data and pad (that is, all
    fields except the preamble, SFD, FCS, and extension). The encoding is de?ned
    by the following generating polynomial.
    
    G(x)=x^32 +x^26 +x^23 +x^22 +x^16 +x^12 +x^11 +x^10 +x^8 +x^7 +x^5 +x^4 +x^2
    +x +1
    
    Mathematically, the CRC value corresponding to a given frame is defned by
    the following procedure:
    
    a)The first 32 bits of the frame are complemented.
    
    b)The n bits of the frame are then considered to be the coefficients of a
    polynomial M(x)of degree n -1. (The first bit of the Destination Address
    field corresponds to the x^(n -1)term and the last bit of the data field
    corresponds to the x^0 term.)
    
    c)M(x)is multiplied by x^32 and divided by G(x), producing a remainder
    R(x)of degree 31.
    
    d)The coefficients of R(x)are considered to be a 32-bit sequence.
    
    e)The bit sequence is complemented and the result is the CRC.
    
    The 32 bits of the CRC value are placed in the frame check sequence field so
    that the x 31 term is the left-most bit of the first octet,and the x^0 term
    is the right most bit of the last octet. (The bits of the CRC are thus
    transmitted in the order x^31 ,x^30 ,...,x^1 ,x^0 .) See reference [B37 ]."
    
    Note that Ethernet MAC describes bit serial transmission of the packet so
    the final paragraph is a sensible way for Ethernet to describe the bit
    ordering of the CRC result in the transmitted packet. For iSCSI, one would
    describe the placement of the bits into the message format instead of
    transmission order.
    
    Pat
    
    -----Original Message-----
    From: Luben Tuikov [mailto:ltuikov@yahoo.com]
    Sent: Sunday, December 16, 2001 2:44 AM
    To: Paul Koning; VICENTE V CAVANNA
    Cc: ips@ece.cmu.edu
    Subject: RE: effect of initializing CRC reg to 1's depends on
    implementati on? iSCSI
    
    
    --- Paul Koning <ni1d@arrl.net> wrote:
    > Excerpt of message (sent 14 December 2001) by Luben
    > > This is actually equivalent to XORing the first
    > > 32 bits of the message with the magic constant as Vince
    > > and I have shown.
    > 
    > Are you saying that you believe the intent of the current
    > spec is NOT
    > the same as the Ethernet CRC, i.e., complement the first
    > 32 bits,
    > multiply by x^32, then divide by G(x)?
    
    In our profession we cannot talk about beliefs and
    intentions, more so for documents, rfc, etc.
    
    If you show the current description of the CRC of the draft
    to a mathematician, they will object to the same thing I've
    objected.
    
    The reason is that they don't have the preconception about
    what circuit is being used, and any such higher level
    notions.
    
    All they would have and all I had was long division in Z_2.
    (Actually Z_2[x] since we deal with polynomials.) 
    
    Then I started from first principles of CRC, polydivision,
    etc, etc. -- similarly to how Williams proceeds in his
    paper, but my treatment was purely algebraic.
    
    The same applies to anyone looking at a description of an
    algorithm. (An ``algorithm'' has a precise definition in
    Computer Science.)
    
    In its current form the description of the algorithm to
    compute the CRC in the iSCSI draft is not consistent, just
    because there is an unspoken assumption that a SMD circuit
    will be used. We cannot afford to do this in a definition
    document, unless we refer explicitly to it. We cannot even
    assume that a circuit will be used...
    
    Please also note that the Ethernet spec CRC algorithm, is
    an optimized version of a basic
    prefix-postfix-initialize-the-
    CRC-register-to-some-constant algoritm. BUT as SMD it
    operates on NON-AUGMENTED messages. FOR THAT REASON you
    cannot say that we have to multiply M(x) by x^32!!!
    
    I.e. SMD algoritms like the one in the Ethernet spec,
    operate on non-augmented messages, while simple Division
    (D) algorithms operate on augmented messages.
    
    Any D can be optimized to SMD, but the constant has to be
    changed. Also, prefixing a message is equivalent to loading
    the CRC register with that prefix (WLG), but this is not so
    for SMD. (elaborated below)
    
    Further more for any SMD there is an equivalent D,
    including for the Ethernet spec SMD; and for any D there is
    an equivalent SMD.
    
    > If that is your interpretation, then we absolutely MUST
    > fix the spec,
    > I'm quite sure that the intent of the spec is as I wrote
    > it, i.e.,
    > Ethernet except for the generator.  
    
    Probably it is. But lets not hasten here.
    We can further generalize the explanation of the algorithm.
     
    > > If this is changed, then the message in its form:
    > >   M'(x) = x^32 M(x) + x^(32+n) I(x)
    > > 
    > > yields to better optimizations as Vince and I have
    > shown.
    > > (see his circuits and worksheet4.pdf, which I posted
    > > yesterday)
    > > 
    > > I.e. the message is augmented (mult by x^32, aka
    > postfixed)
    > > and prefixed by 32 1's (aka CRC=32 1's).
    > 
    > But that is NOT what the spec currently says.  What you
    > describe may
    > be a fine CRC but it is not the one that's in the spec. 
    > Initializing
    > the CRC register to all 1 is not the same as prefixing 32
    > 1 bits onto
    > the message.
    
    It is, in a simple division, e.g. in D. This is clearly and
    simply explained in the Williams paper. It is an equivalent
    to a long division.
    
    Now, in D, if I initialize the CRC to all 1's and then do
    division of M(x) by G(x), so that I catch 0's at the
    beginning of the message,
    
    (which is equivalent to prefixing the message by 1's of the
    number of the width of the CRC, and then do just simple
    division,(CRC=0), since after so many clicks the CRC will
    be loaded with the prefixing bits, and also 0/G(x) = 0)
    
    then I can find a constant which I can XOR to the first 32
    bits of the message and then perform the division, still in
    D, with the same effect. In this particular case that
    constant is the magic constant. (We are one step closer to
    SMD...)
    
    (Now we jump to SMD, by means of worksheet4.pdf, Prefixing
    part.)
    
    Now, in the Ethernet CRC spec, that constant is 32 1's, and
    XORing 32 1's with the 32 MSb of the message is equivalent
    to complementing them.
    
    BUT the Ethernet spec uses SMD, not D, so I claim that
    there is an equivalent D, which for a suitable initial CRC
    (also equivalent to prefixing the message with it) value
    will yield IDENTICAL results as Ethernet SMD.
    
    Now using a bit of algebra similar to worksheet4.pdf which
    I posted a couple of days ago and numerical methods
    (solving a linear system of 33 unknowns) I have found such
    a constant:
    0x2a26f826 which in simple division, D, will yield results
    identical to SMD of Ethernet.
    
    So, here is an abstractization of the Ethernet CRC SMD,
    explained in a simple, simple, simple division only way:
    
    TX:
    1. Mutliply the message, M(x), by x^32.
    2. Prefix the result of 1. with 0x2a26f826.
    3. Find the remainder of the result of 2.
    4. Complement that remainder and add it to the 
       result of 1.
    5. Send the result of 4. to the recipient.
    
    RX: (same as steps 1-3 in TX)
    1. Mutliply the message by x^32.
    2. Prefix the result of 1. with 0x2a26f826.
    3. Find the remainder of the result of 2.
    
    The result of 3 should be 0x1c2d19ed (the magic constant).
    
    Of course I've ommitted the mirroring of bytes for clarity
    and brevity. It can be mentioned on the side, e.g. How to
    build the message: mirror the bytes == to swapping the bits
    inside the bytes, ....
    
    Also note that step 4 in TX, adding means exactly that,
    since we already mult. by x^32, so the remainder will
    nicely fit in the last 32 0 bits.
    
    Also note that step 2, can be made clearer:
    let C(x), be the polynomial representation of 0x2a26f826.
    Let n = deg G(x), k-1 = deg M(x) (there are k bits), then
    step 2 is:
    
    2. Add x^n x^k C(x) to the message M(x).
    
    Or we can swap step 1 and 2:
    
    1. Add x^k C(x) to M(x).
    2. Multiply the result of 1. by x^n.
    
    I hope this makes things a bit clearer.
    
    So from this D specification above, I can derive SMD
    exaclty as it is in the Ethernet spec. I'll include this
    derivation in the paper -- it will be pure math, but in
    english it goes like this: First we notice that after 32
    clicks the CRC register will contain only 32 1's XOR-ed
    with the message, then we see that we can just load the crc
    with ones and then kick one byte off the left xor it with
    the next message bit...
    
    The above equivalence I've tested empirically.
    
    > What does "better optimizations" mean?
    
    See above.
     
    > > In an SMD, one would have to set the CRC to the magic
    > > constant and then proceed as the algorithm indicates,
    > > (this is identical to what you'd find in Ethernet, ...
    > 
    > No it isn't.  The Ethernet spec appendix C, and, more
    > importantly, the
    > formal definition of the CRC in the body of the spec,
    > makes it quite
    > clear that it isn't.  I don't understand how you arrive
    > at any other
    > conclusion.
    
    I didn't mean identical as in the constant. I meant
    identical in a way of equivalence of algorithms, that one
    can be derived from the other, etc. See above. Or simpler
    answer: Math.
    
    -l
    
    
    
    
    
    =====
    --
    
    __________________________________________________
    Do You Yahoo!?
    Check out Yahoo! Shopping and Yahoo! Auctions for all of
    your unique holiday gifts! Buy at http://shopping.yahoo.com
    or bid at http://auctions.yahoo.com
    


Home

Last updated: Tue Dec 18 16:17:47 2001
8134 messages in chronological order