私はパケットに対してカスタム変換を実行するためにxfrmテーブル(IPv6)を使用しています。変換の一部としてUDPヘッダーを追加しました(基本的に私のデータをUDPカプセル化とも呼ばれるUDPに入れます)。変化は正しいことです。
この変換はネットワーク層で発生するため、追加されたUDPヘッダーのチェックサムを計算します。 Wiresharkはこのチェックサムを間違っていると報告します。私のカーネルバージョンは3.10です。udp6_hwcsum_outgoing()
「struct sock」がないため使用できません。
私のカーネルや他のカーネルバージョンでチェックサムを計算する正しい方法を案内してくれる人はいますか?
私は次のことを試しました(すべて間違った値を生成します) -
1.
skb->csum = csum_partial((char*)uh, sizeof(struct udphdr), skb->csum);
uh->check = csum_ipv6_magic(&(ip6h->saddr), &(ip6h->daddr),htons(uh->len), IPPROTO_UDP, skb->csum);
2.
~csum_ipv6_magic(&(ip6h->saddr), &(ip6h->daddr),uh->len, IPPROTO_UDP,0);
三。
csum = skb_checksum(skb, 0, skb->len, 0);
uh->check = udp_v6_check(sub->len, saddr, daddr, csum);