diff --git a/p4src/minip4_solution.p4 b/p4src/minip4_solution.p4 index 556caeb..22fa4d3 100644 --- a/p4src/minip4_solution.p4 +++ b/p4src/minip4_solution.p4 @@ -131,8 +131,33 @@ control RealMain( v4_networks.apply(); /* apply egress for IPv4 */ exit; /* no further v6 processing */ + } else if(hdr.ipv4.isValid()) { + if(icmp.apply().hit) { + v4_networks.apply(); + exit; + } else if(nat46.apply().hit) { + if(hdr.icmp.isValid()) { + nat46_icmp_generic(); + + if(hdr.icmp.type == ICMP_ECHO_REPLY) { + hdr.icmp6.type = ICMP6_ECHO_REPLY; + } + 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; + } + v4_networks.apply(); /* regular routing, egress */ } - } lookup_table.apply(); }