mwan3: Fix awk expression in mwan3_delete_iface_rules

The awk expression in mwan3_delete_iface_rules splits the `ip rule list`
output by spaces, therefore $1 contains the trailing column (e.g., "1:",
"1000:"). The < and > operators compare such values as strings instead
of numbers, producing unexpected results (for example, "1:" > "1000").

Change the field separator to ":" for correct number comparison, so that
the right rules are removed.

An example error message that may appear before the fix:

Error: argument "1:" is wrong: preference value is invalid

It happens because `substr($1,0,4)` selects short numbers along with
the colon. In other cases wrong rules may be removed, for example, if
there is rule 10051, then rule 1005 will be removed.

Signed-off-by: Maxim Mikityanskiy <maxtram95@gmail.com>
This commit is contained in:
Maxim Mikityanskiy 2024-04-02 01:01:48 +03:00
parent 888c7bb77a
commit 02b9af9606
1 changed files with 1 additions and 1 deletions

View File

@ -549,7 +549,7 @@ mwan3_delete_iface_rules()
return
fi
for rule_id in $(ip rule list | awk '$1 % 1000 == '$id' && $1 > 1000 && $1 < 4000 {print substr($1,0,4)}'); do
for rule_id in $(ip rule list | awk 'BEGIN {FS=":"} $1 % 1000 == '$id' && $1 > 1000 && $1 < 4000 {print $1}'); do
$IP rule del pref $rule_id
done
}