+ reorg +add simple nat64 w/o protocol specific translations
This commit is contained in:
parent
4972f550d8
commit
a408d7a803
3 changed files with 130 additions and 87 deletions
|
|
@ -115,16 +115,17 @@ class L2Controller(object):
|
|||
for mode in self.modes:
|
||||
self.nat64_map[mode] = []
|
||||
|
||||
# specific settings -- only need the address (=offset), no mask
|
||||
# specific settings - mapping 256 IPv6 IPs max statically (based on /24)
|
||||
for mode in ["range_router"]:
|
||||
for net in self.v6_routes[mode]:
|
||||
v6_net = net['net']
|
||||
v4_net = self.info['v4_nat64_map'].next()
|
||||
for v6_net in self.v6_routes[mode]:
|
||||
for v4_net in self.v4_routes[mode]:
|
||||
v4_dst = self.info['v4_nat64_map'].next()
|
||||
|
||||
self.nat64_map[mode].append({
|
||||
"v6_network": v6_net,
|
||||
"v4_network": v4_net,
|
||||
"nat64_prefix": self.info['nat64_prefix']
|
||||
"v6_src": v6_net['net'],
|
||||
"v6_dst": self.info['nat64_prefix'] # static
|
||||
"v4_src": v4_net['net'],
|
||||
"v4_dst": v4_dst
|
||||
})
|
||||
|
||||
self.init_boilerplate(sw_name)
|
||||
|
|
@ -201,6 +202,10 @@ class L2Controller(object):
|
|||
for v6route in self.v6_routes[self.mode]:
|
||||
self.controller.table_add("v6_networks", "set_egress_port", [str(v6route['net'])], [str(v6route['port'])])
|
||||
|
||||
self.controller.table_clear("v4_networks")
|
||||
for v4route in self.v4_routes[self.mode]:
|
||||
self.controller.table_add("v4_networks", "set_egress_port", [str(v4route['net'])], [str(v4route['port'])])
|
||||
|
||||
if self.args.multicast_to_controller:
|
||||
self.listen_to_icmp6_multicast()
|
||||
|
||||
|
|
@ -209,10 +214,10 @@ class L2Controller(object):
|
|||
self.init_ndp_in_switch(v6addr)
|
||||
self.init_icmp6_echo_in_switch(v6addr)
|
||||
|
||||
|
||||
self.controller.table_clear("v4_networks")
|
||||
for v4route in self.v4_routes[self.mode]:
|
||||
self.controller.table_add("v4_networks", "set_egress_port", [str(v4route['net'])], [str(v4route['port'])])
|
||||
self.controller.table_clear("nat64")
|
||||
self.controller.table_clear("nat46")
|
||||
for nat64map in self.nat64_map[self.mode]:
|
||||
self.static_nat64_mapping(**nat64map)
|
||||
|
||||
|
||||
# Disable icmp handling in the controller
|
||||
|
|
@ -230,23 +235,25 @@ class L2Controller(object):
|
|||
# # Experimental: controller does NDP, switch does ICMP6 echo reply
|
||||
# self.controller.table_add("v6_addresses", "controller_reply", [str(another_addr_ns)], [str(self.task['ICMP6_NS'])])
|
||||
|
||||
def static_nat64_mapping(self, v6_src, v6_dst, v4_src, v4_dst):
|
||||
log.info("NAT64 map: ({} -> {} => {}), ({} -> {} -> {} (only /24)))".format(
|
||||
v6_src, v6_dst, v4_dst,
|
||||
v4_src, v4_dst, v6_src)
|
||||
|
||||
for nat64map in self.nat64_map[self.mode]:
|
||||
self.static_nat64_mapping(**nat64map)
|
||||
|
||||
def static_nat64_mapping(self, nat64_prefix, v6_network, v4_network):
|
||||
log.info("NAT64 map: {} -> {} -> {}".format(nat64_prefix, v6_network, v4_network))
|
||||
|
||||
self.controller.table_add("v6_networks", "nat64_static", [str(nat64_prefix)],
|
||||
[str(v6_network.network_address),
|
||||
str(v4_network.network_address),
|
||||
str(nat64_prefix.network_address)]
|
||||
self.controller.table_add("nat64", "nat64_static",
|
||||
[str(v6_src)
|
||||
str(v6_dst)],
|
||||
[str(v6_src.network_address),
|
||||
str(v4_dst.network_address),
|
||||
str(v6_dst.network_address)]
|
||||
)
|
||||
|
||||
self.controller.table_add("v4_networks", "nat46_static", [str(v4_network)],
|
||||
[str(v6_network.network_address),
|
||||
str(v4_network.network_address),
|
||||
str(nat64_prefix.network_address)]
|
||||
self.controller.table_add("nat46", "nat46_static",
|
||||
[str(v4_src)
|
||||
str(v4_dst)],
|
||||
[str(v6_src.network_address),
|
||||
str(v4_dst.network_address),
|
||||
str(v6_dst.network_address)]
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue