fix tc commands cleaning
This commit is contained in:
parent
345e7a0c57
commit
8058dfd961
42
core/topo.py
42
core/topo.py
@ -73,37 +73,41 @@ class LinkCharacteristics(object):
|
|||||||
else:
|
else:
|
||||||
logging.error("{}: not taken into account because not specified in order in the topo param file".format(n))
|
logging.error("{}: not taken into account because not specified in order in the topo param file".format(n))
|
||||||
|
|
||||||
def build_bandwidth_cmd(self, ifname):
|
def build_delete_tc_cmd(self, ifname):
|
||||||
return "tc qdisc del {} root ; tc qdisc add dev {} root handle 5:0 tbf rate {}mbit burst 15000 limit {}".format(
|
return "tc qdisc del dev {} root; tc qdisc del dev {} ingress ".format(ifname, ifname)
|
||||||
ifname, ifname, self.bandwidth, self.buffer_size())
|
|
||||||
|
def build_bandwidth_cmd(self, ifname, change=False):
|
||||||
|
return "tc qdisc {} dev {} root handle 5:0 tbf rate {}mbit burst 15000 limit {}".format(
|
||||||
|
"change" if change else "add", ifname, self.bandwidth, self.buffer_size())
|
||||||
|
|
||||||
def build_changing_bandwidth_cmd(self, ifname):
|
def build_changing_bandwidth_cmd(self, ifname):
|
||||||
return "&&".join(
|
return "&&".join(
|
||||||
["sleep {} && {} ".format(
|
["sleep {} && {} ".format(
|
||||||
n.delta, self.build_bandwidth_cmd(ifname)) for n in self.netem_at]
|
n.delta, self.build_bandwidth_cmd(ifname, change=True)) for n in self.netem_at]
|
||||||
+ ["true &"]
|
+ ["true &"]
|
||||||
)
|
)
|
||||||
|
|
||||||
def build_netem_cmd(self, ifname, cmd):
|
def build_netem_cmd(self, ifname, cmd, change=False):
|
||||||
return "tc qdisc del dev {} root ; tc qdisc add dev {} root handle 10: netem {} delay {}ms limit 50000".format(
|
return "tc qdisc {} dev {} root handle 10: netem {} delay {}ms limit 50000".format(
|
||||||
ifname, ifname, cmd, self.delay)
|
"change" if change else "add", ifname, cmd, self.delay)
|
||||||
|
|
||||||
def build_changing_netem_cmd(self, ifname):
|
def build_changing_netem_cmd(self, ifname):
|
||||||
return "&&".join(
|
return "&&".join(
|
||||||
["sleep {} && {} ".format(
|
["sleep {} && {} ".format(
|
||||||
n.delta, self.build_netem_cmd(ifname, n.cmd)) for n in self.netem_at]
|
n.delta, self.build_netem_cmd(ifname, n.cmd, change=True)) for n in self.netem_at]
|
||||||
+ ["true &"]
|
+ ["true &"]
|
||||||
)
|
)
|
||||||
|
|
||||||
def build_policing_cmd(self, ifname):
|
def build_policing_cmd(self, ifname, change=False):
|
||||||
return "tc qdisc del dev {} ingress ; tc qdisc add dev {} handle ffff: ingress ; \
|
return "tc qdisc {} dev {} handle ffff: ingress ; \
|
||||||
tc filter add dev {} parent ffff: u32 match u32 0 0 police rate {}mbit burst {} drop".format(
|
tc filter {} dev {} parent ffff: u32 match u32 0 0 police rate {}mbit burst {} drop".format(
|
||||||
ifname, ifname, ifname, self.bandwidth, int(self.buffer_size()) * 1.2)
|
"change" if change else "add", ifname, "change" if change else "add", ifname,
|
||||||
|
self.bandwidth, int(self.buffer_size()) * 1.2)
|
||||||
|
|
||||||
def build_changing_policing_cmd(self, ifname):
|
def build_changing_policing_cmd(self, ifname):
|
||||||
return "&&".join(
|
return "&&".join(
|
||||||
["sleep {} && {} ".format(
|
["sleep {} && {} ".format(
|
||||||
n.delta, self.build_policing_cmd(ifname)) for n in self.netem_at]
|
n.delta, self.build_policing_cmd(ifname, change=True)) for n in self.netem_at]
|
||||||
+ ["true &"]
|
+ ["true &"]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -254,6 +258,18 @@ class BottleneckLink(object):
|
|||||||
def configure_bottleneck(self):
|
def configure_bottleneck(self):
|
||||||
bs1_interface_names = self.topo.get_interface_names(self.bs1)
|
bs1_interface_names = self.topo.get_interface_names(self.bs1)
|
||||||
bs2_interface_names = self.topo.get_interface_names(self.bs2)
|
bs2_interface_names = self.topo.get_interface_names(self.bs2)
|
||||||
|
|
||||||
|
# Cleanup tc commands
|
||||||
|
for bs1_ifname in bs1_interface_names:
|
||||||
|
clean_cmd = self.link_characteristics.build_delete_tc_cmd(bs1_ifname)
|
||||||
|
logging.info(clean_cmd)
|
||||||
|
self.topo.command_top(self.bs1, clean_cmd)
|
||||||
|
|
||||||
|
for bs2_ifname in bs2_interface_names:
|
||||||
|
clean_cmd = self.link_characteristics.build_delete_tc_cmd(bs2_ifname)
|
||||||
|
logging.info(clean_cmd)
|
||||||
|
self.topo.command_top(self.bs2, clean_cmd)
|
||||||
|
|
||||||
# Flow bs0 -> bs3
|
# Flow bs0 -> bs3
|
||||||
policing_cmd = self.link_characteristics.build_policing_cmd(bs1_interface_names[0])
|
policing_cmd = self.link_characteristics.build_policing_cmd(bs1_interface_names[0])
|
||||||
logging.info(policing_cmd)
|
logging.info(policing_cmd)
|
||||||
|
Loading…
Reference in New Issue
Block a user