From 00d759cd15c28dbf2bd6ded8e8203e26ee61aff8 Mon Sep 17 00:00:00 2001 From: ImBenji Date: Tue, 5 Aug 2025 12:45:51 +0100 Subject: [PATCH] Handle existing HTB qdisc and class gracefully in traffic control setup --- lib/wireguard/traffic_control.dart | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/wireguard/traffic_control.dart b/lib/wireguard/traffic_control.dart index 6f1d4d3..eaefd6f 100644 --- a/lib/wireguard/traffic_control.dart +++ b/lib/wireguard/traffic_control.dart @@ -8,8 +8,25 @@ class TrafficControlService { try { // Ensure HTB qdisc exists on wg0 print('Setting up HTB qdisc on wg0...'); - await _runTcCommand(['qdisc', 'add', 'dev', 'wg0', 'root', 'handle', '1:', 'htb', 'default', '30']); - await _runTcCommand(['class', 'add', 'dev', 'wg0', 'parent', '1:', 'classid', '1:1', 'htb', 'rate', '1000mbit']); + try { + await _runTcCommand(['qdisc', 'add', 'dev', 'wg0', 'root', 'handle', '1:', 'htb', 'default', '30']); + } catch (e) { + if (e.toString().contains('File exists') || e.toString().contains('Exclusivity flag')) { + print('HTB qdisc already exists, continuing...'); + } else { + rethrow; + } + } + + try { + await _runTcCommand(['class', 'add', 'dev', 'wg0', 'parent', '1:', 'classid', '1:1', 'htb', 'rate', '1000mbit']); + } catch (e) { + if (e.toString().contains('File exists')) { + print('HTB root class already exists, continuing...'); + } else { + rethrow; + } + } print('Running iptables MARK commands for $peerIP...'); await _runIptablesCommand(['-I', 'FORWARD', '-s', peerIP, '-j', 'MARK', '--set-mark', mark.toString()]);