SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


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

    RE: iSCSI CRC check clarification



    Comments in text - Julo
    
    
    
    
    "De, Tandra" <Tandra_De@adaptec.com>
    31-10-01 20:52
    Please respond to "De, Tandra"
    
     
            To:     Julian Satran/Haifa/IBM@IBMIL
            cc: 
            Subject:        RE: iSCSI CRC check clarification
    
     
    
    
    Julian,me
    Thanks for you reply. First of all I am not so clear understanding the 
    spec.
    By "reflecting" I meant to ask whether to bit swap the CRC first, and then
    complement it. Then put the CRC value in the wire in network byte order? I
    think there might be some confusion the way I have stated my questions.
    
    1. My concern was that in order to match the examples numbers (put up in 
    the
    Mailing List) I had to bit swap every message byte to calculate the CRC 
    and
    then before transmitting the CRC, I bit swap the CRC and complement it - 
    all
    these add quite a bit of latency calculating CRC on every header and data
    digests on both sides (Initiator and Target). So there may be a better way
    (rather faster way) to do bit swap on every msg byte. I tried to build the
    initial CRC table with bit swapped, but by doing this I could not come up
    with the examples numbers. I may have missed something here. I like to see 
    a
    sample code that does the way the spec. says and avoids the overhead.
    
    +++ a friendly advise - you can build your tables so that you will need 
    minimal
    bit swapping to have the bits get out in network order +++
    
    2. In the 08 draft Appendix A page 151 says
    - the coefficients of R(x) are considered a 32 bit sequence
    - the bit sequence is complemented and the result is CRC
    By reading these lines I wasn't clear whether I should be doing what I 
    have
    stated in #1.
    
    I have again attached my code of CRC calculation if  you could either 
    verify
    this or rather reply me a with a sample code, it will be greatly
    appreciated. Also this will clear up my misunderstanding.
    
    Thanks again,
    Tandra (tde@corp.adaptec.com)
    +++ there are very good texts on this on the network and free CRC code. 
    Dough Otis has put some on this list too+++
    -----Original Message-----
    From: Julian Satran [mailto:Julian_Satran@il.ibm.com]
    Sent: Tuesday, October 30, 2001 10:55 PM
    To: ips@ece.cmu.edu
    Subject: Re: iSCSI CRC check clarification
    
    
    Tandra,
    
    I am not sure I understand what you are talking about.
    The spec clearly states how the CRC should be calculated and what the bit
    order on the wire is.
    Perhaps by "reflecting" you are talking about the later.
    The examples where checked independently by me and at least 2 other
    persons.
    
    Regards,
    Julo
    
    
    
    
    "De, Tandra" <Tandra_De@adaptec.com>
    31-10-01 00:08
    Please respond to "De, Tandra"
    
    
            To:     Julian Satran/Haifa/IBM@IBMIL
            cc:     "'ips@ece.cmu.edu'" <ips@ece.cmu.edu>, "De, Tandra"
    <Tandra_De@adaptec.com>
            Subject:        iSCSI CRC check clarification
    
    
    
    
    
    Julian,
    
    I followed few iSCSI  CRC checking example threads and the thread
    file://www.pdl.cmu.edu/mailinglists/ips/mail/msg05931.html says  that
    "Before transmission, the CRC bits must be reflected and
    complemented";  whereas, the iscsi- 08 draft only mentions about
    complementing the CRC before  transmission. So attached you will find two
    software implementation code  examples: crc_reflect.cpp and
    crc_no_reflect.cpp.
    I ran few test cases  with the attached example code and when I do reflect
    bits I  get
                                     0:        ff ff ff  ff
                                     4:        ff ff ff  ff
                                     8:        ff ff ff  ff
                                    12:        ff ff ff  ff
                                    16:        ff ff ff  ff
                                    20:        ff ff ff  ff
                                    24:        ff ff ff  ff
                                    28:        ff ff ff ff
    
                                    32:        43 ab a8 62
    in the transmission  side, and the reception side I get 0x1c2d19ed.
    
    But when I do not  bit flip I get
    
                                     0:        ff ff ff  ff
                                     4:        ff ff ff  ff
                                     8:        ff ff ff  ff
                                    12:        ff ff ff  ff
                                    16:        ff ff ff  ff
                                    20:        ff ff ff  ff
                                    24:        ff ff ff  ff
                                    28:        ff ff ff ff
    
                                    32:        46 15 d5 c2
    in the transmission  side, and the reception side I do get 0x1c2d19ed
    though.
    
    I like to clarify  which implementation we should use so that both
    Initiator and Target will be in  sync. validating the CRC. I appreciate if
    you could verify the attached files to  see I am missing anytbing. Also I
    think that it would help everyone who are  dealing with iSCSI CRC if you
    could put up the finalized version of the code in  the reflector.
    
    Thanks,
    Tandra (tde@corp.adaptec.com)
    
    
    
    #### crc_no_reflect.cpp has been removed from this note on October 31 2001
    by Julian Satran
    #### crc_reflect.cpp has been removed from this note on October 31 2001 by
    Julian Satran
    
    
    
    
    
    #### op_crc.cpp has been removed from this note on October 31 2001 by 
    Julian Satran
    
    
    


Home

Last updated: Wed Oct 31 15:17:37 2001
7475 messages in chronological order