From e51f340b0ef839a85998d11a7a4f82f28b366250 Mon Sep 17 00:00:00 2001 From: ImBenji Date: Tue, 5 Aug 2025 13:28:10 +0100 Subject: [PATCH] Handle existing traffic control classes by updating instead of failing on duplicates --- lib/wireguard/traffic_control.dart | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/wireguard/traffic_control.dart b/lib/wireguard/traffic_control.dart index eaefd6f..9e76b36 100644 --- a/lib/wireguard/traffic_control.dart +++ b/lib/wireguard/traffic_control.dart @@ -32,8 +32,17 @@ class TrafficControlService { await _runIptablesCommand(['-I', 'FORWARD', '-s', peerIP, '-j', 'MARK', '--set-mark', mark.toString()]); await _runIptablesCommand(['-I', 'FORWARD', '-d', peerIP, '-j', 'MARK', '--set-mark', mark.toString()]); - print('Running tc class add command...'); - await _runTcCommand(['class', 'add', 'dev', 'wg0', 'parent', '1:1', 'classid', '1:$mark', 'htb', 'rate', '${speedKbps}kbit', 'ceil', '${speedKbps}kbit']); + print('Running tc class add/change command...'); + try { + await _runTcCommand(['class', 'add', 'dev', 'wg0', 'parent', '1:1', 'classid', '1:$mark', 'htb', 'rate', '${speedKbps}kbit', 'ceil', '${speedKbps}kbit']); + } catch (e) { + if (e.toString().contains('File exists')) { + print('Class exists, updating with change command...'); + await _runTcCommand(['class', 'change', 'dev', 'wg0', 'classid', '1:$mark', 'htb', 'rate', '${speedKbps}kbit', 'ceil', '${speedKbps}kbit']); + } else { + rethrow; + } + } print('Running tc filter add command...'); await _runTcCommand(['filter', 'add', 'dev', 'wg0', 'protocol', 'ip', 'parent', '1:', 'prio', '1', 'handle', mark.toString(), 'fw', 'flowid', '1:$mark']);