handle creation of routing tables in mwan3rtmon to avoid race conditions and potentially missing routes handle ipv6 routes that have expiry update directly connected ipset when routes are added or deleted add fall through rules so that the default routing table is not used if no rule in the interface-specific routing table matches add option to comply with mwan3 source based routing get default route parameters from main routing table Signed-off-by: Aaron Goodman <aaronjg@stanford.edu>
103 lines
3.2 KiB
Bash
103 lines
3.2 KiB
Bash
#!/bin/sh
|
|
|
|
. /lib/functions.sh
|
|
. /lib/functions/network.sh
|
|
. /lib/mwan3/mwan3.sh
|
|
. /usr/share/libubox/jshn.sh
|
|
. /lib/mwan3/common.sh
|
|
|
|
SCRIPTNAME="mwan3-hotplug"
|
|
[ "$ACTION" = "ifup" ] || [ "$ACTION" = "ifdown" ] || [ "$ACTION" = "connected" ] || [ "$ACTION" = "disconnected" ] || exit 1
|
|
[ -n "$INTERFACE" ] || exit 2
|
|
if { [ "$ACTION" = "ifup" ] || [ "$ACTION" = "connected" ] ; } && [ -z "$DEVICE" ]; then
|
|
LOG notice "$ACTION called on $INTERFACE with no device set"
|
|
exit 3
|
|
fi
|
|
|
|
[ "$MWAN3_STARTUP" = 1 ] || mwan3_lock "$ACTION" "$INTERFACE"
|
|
|
|
config_load mwan3
|
|
config_get_bool enabled globals 'enabled' '0'
|
|
[ "${enabled}" -gt 0 ] || {
|
|
[ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$INTERFACE"
|
|
LOG notice "mwan3 hotplug on $INTERFACE not called because globally disabled"
|
|
mwan3_flush_conntrack "$INTERFACE" "$ACTION"
|
|
exit 0
|
|
}
|
|
|
|
$IPT4 -S mwan3_hook &>/dev/null || {
|
|
mwan3_unlock "$ACTION" "$INTERFACE"
|
|
LOG warn "hotplug called on $INTERFACE before mwan3 has been set up"
|
|
exit 0
|
|
}
|
|
|
|
mwan3_init
|
|
[ "$MWAN3_STARTUP" = 1 ] || {
|
|
config_get family $INTERFACE family ipv4
|
|
mwan3_set_connected_${family}
|
|
}
|
|
|
|
if [ "$MWAN3_STARTUP" != 1 ]; then
|
|
mwan3_set_user_iface_rules $INTERFACE $DEVICE
|
|
fi
|
|
|
|
config_get initial_state $INTERFACE initial_state "online"
|
|
config_get_bool enabled $INTERFACE 'enabled' '0'
|
|
[ "${enabled}" -eq 1 ] || {
|
|
[ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$INTERFACE"
|
|
LOG notice "mwan3 hotplug on $INTERFACE not called because interface disabled"
|
|
exit 0
|
|
}
|
|
|
|
trackpid=$(pgrep -f "mwan3track $INTERFACE ")
|
|
|
|
if [ "$initial_state" = "offline" ]; then
|
|
status=$(cat $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS 2>/dev/null || echo unknown)
|
|
else
|
|
status=online
|
|
fi
|
|
|
|
[ -z "$TRUE_INTERFACE" ] && mwan3_get_true_iface TRUE_INTERFACE $INTERFACE
|
|
|
|
binary_status=$status
|
|
[ "$binary_status" = "online" ] || binary_status=offline
|
|
|
|
LOG notice "Execute $ACTION event on interface $INTERFACE (${DEVICE:-unknown})"
|
|
|
|
case "$ACTION" in
|
|
ifup|connected)
|
|
mwan3_create_iface_iptables $INTERFACE $DEVICE
|
|
mwan3_create_iface_rules $INTERFACE $DEVICE
|
|
[ "$MWAN3_STARTUP" != 1 ] && mwan3_create_iface_route $INTERFACE $DEVICE
|
|
mwan3_set_iface_hotplug_state $INTERFACE "$binary_status"
|
|
|
|
mwan3_get_src_ip src_ip "$TRUE_INTERFACE"
|
|
if [ -n "${trackpid}" ]; then
|
|
device_pid=$(pgrep -f "mwan3track $INTERFACE $DEVICE ")
|
|
if [ "$device_pid" = "$trackpid" ]; then
|
|
[ "$ACTION" = ifup ] && kill -USR2 "$trackpid"
|
|
else
|
|
mwan3_track $INTERFACE $DEVICE "$binary_status" "$src_ip"
|
|
LOG notice "Restarted tracker [$!] on interface $INTERFACE (${DEVICE:-unknown})"
|
|
fi
|
|
else
|
|
mwan3_track $INTERFACE $DEVICE "$binary_status" "$src_ip"
|
|
LOG notice "Started tracker [$!] on interface $INTERFACE (${DEVICE:-unknown})"
|
|
fi
|
|
[ "$MWAN3_STARTUP" != 1 ] && [ "$binary_status" == "online" ] && mwan3_set_policies_iptables
|
|
|
|
;;
|
|
ifdown|disconnected)
|
|
mwan3_set_iface_hotplug_state $INTERFACE "offline"
|
|
mwan3_delete_iface_ipset_entries $INTERFACE
|
|
mwan3_delete_iface_rules $INTERFACE
|
|
mwan3_delete_iface_route $INTERFACE
|
|
mwan3_delete_iface_iptables $INTERFACE
|
|
if [ "$ACTION" = "ifdown" ]; then
|
|
[ -n "$trackpid" ] && kill -USR1 "$trackpid"
|
|
fi
|
|
mwan3_set_policies_iptables
|
|
;;
|
|
esac
|
|
[ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$INTERFACE"
|
|
exit 0
|