5 IPT
="/usr/sbin/iptables -t mangle -w"
10 Syntax: mwan3 [command]
13 start Load iptables rules, ip rules and ip routes
14 stop Unload iptables rules, ip rules and ip routes
15 restart Reload iptables rules, ip rules and ip routes
16 ifup <iface> Load rules and routes for specific interface
17 ifdown <iface> Unload rules and routes for specific interface
18 interfaces Show interfaces status
19 policies Show policies status
20 rules Show rules status
21 status Show all status
29 echo "Error: Expecting interface. Usage: mwan3 ifdown <interface>" && exit 0
33 echo "Error: Too many arguments. Usage: mwan3 ifdown <interface>" && exit 0
36 if [ -e /var
/run
/mwan3track-
$1.pid
] ; then
37 kill $
(cat /var
/run
/mwan3track-
$1.pid
)
38 rm /var
/run
/mwan3track-
$1.pid
41 ACTION
=ifdown INTERFACE
=$1 /sbin
/hotplug-call iface
51 echo "Expecting interface. Usage: mwan3 ifup <interface>" && exit 0
55 echo "Too many arguments. Usage: mwan3 ifup <interface>" && exit 0
58 config_get enabled
"$1" enabled
0
60 device
=$
(uci get
-p /var
/state network.
$1.ifname
) &> /dev
/null
62 if [ -n "$device" ] ; then
63 [ "$enabled" -eq 1 ] && ACTION
=ifup INTERFACE
=$1 DEVICE
=$device /sbin
/hotplug-call iface
69 local device enabled iface_id tracking
73 echo "Interface status:"
78 device
=$
(uci get
-p /var
/state network.
$1.ifname
) &> /dev
/null
80 if [ -z "$device" ]; then
81 echo "Interface $1 is unknown"
85 config_get enabled
"$1" enabled
0
87 if [ -n "$(ps -w | grep mwan3track | grep -v grep | sed '/.*\/usr\/sbin\/mwan3track \([^ ]*\) .*$/!d;s//\1/' | awk '$1 == "'$1'"')" ]; then
93 if [ -n "$($IP rule | awk '$5 == "'$device'"')" -a -n "$($IPT -S mwan3_iface_$1 2> /dev/null)" -a -n "$($IP route list table $iface_id default dev $device 2> /dev/null)" ]; then
94 if [ -n "$(uci get -p /var/state mwan3.$1.track_ip 2> /dev/null)" ]; then
95 echo "Interface $1 is online (tracking $tracking)"
97 echo "Interface $1 is online"
99 elif [ -n "$($IP rule | awk '$5 == "'$device'"')" -o -n "$($IPT -S mwan3_iface_$1 2> /dev/null)" -o -n "$($IP route list table $iface_id default dev $device 2> /dev/null)" ]; then
100 echo "Interface $1 error"
102 if [ "$enabled" -eq 1 ]; then
103 if [ -n "$(uci get -p /var/state mwan3.$1.track_ip 2> /dev/null)" ]; then
104 echo "Interface $1 is offline (tracking $tracking)"
106 echo "Interface $1 is offline"
109 echo "Interface $1 is disabled"
113 config_foreach check_iface_status interface
119 local percent policy share total_weight weight iface
121 for policy
in $
($IPT -S |
awk '{print $2}' |
grep mwan3_policy_ |
sort -u); do
122 echo "Policy $policy:" |
sed 's/mwan3_policy_//'
124 [ -n "$total_weight" ] || total_weight
=$
($IPT -S $policy | cut
-s -d'"' -f2 |
head -1 |
awk '{print $3}')
126 if [ ! -z "${total_weight##*[!0-9]*}" ]; then
127 for iface
in $
($IPT -S $policy | cut
-s -d'"' -f2 |
awk '{print $1}'); do
128 weight
=$
($IPT -S $policy | cut
-s -d'"' -f2 |
awk '$1 == "'$iface'"' |
awk '{print $2}')
129 percent
=$
(($weight*100/$total_weight))
130 echo " $iface ($percent%)"
133 echo " $($IPT -S $policy | sed '/.*--comment \([^ ]*\) .*$/!d;s//\1/;q')"
144 if [ -n "$($IPT -S mwan3_connected 2> /dev/null)" ]; then
145 echo "Known networks:"
146 echo "destination policy hits" |
awk '{ printf "%-19s%-19s%-9s%s\n",$1,$2,$3}' |
awk '1; {gsub(".","-")}1'
147 $IPT -L mwan3_connected
-n -v 2> /dev
/null |
tail -n+3 |
sed 's/mark.*//' |
sed 's/mwan3_policy_//' |
awk '{printf "%-19s%-19s%-9s%s\n",$9,"default",$1}'
151 if [ -n "$($IPT -S mwan3_rules 2> /dev/null)" ]; then
153 echo "source destination proto src-port dest-port policy hits" |
awk '{ printf "%-19s%-19s%-7s%-14s%-14s%-16s%-9s%s\n",$1,$2,$3,$4,$5,$6,$7}' |
awk '1; {gsub(".","-")}1'
154 $IPT -L mwan3_rules
-n -v 2> /dev
/null |
tail -n+3 |
sed 's/mark.*//' |
sed 's/mwan3_policy_//' |
awk '{ printf "%-19s%-19s%-7s%-14s%-14s%-16s%-9s%s\n",$8,$9,$4,$12,$15,$3,$1}'
169 config_foreach ifup interface
174 local route rule table
176 killall mwan3track
&> /dev
/null
177 rm /var
/run
/mwan3track-
* &> /dev
/null
179 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
180 $IP route flush table
$route &> /dev
/null
183 for rule
in $
($IP rule list |
egrep '^[1-2][0-9]{3}\:' | cut
-d ':' -f 1); do
184 $IP rule del pref
$rule &> /dev
/null
187 $IPT -D PREROUTING
-j mwan3_hook
&> /dev
/null
188 $IPT -D OUTPUT
-j mwan3_hook
&> /dev
/null
189 $IPT -D OUTPUT
-j mwan3_output_hook
&> /dev
/null
191 for table
in $
($IPT -S |
awk '{print $2}' |
grep mwan3 |
sort -u); do
192 $IPT -F $table &> /dev
/null
195 for table
in $
($IPT -S |
awk '{print $2}' |
grep mwan3 |
sort -u); do
196 $IPT -X $table &> /dev
/null
206 ifup|ifdown|interfaces|policies|rules|status|start|stop|restart
)