fixes issues with interface names
This commit is contained in:
parent
f3bb2fc72e
commit
55a9d91893
70
core/topo.py
70
core/topo.py
@ -250,62 +250,60 @@ class BottleneckLink(object):
|
|||||||
topo_builder.add_link(self.bs2, self.bs3)
|
topo_builder.add_link(self.bs2, self.bs3)
|
||||||
|
|
||||||
def configure_bottleneck(self):
|
def configure_bottleneck(self):
|
||||||
bs1 = self.topo.get_host(self.bs1)
|
bs1_interface_names = self.topo.get_interface_names(self.bs1)
|
||||||
bs2 = self.topo.get_host(self.bs2)
|
bs2_interface_names = self.topo.get_interface_names(self.bs2)
|
||||||
# NOTE: bs1.intfNames()[0] is lo...
|
|
||||||
# Flow bs0 -> bs3
|
# Flow bs0 -> bs3
|
||||||
# Only once
|
# Only once
|
||||||
clean_policing_cmd = self.link_characteristics.clean_policing_cmd(bs1.intfNames()[1])
|
clean_policing_cmd = self.link_characteristics.clean_policing_cmd(bs1_interface_names[0])
|
||||||
logging.info(clean_policing_cmd)
|
logging.info(clean_policing_cmd)
|
||||||
self.topo.command_to(bs1, clean_policing_cmd)
|
self.topo.command_to(self.bs1, clean_policing_cmd)
|
||||||
policing_cmd = self.link_characteristics.build_policing_cmd(bs1.intfNames()[1])
|
policing_cmd = self.link_characteristics.build_policing_cmd(bs1_interface_names[0])
|
||||||
logging.info(policing_cmd)
|
logging.info(policing_cmd)
|
||||||
self.topo.command_to(bs1, policing_cmd)
|
self.topo.command_to(self.bs1, policing_cmd)
|
||||||
shaping_cmd = self.link_characteristics.build_bandwidth_cmd(bs1.intfNames()[-1])
|
shaping_cmd = self.link_characteristics.build_bandwidth_cmd(bs1_interface_names[-1])
|
||||||
logging.info(shaping_cmd)
|
logging.info(shaping_cmd)
|
||||||
self.topo.command_to(bs1, shaping_cmd)
|
self.topo.command_to(self.bs1, shaping_cmd)
|
||||||
netem_cmd = self.link_characteristics.build_netem_cmd(bs2.intfNames()[-1],
|
netem_cmd = self.link_characteristics.build_netem_cmd(bs2_interface_names[-1],
|
||||||
"loss {}".format(self.link_characteristics.loss))
|
"loss {}".format(self.link_characteristics.loss))
|
||||||
logging.info(netem_cmd)
|
logging.info(netem_cmd)
|
||||||
self.topo.command_to(bs2, netem_cmd)
|
self.topo.command_to(self.bs2, netem_cmd)
|
||||||
|
|
||||||
# Flow bs3 -> bs0
|
# Flow bs3 -> bs0
|
||||||
policing_cmd = self.link_characteristics.build_policing_cmd(bs2.intfNames()[-1])
|
policing_cmd = self.link_characteristics.build_policing_cmd(bs2_interface_names[-1])
|
||||||
logging.info(policing_cmd)
|
logging.info(policing_cmd)
|
||||||
self.topo.command_to(bs2, policing_cmd)
|
self.topo.command_to(self.bs2, policing_cmd)
|
||||||
shaping_cmd = self.link_characteristics.build_bandwidth_cmd(bs2.intfNames()[1])
|
shaping_cmd = self.link_characteristics.build_bandwidth_cmd(bs2_interface_names[0])
|
||||||
logging.info(shaping_cmd)
|
logging.info(shaping_cmd)
|
||||||
self.topo.command_to(bs2, shaping_cmd)
|
self.topo.command_to(self.bs2, shaping_cmd)
|
||||||
netem_cmd = self.link_characteristics.build_netem_cmd(bs1.intfNames()[1],
|
netem_cmd = self.link_characteristics.build_netem_cmd(bs1_interface_names[0],
|
||||||
"loss {}".format(self.link_characteristics.loss))
|
"loss {}".format(self.link_characteristics.loss))
|
||||||
logging.info(netem_cmd)
|
logging.info(netem_cmd)
|
||||||
self.topo.command_to(bs1, netem_cmd)
|
self.topo.command_to(self.bs1, netem_cmd)
|
||||||
|
|
||||||
def configure_changing_bottleneck(self):
|
def configure_changing_bottleneck(self):
|
||||||
bs1 = self.topo.get_host(self.bs1)
|
bs1_interface_names = self.topo.get_interface_names(self.bs1)
|
||||||
bs2 = self.topo.get_host(self.bs2)
|
bs2_interface_names = self.topo.get_interface_names(self.bs2)
|
||||||
# NOTE: bs1.intfNames()[0] is lo...
|
|
||||||
# Flow bs0 -> bs3
|
# Flow bs0 -> bs3
|
||||||
policing_cmd = self.link_characteristics.build_changing_policing_cmd(bs1.intfNames()[1])
|
policing_cmd = self.link_characteristics.build_changing_policing_cmd(bs1_interface_names[0])
|
||||||
logging.info(policing_cmd)
|
logging.info(policing_cmd)
|
||||||
self.topo.command_to(bs1, policing_cmd)
|
self.topo.command_to(self.bs1, policing_cmd)
|
||||||
shaping_cmd = self.link_characteristics.build_changing_bandwidth_cmd(bs1.intfNames()[-1])
|
shaping_cmd = self.link_characteristics.build_changing_bandwidth_cmd(bs1_interface_names[-1])
|
||||||
logging.info(shaping_cmd)
|
logging.info(shaping_cmd)
|
||||||
self.topo.command_to(bs1, shaping_cmd)
|
self.topo.command_to(self.bs1, shaping_cmd)
|
||||||
netem_cmd = self.link_characteristics.build_changing_netem_cmd(bs2.intfNames()[-1])
|
netem_cmd = self.link_characteristics.build_changing_netem_cmd(bs2_interface_names[-1])
|
||||||
logging.info(netem_cmd)
|
logging.info(netem_cmd)
|
||||||
self.topo.command_to(bs2, netem_cmd)
|
self.topo.command_to(self.bs2, netem_cmd)
|
||||||
|
|
||||||
# Flow bs3 -> bs0
|
# Flow bs3 -> bs0
|
||||||
policing_cmd = self.link_characteristics.build_changing_policing_cmd(bs2.intfNames()[-1])
|
policing_cmd = self.link_characteristics.build_changing_policing_cmd(bs2_interface_names[-1])
|
||||||
logging.info(policing_cmd)
|
logging.info(policing_cmd)
|
||||||
self.topo.command_to(bs2, policing_cmd)
|
self.topo.command_to(self.bs2, policing_cmd)
|
||||||
shaping_cmd = self.link_characteristics.build_changing_bandwidth_cmd(bs2.intfNames()[1])
|
shaping_cmd = self.link_characteristics.build_changing_bandwidth_cmd(bs2_interface_names[0])
|
||||||
logging.info(shaping_cmd)
|
logging.info(shaping_cmd)
|
||||||
self.topo.command_to(bs2, shaping_cmd)
|
self.topo.command_to(self.bs2, shaping_cmd)
|
||||||
netem_cmd = self.link_characteristics.build_changing_netem_cmd(bs1.intfNames()[1])
|
netem_cmd = self.link_characteristics.build_changing_netem_cmd(bs1_interface_names[0])
|
||||||
logging.info(netem_cmd)
|
logging.info(netem_cmd)
|
||||||
self.topo.command_to(bs1, netem_cmd)
|
self.topo.command_to(self.bs1, netem_cmd)
|
||||||
|
|
||||||
def get_left(self):
|
def get_left(self):
|
||||||
return self.bs0
|
return self.bs0
|
||||||
@ -390,6 +388,9 @@ class Topo(object):
|
|||||||
def get_host(self, who):
|
def get_host(self, who):
|
||||||
return self.topo_builder.get_host(who)
|
return self.topo_builder.get_host(who)
|
||||||
|
|
||||||
|
def get_interface_names(self, who):
|
||||||
|
return self.topo_builder.get_interface_names(who)
|
||||||
|
|
||||||
def add_host(self, host):
|
def add_host(self, host):
|
||||||
return self.topo_builder.add_host(host)
|
return self.topo_builder.add_host(host)
|
||||||
|
|
||||||
@ -448,12 +449,11 @@ class TopoConfig(object):
|
|||||||
Disable TSO on all interfaces
|
Disable TSO on all interfaces
|
||||||
"""
|
"""
|
||||||
for node in self.topo.topo_builder.net:
|
for node in self.topo.topo_builder.net:
|
||||||
n = self.topo.get_host(node)
|
for intf in self.topo.get_interface_names(node):
|
||||||
for intf in n.intfNames():
|
|
||||||
logging.info("Disable TSO on interface {}".format(intf))
|
logging.info("Disable TSO on interface {}".format(intf))
|
||||||
cmd = "ethtool -K {} tso off".format(intf)
|
cmd = "ethtool -K {} tso off".format(intf)
|
||||||
logging.info(cmd)
|
logging.info(cmd)
|
||||||
self.topo.command_to(n, cmd)
|
self.topo.command_to(node, cmd)
|
||||||
|
|
||||||
def run_netem_at(self):
|
def run_netem_at(self):
|
||||||
"""
|
"""
|
||||||
|
@ -54,6 +54,11 @@ class MininetBuilder(Topo):
|
|||||||
else:
|
else:
|
||||||
return self.net.getNodeByName(who)
|
return self.net.getNodeByName(who)
|
||||||
|
|
||||||
|
def get_interface_names(self, who):
|
||||||
|
# NOTE: bs1.intfNames()[0] is lo...
|
||||||
|
host = self.get_host(who)
|
||||||
|
return [i for i in host.intfNames() if i != "lo"]
|
||||||
|
|
||||||
def add_host(self, host):
|
def add_host(self, host):
|
||||||
return self.addHost(host)
|
return self.addHost(host)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user