Begin to implement egress handling, make controller usable, update notes
This commit is contained in:
parent
214ccd4479
commit
bec7dc548e
5 changed files with 81 additions and 7 deletions
|
|
@ -12,6 +12,9 @@ import sys
|
|||
import re
|
||||
|
||||
import logging
|
||||
import argparse
|
||||
import ipaddress
|
||||
|
||||
logging.basicConfig()
|
||||
log = logging.getLogger("main")
|
||||
|
||||
|
|
@ -20,6 +23,18 @@ class L2Controller(object):
|
|||
self.init_boilerplate(sw_name)
|
||||
self.init()
|
||||
|
||||
self.modes = ['base']
|
||||
|
||||
# Network / egress
|
||||
self.v6_routes = {}
|
||||
self.v6_routes['base'] = []
|
||||
self.v6_routes['base'].append({ "net": "2001:db8:61::/64", "port": "1"})
|
||||
self.v6_routes['base'].append({ "net": "2001:db8:62::/64", "port": "2"})
|
||||
self.v4_routes = {}
|
||||
self.v4_routes['base'] = []
|
||||
self.v4_routes['base'].append({ "net": "10.0.41.0/24", "port": "3"})
|
||||
self.v4_routes['base'].append({ "net": "10.0.42.0/24", "port": "4"})
|
||||
|
||||
def init_boilerplate(self, sw_name):
|
||||
self.topo = Topology(db="topology.db")
|
||||
self.sw_name = sw_name
|
||||
|
|
@ -31,6 +46,7 @@ class L2Controller(object):
|
|||
def init(self):
|
||||
self.controller.reset_state()
|
||||
self.fill_tables()
|
||||
self.config_hosts()
|
||||
self.add_mirror()
|
||||
|
||||
def add_mirror(self):
|
||||
|
|
@ -38,6 +54,17 @@ class L2Controller(object):
|
|||
self.controller.mirroring_add(100, self.cpu_port)
|
||||
|
||||
def fill_tables(self):
|
||||
for v6route in self.v6_routes[self.mode]:
|
||||
self.controller.table_add("v6_routing", "set_egress_port", [v6route['net']], [v6route['port']])
|
||||
|
||||
for v4route in self.v4_routes[self.mode]:
|
||||
self.controller.table_add("v4_routing", "set_egress_port", [v4route['net']], [v4route['port']])
|
||||
|
||||
def config_hosts(self):
|
||||
""" Assumptions:
|
||||
- all routes are networks (no /128 v6 or /32 v4
|
||||
- hosts get the first ip address in the network
|
||||
"""
|
||||
pass
|
||||
|
||||
def debug_print_pkg(self, pkg, msg="INCOMING"):
|
||||
|
|
@ -78,6 +105,13 @@ class L2Controller(object):
|
|||
def run_cpu_port_loop(self):
|
||||
sniff(iface=self.intf, prn=self.recv_msg_cpu)
|
||||
|
||||
def commandline(self):
|
||||
parser = argparse.ArgumentParser(description='controller++')
|
||||
parser.add_argument('--mode', help='Select mode / settings to use', choices=self.modes)
|
||||
args = parser.parse_args()
|
||||
self.mode = args.mode
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
import os
|
||||
|
|
@ -91,4 +125,7 @@ if __name__ == "__main__":
|
|||
log.debug("Debug enabled.")
|
||||
|
||||
sw_name = "s1"
|
||||
controller = L2Controller(sw_name).run_cpu_port_loop()
|
||||
controller = L2Controller(sw_name)
|
||||
|
||||
controller.commandline()
|
||||
controller.run_cpu_port_loop()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue