欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ip checksum

程序员文章站 2022-03-05 13:36:54
...

同 udp checksum,也是从那个开源系统上扒拉下来的。使用方法也类似。

uint16_t ip_checksum(const void *buf, size_t hdr_len) 
{
    unsigned long sum = 0;
    const uint16_t *ip1;
    
    ip1 = buf;
    while (hdr_len > 1) {
        sum += *ip1++;
        if (sum & 0x80000000)
                sum = (sum & 0xFFFF) + (sum >> 16);
        hdr_len -= 2;
    }

    while (sum >> 16)
        sum = (sum & 0xFFFF) + (sum >> 16);

    return(~sum);
}

// 使用示例
// iph->check = 0;
// iph->check = ip_checksum(iph, sizeof(struct iphdr));