|
|
|
@ -218,6 +218,35 @@ class Tici(HardwareBase): |
|
|
|
|
|
|
|
|
|
return network_strength |
|
|
|
|
|
|
|
|
|
@staticmethod |
|
|
|
|
def set_upload_limit(speed_kbps: int) -> None: |
|
|
|
|
speed_kbps = int(speed_kbps) # Ensure integer value |
|
|
|
|
|
|
|
|
|
adapter = "wwan0" |
|
|
|
|
tc = ["sudo", "tc"] |
|
|
|
|
|
|
|
|
|
# check, cmd |
|
|
|
|
commands = [ |
|
|
|
|
# Clean up old rules |
|
|
|
|
(False, tc + ["qdisc", "del", "dev", adapter, "root"]), |
|
|
|
|
|
|
|
|
|
# Create root Hierarchy Token Bucket that sends all trafic to 1:20 |
|
|
|
|
(True, tc + ["qdisc", "add", "dev", adapter, "root", "handle", "1:", "htb", "default", "20"]), |
|
|
|
|
|
|
|
|
|
# Create class 1:20 with specified rate limit |
|
|
|
|
(True, tc + ["class", "add", "dev", adapter, "parent", "1:", "classid", "1:20", "htb", "rate", f"{speed_kbps}kbit"]), |
|
|
|
|
|
|
|
|
|
# Create universal 32 bit filter on adapter that sends all outbound ip traffic through the class |
|
|
|
|
(True, tc + ["filter", "add", "dev", adapter, "parent", "1:", "protocol", "ip", "prio", "10", "u32", "match", "ip", "dst", "0.0.0.0/0", "flowid", "1:20"]), |
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
# Disable limits |
|
|
|
|
if speed_kbps == -1: |
|
|
|
|
commands = commands[:1] |
|
|
|
|
|
|
|
|
|
for check, cmd in commands: |
|
|
|
|
subprocess.run(cmd, check=check) |
|
|
|
|
|
|
|
|
|
def get_modem_version(self): |
|
|
|
|
try: |
|
|
|
|
modem = self.get_modem() |
|
|
|
|