def topology(): "Create a network with some docker containers acting as hosts." net = Containernet(controller=Controller) info('*** Adding controller\n') net.addController('c0') info('*** Adding hosts\n') h1 = net.addHost('h1') h2 = net.addHost('h2') info('*** Adding docker containers\n') d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty") d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty", cpu_period=50000, cpu_quota=25000) d3 = net.addHost( 'd3', ip='11.0.0.253', cls=Docker, dimage="ubuntu:trusty", cpu_shares=20) d5 = net.addDocker('d5', dimage="ubuntu:trusty", volumes=["/:/mnt/vol1:rw"]) info('*** Adding switch\n') s1 = net.addSwitch('s1') s2 = net.addSwitch('s2', cls=OVSSwitch) s3 = net.addSwitch('s3') info('*** Creating links\n') net.addLink(h1, s1) net.addLink(s1, d1) net.addLink(h2, s2) net.addLink(d2, s2) net.addLink(s1, s2) #net.addLink(s1, s2, cls=TCLink, delay="100ms", bw=1, loss=10) # try to add a second interface to a docker container net.addLink(d2, s3, params1={"ip": "11.0.0.254/8"}) net.addLink(d3, s3) info('*** Starting network\n') net.start() net.ping([d1, d2]) # our extended ping functionality net.ping([d1], manualdestip="10.0.0.252") net.ping([d2, d3], manualdestip="11.0.0.254") info('*** Dynamically add a container at runtime\n') d4 = net.addDocker('d4', dimage="ubuntu:trusty") # we have to specify a manual ip when we add a link at runtime net.addLink(d4, s1, params1={"ip": "10.0.0.254/8"}) # other options to do this #d4.defaultIntf().ifconfig("10.0.0.254 up") #d4.setIP("10.0.0.254") net.ping([d1], manualdestip="10.0.0.254") info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
def topology(): "Create a network with some docker containers acting as hosts." net = Containernet(controller=Controller) info('*** Adding controller\n') net.addController('c0') info('*** Adding normal Mininet hosts\n') h1 = net.addHost('h1') h2 = net.addHost('h2') info('*** Adding docker containers\n') d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty") d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty") info('*** Adding switch\n') s1 = net.addSwitch('s1') s2 = net.addSwitch('s2') s3 = net.addSwitch('s3') info('*** Creating links\n') net.addLink(h1, s1) net.addLink(h2, s2) net.addLink(d1, s1) net.addLink(d2, s2) net.addLink(s1, s2, cls=TCLink, delay="100ms", bw=1) # we can even add multiple interfaces to a single docker container net.addLink(d2, s3, params1={"ip": "11.0.0.254/24"}) info('*** Starting network\n') net.start() # run a short test net.ping([d1, d2]) info('*** Running CLI\n') CLI(net) # wait for user input info('*** Stopping network') net.stop()
d3 = net.addDocker('d3', dimage="ftpwebvideo:latest") d4 = net.addDocker('d4', dimage="ftpwebvideo:latest") info('*** Adding docker containers\n') d1.start() d2.start() d3.start() d4.start() info('*** Creating links\n') net.addLink(d1, s2, cls=TCLink, delay='0ms', bw=20) net.addLink(d2, s2, cls=TCLink, delay='0ms', bw=20) net.addLink(d3, s3, cls=TCLink, delay='0ms', bw=20) net.addLink(d4, s3, cls=TCLink, delay='0ms', bw=20) net.addLink(s1, s2, cls=TCLink, delay='0ms', bw=40) net.addLink(s1, s3, cls=TCLink, delay='0ms', bw=40) info('*** Starting network\n') net.start() info('*** Testing connectivity\n') net.ping([d2, d1]) net.ping([d3, d1]) net.ping([d4, d1]) info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
d5 = net.addDocker('d5', dimage="containernet_example:centos6") d6 = net.addDocker('d6', dimage="containernet_example:centos7") info('*** Adding switches\n') s1 = net.addSwitch('s1') info('*** Creating links\n') net.addLink(d1, s1) net.addLink(d2, s1) net.addLink(d3, s1) net.addLink(d4, s1) net.addLink(d5, s1) net.addLink(d6, s1) info('*** Starting network\n') net.start() info('*** Testing connectivity\n') net.ping([d2, d1]) net.ping([d3, d1]) net.ping([d4, d1]) net.ping([d5, d1]) net.ping([d6, d1]) info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
info('*** Adding controller\n') net.addController('c0') info('*** Adding docker containers\n') Serv = net.addDocker('Serv', ip='10.0.0.200', dimage=image, dcmd="sh ./server.sh") GI = net.addDocker('GI', ip='10.0.0.201', dimage=image, dcmd="sh ./gi.sh") GF1 = net.addDocker('GF1', ip='10.0.0.202', dimage=image, dcmd="sh ./gf1.sh") GF2 = net.addDocker('GF2', ip='10.0.0.203', dimage=image, dcmd="sh ./gf2.sh") GF3 = net.addDocker('GF3', ip='10.0.0.204', dimage=image, dcmd="sh ./gf3.sh") info('*** Adding switches\n') s1 = net.addSwitch('s1') info('*** Creating links\n') net.addLink(GF1, s1) net.addLink(GF2, s1) net.addLink(GF3, s1) net.addLink(GI, s1) net.addLink(Serv, s1) info('*** Starting network\n') net.start() info('*** Testing connectivity\n') net.ping([GF1, GI]) net.ping([GF2, GI]) net.ping([GF3, GI]) net.ping([Serv, GI]) info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
'Act', ip='10.0.0.101', dimage="kumokay/ubuntu_wifi:v6") #docker_ip=172.18.0.4 info('*** Adding switches\n') s1 = net.addSwitch('s1') info('*** Creating links\n') net.addLink(camera_host, s1) net.addLink(Tx2_host, s1) net.addLink(Actuator_host, s1) info('*** Starting network\n') net.start() info('*** Testing connectivity\n') net.ping([camera_host, Tx2_host]) info('*** Running CLI\n') CLI(net) # Now run the individual container code # Code on TX2 Container: TX address is 172.17.49.168:18801 # Tx2 cd /opt/github/placethings && python main_entity.py run_task -n task_findObj -en task_findObj -a 10.0.0.102:18800 -ra 10.0.0.101:18800 -al offload 172.17.49.168:18801 &> /dev/null & # Code on Camera Container: # Cam cd /opt/github/placethings && python main_entity.py run_task -n task_camera -en task_forward -a 172.18.0.2:18800 -ra 10.0.0.102:18800 &> /dev/null & # Code on Actuator: to forward to the display server # Act cd /opt/github/placethings && python main_entity.py run_task -n task_alert -en task_forward -a 10.0.0.101:18800 -ra 172.17.49.168:18900 &> /dev/null & # We need to run the data forwarder on the Mininet machine
def topology(): "Create a network with some docker containers acting as hosts." net = Containernet(controller=Controller) info('*** Adding controller\n') net.addController('c0', controller=RemoteController, ip=CONTROLLER_IP, port=6653) info('*** Adding hosts\n') h1 = net.addHost('h1') h2 = net.addHost('h2') info('*** Adding docker containers\n') d1 = net.addDocker('d1', ip='10.0.0.251', dimage="host-fluentd:latest", log_driver='fluentd', log_opts={ 'fluentd-address': '{}:24224'.format(FLUENTD_IP), 'tag': 'docker-host-1' }, environment={'FLUENTD_IP': FLUENTD_IP}) d2 = net.addDocker('d2', ip='10.0.0.252', dimage="host-fluentd:latest", cpu_period=50000, cpu_quota=25000, log_driver='fluentd', log_opts={ 'fluentd-address': '{}:24224'.format(FLUENTD_IP), 'tag': 'docker-host-2' }, environment={'FLUENTD_IP': FLUENTD_IP}) d3 = net.addHost('d3', ip='11.0.0.253', cls=Docker, dimage="ubuntu:trusty", cpu_shares=20) # using advanced features like volumes and exposed ports d5 = net.addDocker('d5', dimage="ubuntu:trusty", volumes=["/:/mnt/vol1:rw"], ports=[9999], port_bindings={9999: 9999}, publish_all_ports=True) info('*** Adding switch\n') s1 = net.addSwitch('s1') s2 = net.addSwitch('s2', cls=OVSSwitch) s3 = net.addSwitch('s3') info('*** Creating links\n') net.addLink(h1, s1) net.addLink(s1, d1) net.addLink(h2, s2) net.addLink(d2, s2) net.addLink(s1, s2) # net.addLink(s1, s2, cls=TCLink, delay="100ms", bw=1, loss=10) # try to add a second interface to a docker container net.addLink(d2, s3, params1={"ip": "11.0.0.254/8"}) net.addLink(d3, s3) info('*** Starting network\n') net.start() net.ping([d1, d2]) # our extended ping functionality net.ping([d1], manualdestip="10.0.0.252") net.ping([d2, d3], manualdestip="11.0.0.254") info('*** Dynamically add a container at runtime\n') d4 = net.addDocker('d4', dimage="ubuntu:trusty") # we have to specify a manual ip when we add a link at runtime net.addLink(d4, s1, params1={"ip": "10.0.0.254/8"}) # other options to do this # d4.defaultIntf().ifconfig("10.0.0.254 up") # d4.setIP("10.0.0.254") net.ping([d1], manualdestip="10.0.0.254") info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
from mininet.net import Containernet from mininet.node import Controller from mininet.cli import CLI from mininet.link import TCLink net = Containernet(controller=Controller) net.addController('c0') d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty") d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty") s1 = net.addSwitch('s1') s2 = net.addSwitch('s2') net.addLink(d1, s1) net.addLink(s1, s2, cls=TCLink, delay='100ms', bw=1) net.addLink(s2, d2) net.start() net.ping([d1, d2]) net.stop()
sender open receiver lambda """ from mininet.net import Containernet from mininet.node import Controller from mininet.cli import CLI from mininet.link import TCLink from mininet.log import info, setLogLevel setLogLevel('info') net = Containernet(controller=Controller) info('*** Adding controller\n') net.addController('c0') info('*** Adding docker containers using ubuntu:trusty images\n') d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty") d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty") d3 = net.addDocker('d3', ip='10.0.0.253', dimage="ubuntu:trusty") info('*** Adding switches\n') s1 = net.addSwitch('s1') info('*** Creating links\n') net.addLink(d1, s1) net.addLink(d2, s1) net.addLink(d3, s1) info('*** Starting network\n') net.start() info('*** Testing connectivity\n') net.ping([d1, d2, d3]) info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
# Magic sauce to make the attacker node behave right. There's a # strange behavior that makes it such that the node doesn't # do what it should unless some non-bash command has been run # via the Docker.cmd member or by creating an interative # terminal via docker exec. R4.cmd('ifconfig') WS.cmd('route del default') WS.cmd('route add default gw 13.0.1.254') AWS.cmd('route del default') AWS.cmd('route add default gw 13.0.1.254') C1.cmd('route del default') C1.cmd('route add default gw 11.0.1.254') WS.cmd('/webserver.py &') AWS.cmd("/webserver.py --text 'Attacking Webserver' &") info('*** Starting network\n') net.start() info('*** Stalling for 10 seconds to allow BGP advertisisng \n') time.sleep(10) info('*** Testing connectivity\n') net.ping([R1, R2]) net.ping([R2, R3]) net.ping([C1, WS]) info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
info('*** Adding docker containers\n') node1 = net.addDocker('node1', ip='10.0.0.247', dimage="infoslack/dvwa") node2 = net.addDocker('node2', ip='10.0.0.248', dimage="szsecurity/mutillidae") HP3 = net.addDocker('HP3', ip='10.0.0.249', dimage="peakkk/metasploitable") node4 = net.addDocker('node3', ip='10.0.0.250', dimage="fedora") node5 = net.addDocker('node4', ip='10.0.0.251', dimage="kalilinux/kali-linux-docker") node6 = net.addDocker('node5', ip='10.0.0.252', dimage="jvhoof/badstore-docker") node7 = net.addDocker('node6', ip='10.0.0.253', dimage="ubuntu") info('*** Adding switches\n') s1 = net.addSwitch('s1') info('*** Creating links\n') net.addLink(node1, node2) net.addLink(node2, HP3) net.addLink(node2, s1) net.addLink(s1, node4) net.addLink(s1, node6) net.addLink(node4, node5) net.addLink(node6, node7) info('*** Starting network\n') net.start() info('*** Testing connectivity\n') net.ping([node1, node2]) info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
d[i].cmd('ifconfig d' + str(i + 1) + '-eth1 10.0.0.' + str(last_octet) + ' netmask 255.0.0.0') if i == 0: last_octet += 1 continue if i == (node_count - 1): break Link(d[i], s1, intfName1='d' + str(i + 1) + '-eth2') d[i].cmd('ifconfig d' + str(i + 1) + '-eth2 10.0.0.' + str(100 + last_octet) + ' netmask 255.0.0.0') last_octet += 1 info('*** Starting network\n') net.start() info('*** Testing connectivity\n') for i in range(len(d)): for j in range(len(d)): if i == j: continue net.ping([d[i], d[j]]) info('*** Tuning end-points\n') d[0].cmd('apt update && apt install -y arping tcpdump') #d[1].cmd('apt update && apt install -y bridge-utils tcpdump && ip addr flush dev d2-eth1 && ip addr flush dev d2-eth2 && brctl addbr d2-br1 && brctl addif d2-br1 d2-eth1 d2-eth2 && ip link set dev d2-br1 up') d[node_count - 1].cmd('apt update && apt install -y arping tcpdump') info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
net.addLink(router, wan_switch) c2 = net.addDocker('c2', dimage="cs4404m3t9/c2") net.addLink(c2, wan_switch) client_1 = net.addDocker('client_1', dimage="cs4404m3t9/client") client_2 = net.addDocker('client_2', dimage="cs4404m3t9/client") client_3 = net.addDocker('client_3', dimage="cs4404m3t9/client") net.addLink(client_1, wan_switch) net.addLink(client_2, wan_switch) net.addLink(client_3, wan_switch) net.start() ws.cmd("nohup python3 server.py &") router.cmd('bash entry.sh') net.ping([c2, ws]) net.ping([client_1, ws]) net.ping([client_2, ws]) net.ping([client_3, ws]) net.ping([ws, client_1]) net.ping([ws, client_2]) net.ping([ws, client_2]) net.ping([ws, db]) CLI(net) net.stop()
# TODO # create other links # Hint : net.addLink(d1, s1, cls=TCLink, delay='10ms', bw=5) net.addLink(d2, s1, cls=TCLink, delay='10ms', bw=5) net.addLink(d3, s2, cls=TCLink, delay='10ms', bw=5) net.addLink(d4, s2, cls=TCLink, delay='10ms', bw=5) net.addLink(s1, s3, cls=TCLink, delay='5ms', bw=1) net.addLink(s2, s3, cls=TCLink, delay='5ms', bw=1) info('*** Starting network\n') net.start() info('*** Testing connectivity\n') # you can test connectivity between nodes with: net.ping([d1, d2]) net.ping([d1, d3]) net.ping([d1, d4]) net.ping([d2, d3]) net.ping([d2, d4]) net.ping([d3, d4]) info('*** Setup nodes\n') # start ssh on hosts for host in net.hosts: host.cmd('/usr/sbin/sshd -D &') # TODO # By using d1.cmd('command') you can run `command` on container d1 # Run 'export HADOOP_HOSTS="list of comma separated host for example : `10.0.0.1
net.addLink(d6, s2, cls=TCLink, delay='50ms', bw=1) net.addLink(d7, s2, cls=TCLink, delay='50ms', bw=1) net.addLink(d8, s2, cls=TCLink, delay='50ms', bw=1) ''' info('*** Starting network\n') net.start() info('*** Testing connectivity\n') edgestoping = [] for cluster in cluster_switch: listtoping = [] for anode in ND.get_clusterNodes(cluster): listtoping.append(node_objects[anode]) if ND.get_id(anode) == 'a': edgestoping.append(node_objects[anode]) print("net.ping(" + str(listtoping) + ")") net.ping(listtoping, timeout='1') for node in edgeNodes: node_objects[node].cmd("ip route del default via 172.17.0.1 dev eth0") node_objects[node].cmd('ip route add default via ' + (str(ND.get_ip(node))[0:8] + '0')) net.ping(edgestoping, timeout='1') ''' net.ping([d1, d2, d3, d4]) net.ping([d5, d6, d7, d8]) ''' info('*** Starting Screen Sessions \n') threads_screen = [] for cluster in scnode: threads_screen.append( Thread(target=start_screens, args=(scnode[cluster], cluster)))
net.addLink(d1, s1) net.addLink(d2, s1) net.addLink(d3, s1) net.addLink(d4, s1) net.addLink(d5, s1) net.addLink(d6, s1) net.addLink(d7, s1) net.addLink(d8, s1) net.addLink(d9, s1) net.addLink(d10, s1) info('*** Starting network\n') net.start() info('*** Testing connectivity\n') net.ping([d2, d1]) net.ping([d3, d1]) net.ping([d4, d1]) net.ping([d5, d1]) net.ping([d6, d1]) net.ping([d7, d1]) net.ping([d8, d1]) net.ping([d9, d1]) net.ping([d9, d1]) info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
""" from mininet.net import Containernet from mininet.node import Controller from mininet.cli import CLI from mininet.link import TCLink from mininet.log import info, setLogLevel setLogLevel('info') net = Containernet(controller=Controller) info('*** Adding controller\n') net.addController('c0') info('*** Adding docker containers\n') d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty") d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty") info('*** Adding switches\n') s1 = net.addSwitch('s1') s2 = net.addSwitch('s2') info('*** Creating links\n') net.addLink(d1, s1) net.addLink(s1, s2, cls=TCLink, delay='100ms', bw=1) net.addLink(s2, d2) info('*** Starting network\n') net.start() info('*** Testing connectivity\n') net.ping([d1, d2]) info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
# Link routers to their associated AS switches net.addLink(R1,s1,params1={"ip":"11.0.0.1/24"}) net.addLink(R2,s2,params1={"ip":"12.0.0.1/24"}) net.addLink(R3,s3,params1={"ip":"13.0.0.1/24"}) # Link hosts to their AS switches net.addLink(WS,s3,params1={"ip":"13.0.0.2/24"}) net.addLink(C1,s1,params1={"ip":"11.0.0.2/24"}) R1.cmd('/start.sh &') R2.cmd('/start.sh &') R3.cmd('/start.sh &') WS.cmd('route add default gw 13.0.0.1') C1.cmd('route add default gw 11.0.0.1') info('*** Starting network\n') net.start() info('*** Stalling for 5 seconds to allow BGP advertisisng \n') time.sleep(5) info('*** Testing connectivity\n') net.ping([R1, R2]) net.ping([R2, R3]) net.ping([R1, R3]) info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
bw=1) net.addLink(s3, router, intfName2='r0-eth3', params2={'ip': '12.0.0.10/8'}, delay='10000ms', bw=1) net.addLink(s4, router, intfName2='r0-eth4', params2={'ip': '13.0.0.10/8'}, delay='10000ms', bw=1) #net.addLink(s2, s3, cls=TCLink, delay='100ms', bw=1) #net.addLink(s3, s4, cls=TCLink, delay='100ms', bw=1) #net.addLink(s4, s1, cls=TCLink, delay='100ms', bw=1) #net.addLink(s2, d2) info('*** Starting network\n') net.start() info('*** Testing connectivity\n') net.ping([d1, d2, d3, d4, d5]) net.ping([d6, d7, d8, d9, d10]) net.ping([d11, d12, d13, d14, d15]) net.ping([d16, d17, d18, d19, d20]) net.ping([d1, d6, d11, d16]) info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
net.addLink(s2, d21, cls=TCLink, delay='10ms', bw=5) net.addLink(s2, d22, cls=TCLink, delay='10ms', bw=5) net.addLink(s3, d31, cls=TCLink, delay='10ms', bw=5) net.addLink(s3, d32, cls=TCLink, delay='10ms', bw=5) info('*** Starting network\n') net.start() d21.cmd('ifconfig d21-eth0 10.0.0.21') d22.cmd('ifconfig d22-eth0 10.0.0.22') d31.cmd('ifconfig d31-eth0 10.0.0.31') d32.cmd('ifconfig d32-eth0 10.0.0.32') info('*** Testing connectivity\n') net.ping([d21, d22, d31, d32]) info('*** Setup nodes\n') d21.cmd('export MY_ROLE="master"') for host in net.hosts: host.cmd('/usr/sbin/sshd -D &') for host in net.hosts: host.cmd( 'export HADOOP_HOSTS="10.0.0.21 master,10.0.0.22 slave22,10.0.0.31 slave31,10.0.0.32 slave32"' ) for host in reversed(net.hosts): host.cmd('/$HADOOP_HOME/etc/hadoop/start.sh > result')
def emulate(): "Create a network with some docker containers acting as hosts." net = Containernet(controller=Controller) info('*** Adding controller\n') net.addController('c0') info('*** Adding hosts\n') h1 = net.addHost('h1') h2 = net.addHost('h2') info('*** Adding docker containers\n') d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty") # A container with more specific params: cpu period and cpu quota d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty", cpu_period=50000, cpu_quota=25000) # Add a container as a host, using Docker class option. d3 = net.addHost('d3', ip='11.0.0.253', cls=Docker, dimage="ubuntu:trusty", cpu_shares=20) # Add a container with a specific volume. d5 = net.addDocker('d5', dimage="ubuntu:trusty", volumes=["/:/mnt/vol1:rw"]) info('*** Adding switch\n') s1 = net.addSwitch('s1') s2 = net.addSwitch('s2', cls=OVSSwitch) s3 = net.addSwitch('s3') info('*** Creating links\n') net.addLink(h1, s1) net.addLink(s1, d1) net.addLink(h2, s2) net.addLink(d2, s2) net.addLink(s1, s2) # try to add a second interface to a docker container net.addLink(d2, s3, params1={"ip": "11.0.0.254/8"}) net.addLink(d3, s3) info('*** Starting network\n') net.start() # The typical ping example, with two docker instances in place of hosts. net.ping([d1, d2]) # our extended ping functionality net.ping([d1], manualdestip="10.0.0.252") net.ping([d2, d3], manualdestip="11.0.0.254") info('*** Dynamically add a container at runtime\n') d4 = net.addDocker('d4', dimage="ubuntu:trusty") # we have to specify a manual ip when we add a link at runtime net.addLink(d4, s1, params1={"ip": "10.0.0.254/8"}) # Ping docker instance d1. net.ping([d1], manualdestip="10.0.0.254") info('*** Running CLI\n') CLI(net) info('*** Stopping network') net.stop()
info('*** Creating links\n') net.addLink(s1, s2, cls=TCLink, delay='50ms', bw=1) net.addLink(s1, s3, cls=TCLink, delay='50ms', bw=1) net.addLink(s2, d21, cls=TCLink, delay='10ms', bw=5) net.addLink(s2, d22, cls=TCLink, delay='10ms', bw=5) net.addLink(s3, d31, cls=TCLink, delay='10ms', bw=5) net.addLink(s3, d32, cls=TCLink, delay='10ms', bw=5) info('*** Starting network\n') net.start() info('*** Testing connectivity\n') net.ping([d21, d22]) net.ping([d21, d31]) net.ping([d21, d32]) net.ping([d31, d21]) net.ping([d31, d22]) net.ping([d31, d32]) net.ping([d32, d21]) net.ping([d32, d22]) net.ping([d32, d31]) info('*** Setup nodes\n') d21.cmd('export MY_ROLE="master"') for host in net.hosts: