net/mwan3: deviate max interface value from mmx_mask value
authorFlorian Eckert <redacted>
Wed, 14 Mar 2018 10:57:02 +0000 (11:57 +0100)
committerFlorian Eckert <redacted>
Fri, 16 Mar 2018 13:45:29 +0000 (14:45 +0100)
We need always three of the firewall mask value for
* default routing table
* blackhole
* unreachable
the other will be used for the interfaces.

* If we have set the mmx_mask to max 0xFF00 (8 bit set) we could use max 252
  interfaces.
* If we have set the mmx_mask to min 0x0E00 (3 bit set) we could use max 4
  interfaces.

Only the ones are counting from the firewall mask value.
Minimal three firewall mask bit vaules must be set.
Maximal eight firewall mask bit vaules could be set.

Table overview mmx_mask value bits vs. max interfaces

mmx_mask value bits set 1 -> not usefull
mmx_mask value bits set 2 -> not usefull
mmx_mask value bits set 3 ->   4 Interfaces (mask example 0x0E)
mmx_mask value bits set 4 ->  12 Interfaces
mmx_mask value bits set 5 ->  28 Interfaces
mmx_mask value bits set 6 ->  60 Interfaces
mmx_mask value bits set 7 -> 124 Interfaces
mmx_mask value bits set 8 -> 252 Interfaces (mask example 0xFF)

Signed-off-by: Florian Eckert <redacted>
net/mwan3/files/lib/mwan3/mwan3.sh
net/mwan3/files/usr/sbin/mwan3

index e59f7c9b2ea23becd6819080c6983b07809095f1..275723008d7bb2f3db1c7b3705673636c0ada3c2 100644 (file)
@@ -10,6 +10,7 @@ CONNTRACK_FILE="/proc/net/nf_conntrack"
 
 MWAN3_STATUS_DIR="/var/run/mwan3"
 MWAN3TRACK_STATUS_DIR="/var/run/mwan3track"
+MWAN3_INTERFACE_MAX=""
 DEFAULT_LOWEST_METRIC=256
 MMX_MASK=""
 MMX_DEFAULT=""
@@ -65,11 +66,18 @@ mwan3_init()
        # mwan3's MARKing mask (at least 3 bits should be set)
        if [ -e "${MWAN3_STATUS_DIR}/mmx_mask" ]; then
                MMX_MASK=$(cat "${MWAN3_STATUS_DIR}/mmx_mask")
+               MWAN3_INTERFACE_MAX=$(uci_get_state mwan3 globals iface_max)
        else
                config_load mwan3
                config_get MMX_MASK globals mmx_mask '0xff00'
                echo "$MMX_MASK" > "${MWAN3_STATUS_DIR}/mmx_mask"
                $LOG notice "Using firewall mask ${MMX_MASK}"
+
+               bitcnt=$(mwan3_count_one_bits MMX_MASK)
+               mmdefault=$(((1<<bitcnt)-1))
+               MWAN3_INTERFACE_MAX=$(($mmdefault-3))
+               uci_toggle_state mwan3 globals iface_max "$MWAN3_INTERFACE_MAX"
+               $LOG notice "Max interface count is ${MWAN3_INTERFACE_MAX}"
        fi
 
        # mark mask constants
index baf109df12d51f5827f91ed2b0ef7738cb785400..5089630ed4aaf3900b5ff7e8d4ecda797bba5b3b 100755 (executable)
@@ -145,7 +145,7 @@ stop()
 
        for IP in "$IP4" "$IP6"; do
 
-               for route in $($IP route list table all | sed 's/.*table \([^ ]*\) .*/\1/' |  awk '{print $1}' | awk '{for(i=1;i<=NF;i++) if($i+0>0) if($i+0<255) {print;break}}'); do
+               for route in $(seq 1 $MWAN3_INTERFACE_MAX); do
                        $IP route flush table $route &> /dev/null
                done
 
git clone https://git.99rst.org/PROJECT