mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-12-25 00:14:02 +00:00
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:
parent
e871548772
commit
fae1397468
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user