/[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.9 by likewise, Mon Mar 10 16:12:41 2003 UTC revision 1.9.2.1 by likewise, Wed May 14 14:38:28 2003 UTC
# Line 61  lwip_chksum(void *dataptr, int len) Line 61  lwip_chksum(void *dataptr, int len)
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 {    } else {
# Line 69  lwip_chksum(void *dataptr, int len) Line 69  lwip_chksum(void *dataptr, int len)
69    }    }
70    acc = (acc >> 16) + (acc & 0xffffUL);    acc = (acc >> 16) + (acc & 0xffffUL);
71    
72    if((acc & 0xffff0000) != 0) {    if ((acc & 0xffff0000) != 0) {
73      acc = (acc >> 16) + (acc & 0xffffUL);      acc = (acc >> 16) + (acc & 0xffffUL);
74    }    }
75    
# Line 97  inet_chksum_pseudo(struct pbuf *p, Line 97  inet_chksum_pseudo(struct pbuf *p,
97      DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", (void *) q, (void *)q->next));      DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", (void *) q, (void *)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));*/      /*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      }      }
103      if(q->len % 2 != 0) {      if (q->len % 2 != 0) {
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));*/      /*DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%lx \n", acc));*/
108    }    }
109    
110    if(swapped) {    if (swapped) {
111      acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8);      acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8);
112    }    }
113    acc += (src->addr & 0xffffUL);    acc += (src->addr & 0xffffUL);
# Line 117  inet_chksum_pseudo(struct pbuf *p, Line 117  inet_chksum_pseudo(struct pbuf *p,
117    acc += (u32_t)htons((u16_t)proto);    acc += (u32_t)htons((u16_t)proto);
118    acc += (u32_t)htons(proto_len);      acc += (u32_t)htons(proto_len);  
119        
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));    DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%lx\n", acc));
# Line 136  inet_chksum(void *dataptr, u16_t len) Line 136  inet_chksum(void *dataptr, u16_t len)
136    u32_t acc;    u32_t acc;
137    
138    acc = lwip_chksum(dataptr, len);    acc = lwip_chksum(dataptr, len);
139    while(acc >> 16) {    while (acc >> 16) {
140      acc = (acc & 0xffff) + (acc >> 16);      acc = (acc & 0xffff) + (acc >> 16);
141    }        }    
142    return ~(acc & 0xffff);    return ~(acc & 0xffff);
# Line 153  inet_chksum_pbuf(struct pbuf *p) Line 153  inet_chksum_pbuf(struct pbuf *p)
153    swapped = 0;    swapped = 0;
154    for(q = p; q != NULL; q = q->next) {    for(q = p; q != NULL; q = q->next) {
155      acc += lwip_chksum(q->payload, q->len);      acc += lwip_chksum(q->payload, q->len);
156      while(acc >> 16) {      while (acc >> 16) {
157        acc = (acc & 0xffffUL) + (acc >> 16);        acc = (acc & 0xffffUL) + (acc >> 16);
158      }          }    
159      if(q->len % 2 != 0) {      if (q->len % 2 != 0) {
160        swapped = 1 - swapped;        swapped = 1 - swapped;
161        acc = (acc & 0x00ffUL << 8) | (acc & 0xff00UL >> 8);        acc = (acc & 0x00ffUL << 8) | (acc & 0xff00UL >> 8);
162      }      }
163    }    }
164    
165    if(swapped) {    if (swapped) {
166      acc = ((acc & 0x00ffUL) << 8) | ((acc & 0xff00UL) >> 8);      acc = ((acc & 0x00ffUL) << 8) | ((acc & 0xff00UL) >> 8);
167    }    }
168    return ~(acc & 0xffffUL);    return ~(acc & 0xffffUL);

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.9.2.1

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