From f0900c3821417ec0cd97873212a1a1236ae02ded Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Mon, 15 Jul 2019 16:48:24 +0200 Subject: [PATCH] update tcp checksumming --- doc/plan.org | 11 +++++++++++ p4src/actions_delta_checksum.p4 | 10 +++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/doc/plan.org b/doc/plan.org index 59f10f1..5218118 100644 --- a/doc/plan.org +++ b/doc/plan.org @@ -5255,6 +5255,17 @@ we get on the wire: sum 0x324a (incorrect -> 0x5429), +Using + /* filtering code copied from scapy */ + tmp = (tmp >> 16) + (tmp & 0xffff); + tmp = tmp + (tmp >> 16); + tmp = ~tmp; + meta.v6sum = (bit<16>) ((((tmp>>8) & 0xff)|tmp<<8) & 0xffff) ; + +we get + +sum 0x48ad (incorrect -> 0x85eb) + ** The NetPFGA saga Problems encountered: - The logfile for a compile run is 10k+ lines diff --git a/p4src/actions_delta_checksum.p4 b/p4src/actions_delta_checksum.p4 index 008ae29..8b71612 100644 --- a/p4src/actions_delta_checksum.p4 +++ b/p4src/actions_delta_checksum.p4 @@ -73,14 +73,18 @@ action delta_udp_from_v4_to_v6() action delta_tcp_from_v4_to_v6() { - delta_prepare(); - hdr.tcp.checksum = hdr.tcp.checksum + meta.headerdiff; + v4sum(); + v6sum(); + + /* here is also a possible overflow in both directions */ + hdr.tcp.checksum = hdr.tcp.checksum + meta.v6sum - meta.v4sum; } action delta_ipv4_from_v6_to_v4() { delta_prepare(); - hdr.tcp.checksum = hdr.tcp.checksum + ~meta.headerdiff; + /* TO BE DONE! */ + } #endif \ No newline at end of file