#!/bin/sh . /lib/functions.sh . /lib/functions/network.sh . /lib/mwan3/mwan3.sh LOG="logger -t mwan3[$$] -p" [ "$ACTION" = "connected" -o "$ACTION" = "disconnected" ] || exit 1 [ -n "$INTERFACE" ] || exit 2 if [ "$ACTION" = "connected" ]; then [ -n "$DEVICE" ] || exit 3 fi config_load mwan3 config_get_bool enabled globals 'enabled' '0' config_get local_source globals 'local_source' 'none' [ ${enabled} = "1" ] || exit 0 [ ${local_source} = "none" ] || exit 0 config_get enabled $INTERFACE enabled 0 config_get online_metric $INTERFACE online_metric 0 [ "$enabled" == "1" ] || exit 0 if [ "$online_metric" = 0 ]; then $LOG notice "No online metric for interface "$INTERFACE" found" exit 0 fi mwan3_add_failover_metric() { local iface="$1" local device="$2" local metric="$3" local route_args config_get family $iface family ipv4 if [ "$family" == "ipv4" ]; then if ubus call network.interface.${iface}_4 status 1>/dev/null 2>&1; then network_get_gateway route_args ${iface}_4 else network_get_gateway route_args $iface fi if [ -n "$route_args" -a "$route_args" != "0.0.0.0" ]; then route_args="via $route_args" else route_args="" fi $IP4 route add default $route_args dev $device proto static metric $metric 1>/dev/null 2>&1 fi if [ "$family" == "ipv6" ]; then if ubus call network.interface.${iface}_6 status 1>/dev/null 2>&1; then network_get_gateway6 route_args ${iface}_6 else network_get_gateway6 route_args $iface fi if [ -n "$route_args" -a "$route_args" != "::" ]; then route_args="via $route_args" else route_args="" fi $IP6 route add default $route_args dev $device proto static metric $metric 1>/dev/null 2>&1 fi } mwan3_del_failover_metric() { local iface="$1" local device="$2" local metric="$3" config_get family $iface family ipv4 if [ "$family" == "ipv4" ]; then $IP4 route del default dev $device proto static metric $metric 1>/dev/null 2>&1 fi if [ "$family" == "ipv6" ]; then $IP6 route del default dev $device proto static metric $metric 1>/dev/null 2>&1 fi } case "$ACTION" in connected) mwan3_add_failover_metric "$INTERFACE" "$DEVICE" "$online_metric" ;; disconnected) mwan3_del_failover_metric "$INTERFACE" "$DEVICE" "$online_metric" ;; esac exit 0