++ nat64 update, discussion update

This commit is contained in:
Nico Schottelius 2019-03-14 14:37:45 +01:00
commit 7c8f019b2a
3 changed files with 71 additions and 9 deletions

View file

@ -66,18 +66,22 @@ control MyIngress(inout headers hdr,
meta.cast_length = (bit<32>) hdr.ipv6.payload_length;
}
action nat64_static(ipv4_addr_t v6_network, ipv4_addr_t v4_network) {
/* nat64_prefix is the same as the matching key, but without the mask */
action nat64_static(ipv4_addr_t v6_network, ipv4_addr_t v4_network, ipv6_addr_t nat64_prefix) {
ipv6_addr_t src_offset = hdr.ipv6.src_addr - v6_network;
ipv4_addr_t src = v4_network + (ipv4_addr_t) src_offset;
ipv4_addr_t src = v4_network + (ipv4_addr_t) src_offset;
ipv4_addr_t dst_offset = hdr.ipv6.dst_addr - LPM_MATCH_NETWORK_ADDRESS_IN_TABLE;
ipv6_addr_t dst = (ipv4_addr_t) hdr.ipv6.dst_addr - nat64_prefix;
nat64_generic(src, dst);
}
action nat46_static(ipv4_addr_t v4_network, ipv6_addr_t nat64_prefix ) {
ipv6_addr_t src = hdr.ipv4.dst_addr - v4_network;
ipv6_addr_t src = hdr.ipv4.dst_addr - v4_network;
/* matching key: v4_network specified again */
action nat46_static(ipv6_addr_t v6_network, ipv4_addr_t v4_network, ipv6_addr_t nat64_prefix ) {
ipv6_addr_t src = nat64_prefix + (ipv6_addr_t) hdr.ipv4.src_addr;
ipv4_addr_t dst_offset = hdr.ipv4.dst_addr - v4_network;
ipv6_addr_t dst = v6_network + (ipv6_addr_t) dst_offset;
nat46_generic(src, dst);
}