diff --git a/doc/plan.org b/doc/plan.org index f4c757f..132952b 100644 --- a/doc/plan.org +++ b/doc/plan.org @@ -6787,7 +6787,7 @@ action delta_udp_from_v6_to_v4() #+END_CENTER -*** TODO 2019-07-25: BUG overwrite: calling v4_networks.apply(); twice +*** TODO 2019-07-25: BUG overwrite: calling v4_networks.apply(); twice is impossible in different branches #+BEGIN_CENTER make -C src/ make[1]: Entering directory '/home/nico/projects/P4-NetFPGA/contrib-projects/sume-sdnet-switch/projects/minip4/src' @@ -6806,6 +6806,8 @@ Makefile:34: recipe for target 'all' failed #+END_CENTER +*** TODO 2019-07-25: LIMIT: cannot use actions with arguments as default parameters + ** The NetPFGA saga Problems encountered: - The logfile for a compile run is 10k+ lines diff --git a/p4src/minip4_solution.p4 b/p4src/minip4_solution.p4 index 47c3327..9f47072 100644 --- a/p4src/minip4_solution.p4 +++ b/p4src/minip4_solution.p4 @@ -105,7 +105,12 @@ control RealMain( apply { bit<17> tmp17 = 0; + bool apply_v4networks = false; + bool apply_v6networks = false; + if(hdr.ipv6.isValid()) { + apply_v6networks = true; + if(nat64.apply().hit) { /* generic / static nat64 done */ if(hdr.icmp6.isValid()) { nat64_icmp6_generic(); @@ -127,11 +132,12 @@ control RealMain( if(hdr.tcp.isValid()) { delta_tcp_from_v6_to_v4 } - - v4_networks.apply(); /* apply egress for IPv4 */ - exit; /* no further v6 processing */ + apply_v4networks = false; + apply_v6networks = true; } } else if(hdr.ipv4.isValid()) { + apply_v4networks = true; + if(nat46.apply().hit) { if(hdr.icmp.isValid()) { nat46_icmp_generic(); @@ -142,18 +148,24 @@ control RealMain( if(hdr.icmp.type == ICMP_ECHO_REQUEST) { hdr.icmp6.type = ICMP6_ECHO_REQUEST; } - } + } if(hdr.udp.isValid()) { delta_udp_from_v4_to_v6 } if(hdr.tcp.isValid()) { delta_tcp_from_v4_to_v6 } - - // v6_networks.apply(); - // exit; + apply_v4networks = true; + apply_v6networks = false; } -// v4_networks.apply(); /* regular routing, egress */ + } + + if(apply_v4networks == true) { + v4_networks.apply(); + } + + if(apply_v6networks == true) { + v6_networks.apply(); } lookup_table.apply();