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
)
47 rm /var
/run
/mwan3track-
$1.pid
58 echo "Expecting interface. Usage: mwan3 ifup <interface>" && exit 0
62 echo "Too many arguments. Usage: mwan3 ifup <interface>" && exit 0
65 config_get enabled
"$1" enabled
0
67 device
=$
(uci
-p /var
/state get network.
$1.ifname
) &> /dev
/null
69 if [ -n "$device" ] ; then
70 [ "$enabled" -eq 1 ] && ACTION
=ifup INTERFACE
=$1 DEVICE
=$device /sbin
/hotplug-call iface
78 echo "Interface status:"
79 config_foreach mwan3_report_iface_status interface
85 echo "Current ipv4 policies:"
86 mwan3_report_policies_v4
88 echo "Current ipv6 policies:"
89 mwan3_report_policies_v6
95 echo "Directly connected ipv4 networks:"
96 mwan3_report_connected_v4
98 echo "Directly connected ipv6 networks:"
99 mwan3_report_connected_v6
105 echo "Active ipv4 user rules:"
106 mwan3_report_rules_v4
108 echo "Active ipv6 user rules:"
109 mwan3_report_rules_v6
124 config_foreach ifup interface
129 local ipset route rule table IP IPT
131 killall mwan3track
&> /dev
/null
132 rm /var
/run
/mwan3track-
* &> /dev
/null
134 for IP
in "$IP4" "$IP6"; do
136 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
137 $IP route flush table
$route &> /dev
/null
140 for rule
in $
($IP rule list |
egrep '^[1-2][0-9]{3}\:' | cut
-d ':' -f 1); do
141 $IP rule del pref
$rule &> /dev
/null
145 for IPT
in "$IPT4" "$IPT6"; do
147 $IPT -D PREROUTING
-j mwan3_hook
&> /dev
/null
148 $IPT -D OUTPUT
-j mwan3_hook
&> /dev
/null
150 for table
in $
($IPT -S |
awk '{print $2}' |
grep mwan3 |
sort -u); do
151 $IPT -F $table &> /dev
/null
154 for table
in $
($IPT -S |
awk '{print $2}' |
grep mwan3 |
sort -u); do
155 $IPT -X $table &> /dev
/null
159 for ipset
in $
($IPS -n list |
grep mwan3_
); do
160 $IPS -q destroy
$ipset
163 for ipset
in $
($IPS -n list |
grep mwan3 |
grep -E '_v4|_v6'); do
164 $IPS -q destroy
$ipset
174 ifup|ifdown|interfaces|policies|connected|rules|status|start|stop|restart
)