Add logging for speed limit and traffic control commands

This commit is contained in:
ImBenji
2025-08-05 12:21:29 +01:00
parent a5fc0e3644
commit c5ed47d41a
4 changed files with 163 additions and 4 deletions

View File

@@ -6,6 +6,11 @@ class TrafficControlService {
print('Setting speed limit for peer $peerIP to ${speedKbps}kbps (mark: $mark)');
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']);
print('Running iptables MARK commands for $peerIP...');
await _runIptablesCommand(['-I', 'FORWARD', '-s', peerIP, '-j', 'MARK', '--set-mark', mark.toString()]);
await _runIptablesCommand(['-I', 'FORWARD', '-d', peerIP, '-j', 'MARK', '--set-mark', mark.toString()]);
@@ -19,7 +24,10 @@ class TrafficControlService {
print('Speed limit set successfully for $peerIP');
} catch (e) {
print('ERROR setting speed limit for $peerIP: $e');
rethrow;
// Don't rethrow if it's just because qdisc already exists
if (!e.toString().contains('File exists')) {
rethrow;
}
}
}
@@ -33,7 +41,9 @@ class TrafficControlService {
}
static int _getMarkForIP(String ip) {
return ip.split('.').last.hashCode % 65535 + 1;
// Use last octet of IP + 10 to ensure small, valid class IDs (10-255)
final lastOctet = int.parse(ip.split('.').last);
return lastOctet + 10;
}
static Future<void> _runIptablesCommand(List<String> args) async {