Merge pull request #4703 from hbl0307106015/tdb
[feed/packages.git] / net / mwan3 / files / usr / sbin / mwan3
1 #!/bin/sh
2
3 . /lib/functions.sh
4 . /lib/functions/network.sh
5 . /lib/mwan3/mwan3.sh
6
7 help()
8 {
9 cat <<EOF
10 Syntax: mwan3 [command]
11
12 Available commands:
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 currently active policy
20 connected Show directly connected networks
21 rules Show active rules
22 status Show all status
23
24 EOF
25 }
26
27 ifdown()
28 {
29 if [ -z "$1" ]; then
30 echo "Error: Expecting interface. Usage: mwan3 ifdown <interface>" && exit 0
31 fi
32
33 if [ -n "$2" ]; then
34 echo "Error: Too many arguments. Usage: mwan3 ifdown <interface>" && exit 0
35 fi
36
37 ACTION=ifdown INTERFACE=$1 /sbin/hotplug-call iface
38
39 kill $(pgrep -f "mwan3track $1 $2") &> /dev/null
40 mwan3_delete_iface_iptables $1
41 mwan3_track_clean $1
42 }
43
44 ifup()
45 {
46 local device enabled
47
48 config_load mwan3
49
50 if [ -z "$1" ]; then
51 echo "Expecting interface. Usage: mwan3 ifup <interface>" && exit 0
52 fi
53
54 if [ -n "$2" ]; then
55 echo "Too many arguments. Usage: mwan3 ifup <interface>" && exit 0
56 fi
57
58 config_get enabled "$1" enabled 0
59
60 device=$(uci -p /var/state get network.$1.ifname) &> /dev/null
61
62 if [ -n "$device" ] ; then
63 [ "$enabled" -eq 1 ] && ACTION=ifup INTERFACE=$1 DEVICE=$device /sbin/hotplug-call iface
64 fi
65 }
66
67 interfaces()
68 {
69 config_load mwan3
70
71 echo "Interface status:"
72 config_foreach mwan3_report_iface_status interface
73 echo -e
74 }
75
76 policies()
77 {
78 echo "Current ipv4 policies:"
79 mwan3_report_policies_v4
80 echo -e
81 echo "Current ipv6 policies:"
82 mwan3_report_policies_v6
83 echo -e
84 }
85
86 connected()
87 {
88 echo "Directly connected ipv4 networks:"
89 mwan3_report_connected_v4
90 echo -e
91 echo "Directly connected ipv6 networks:"
92 mwan3_report_connected_v6
93 echo -e
94 }
95
96 rules()
97 {
98 echo "Active ipv4 user rules:"
99 mwan3_report_rules_v4
100 echo -e
101 echo "Active ipv6 user rules:"
102 mwan3_report_rules_v6
103 echo -e
104 }
105
106 status()
107 {
108 interfaces
109 policies
110 connected
111 rules
112 }
113
114 start()
115 {
116 config_load mwan3
117 config_foreach ifup interface
118 }
119
120 stop()
121 {
122 local ipset route rule table IP IPT
123
124 killall mwan3track &> /dev/null
125
126 config_load mwan3
127 config_foreach mwan3_track_clean interface
128
129 for IP in "$IP4" "$IP6"; do
130
131 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
132 $IP route flush table $route &> /dev/null
133 done
134
135 for rule in $($IP rule list | egrep '^[1-2][0-9]{3}\:' | cut -d ':' -f 1); do
136 $IP rule del pref $rule &> /dev/null
137 done
138 done
139
140 for IPT in "$IPT4" "$IPT6"; do
141
142 $IPT -D PREROUTING -j mwan3_hook &> /dev/null
143 $IPT -D OUTPUT -j mwan3_hook &> /dev/null
144
145 for table in $($IPT -S | awk '{print $2}' | grep mwan3 | sort -u); do
146 $IPT -F $table &> /dev/null
147 done
148
149 for table in $($IPT -S | awk '{print $2}' | grep mwan3 | sort -u); do
150 $IPT -X $table &> /dev/null
151 done
152 done
153
154 for ipset in $($IPS -n list | grep mwan3_); do
155 $IPS -q destroy $ipset
156 done
157
158 for ipset in $($IPS -n list | grep mwan3 | grep -E '_v4|_v6'); do
159 $IPS -q destroy $ipset
160 done
161
162 mwan3_lock_clean
163 rm -rf "${MWAN3_STATUS_DIR}/mmx_mask"
164 }
165
166 restart() {
167 stop
168 start
169 }
170
171 case "$1" in
172 ifup|ifdown|interfaces|policies|connected|rules|status|start|stop|restart)
173 $*
174 ;;
175 *)
176 help
177 ;;
178 esac
179
180 exit 0