noddos: Noddos v0.5.0 with mDNS / DNS-SD support
[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") &> /dev/null
40 }
41
42 ifup()
43 {
44 local device enabled
45
46 config_load mwan3
47
48 if [ -z "$1" ]; then
49 echo "Expecting interface. Usage: mwan3 ifup <interface>" && exit 0
50 fi
51
52 if [ -n "$2" ]; then
53 echo "Too many arguments. Usage: mwan3 ifup <interface>" && exit 0
54 fi
55
56 config_get enabled "$1" enabled 0
57
58 device=$(uci -p /var/state get network.$1.ifname) &> /dev/null
59
60 if [ -n "$device" ] ; then
61 [ "$enabled" -eq 1 ] && ACTION=ifup INTERFACE=$1 DEVICE=$device /sbin/hotplug-call iface
62 fi
63 }
64
65 interfaces()
66 {
67 config_load mwan3
68
69 echo "Interface status:"
70 config_foreach mwan3_report_iface_status interface
71 echo -e
72 }
73
74 policies()
75 {
76 echo "Current ipv4 policies:"
77 mwan3_report_policies_v4
78 echo -e
79 echo "Current ipv6 policies:"
80 mwan3_report_policies_v6
81 echo -e
82 }
83
84 connected()
85 {
86 echo "Directly connected ipv4 networks:"
87 mwan3_report_connected_v4
88 echo -e
89 echo "Directly connected ipv6 networks:"
90 mwan3_report_connected_v6
91 echo -e
92 }
93
94 rules()
95 {
96 echo "Active ipv4 user rules:"
97 mwan3_report_rules_v4
98 echo -e
99 echo "Active ipv6 user rules:"
100 mwan3_report_rules_v6
101 echo -e
102 }
103
104 status()
105 {
106 interfaces
107 policies
108 connected
109 rules
110 }
111
112 start()
113 {
114 config_load mwan3
115 config_foreach ifup interface
116 }
117
118 stop()
119 {
120 local ipset route rule table IP IPT
121
122 killall mwan3track &> /dev/null
123
124 for IP in "$IP4" "$IP6"; do
125
126 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
127 $IP route flush table $route &> /dev/null
128 done
129
130 for rule in $($IP rule list | egrep '^[1-2][0-9]{3}\:' | cut -d ':' -f 1); do
131 $IP rule del pref $rule &> /dev/null
132 done
133 done
134
135 for IPT in "$IPT4" "$IPT6"; do
136
137 $IPT -D PREROUTING -j mwan3_hook &> /dev/null
138 $IPT -D OUTPUT -j mwan3_hook &> /dev/null
139
140 for table in $($IPT -S | awk '{print $2}' | grep mwan3 | sort -u); do
141 $IPT -F $table &> /dev/null
142 done
143
144 for table in $($IPT -S | awk '{print $2}' | grep mwan3 | sort -u); do
145 $IPT -X $table &> /dev/null
146 done
147 done
148
149 for ipset in $($IPS -n list | grep mwan3_); do
150 $IPS -q destroy $ipset
151 done
152
153 for ipset in $($IPS -n list | grep mwan3 | grep -E '_v4|_v6'); do
154 $IPS -q destroy $ipset
155 done
156 }
157
158 restart() {
159 stop
160 start
161 }
162
163 case "$1" in
164 ifup|ifdown|interfaces|policies|connected|rules|status|start|stop|restart)
165 $*
166 ;;
167 *)
168 help
169 ;;
170 esac
171
172 exit 0