From a3dd7ee106048498d99b6de94f736c2ae8e161ef Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Wed, 24 Jul 2019 23:33:09 +0200 Subject: [PATCH] ++log --- doc/plan.org | 235 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 223 insertions(+), 12 deletions(-) diff --git a/doc/plan.org b/doc/plan.org index a9d23d8..35006b9 100644 --- a/doc/plan.org +++ b/doc/plan.org @@ -3330,14 +3330,15 @@ https://en.wikipedia.org/wiki/IPv4_header_checksum | eth1 <--> nf3 | ** Compile log - VERSIONS | 5.1. - 5.5 | failure due to variable renaming | -| 5.6 | subparser: compiled! | -| 5.7 | subcontrol: [nsg] | +| 5.6 | subparser: compiled: OK | +| 5.7 | subcontrol: [nsg]: OK | | 5.8 | nat64 actions/table: OK | -| 5.9 | nat64+headers [esprimo]: | -| 6.1 | ARP: mixed matches in table, ABORT | -| 6.2 | No arp, Vivado Simulator kernel has encounted an exception, ABORT | -| 6.3 | Fixed lpm bug, ABORT | -| 6.4 | table size = 64, [nsg] | +| 5.9 | nat64+headers [esprimo]: OK | +| 6.1 | ARP: mixed matches in table: ABORT | +| 6.2 | No arp, Vivado Simulator kernel has encounted an exception: ABORT | +| 6.3 | Fixed lpm bug: ABORT | +| 6.4 | table size = 64, [nsg]: | +| 6.5 | udp in ipv6 integrated with ugly define [esprimo]: | ** TODO Benchmark/comparison *** TODO Setup / Benchmark Jool *** TODO Setup / Benchmark tayga @@ -6446,7 +6447,7 @@ release, use 'get_user_parameters' instead **** TODO install mate for getting xlibraries **** Install sdnet -*** DONE 2019-07-24: add features to netpfga: LPM tables cannot be 64 +*** DONE 2019-07-24: LIMIT add features to netpfga: LPM tables cannot be 64 CLOSED: [2019-07-24 Wed 13:23] #+BEGIN_CENTER minip4_solution.p4(38): [--Wwarn=uninitialized_out_param] warning: out parameter meta may be uninitialized when RealParser terminates @@ -6476,7 +6477,7 @@ nico@nsg-System:~/master-thesis/netpfga/log$ #+END_CENTER -*** DONE 2019-07-24: table match types are not the same error +*** DONE 2019-07-24: LIMIT table match types are not the same error CLOSED: [2019-07-24 Wed 22:35] - Missing feature in https://cs344-stanford.github.io/documentation/p4c-sdnet-missing-features.pdf @@ -6529,7 +6530,7 @@ ARP disabled: } #+END_CENTER -*** DONE 2019-07-24: Vivado Simulator kernel has encounted an exception from DPI C function: LPM_VerifyDataset +*** DONE 2019-07-24: BUG Vivado Simulator kernel has encounted an exception from DPI C function: LPM_VerifyDataset CLOSED: [2019-07-24 Wed 22:41] - maybe LPM problem -> rewrite tables #+BEGIN_CENTER @@ -6541,7 +6542,7 @@ s/sume-sdnet-switch/projects/minip4/nf_sume_sdnet_ip/SimpleSumeSwitch/realmain_l FATAL_ERROR: Vivado Simulator kernel has encounted an exception from DPI C function: LPM_VerifyDataset(). Please correct. Time: 2016466 ps Iteration: 0 Process: /SimpleSumeSwitch_tb/LPM_VerifyDataset File: /home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/nf_sume_sdnet_ip/SimpleSumeSwitch/Testbench/SimpleSumeSwitch_tb.sv -*** DONE 2019-07-24: table size too small +*** DONE 2019-07-24: LIMIT table size too small CLOSED: [2019-07-24 Wed 22:44] - raising again - this is a total madness @@ -6561,7 +6562,8 @@ actions_nat64_generic.p4(173): error: could not not map table size size #+END_CENTER #+END_CENTER -*** TODO 2019-07-24: unsupported data plane arguments (BUG) +*** DONE 2019-07-24: BUG unsupported data plane arguments + CLOSED: [2019-07-24 Wed 22:54] #+BEGIN_CENTER actions_egress.p4(89): error: data-plane arguments in default_actions are currently unsupported: realmain_controller_debug_table_id_0 @@ -6575,6 +6577,215 @@ Compiler Bug: actions_egress.p4(89): unhandled expression realmain_controller_de #+END_CENTER +*** TODO 2019-07-24: BUG unhandled node: (471564) + - Removing the call to " delta_udp_from_v6_to_v4()" fixes the + problem. + - Calling v4sum() only works + - Calling v4sum() and v6sum() works + - Calling delta_prepare() that calls v4sum() and v6sum() works + - Calling delta_prepare() and delta_udp_from_v6_to_v4() FAILS + - Renaming delta_udp_from_v6_to_v4() to stupid() FAILS + - Emptying delta_udp_from_v6_to_v4() WORKS + + + +#+BEGIN_CENTER +minip4_solution.p4(39) +parser RealParser( + ^^^^^^^^^^ +terminate called after throwing an instance of 'Util::CompilerBug' + what(): In file: /wrk/hdscratch/staff/mohan/p4c_sdnet/build/p4c/extensions/sdnet/writers/pxWriter.h:20 +Compiler Bug: unhandled node: (471564) + +Makefile:34: recipe for target 'all' failed +make[1]: *** [all] Error 134 +make[1]: Leaving directory '/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/src' +Makefile:31: recipe for target 'frontend' failed + +#+END_CENTER + +Commenting out 2 ifs (not nested) makes it compile again: + +#+BEGIN_CENTER + // if(hdr.udp.isValid()) { + // #ifdef USE_NICO_DELTA_CHECKSUM + // delta_udp_from_v6_to_v4(); + // #else + // meta.chk_udp_v4 = 1; + // #endif + // } + // if(hdr.tcp.isValid()) { + // #ifdef USE_NICO_DELTA_CHECKSUM + // delta_tcp_from_v6_to_v4(); + // #else + + // meta.chk_tcp_v4 = 1; + // #endif + // } + +#+END_CENTER + +Only enabling the following triggers the bug again: + +#+BEGIN_CENTER + if(hdr.udp.isValid()) { + #ifdef USE_NICO_DELTA_CHECKSUM + delta_udp_from_v6_to_v4(); + #else + meta.chk_udp_v4 = 1; + #endif + } + +#+END_CENTER + +Even this code is enough: + +#+BEGIN_CENTER + if(hdr.udp.isValid()) { + delta_udp_from_v6_to_v4(); + } + +#+END_CENTER + +This apply block still triggers the bug: + +#+BEGIN_CENTER + apply { + if(hdr.ipv6.isValid()) { + if(nat64.apply().hit) { /* generic / static nat64 done */ + // if(hdr.icmp6.isValid()) { + // nat64_icmp6_generic(); + + // // if(hdr.icmp6.type == ICMP6_ECHO_REPLY) { + // // hdr.icmp.type = ICMP_ECHO_REPLY; + // // hdr.icmp.code = 0; + // // } + // // if(hdr.icmp6.type == ICMP6_ECHO_REQUEST) { + // // hdr.icmp.type = ICMP_ECHO_REQUEST; + // // hdr.icmp.code = 0; + // // } + // } + + if(hdr.udp.isValid()) { + delta_udp_from_v6_to_v4(); + } + // if(hdr.tcp.isValid()) { + // #ifdef USE_NICO_DELTA_CHECKSUM + // delta_tcp_from_v6_to_v4(); + // #else + + // meta.chk_tcp_v4 = 1; + // #endif + // } + + v4_networks.apply(); /* apply egress for IPv4 */ + exit; /* no further v6 processing */ + + } + } + + lookup_table.apply(); + } +} +#+END_CENTER + +This works: + +#+BEGIN_CENTER + if(hdr.udp.isValid()) { + v4sum(); + v6sum(); + +// delta_udp_from_v6_to_v4(); + } + +#+END_CENTER + +This works: + +#+BEGIN_CENTER + if(hdr.udp.isValid()) { +// v4sum(); + // v6sum(); + delta_prepare(); + +// delta_udp_from_v6_to_v4(); + } + +#+END_CENTER + +This does not work: + +#+BEGIN_CENTER + if(hdr.udp.isValid()) { + delta_prepare(); + delta_udp_from_v6_to_v4(); + } +#+END_CENTER + +Also fails: + +#+BEGIN_CENTER + if(hdr.udp.isValid()) { + //delta_prepare(); + //delta_udp_from_v6_to_v4(); + stupid(); + } + +#+END_CENTER + +Works: + +#+BEGIN_CENTER +action delta_udp_from_v6_to_v4() {} +#+END_CENTER + +Works also: + +#+BEGIN_CENTER +action delta_udp_from_v6_to_v4() +{ + delta_prepare(); + + bit<17> tmp = (bit<17>) hdr.udp.checksum + (bit<17>) meta.v4sum; + // if (tmp[16:16] == 1) { + // tmp = tmp + 1; + // tmp[16:16] = 0; + // } + // tmp = tmp + (bit<17>) (0xffff - meta.v6sum); + // if (tmp[16:16] == 1) { + // tmp = tmp + 1; + // tmp[16:16] = 0; + // } + + hdr.udp.checksum = (bit<16>) tmp; +} + +#+END_CENTER + +Fails: + +#+BEGIN_CENTER +action delta_udp_from_v6_to_v4() +{ + delta_prepare(); + + bit<17> tmp = (bit<17>) hdr.udp.checksum + (bit<17>) meta.v4sum; + if (tmp[16:16] == 1) { + tmp = tmp + 1; + tmp[16:16] = 0; + } + // tmp = tmp + (bit<17>) (0xffff - meta.v6sum); + // if (tmp[16:16] == 1) { + // tmp = tmp + 1; + // tmp[16:16] = 0; + // } + + hdr.udp.checksum = (bit<16>) tmp; +} + +#+END_CENTER + ** The NetPFGA saga Problems encountered: - The logfile for a compile run is 10k+ lines