From 3e877392296bf40072e8f841ace8695446af52ee Mon Sep 17 00:00:00 2001 From: Ycarus Date: Fri, 23 Feb 2018 14:32:22 +0100 Subject: [PATCH] Fix --- .../root/etc/hotplug.d/iface/00-macvlan | 42 --------- mptcp/files/etc/hotplug.d/iface/30-mptcp | 89 ------------------ mptcp/files/etc/hotplug.d/net/30-mptcp | 90 +++++++++---------- 3 files changed, 43 insertions(+), 178 deletions(-) delete mode 100644 luci-mod-admin-full/root/etc/hotplug.d/iface/00-macvlan delete mode 100644 mptcp/files/etc/hotplug.d/iface/30-mptcp diff --git a/luci-mod-admin-full/root/etc/hotplug.d/iface/00-macvlan b/luci-mod-admin-full/root/etc/hotplug.d/iface/00-macvlan deleted file mode 100644 index 791cafc35..000000000 --- a/luci-mod-admin-full/root/etc/hotplug.d/iface/00-macvlan +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : - -. /lib/functions.sh - -config_load network - -_setup_macaddr() { - uci -q get "network.$1_dev.macaddr" >/dev/null && return - uci -q set "network.$1_dev.macaddr=$2" -} - -# Configuration by interface -_setup_interface() { - uci -q get "network.$1_dev.ifname" >/dev/null && return - - # do not create macvlan for vlan - local _ifname - config_get _ifname "$1" ifname - case "$_ifname" in - eth*.*) return ;; - esac - - local _type - config_get _type "$1" type - [ "$_type" = "macvlan" ] || return 0 - - uci -q batch <<-EOF - set network.$1_dev=device - set network.$1_dev.name=$1 - set network.$1_dev.type=macvlan - set network.$1_dev.ifname=eth0 - set network.$1.ifname=$1 - set network.$1.defaultroute=0 - EOF - - _macaddr=$(uci -q get "network.$1.macaddr") - _setup_macaddr "$1" "${_macaddr:-auto$(date +%s)}" - uci -q set "network.$1.type=macvlan" # legacy - uci -q commit network -} -config_foreach _setup_interface interface diff --git a/mptcp/files/etc/hotplug.d/iface/30-mptcp b/mptcp/files/etc/hotplug.d/iface/30-mptcp deleted file mode 100644 index c402c314a..000000000 --- a/mptcp/files/etc/hotplug.d/iface/30-mptcp +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/sh -# -# Load the multipath config -# -# Author: Mario Krueger -# Released under GPL 3 or later - -[ "$ACTION" = ifup -o "$ACTION" = ifupdate ] || exit 0 - -enable=`uci -q get network.globals.multipath` || exit 0 -[ "$enable" = "enable" ] || exit 0 - -. /lib/functions.sh -. /lib/functions/network.sh - -id=0 -count=1 - -set_default() { - local mode - local config="$1" - count=$(($count+1)) - local iface - config_get iface "$config" ifname - [ "$iface" = "$INTERFACE" ] && id=$count - config_get mode "$config" multipath - [ "$mode" = "master" ] && { - local gateway - network_get_gateway gateway $config || { - logger -t multipath master device $DEVICE has no gateway! - #Fallback: use upcomming interface... - network_get_gateway gateway $INTERFACE - config=$INTERFACE - } - local iface - config_get iface "$config" ifname - [ -n "gateway" ] && { - ip route replace default via $gateway dev $iface || { - #Fallback: use upcomming interface... - network_get_gateway gateway $INTERFACE - ip route replace default via $gateway dev $INTERFACE - logger -t multipath Failed to set default multipath device! Use $INTERFACE as fallback... - } - } - } -} - -config_load network -config_foreach set_default interface -[ $id = 0 ] && { - logger -t multipath device $INTERFACE not found! - echo device $INTERFACE not found! - exit 1 -} - -mode=`uci -q get network.$INTERFACE.multipath` || mode='off' -[ -n "$(ifconfig | grep $DEVICE)" ] || exit 0 - -case "$mode" in - "off") - multipath $DEVICE off - exit 0;; - "master") - mode="on";; - "on");; - "backup");; - "handover");; - *) - logger -t multipath Wrong multipath value for device $DEVICE - exit 1;; -esac - -# Update kernel flags -multipath $DEVICE $mode - -# IPv4 Updates: - -network_get_ipaddr ipaddr $INTERFACE -network_get_gateway gateway $INTERFACE -network_get_subnet network $INTERFACE -__network_ifstatus netmask $INTERFACE "['ipv4-address'][0]['mask']" -network=`ipcalc.sh $network | sed -n '/NETWORK=/{;s/.*=//;s/ .*//;p;}'` - -ip rule del table $id -ip route flush $id -ip rule add from $ipaddr table $id -ip route add $network/$netmask dev $DEVICE scope link table $id -ip route add default via $gateway dev $DEVICE table $id -ip route flush $id diff --git a/mptcp/files/etc/hotplug.d/net/30-mptcp b/mptcp/files/etc/hotplug.d/net/30-mptcp index c402c314a..9c5d3bc28 100644 --- a/mptcp/files/etc/hotplug.d/net/30-mptcp +++ b/mptcp/files/etc/hotplug.d/net/30-mptcp @@ -22,24 +22,60 @@ set_default() { count=$(($count+1)) local iface config_get iface "$config" ifname - [ "$iface" = "$INTERFACE" ] && id=$count + id=$count config_get mode "$config" multipath + + mode=`uci -q get network.$config.multipath` || mode='off' + [ -n "$(ifconfig | grep $iface)" ] || return 1 + case "$mode" in + "off") + multipath $iface off + return 1;; + "master") + mode="on";; + "on");; + "backup");; + "handover");; + *) + logger -t multipath Wrong multipath value for device $iface + return 1;; + esac + # Update kernel flags + multipath $iface $mode + # IPv4 Updates: + local ipaddr + local gateway + local network + local netmask + network_get_ipaddr ipaddr $config + network_get_gateway gateway $config + network_get_subnet network $config + __network_ifstatus netmask $config "['ipv4-address'][0]['mask']" + network=`ipcalc.sh $network | sed -n '/NETWORK=/{;s/.*=//;s/ .*//;p;}'` + + ip rule del table $id + ip route flush $id + ip rule add from $ipaddr table $id + ip route add $network/$netmask dev $iface scope link table $id + ip route add default via $gateway dev $iface table $id + ip route flush $id + [ "$mode" = "master" ] && { local gateway network_get_gateway gateway $config || { - logger -t multipath master device $DEVICE has no gateway! + logger -t multipath master device $iface has no gateway! #Fallback: use upcomming interface... - network_get_gateway gateway $INTERFACE - config=$INTERFACE + network_get_gateway gateway $config + config=$config } local iface config_get iface "$config" ifname [ -n "gateway" ] && { ip route replace default via $gateway dev $iface || { #Fallback: use upcomming interface... - network_get_gateway gateway $INTERFACE - ip route replace default via $gateway dev $INTERFACE - logger -t multipath Failed to set default multipath device! Use $INTERFACE as fallback... + network_get_gateway gateway $config + ip route replace default via $gateway dev $iface + logger -t multipath Failed to set default multipath device! Use $iface as fallback... } } } @@ -47,43 +83,3 @@ set_default() { config_load network config_foreach set_default interface -[ $id = 0 ] && { - logger -t multipath device $INTERFACE not found! - echo device $INTERFACE not found! - exit 1 -} - -mode=`uci -q get network.$INTERFACE.multipath` || mode='off' -[ -n "$(ifconfig | grep $DEVICE)" ] || exit 0 - -case "$mode" in - "off") - multipath $DEVICE off - exit 0;; - "master") - mode="on";; - "on");; - "backup");; - "handover");; - *) - logger -t multipath Wrong multipath value for device $DEVICE - exit 1;; -esac - -# Update kernel flags -multipath $DEVICE $mode - -# IPv4 Updates: - -network_get_ipaddr ipaddr $INTERFACE -network_get_gateway gateway $INTERFACE -network_get_subnet network $INTERFACE -__network_ifstatus netmask $INTERFACE "['ipv4-address'][0]['mask']" -network=`ipcalc.sh $network | sed -n '/NETWORK=/{;s/.*=//;s/ .*//;p;}'` - -ip rule del table $id -ip route flush $id -ip rule add from $ipaddr table $id -ip route add $network/$netmask dev $DEVICE scope link table $id -ip route add default via $gateway dev $DEVICE table $id -ip route flush $id