From 96781551c1e30462b4bd2c98b0aa0f82926f8a8e Mon Sep 17 00:00:00 2001 From: Ycarus Date: Mon, 23 Jul 2018 17:37:37 +0200 Subject: [PATCH] Add support for ncm created interfaces --- mptcp/files/etc/init.d/mptcp | 2 ++ .../share/omr/post-tracking.d/post-tracking | 20 +++++++++++++++---- omr-tracker/files/bin/omr-tracker | 3 +++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 437ab2c6b..3030b3777 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -73,12 +73,14 @@ interface_multipath_settings() { [ -z "$gateway" ] && gateway=$(uci -q get "network.$config.gateway") [ -z "$gateway" ] && gateway=$(ubus call network.interface.$config status | jsonfilter -q -e '@.route[0].nexthop' | tr -d "\n") [ -z "$gateway" ] && gateway=$(ubus call network.interface.$config status | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") + [ -z "$gateway" ] && gateway=$(ubus call network.interface.${config}_4 status | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") netmask=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f2 | tr -d "\n") network=`ipcalc.sh $ipaddr $netmask | sed -n '/NETWORK=/{;s/.*=//;s/ .*//;p;}'` fi ip rule del table $id > /dev/null 2>&1 ip route flush $id > /dev/null 2>&1 [ -n "$gateway" ] || return 1 + [ -n "$network" ] || return 1 ip rule add from $ipaddr table $id ip route replace $network/$netmask dev $iface scope link table $id ip route replace default via $gateway dev $iface table $id diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 5ad6e58c7..9f0ad400d 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -8,6 +8,7 @@ set_route() { multipath_config=$(uci -q get network.$INTERFACE.multipath || echo "off") interface_if=$(uci -q get network.$INTERFACE.ifname) [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["l3_device"]') + [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" | jsonfilter -q -e '@["l3_device"]') multipath_current_config=$(multipath $interface_if | grep deactivated) if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$multipath_current_config" = "" ]; then #if [ "$multipath_config" != "off" ] && [ "$SETROUTE" != true ]; then @@ -19,6 +20,9 @@ set_route() { if [ -z "$interface_gw" ]; then interface_gw=$(ubus call network.interface.$INTERFACE status | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") fi + if [ -z "$interface_gw" ]; then + interface_gw=$(ubus call network.interface.${INTERFACE}_4 status | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") + fi if [ "$interface_gw" != "" ]; then _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if" ip route replace default scope global nexthop via $interface_gw dev $interface_if && SETROUTE=true @@ -31,6 +35,8 @@ set_route() { set_ss_route() { local server_ip upstreams nginxip + local metric $2 + [ -z "$metric" ] && metric=1 config_get server_ip $1 server if [ "$server_ip" = "127.0.0.1" ]; then upstreams=$(uci -q get nginx-ha.ShadowSocks.upstreams | sed -e "s/' '/%/" -e 's/ /_/g' -e "s/'//g" -e 's/%/ /') @@ -39,19 +45,21 @@ set_ss_route() { nginxip=$(echo $up | cut -d: -f1) if [ "$nginxip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $nginxip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then _log "Set server $nginxip route via $OMR_TRACKER_DEVICE" - ip route replace $nginxip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE + ip route replace $nginxip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric fi done else if [ "$server_ip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $server_ip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then _log "Set server $server_ip route via $OMR_TRACKER_DEVICE" - ip route replace $server_ip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE + ip route replace $server_ip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric fi fi } del_ss_route() { local server_ip upstreams nginxip + local metric $2 + [ -z "$metric" ] && metric=1 config_get server_ip $1 server if [ "$server_ip" = "127.0.0.1" ]; then upstreams=$(uci -q get nginx-ha.ShadowSocks.upstreams | sed -e "s/' '/%/" -e 's/ /_/g' -e "s/'//g" -e 's/%/ /') @@ -60,13 +68,13 @@ del_ss_route() { nginxip=$(echo $up | cut -d: -f1) if [ "$nginxip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $nginxip)" != "" ]; then _log "Remove server $nginxip route via $OMR_TRACKER_DEVICE" - ip route delete $nginxip dev $OMR_TRACKER_DEVICE + ip route delete $nginxip dev $OMR_TRACKER_DEVICE metric $metric fi done else if [ "$server_ip" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE | grep $server_ip)" != "" ]; then _log "Remove server $server_ip route via $OMR_TRACKER_DEVICE" - ip route delete $server_ip dev $OMR_TRACKER_DEVICE + ip route delete $server_ip dev $OMR_TRACKER_DEVICE metric $metric fi fi } @@ -142,6 +150,10 @@ if [ "$multipath_config" = "master" ]; then fi fi multipath_config="on" +else + local metric=$(ip rule show | grep $OMR_TRACKER_DEVICE_GATEWAY | awk '{print $5}') + config_load shadowsocks-libev + config_foreach set_ss_route server $metric fi if [ "$(uci -q get omr-bypass.defaults.ifname)" = "$OMR_TRACKER_DEVICE" ] && [ "$(ip route show table 991337 | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ]; then ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index c04d462fc..a4798809e 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -157,6 +157,9 @@ while true; do if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") fi + if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then + OMR_TRACKER_DEVICE_GATEWAY=$(ubus call network.interface.${OMR_TRACKER_INTERFACE}_4 status | jsonfilter -q -e '@.inactive.route[0].nexthop' | tr -d "\n") + fi # execute specific tracker if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then