diff --git a/start_testbed.py b/start_testbed.py index 9b58f8cef6cc31d11e7d99f4be53f4984b07575f..5d828c5368b51f1c61d4147b83a1456e4d9afee5 100755 --- a/start_testbed.py +++ b/start_testbed.py @@ -44,7 +44,7 @@ def make_route(f,net,fdev): 'src', f['addr'] ]) -def connect_nodes(node1, node2): +def connect_nodes(node1, node2, route_subnet=False): ctr1 = nodelist[node1] ctr2 = nodelist[node2] print ctr1, ctr2 @@ -88,6 +88,8 @@ def connect_nodes(node1, node2): make_route(f,t['addr']+'/32',fdev) route_from_to(ctr1,ctr2,dev_1) route_from_to(ctr2,ctr1,dev_2) + if route_subnet: + make_route(ctr2,subnet,dev_2) # Configure the link for network emulation. def enable_netem(ns, dev): @@ -98,6 +100,7 @@ def connect_nodes(node1, node2): ]) enable_netem(ctr1['name'],dev_1) enable_netem(ctr2['name'],dev_2) + return (dev_1,dev_2) def make_mesh(): @@ -110,10 +113,30 @@ def make_mesh(): def make_star(): global nodelist def get_dev(i): - return 'bac0_{i}_0'.format(i=i) + return '{name}_{i}_0'.format(name=ntwk['name'],i=i) + bridge_ns = nodelist[0]['name'] + bridge_dev = '{}_bridge'.format(bridge_ns) + bridge_addr = nodelist[0]['addr'] + subprocess.call([ + 'sudo', 'ip', 'netns', 'exec', bridge_ns, + 'brctl', 'addbr', bridge_dev + ]) + subprocess.call([ + 'sudo', 'ip', 'netns', 'exec', bridge_ns, + 'ip', 'address', 'add', 'dev', bridge_dev, 'local', bridge_addr + ]) + subprocess.call([ + 'sudo', 'ip', 'netns', 'exec', bridge_ns, + 'ip', 'link', 'set', 'dev', bridge_dev, 'up' + ]) + num_nodes = len(nodelist) - [ connect_nodes(0,n) for n in range(1,num_nodes) ] - [ make_route(n,subnet,get_dev(n)) for n in range(1,num_nodes) ] + devs = [ connect_nodes(0,n,True)[0] for n in range(1,num_nodes) ] + for d in devs: + subprocess.call([ + 'sudo', 'ip', 'netns', 'exec', bridge_ns, + 'brctl', 'addif', bridge_dev, d + ]) def start_node(base_name,i): global nodelist