++todos; begin router mode
This commit is contained in:
parent
2cafdc5e12
commit
c4a4e370f0
4 changed files with 52 additions and 7 deletions
|
|
@ -18,14 +18,16 @@ import subprocess
|
|||
# Broken in python2
|
||||
#import ipaddress
|
||||
|
||||
|
||||
logging.basicConfig()
|
||||
log = logging.getLogger("main")
|
||||
|
||||
class L2Controller(object):
|
||||
def __init__(self, sw_name):
|
||||
# Command line mapping
|
||||
self.modes = ['base']
|
||||
self.modes = ['base', 'router']
|
||||
|
||||
|
||||
self.address_suffix = 42
|
||||
|
||||
# Network / egress
|
||||
self.v6_mask = "64"
|
||||
|
|
@ -35,6 +37,7 @@ class L2Controller(object):
|
|||
self.v6_routes['base'] = []
|
||||
self.v6_routes['base'].append({ "net": "2001:db8:61::", "port": "1"})
|
||||
self.v6_routes['base'].append({ "net": "2001:db8:62::", "port": "2"})
|
||||
self.v6_routes['router'] = self.v6_routes['base']
|
||||
|
||||
self.v4_mask = "24"
|
||||
self.v4_routes = {}
|
||||
|
|
@ -42,6 +45,17 @@ class L2Controller(object):
|
|||
self.v4_routes['base'] = []
|
||||
self.v4_routes['base'].append({ "net": "10.0.41.", "port": "3"})
|
||||
self.v4_routes['base'].append({ "net": "10.0.42.", "port": "4"})
|
||||
self.v4_routes['router'] = self.v4_routes['base']
|
||||
|
||||
self.v6_addresses = {}
|
||||
self.v6_addresses[None] = []
|
||||
self.v6_addresses['base'] = []
|
||||
self.v6_addresses['router'] = [ { "addr": "{}{}".format(n['net'], self.address_suffix), "port": n['port'] } for n in self.v6_routes['router'] ]
|
||||
|
||||
self.v4_addresses = {}
|
||||
self.v4_addresses[None] = []
|
||||
self.v4_addresses['base'] = []
|
||||
self.v4_addresses['router'] = [ { "addr": "{}{}".format(n['net'], self.address_suffix), "port": n['port'] } for n in self.v4_routes['router'] ]
|
||||
|
||||
self.init_boilerplate(sw_name)
|
||||
|
||||
|
|
@ -82,6 +96,7 @@ class L2Controller(object):
|
|||
self.fill_tables()
|
||||
self.config_hosts()
|
||||
|
||||
|
||||
def fill_tables(self):
|
||||
self.controller.table_clear("v6_routing")
|
||||
for v6route in self.v6_routes[self.mode]:
|
||||
|
|
@ -93,6 +108,12 @@ class L2Controller(object):
|
|||
net = self.prefix_to_net(v4route['net'], self.v4_mask)
|
||||
self.controller.table_add("v4_routing", "set_egress_port", [net], [v4route['port']])
|
||||
|
||||
self.controller.table_clear("v6_addresses")
|
||||
for v6addr in self.v6_addresses[self.mode]:
|
||||
self.controller.table_add("v6_address", "icmp6_answer", [v6addr['addr']], [v4addr['port']])
|
||||
|
||||
|
||||
|
||||
def config_hosts(self):
|
||||
""" Assumptions:
|
||||
- all routes are networks (no /128 v6 or /32 v4
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue