У меня нет проблем с вычислением контрольной суммы для пакета IPv6 в модуле ядра linux.
Я попробовал следующий способ:
struct in6_addr LINK_LOCAL_MULTICAST = {{{ 0xff,02,0,0,0,0,0,0,0,0,0,0,0,1,0,2 }}};
struct in6_addr LINK_LOCAL_SRC = {{{ 0xfe,0x80,0,0,0,0,0,0,0x0a,0x00,0x27,0xff,0xfe,0x5b,0x58,0xcf }}};
udph->len = htons(sizeof(struct udphdr)+sizeof(struct udp_payload));
__wsum csum = csum_partial((char*) udph, udhp->len, 0);
udph->check = csum_ipv6_magic(&LINK_LOCAL_SRC, &LINK_LOCAL_MULTICAST, udph->len, IPPROTO_UDP,csum);
Но контрольная сумма кажется неверной.Не могли бы вы предложить, что я должен изменить, чтобы получить правильную контрольную сумму.
РЕДАКТИРОВАТЬ1: Пожалуйста, найдите пакет в Wireshark.Я изменил настройки разгрузки (tx, rx), но контрольная сумма все еще неверна.Боюсь, что значение в контрольной сумме неверное.
![enter image description here](https://i.stack.imgur.com/MQK2F.png)