mwan3: fix bugs introduced in 815e83d4
[feed/packages.git] / net / mwan3 / files / etc / hotplug.d / iface / 15-mwan3
1 #!/bin/sh
2
3 . /lib/functions.sh
4 . /lib/functions/network.sh
5 . /lib/mwan3/mwan3.sh
6 . /usr/share/libubox/jshn.sh
7
8 [ "$ACTION" == "ifup" -o "$ACTION" == "ifdown" ] || exit 1
9 [ -n "$INTERFACE" ] || exit 2
10
11 if [ "$ACTION" == "ifup" ]; then
12 [ -n "$DEVICE" ] || exit 3
13 fi
14
15 mwan3_lock
16 mwan3_set_connected_iptables
17 mwan3_unlock
18
19 config_load mwan3
20 config_get enabled $INTERFACE enabled 0
21 config_get initial_state $INTERFACE initial_state "online"
22 [ "$enabled" == "1" ] || exit 0
23
24 if [ "$ACTION" == "ifup" ]; then
25 config_get family $INTERFACE family ipv4
26 if [ "$family" = "ipv4" ]; then
27 ubus call network.interface.${INTERFACE}_4 status &>/dev/null
28 if [ "$?" -eq "0" ]; then
29 network_get_gateway gateway ${INTERFACE}_4
30 network_get_ipaddr src_ip ${INTERFACE}_4
31 else
32 network_get_gateway gateway $INTERFACE
33 network_get_ipaddr src_ip ${INTERFACE}
34 fi
35 elif [ "$family" = "ipv6" ]; then
36 ubus call network.interface.${INTERFACE}_6 status &>/dev/null
37 if [ "$?" -eq "0" ]; then
38 network_get_gateway6 gateway ${INTERFACE}_6
39 network_get_ipaddr6 src_ip ${INTERFACE}_6
40 else
41 network_get_gateway6 gateway ${INTERFACE}
42 network_get_ipaddr6 src_ip ${INTERFACE}
43 fi
44 fi
45
46 [ -n "$gateway" ] || exit 9
47 fi
48
49 if [ "$initial_state" = "offline" ]; then
50 json_load "$(ubus call mwan3 status '{"section":"interfaces"}')"
51 json_select "interfaces"
52 json_select "${INTERFACE}"
53 json_get_var running running
54 json_get_var status status
55 else
56 status=online
57 running=1
58 fi
59
60 mwan3_lock
61 $LOG notice "Execute "$ACTION" event on interface $INTERFACE (${DEVICE:-unknown})"
62
63 case "$ACTION" in
64 ifup)
65 mwan3_set_general_rules
66 mwan3_set_general_iptables
67 mwan3_create_iface_iptables $INTERFACE $DEVICE
68 if [ ${running} -eq 1 -a "${status}" = "online" ]; then
69 mwan3_create_iface_rules $INTERFACE $DEVICE
70 mwan3_create_iface_route $INTERFACE $DEVICE
71 mwan3_track $INTERFACE $DEVICE "online" "$src_ip"
72 mwan3_set_policies_iptables
73 mwan3_set_user_rules
74 mwan3_flush_conntrack $INTERFACE $DEVICE "ifup"
75 else
76 $LOG notice "Starting tracker on interface $INTERFACE (${DEVICE:-unknown})"
77 mwan3_track $INTERFACE $DEVICE "offline" "$src_ip"
78 fi
79 ;;
80 ifdown)
81 mwan3_delete_iface_rules $INTERFACE
82 mwan3_delete_iface_route $INTERFACE
83 mwan3_delete_iface_ipset_entries $INTERFACE
84 mwan3_track_signal $INTERFACE $DEVICE
85 mwan3_set_policies_iptables
86 mwan3_set_user_rules
87 mwan3_flush_conntrack $INTERFACE $DEVICE "ifdown"
88 ;;
89 esac
90
91 mwan3_unlock
92
93 exit 0