User Tools

Site Tools


mywiki:linux:checksum

This is an old revision of the document!


Table of Contents

Linux Checksum Calculation Logic

API Comments
skb_checksum_help
ip_fast_csum
csum_fold
skb_checksum
csum_tcpudp_magic
nf_ip_checksum
csum_tcpudp_nofold
csum_replace4
csum_replace2
nf_nat_ipv4_csum_recalc
csum_tcpudp_magic

skb→csum_start = skb_transport_header(skb) - skb→head; skb→csum_offset = offsetof(struct tcphdr, check);

Linux Checksum

union {

    __wsum                       csum;
    struct {
        __u16  csum_start;
        __u16  csum_offset;
   };
}; 
Variables/Direction skb→ip_summed skb→csum or csum_start/offset
Input CHECKSUM_NONE 0 not valid SW need do L4 payload + pseudo header verification
CHECKSUM_UNNECESSARY 1 not valid HW already do L4 payload + pseudo header verification
CHECKSUM_COMPLETE 2 csum valid (stored with L4 payload checksum) SW need to do skb→csum + pseudo header verification
Output CHECKSUM_NONE 0 not valid SW already do necessary L4 checksum calculation
CHECKSUM_PARTIAL 3 csum_start/offset valid SW already do pseudo header and HW need to further calculate its payload based on
mywiki/linux/checksum.1461308483.txt.gz · Last modified: (external edit)