Skip to content
Snippets Groups Projects
Commit 385a03bd authored by Mike Marsh's avatar Mike Marsh
Browse files

we have a star network!

This seemed to require less futzing than it did previously...
parent 808e4fa6
No related branches found
No related tags found
No related merge requests found
...@@ -23,6 +23,7 @@ base_addr = reduce( ...@@ -23,6 +23,7 @@ base_addr = reduce(
lambda a,b : a*256+b, lambda a,b : a*256+b,
[ int(q) for q in ntwk['subnet_addr'].split('.') ] [ int(q) for q in ntwk['subnet_addr'].split('.') ]
) )
subnet = ntwk['subnet_addr']+'/'+str(ntwk['subnet_len'])
nodelist = list() nodelist = list()
...@@ -33,6 +34,14 @@ def make_ip(i): ...@@ -33,6 +34,14 @@ def make_ip(i):
masks = [ 24, 16, 8, 0 ] masks = [ 24, 16, 8, 0 ]
return '.'.join([ str((addr>>mask)&0xFF) for mask in masks ]) return '.'.join([ str((addr>>mask)&0xFF) for mask in masks ])
def make_route(f,net,fdev):
subprocess.call([
'sudo', 'ip', 'netns', 'exec', f['name'],
'ip', 'route', 'add', net,
'dev', fdev, 'proto', 'static', 'scope', 'global',
'src', f['addr']
])
def connect_nodes(node1, node2): def connect_nodes(node1, node2):
ctr1 = nodelist[node1] ctr1 = nodelist[node1]
ctr2 = nodelist[node2] ctr2 = nodelist[node2]
...@@ -73,13 +82,7 @@ def connect_nodes(node1, node2): ...@@ -73,13 +82,7 @@ def connect_nodes(node1, node2):
# Set initial routes. # Set initial routes.
def route_from_to(f,t,fdev): def route_from_to(f,t,fdev):
# $ctx ip route add $net dev $dev proto static scope global src $addr make_route(f,t['addr']+'/32',fdev)
subprocess.call([
'sudo', 'ip', 'netns', 'exec', f['name'],
'ip', 'route', 'add', t['addr']+'/32',
'dev', fdev, 'proto', 'static', 'scope', 'global',
'src', f['addr']
])
route_from_to(ctr1,ctr2,dev_1) route_from_to(ctr1,ctr2,dev_1)
route_from_to(ctr2,ctr1,dev_2) route_from_to(ctr2,ctr1,dev_2)
...@@ -92,7 +95,12 @@ def make_mesh(): ...@@ -92,7 +95,12 @@ def make_mesh():
for n2 in range(n1+1,num_nodes) ] for n2 in range(n1+1,num_nodes) ]
def make_star(): def make_star():
pass global nodelist
def get_dev(i):
return 'bac0_{i}_0'.format(i=i)
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) ]
def start_node(base_name,i): def start_node(base_name,i):
global nodelist global nodelist
...@@ -137,6 +145,8 @@ def start_node(base_name,i): ...@@ -137,6 +145,8 @@ def start_node(base_name,i):
for n in range(ntwk['num_nodes']): for n in range(ntwk['num_nodes']):
start_node(ntwk['name'],n) start_node(ntwk['name'],n)
# XXX - need to check if we're a star or mesh network, and call the appropriate function if ntwk['topology'] == 'mesh':
make_mesh() make_mesh()
else:
make_star()
...@@ -26,6 +26,8 @@ def stop_node(name,i): ...@@ -26,6 +26,8 @@ def stop_node(name,i):
retval = subprocess.call(command) retval = subprocess.call(command)
command = ['docker', 'rm', ctr_name ] command = ['docker', 'rm', ctr_name ]
retval = subprocess.call(command) retval = subprocess.call(command)
command = ['sudo', 'rm', '/var/run/netns/'+ctr_name]
retval = subprocess.call(command)
for i in range(ntwk['num_nodes']): for i in range(ntwk['num_nodes']):
stop_node(ntwk['name'],i) stop_node(ntwk['name'],i)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment