правильное использование udp csum с использованием функций ядра Linux - PullRequest
0 голосов
/ 22 декабря 2018

У меня нет проблем с вычислением контрольной суммы для пакета 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...