updated linkconfig to use string commands, fixed issues for wlan configuration
This commit is contained in:
parent
02ef91242e
commit
5b3308a231
4 changed files with 27 additions and 28 deletions
|
@ -1425,7 +1425,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
parsed_config = ConfigShim.str_to_dict(values_str)
|
parsed_config = ConfigShim.str_to_dict(values_str)
|
||||||
|
|
||||||
self.session.mobility.set_model_config(node_id, object_name, parsed_config)
|
self.session.mobility.set_model_config(node_id, object_name, parsed_config)
|
||||||
if self.session.state == EventTypes.RUNTIME_STATE.value:
|
if self.session.state == EventTypes.RUNTIME_STATE.value and parsed_config:
|
||||||
try:
|
try:
|
||||||
node = self.session.get_node(node_id)
|
node = self.session.get_node(node_id)
|
||||||
if object_name == BasicRangeModel.name:
|
if object_name == BasicRangeModel.name:
|
||||||
|
|
|
@ -426,7 +426,7 @@ class BasicRangeModel(WirelessModel):
|
||||||
self.delay = int(config["delay"])
|
self.delay = int(config["delay"])
|
||||||
if self.delay == 0:
|
if self.delay == 0:
|
||||||
self.delay = None
|
self.delay = None
|
||||||
self.loss = int(config["error"])
|
self.loss = int(float(config["error"]))
|
||||||
if self.loss == 0:
|
if self.loss == 0:
|
||||||
self.loss = None
|
self.loss = None
|
||||||
self.jitter = int(config["jitter"])
|
self.jitter = int(config["jitter"])
|
||||||
|
|
|
@ -122,7 +122,7 @@ class LinuxNetClient(object):
|
||||||
:param str device: device to remove tc
|
:param str device: device to remove tc
|
||||||
:return: nothing
|
:return: nothing
|
||||||
"""
|
"""
|
||||||
self.run("%s qdisc del dev %s root" % (TC_BIN, device))
|
self.run("%s qdisc delete dev %s root" % (TC_BIN, device))
|
||||||
|
|
||||||
def checksums_off(self, interface_name):
|
def checksums_off(self, interface_name):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -8,8 +8,8 @@ import threading
|
||||||
import time
|
import time
|
||||||
from socket import AF_INET, AF_INET6
|
from socket import AF_INET, AF_INET6
|
||||||
|
|
||||||
from core import constants, utils
|
from core import utils
|
||||||
from core.constants import EBTABLES_BIN
|
from core.constants import EBTABLES_BIN, TC_BIN
|
||||||
from core.emulator import distributed
|
from core.emulator import distributed
|
||||||
from core.emulator.data import LinkData
|
from core.emulator.data import LinkData
|
||||||
from core.emulator.enumerations import LinkTypes, NodeTypes, RegisterTlvs
|
from core.emulator.enumerations import LinkTypes, NodeTypes, RegisterTlvs
|
||||||
|
@ -457,8 +457,8 @@ class CoreNetwork(CoreNetworkBase):
|
||||||
"""
|
"""
|
||||||
if devname is None:
|
if devname is None:
|
||||||
devname = netif.localname
|
devname = netif.localname
|
||||||
tc = [constants.TC_BIN, "qdisc", "replace", "dev", devname]
|
tc = "%s qdisc replace dev %s" % (TC_BIN, devname)
|
||||||
parent = ["root"]
|
parent = "root"
|
||||||
changed = False
|
changed = False
|
||||||
if netif.setparam("bw", bw):
|
if netif.setparam("bw", bw):
|
||||||
# from tc-tbf(8): minimum value for burst is rate / kernel_hz
|
# from tc-tbf(8): minimum value for burst is rate / kernel_hz
|
||||||
|
@ -466,27 +466,24 @@ class CoreNetwork(CoreNetworkBase):
|
||||||
burst = max(2 * netif.mtu, bw / 1000)
|
burst = max(2 * netif.mtu, bw / 1000)
|
||||||
# max IP payload
|
# max IP payload
|
||||||
limit = 0xFFFF
|
limit = 0xFFFF
|
||||||
tbf = ["tbf", "rate", str(bw), "burst", str(burst), "limit", str(limit)]
|
tbf = "tbf rate %s burst %s limit %s" % (bw, burst, limit)
|
||||||
if bw > 0:
|
if bw > 0:
|
||||||
if self.up:
|
if self.up:
|
||||||
logging.debug(
|
cmd = "%s %s handle 1: %s" % (tc, parent, tbf)
|
||||||
"linkconfig: %s" % ([tc + parent + ["handle", "1:"] + tbf],)
|
netif.net_cmd(cmd)
|
||||||
)
|
|
||||||
netif.net_cmd(tc + parent + ["handle", "1:"] + tbf)
|
|
||||||
netif.setparam("has_tbf", True)
|
netif.setparam("has_tbf", True)
|
||||||
changed = True
|
changed = True
|
||||||
elif netif.getparam("has_tbf") and bw <= 0:
|
elif netif.getparam("has_tbf") and bw <= 0:
|
||||||
tcd = [] + tc
|
|
||||||
tcd[2] = "delete"
|
|
||||||
if self.up:
|
if self.up:
|
||||||
netif.net_cmd(tcd + parent)
|
cmd = "%s qdisc delete dev %s %s" % (TC_BIN, devname, parent)
|
||||||
|
netif.net_cmd(cmd)
|
||||||
netif.setparam("has_tbf", False)
|
netif.setparam("has_tbf", False)
|
||||||
# removing the parent removes the child
|
# removing the parent removes the child
|
||||||
netif.setparam("has_netem", False)
|
netif.setparam("has_netem", False)
|
||||||
changed = True
|
changed = True
|
||||||
if netif.getparam("has_tbf"):
|
if netif.getparam("has_tbf"):
|
||||||
parent = ["parent", "1:1"]
|
parent = "parent 1:1"
|
||||||
netem = ["netem"]
|
netem = "netem"
|
||||||
changed = max(changed, netif.setparam("delay", delay))
|
changed = max(changed, netif.setparam("delay", delay))
|
||||||
if loss is not None:
|
if loss is not None:
|
||||||
loss = float(loss)
|
loss = float(loss)
|
||||||
|
@ -499,17 +496,17 @@ class CoreNetwork(CoreNetworkBase):
|
||||||
return
|
return
|
||||||
# jitter and delay use the same delay statement
|
# jitter and delay use the same delay statement
|
||||||
if delay is not None:
|
if delay is not None:
|
||||||
netem += ["delay", "%sus" % delay]
|
netem += " delay %sus" % delay
|
||||||
if jitter is not None:
|
if jitter is not None:
|
||||||
if delay is None:
|
if delay is None:
|
||||||
netem += ["delay", "0us", "%sus" % jitter, "25%"]
|
netem += " delay 0us %sus 25%%" % jitter
|
||||||
else:
|
else:
|
||||||
netem += ["%sus" % jitter, "25%"]
|
netem += " %sus 25%%" % jitter
|
||||||
|
|
||||||
if loss is not None and loss > 0:
|
if loss is not None and loss > 0:
|
||||||
netem += ["loss", "%s%%" % min(loss, 100)]
|
netem += " loss %s%%" % min(loss, 100)
|
||||||
if duplicate is not None and duplicate > 0:
|
if duplicate is not None and duplicate > 0:
|
||||||
netem += ["duplicate", "%s%%" % min(duplicate, 100)]
|
netem += " duplicate %s%%" % min(duplicate, 100)
|
||||||
|
|
||||||
delay_check = delay is None or delay <= 0
|
delay_check = delay is None or delay <= 0
|
||||||
jitter_check = jitter is None or jitter <= 0
|
jitter_check = jitter is None or jitter <= 0
|
||||||
|
@ -519,17 +516,19 @@ class CoreNetwork(CoreNetworkBase):
|
||||||
# possibly remove netem if it exists and parent queue wasn't removed
|
# possibly remove netem if it exists and parent queue wasn't removed
|
||||||
if not netif.getparam("has_netem"):
|
if not netif.getparam("has_netem"):
|
||||||
return
|
return
|
||||||
tc[2] = "delete"
|
|
||||||
if self.up:
|
if self.up:
|
||||||
logging.debug("linkconfig: %s" % ([tc + parent + ["handle", "10:"]],))
|
cmd = "%s qdisc delete dev %s %s handle 10:" % (TC_BIN, devname, parent)
|
||||||
netif.net_cmd(tc + parent + ["handle", "10:"])
|
netif.net_cmd(cmd)
|
||||||
netif.setparam("has_netem", False)
|
netif.setparam("has_netem", False)
|
||||||
elif len(netem) > 1:
|
elif len(netem) > 1:
|
||||||
if self.up:
|
if self.up:
|
||||||
logging.debug(
|
cmd = "%s qdisc replace dev %s %s handle 10: %s" % (
|
||||||
"linkconfig: %s" % ([tc + parent + ["handle", "10:"] + netem],)
|
TC_BIN,
|
||||||
|
devname,
|
||||||
|
parent,
|
||||||
|
netem,
|
||||||
)
|
)
|
||||||
netif.net_cmd(tc + parent + ["handle", "10:"] + netem)
|
netif.net_cmd(cmd)
|
||||||
netif.setparam("has_netem", True)
|
netif.setparam("has_netem", True)
|
||||||
|
|
||||||
def linknet(self, net):
|
def linknet(self, net):
|
||||||
|
|
Loading…
Add table
Reference in a new issue