Merge pull request #4267 from dibdot/package-adblock
[feed/packages.git] / net / mwan3 / files / usr / sbin / mwan3
1 #!/bin/sh
2
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
8
9 . /lib/functions.sh
10 . /lib/functions/network.sh
11 . /lib/mwan3/mwan3.sh
12
13 help()
14 {
15 cat <<EOF
16 Syntax: mwan3 [command]
17
18 Available commands:
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
29
30 EOF
31 }
32
33 ifdown()
34 {
35 if [ -z "$1" ]; then
36 echo "Error: Expecting interface. Usage: mwan3 ifdown <interface>" && exit 0
37 fi
38
39 if [ -n "$2" ]; then
40 echo "Error: Too many arguments. Usage: mwan3 ifdown <interface>" && exit 0
41 fi
42
43 ACTION=ifdown INTERFACE=$1 /sbin/hotplug-call iface
44
45 if [ -e /var/run/mwan3track-$1.pid ] ; then
46 kill $(cat /var/run/mwan3track-$1.pid)
47 fi
48 }
49
50 ifup()
51 {
52 local device enabled
53
54 config_load mwan3
55
56 if [ -z "$1" ]; then
57 echo "Expecting interface. Usage: mwan3 ifup <interface>" && exit 0
58 fi
59
60 if [ -n "$2" ]; then
61 echo "Too many arguments. Usage: mwan3 ifup <interface>" && exit 0
62 fi
63
64 config_get enabled "$1" enabled 0
65
66 device=$(uci -p /var/state get network.$1.ifname) &> /dev/null
67
68 if [ -n "$device" ] ; then
69 [ "$enabled" -eq 1 ] && ACTION=ifup INTERFACE=$1 DEVICE=$device /sbin/hotplug-call iface
70 fi
71 }
72
73 interfaces()
74 {
75 config_load mwan3
76
77 echo "Interface status:"
78 config_foreach mwan3_report_iface_status interface
79 echo -e
80 }
81
82 policies()
83 {
84 echo "Current ipv4 policies:"
85 mwan3_report_policies_v4
86 echo -e
87 echo "Current ipv6 policies:"
88 mwan3_report_policies_v6
89 echo -e
90 }
91
92 connected()
93 {
94 echo "Directly connected ipv4 networks:"
95 mwan3_report_connected_v4
96 echo -e
97 echo "Directly connected ipv6 networks:"
98 mwan3_report_connected_v6
99 echo -e
100 }
101
102 rules()
103 {
104 echo "Active ipv4 user rules:"
105 mwan3_report_rules_v4
106 echo -e
107 echo "Active ipv6 user rules:"
108 mwan3_report_rules_v6
109 echo -e
110 }
111
112 status()
113 {
114 interfaces
115 policies
116 connected
117 rules
118 }
119
120 start()
121 {
122 config_load mwan3
123 config_foreach ifup interface
124 }
125
126 stop()
127 {
128 local ipset route rule table IP IPT
129
130 killall mwan3track &> /dev/null
131
132 for IP in "$IP4" "$IP6"; do
133
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
136 done
137
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
140 done
141 done
142
143 for IPT in "$IPT4" "$IPT6"; do
144
145 $IPT -D PREROUTING -j mwan3_hook &> /dev/null
146 $IPT -D OUTPUT -j mwan3_hook &> /dev/null
147
148 for table in $($IPT -S | awk '{print $2}' | grep mwan3 | sort -u); do
149 $IPT -F $table &> /dev/null
150 done
151
152 for table in $($IPT -S | awk '{print $2}' | grep mwan3 | sort -u); do
153 $IPT -X $table &> /dev/null
154 done
155 done
156
157 for ipset in $($IPS -n list | grep mwan3_); do
158 $IPS -q destroy $ipset
159 done
160
161 for ipset in $($IPS -n list | grep mwan3 | grep -E '_v4|_v6'); do
162 $IPS -q destroy $ipset
163 done
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