3 [ -x /usr
/bin
/ip
] ||
exit 4
4 [ -x /usr
/sbin
/ipset
] ||
exit 5
5 [ -x /usr
/sbin
/iptables
] ||
exit 6
6 [ -x /usr
/sbin
/ip6tables
] ||
exit 7
7 [ -x /usr
/bin
/logger
] ||
exit 8
10 .
/lib
/functions
/network.sh
16 Syntax: mwan3 [command]
19 start Load iptables rules, ip rules and ip routes
20 stop Unload iptables rules, ip rules and ip routes
21 restart Reload iptables rules, ip rules and ip routes
22 ifup <iface> Load rules and routes for specific interface
23 ifdown <iface> Unload rules and routes for specific interface
24 interfaces Show interfaces status
25 policies Show currently active policy
26 connected Show directly connected networks
27 rules Show active rules
28 status Show all status
36 echo "Error: Expecting interface. Usage: mwan3 ifdown <interface>" && exit 0
40 echo "Error: Too many arguments. Usage: mwan3 ifdown <interface>" && exit 0
43 ACTION
=ifdown INTERFACE
=$1 /sbin
/hotplug-call iface
45 if [ -e /var
/run
/mwan3track-
$1.pid
] ; then
46 kill $
(cat /var
/run
/mwan3track-
$1.pid
)
57 echo "Expecting interface. Usage: mwan3 ifup <interface>" && exit 0
61 echo "Too many arguments. Usage: mwan3 ifup <interface>" && exit 0
64 config_get enabled
"$1" enabled
0
66 device
=$
(uci
-p /var
/state get network.
$1.ifname
) &> /dev
/null
68 if [ -n "$device" ] ; then
69 [ "$enabled" -eq 1 ] && ACTION
=ifup INTERFACE
=$1 DEVICE
=$device /sbin
/hotplug-call iface
77 echo "Interface status:"
78 config_foreach mwan3_report_iface_status interface
84 echo "Current ipv4 policies:"
85 mwan3_report_policies_v4
87 echo "Current ipv6 policies:"
88 mwan3_report_policies_v6
94 echo "Directly connected ipv4 networks:"
95 mwan3_report_connected_v4
97 echo "Directly connected ipv6 networks:"
98 mwan3_report_connected_v6
104 echo "Active ipv4 user rules:"
105 mwan3_report_rules_v4
107 echo "Active ipv6 user rules:"
108 mwan3_report_rules_v6
123 config_foreach ifup interface
128 local ipset route rule table IP IPT
130 killall mwan3track
&> /dev
/null
132 for IP
in "$IP4" "$IP6"; do
134 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
135 $IP route flush table
$route &> /dev
/null
138 for rule
in $
($IP rule list |
egrep '^[1-2][0-9]{3}\:' | cut
-d ':' -f 1); do
139 $IP rule del pref
$rule &> /dev
/null
143 for IPT
in "$IPT4" "$IPT6"; do
145 $IPT -D PREROUTING
-j mwan3_hook
&> /dev
/null
146 $IPT -D OUTPUT
-j mwan3_hook
&> /dev
/null
148 for table
in $
($IPT -S |
awk '{print $2}' |
grep mwan3 |
sort -u); do
149 $IPT -F $table &> /dev
/null
152 for table
in $
($IPT -S |
awk '{print $2}' |
grep mwan3 |
sort -u); do
153 $IPT -X $table &> /dev
/null
157 for ipset
in $
($IPS -n list |
grep mwan3_
); do
158 $IPS -q destroy
$ipset
161 for ipset
in $
($IPS -n list |
grep mwan3 |
grep -E '_v4|_v6'); do
162 $IPS -q destroy
$ipset
172 ifup|ifdown|interfaces|policies|connected|rules|status|start|stop|restart
)