/[lwip]/lwip/src/core/inet.c
ViewVC logotype

Diff of /lwip/src/core/inet.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.5 by likewise, Wed Jan 8 10:09:42 2003 UTC revision 1.6 by likewise, Wed Jan 8 15:36:25 2003 UTC
# Line 53  lwip_chksum(void *dataptr, int len) Line 53  lwip_chksum(void *dataptr, int len)
53  {  {
54    u32_t acc;    u32_t acc;
55            
56      DEBUGF(INET_DEBUG, ("lwip_chksum(%p, %d)\n", dataptr, len));
57    for(acc = 0; len > 1; len -= 2) {    for(acc = 0; len > 1; len -= 2) {
58      acc = acc + *((u16_t *)dataptr)++;  //    acc = acc + *((u16_t *)dataptr)++;
59        acc += *(u16_t *)dataptr;
60        dataptr = (void *)((u16_t *)dataptr + 1);
61    }    }
62    
63    /* add up any odd byte */    /* add up any odd byte */
64    if(len == 1) {    if(len == 1) {
65      acc += htons((u16_t)((*(u8_t *)dataptr) & 0xff) << 8);      acc += htons((u16_t)((*(u8_t *)dataptr) & 0xff) << 8);
66      DEBUGF(INET_DEBUG, ("inet: chksum: odd byte %d\n", *(u8_t *)dataptr));      DEBUGF(INET_DEBUG, ("inet: chksum: odd byte %d\n", *(u8_t *)dataptr));
67      } else {
68        DEBUGF(INET_DEBUG, ("inet: chksum: no odd byte\n"));
69    }    }
70    acc = (acc >> 16) + (acc & 0xffffUL);    acc = (acc >> 16) + (acc & 0xffffUL);
71    
# Line 87  inet_chksum_pseudo(struct pbuf *p, Line 92  inet_chksum_pseudo(struct pbuf *p,
92    
93    acc = 0;    acc = 0;
94    swapped = 0;    swapped = 0;
95      /* iterate through all pbuf in chain */
96    for(q = p; q != NULL; q = q->next) {        for(q = p; q != NULL; q = q->next) {    
97        DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", q, q->next));
98      acc += lwip_chksum(q->payload, q->len);      acc += lwip_chksum(q->payload, q->len);
99        //DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%lx \n", acc));
100      while(acc >> 16) {      while(acc >> 16) {
101        acc = (acc & 0xffffUL) + (acc >> 16);        acc = (acc & 0xffffUL) + (acc >> 16);
102      }      }
# Line 96  inet_chksum_pseudo(struct pbuf *p, Line 104  inet_chksum_pseudo(struct pbuf *p,
104        swapped = 1 - swapped;        swapped = 1 - swapped;
105        acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8);        acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8);
106      }      }
107        //DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%lx \n", acc));
108    }    }
109    
110    if(swapped) {    if(swapped) {
# Line 111  inet_chksum_pseudo(struct pbuf *p, Line 120  inet_chksum_pseudo(struct pbuf *p,
120    while(acc >> 16) {    while(acc >> 16) {
121      acc = (acc & 0xffffUL) + (acc >> 16);      acc = (acc & 0xffffUL) + (acc >> 16);
122    }        }    
123      DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%lx\n", acc));
124    return ~(acc & 0xffffUL);    return ~(acc & 0xffffUL);
125  }  }
126  /*-----------------------------------------------------------------------------------*/  /*-----------------------------------------------------------------------------------*/

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26