Adds support for interface tracking using either ping, arping or httping. This allows to track interface status on networks with filtered ICMP traffic or simply to monitor data link layer etc. To facilitate binding to a specified interface its IP address is passed as a new mwan3track parameter. It's currently required by httping and possibly by other tools that may be added in the future. Signed-off-by: Marcin Jurkowski <marcin1j@gmail.com>
74 lines
1.9 KiB
Bash
74 lines
1.9 KiB
Bash
#!/bin/sh
|
|
|
|
. /lib/functions.sh
|
|
. /lib/functions/network.sh
|
|
. /lib/mwan3/mwan3.sh
|
|
|
|
[ "$ACTION" == "ifup" -o "$ACTION" == "ifdown" ] || exit 1
|
|
[ -n "$INTERFACE" ] || exit 2
|
|
|
|
if [ "$ACTION" == "ifup" ]; then
|
|
[ -n "$DEVICE" ] || exit 3
|
|
fi
|
|
|
|
mwan3_set_connected_iptables
|
|
|
|
config_load mwan3
|
|
config_get enabled $INTERFACE enabled 0
|
|
[ "$enabled" == "1" ] || exit 0
|
|
|
|
if [ "$ACTION" == "ifup" ]; then
|
|
config_get family $INTERFACE family ipv4
|
|
if [ "$family" = "ipv4" ]; then
|
|
ubus call network.interface.${INTERFACE}_4 status &>/dev/null
|
|
if [ "$?" -eq "0" ]; then
|
|
network_get_gateway gateway ${INTERFACE}_4
|
|
network_get_ipaddr src_ip ${INTERFACE}_4
|
|
else
|
|
network_get_gateway gateway $INTERFACE
|
|
network_get_ipaddr src_ip ${INTERFACE}
|
|
fi
|
|
elif [ "$family" = "ipv6" ]; then
|
|
ubus call network.interface.${INTERFACE}_6 status &>/dev/null
|
|
if [ "$?" -eq "0" ]; then
|
|
network_get_gateway6 gateway ${INTERFACE}_6
|
|
network_get_ipaddr6 src_ip ${INTERFACE}_6
|
|
else
|
|
network_get_gateway6 gateway ${INTERFACE}
|
|
network_get_ipaddr6 src_ip ${INTERFACE}
|
|
fi
|
|
fi
|
|
|
|
[ -n "$gateway" ] || exit 9
|
|
fi
|
|
|
|
mwan3_lock
|
|
$LOG notice "$ACTION interface $INTERFACE (${DEVICE:-unknown})"
|
|
|
|
case "$ACTION" in
|
|
ifup)
|
|
mwan3_set_general_rules
|
|
mwan3_set_general_iptables
|
|
mwan3_create_iface_rules $INTERFACE $DEVICE
|
|
mwan3_create_iface_iptables $INTERFACE $DEVICE
|
|
mwan3_create_iface_route $INTERFACE $DEVICE
|
|
mwan3_track $INTERFACE $DEVICE ${src_ip}
|
|
mwan3_set_policies_iptables
|
|
mwan3_set_user_rules
|
|
mwan3_flush_conntrack $INTERFACE $DEVICE "ifup"
|
|
;;
|
|
ifdown)
|
|
mwan3_delete_iface_rules $INTERFACE
|
|
mwan3_delete_iface_iptables $INTERFACE
|
|
mwan3_delete_iface_route $INTERFACE
|
|
mwan3_delete_iface_ipset_entries $INTERFACE
|
|
mwan3_track_signal $INTERFACE $DEVICE
|
|
mwan3_set_policies_iptables
|
|
mwan3_set_user_rules
|
|
mwan3_flush_conntrack $INTERFACE $DEVICE "ifdown"
|
|
;;
|
|
esac
|
|
|
|
mwan3_unlock
|
|
|
|
exit 0
|