Microchip® Advanced Software Framework

inet_chksum.c File Reference

Incluse internet checksum functions.

#include "lwip/opt.h"
#include "lwip/inet_chksum.h"
#include "lwip/def.h"
#include <stddef.h>
#include <string.h>

Macros

#define LWIP_CHKSUM   lwip_standard_chksum
 
#define LWIP_CHKSUM_ALGORITHM   2
 

Functions

u16_t inet_chksum (void *dataptr, u16_t len)
 
u16_t inet_chksum_pbuf (struct pbuf *p)
 Calculate a checksum over a chain of pbufs (without pseudo-header, much like inet_chksum only pbufs are used). More...
 
u16_t inet_chksum_pseudo (struct pbuf *p, u8_t proto, u16_t proto_len, ip_addr_t *src, ip_addr_t *dest)
 
u16_t inet_chksum_pseudo_partial (struct pbuf *p, u8_t proto, u16_t proto_len, u16_t chksum_len, ip_addr_t *src, ip_addr_t *dest)
 
static u16_t inet_cksum_pseudo_base (struct pbuf *p, u8_t proto, u16_t proto_len, u32_t acc)
 Parts of the pseudo checksum which are common to IPv4 and IPv6. More...
 
static u16_t inet_cksum_pseudo_partial_base (struct pbuf *p, u8_t proto, u16_t proto_len, u16_t chksum_len, u32_t acc)
 Parts of the pseudo checksum which are common to IPv4 and IPv6. More...
 
u16_t ip6_chksum_pseudo (struct pbuf *p, u8_t proto, u16_t proto_len, ip6_addr_t *src, ip6_addr_t *dest)
 Calculates the checksum with IPv6 pseudo header used by TCP and UDP for a pbuf chain. More...
 
u16_t ip6_chksum_pseudo_partial (struct pbuf *p, u8_t proto, u16_t proto_len, u16_t chksum_len, ip6_addr_t *src, ip6_addr_t *dest)
 Calculates the checksum with IPv6 pseudo header used by TCP and UDP for a pbuf chain. More...
 
u16_t lwip_standard_chksum (void *dataptr, int len)
 

#define LWIP_CHKSUM_ALGORITHM   2

u16_t inet_chksum ( void dataptr,
u16_t  len 
)
u16_t inet_chksum_pbuf ( struct pbuf p)

Calculate a checksum over a chain of pbufs (without pseudo-header, much like inet_chksum only pbufs are used).

Parameters
ppbuf chain over that the checksum should be calculated
Returns
checksum (as u16_t) to be saved directly in the protocol header

References FOLD_U32T, pbuf::len, LWIP_CHKSUM, pbuf::next, NULL, pbuf::payload, and SWAP_BYTES_IN_WORD.

Referenced by icmp_input().

u16_t inet_chksum_pseudo ( struct pbuf p,
u8_t  proto,
u16_t  proto_len,
ip_addr_t src,
ip_addr_t dest 
)
u16_t inet_chksum_pseudo_partial ( struct pbuf p,
u8_t  proto,
u16_t  proto_len,
u16_t  chksum_len,
ip_addr_t src,
ip_addr_t dest 
)
static u16_t inet_cksum_pseudo_base ( struct pbuf p,
u8_t  proto,
u16_t  proto_len,
u32_t  acc 
)
static

Parts of the pseudo checksum which are common to IPv4 and IPv6.

References FOLD_U32T, htons, INET_DEBUG, pbuf::len, LWIP_CHKSUM, LWIP_DEBUGF, pbuf::next, NULL, pbuf::payload, SWAP_BYTES_IN_WORD, and X32_F.

Referenced by inet_chksum_pseudo(), and ip6_chksum_pseudo().

static u16_t inet_cksum_pseudo_partial_base ( struct pbuf p,
u8_t  proto,
u16_t  proto_len,
u16_t  chksum_len,
u32_t  acc 
)
static

Parts of the pseudo checksum which are common to IPv4 and IPv6.

References FOLD_U32T, htons, INET_DEBUG, pbuf::len, LWIP_ASSERT, LWIP_CHKSUM, LWIP_DEBUGF, pbuf::next, NULL, pbuf::payload, SWAP_BYTES_IN_WORD, and X32_F.

Referenced by inet_chksum_pseudo_partial(), and ip6_chksum_pseudo_partial().

u16_t ip6_chksum_pseudo ( struct pbuf p,
u8_t  proto,
u16_t  proto_len,
ip6_addr_t src,
ip6_addr_t dest 
)

Calculates the checksum with IPv6 pseudo header used by TCP and UDP for a pbuf chain.

IPv6 addresses are expected to be in network byte order.

Parameters
pchain of pbufs over that a checksum should be calculated (ip data part)
srcsource ipv6 address (used for checksum of pseudo header)
dstdestination ipv6 address (used for checksum of pseudo header)
protoipv6 protocol/next header (used for checksum of pseudo header)
proto_lenlength of the ipv6 payload (used for checksum of pseudo header)
Returns
checksum (as u16_t) to be saved directly in the protocol header

References FOLD_U32T, and inet_cksum_pseudo_base().

Referenced by icmp6_input(), icmp6_send_response(), mld6_send(), nd6_send_na(), nd6_send_ns(), nd6_send_rs(), and raw_sendto().

u16_t ip6_chksum_pseudo_partial ( struct pbuf p,
u8_t  proto,
u16_t  proto_len,
u16_t  chksum_len,
ip6_addr_t src,
ip6_addr_t dest 
)

Calculates the checksum with IPv6 pseudo header used by TCP and UDP for a pbuf chain.

IPv6 addresses are expected to be in network byte order. Will only compute for a portion of the payload.

Parameters
pchain of pbufs over that a checksum should be calculated (ip data part)
srcsource ipv6 address (used for checksum of pseudo header)
dstdestination ipv6 address (used for checksum of pseudo header)
protoipv6 protocol/next header (used for checksum of pseudo header)
proto_lenlength of the ipv6 payload (used for checksum of pseudo header)
chksum_lennumber of payload bytes used to compute chksum
Returns
checksum (as u16_t) to be saved directly in the protocol header

References FOLD_U32T, and inet_cksum_pseudo_partial_base().

u16_t lwip_standard_chksum ( void dataptr,
int  len 
)

References FOLD_U32T, and SWAP_BYTES_IN_WORD.