Re: Calculating checksum ???????

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

 



you try to print the checksum using printk statement instead of printf at
the respective..

printk(KERN ALERT, "Checksum = %d\n", ntohs(ip->check));
please check it out


                                                                                                                
                      paridhi bansal                                                                            
                      <paridhibansal@yahoo.c        To:       kernelnewbies@nl.linux.org                        
                      om>                           cc:                                                         
                      Sent by:                      Subject:  Calculating checksum ???????                      
                      kernelnewbies-bounce@n                                                                    
                      l.linux.org                                                                               
                                                                                                                
                                                                                                                
                      17/01/2003 12:26 PM                                                                       
                                                                                                                
                                                                                                                




HI all!!

I am trying to do nat through my applictaion..But i am
not able to calculate the right checksum..The code i
am using for calculating  checksum is the standarad
one..but i am not getting the right checksum..Just for
testing purposes, i set the checksum field of ip
header to 0 and calculated the checksum of ip header
without any changes..but i am getting a different
answer..

This is what i am doing:
/////Printing original checksum
 printf("  CHECKSUM:%d ", ntohs(ip->check));

/////Recalculating the checksum of same pkt after
setting checksum field to 0
ip->check=0;
prinf("checksum %d",ntohs(csum_part(ip,iplen, 0)));


The code for calculating checksum i am using is:
u_int16_t csum_part(void *buffer, unsigned int len,
u_int16_t prevsum)
{
             u_int32_t sum = 0;
             u_int16_t *ptr = buffer;

             while (len > 1)  {
                         sum += *ptr++;
                         len -= 2;
             }
             if (len) {
                         union {
                                     u_int8_t byte;
                                     u_int16_t wyde;
                         } odd;
                         odd.wyde = 0;
                         odd.byte = *((u_int8_t *)ptr);
                         sum += odd.wyde;
             }
             sum = (sum >> 16) + (sum & 0xFFFF);
             sum += prevsum;
             return (sum + (sum >> 16));
}


Can somebody tell me where exactly is the problem..Why
am i not getting the right checksum,???????????///


Thanx in advance,
Paridhi

__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com
--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/





--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux