From 2c6e35be90d1c2e8c8e12b5d867856d4d1826a4d Mon Sep 17 00:00:00 2001 From: Mike Marsh <mmarsh@cs.umd.edu> Date: Mon, 22 Apr 2019 15:59:40 -0400 Subject: [PATCH] I believe star topologies now actually work --- start_testbed.py | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/start_testbed.py b/start_testbed.py index 9b58f8c..5d828c5 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 -- GitLab