Set mac address based on destination network [HACK]
This commit is contained in:
parent
2292f9e995
commit
0f2df2723b
3 changed files with 47 additions and 8 deletions
|
|
@ -78,6 +78,7 @@ class L2Controller(object):
|
|||
|
||||
# https://en.wikipedia.org/wiki/Solicited-node_multicast_address
|
||||
self.info['ndp_multicast'] = ipaddress.ip_network("ff02::1:ff00:0/104")
|
||||
self.info['mac_base'] = "00:00:0a:00:00:0{}"
|
||||
self.info['mac_addr'] = "00:00:0a:00:00:42"
|
||||
self.info['mac_broadcast'] = "ff:ff:ff:ff:ff:ff"
|
||||
self.info['ipv6_link_local'] = ipaddress.ip_address("fe80::200:aff:fe00:42")
|
||||
|
|
@ -115,8 +116,9 @@ class L2Controller(object):
|
|||
net = self.info['v6_gen'].next()
|
||||
self.v6_routes['base'].append({
|
||||
"net": net,
|
||||
"port": port}
|
||||
)
|
||||
"port": port,
|
||||
"mac": self.info['mac_base'].format(port)
|
||||
})
|
||||
self.ports.append(port)
|
||||
|
||||
self.v6_routes['router'] = self.v6_routes['base']
|
||||
|
|
@ -131,8 +133,9 @@ class L2Controller(object):
|
|||
net = self.info['v4_gen'].next()
|
||||
self.v4_routes['base'].append({
|
||||
"net": net,
|
||||
"port": port}
|
||||
)
|
||||
"port": port,
|
||||
"mac": self.info['mac_base'].format(port)
|
||||
})
|
||||
self.ports.append(port)
|
||||
|
||||
self.v4_routes['router'] = self.v4_routes['base']
|
||||
|
|
@ -256,13 +259,23 @@ class L2Controller(object):
|
|||
def fill_tables(self):
|
||||
self.controller.table_clear("v6_networks")
|
||||
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_add("v6_networks", "set_egress_port", [str(v6route['net'])], [str(v6route['port'])])
|
||||
self.controller.table_add("v4_networks", "set_egress_port_and_mac",
|
||||
[str(v6route['net'])],
|
||||
[str(v6route['port']),
|
||||
str(v6route['mac']),
|
||||
])
|
||||
|
||||
self.controller.table_clear("v4_networks")
|
||||
self.controller.table_clear("v4_arp")
|
||||
self.controller.table_clear("v4_arp_egress")
|
||||
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_add("v4_networks", "set_egress_port", [str(v4route['net'])], [str(v4route['port'])])
|
||||
self.controller.table_add("v4_networks", "set_egress_port_and_mac",
|
||||
[str(v4route['net'])],
|
||||
[str(v4route['port']),
|
||||
str(v4route['mac']),
|
||||
])
|
||||
|
||||
# ARP support
|
||||
self.controller.table_add("v4_arp_egress", "set_egress_port", [str(v4route['net'])], [str(v4route['port'])])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue