master-thesis/p4src/netpfga_nat64_stupid_hardco...

46 lines
1.1 KiB
Plaintext

port_t v6_out = 64;
port_t v4_out = 16;
/* nat64 */
/*
>>> int(ipaddress.IPv4Address("10.0.0.0"))
167772160
>>> int(ipaddress.IPv6Address("2001:db8:42::"))
42540766411362381960998550477184434176
*/
ipv6_addr_t v6_src = 42540766411362381960998550477184434176; /* 2001:db8:42:: -> v6 source range*/
ipv6_addr_t v6_dst = 42540766411362381960998550477184434176; /* 2001:db8:42:: -> v6 source range*/
ipv6_addr_t nat64_prefix = 42540766411362381960998550477184434176; /* 2001:db8:42:: -> v6 destination range */
ipv4_addr_t v4_dst = 167772160; /* 10.0.0.0 -> v4 destination range */
/* if it is ipv6, we always translate to IPv4 and output on v4_out */
if(hdr.ipv6.isValid()) {
nat64_static(v6_src, v4_dst, nat64_prefix);
if(hdr.udp.isValid()) {
delta_udp_from_v6_to_v4
}
if(hdr.tcp.isValid()) {
delta_tcp_from_v6_to_v4
}
set_egress_port(v4_out);
} else if(hdr.ipv4.isValid()) {
nat46_static(v6_dst, v4_dst, nat64_prefix);
if(hdr.udp.isValid()) {
delta_udp_from_v4_to_v6
}
if(hdr.tcp.isValid()) {
delta_tcp_from_v4_to_v6
}
set_egress_port(v6_out);
} else {
set_egress_port(4);
}