Rename lwip_chksum and add LWIP_CHKSUM macro so that ports can "override" the standard implementation with one of their own.

This commit is contained in:
kieranm 2004-09-12 16:17:58 +00:00
parent e871548772
commit fae1397468

View File

@ -46,10 +46,21 @@
#include "lwip/def.h" #include "lwip/def.h"
#include "lwip/inet.h" #include "lwip/inet.h"
#include "lwip/sys.h"
/* This is a reference implementation of the checksum algorithm
- it may not work on all architectures, and all processors, particularly
if they have issues with alignment and 16 bit access.
- in this case you will need to port it to your architecture and
#define LWIP_CHKSUM <your_checksum_routine>
in your sys_arch.h
*/
#ifndef LWIP_CHKSUM
#define LWIP_CHKSUM lwip_standard_chksum
static u16_t static u16_t
lwip_chksum(void *dataptr, int len) lwip_standard_chksum(void *dataptr, int len)
{ {
u32_t acc; u32_t acc;
@ -75,6 +86,7 @@ lwip_chksum(void *dataptr, int len)
return (u16_t)acc; return (u16_t)acc;
} }
#endif
/* inet_chksum_pseudo: /* inet_chksum_pseudo:
* *
@ -96,7 +108,7 @@ inet_chksum_pseudo(struct pbuf *p,
for(q = p; q != NULL; q = q->next) { for(q = p; q != NULL; q = q->next) {
LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n", LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): checksumming pbuf %p (has next %p) \n",
(void *)q, (void *)q->next)); (void *)q, (void *)q->next));
acc += lwip_chksum(q->payload, q->len); acc += LWIP_CHKSUM(q->payload, q->len);
/*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%lx \n", acc));*/ /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%lx \n", acc));*/
while (acc >> 16) { while (acc >> 16) {
acc = (acc & 0xffffUL) + (acc >> 16); acc = (acc & 0xffffUL) + (acc >> 16);
@ -136,7 +148,7 @@ inet_chksum(void *dataptr, u16_t len)
{ {
u32_t acc; u32_t acc;
acc = lwip_chksum(dataptr, len); acc = LWIP_CHKSUM(dataptr, len);
while (acc >> 16) { while (acc >> 16) {
acc = (acc & 0xffff) + (acc >> 16); acc = (acc & 0xffff) + (acc >> 16);
} }
@ -153,7 +165,7 @@ inet_chksum_pbuf(struct pbuf *p)
acc = 0; acc = 0;
swapped = 0; swapped = 0;
for(q = p; q != NULL; q = q->next) { for(q = p; q != NULL; q = q->next) {
acc += lwip_chksum(q->payload, q->len); acc += LWIP_CHKSUM(q->payload, q->len);
while (acc >> 16) { while (acc >> 16) {
acc = (acc & 0xffffUL) + (acc >> 16); acc = (acc & 0xffffUL) + (acc >> 16);
} }