TCP checksum calculate, как?
Форум — Development
struct tcphdr *tcph = (struct tcphdr *)(skb_network_header((skb)) + ip_hdrlen((skb)));
struct iphdr *iph = (struct iphdr *)skb_network_header(skb);
printk(KERN_ALERT "INFO: CHECKSUM TCP old: %u.\n",tcph->check);
datalen = skb->len - (iph->ihl << 2);
tcph->check = 0;printk(KERN_ALERT "INFO: CHECKSUM TCP=0: %u.\n",tcph->check);
tcph->check = csum_tcpudp_magic(iph->saddr, iph->daddr, datalen, IPPROTO_TCP, csum_partial((unsigned char *)tcph,datalen,0));
printk(KERN_ALERT "INFO: CHECKSUM TCP new: %u.\n",tcph->check);
Есть пример, но на выдаче неверная сумма. Не могу понять, как правильно считать чексумму.
Суть данного кода в том, что он просто считает заново хэш исходящего пакета.
skb->ip_summed = CHECKSUM_UNNECESSARY; - добавил после расчета суммы, сумма отличная от старой, но пакеты идут..
Правильно ли я понимаю, что skb->ip_summed = CHECKSUM_UNNECESSARY; - позволяет не обращать внимания на чексумму?