From e23f5f8f8b7ef0064a1025a5029f99a3a9c189fa Mon Sep 17 00:00:00 2001 From: Ycarus Date: Sat, 19 Jan 2019 17:17:24 +0100 Subject: [PATCH] Use uci config for routes only if setting for that is set --- mptcp/files/etc/init.d/mptcp | 130 ++++++++++++++++++++++------------- 1 file changed, 81 insertions(+), 49 deletions(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 0ad4046ae..6230f3d15 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -116,41 +116,50 @@ interface_multipath_settings() { [ -n "$ipaddr" ] && [ -n "$netmask" ] && netmask=`ipcalc.sh $ipaddr $netmask | sed -n '/NETMASK=/{;s/.*=//;s/ .*//;p;}'` [ -n "$ipaddr" ] && [ -n "$netmask" ] && 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 - uci -q batch <<-EOF >/dev/null - delete network.${config}_rule - delete network.${config}_route - delete network.${config}_route_default - commit network - EOF - - if [ -n "$gateway" ] && [ -n "$network" ]; then + if [ "$(uci -q get openmptcprouter.settings.uci_route)" = "1" ]; then uci -q batch <<-EOF >/dev/null delete network.${config}_rule - set network.${config}_rule=rule - set network.${config}_rule.lookup=${id} - set network.${config}_rule.priority=0 - set network.${config}_rule.src="${ipaddr}/32" delete network.${config}_route - set network.${config}_route=route - set network.${config}_route.interface=${config} - set network.${config}_route.target=${network} - set network.${config}_route.netmask=${netmask} - set network.${config}_route.table=${id} delete network.${config}_route_default - set network.${config}_route_default=route - set network.${config}_route_default.interface=${config} - set network.${config}_route_default.target='0.0.0.0' - set network.${config}_route_default.netmask='0.0.0.0' - set network.${config}_route_default.gateway=$gateway - set network.${config}_route_default.table=${id} commit network EOF - #ip rule add from $ipaddr table $id pref 0 - #ip route replace $network/$netmask dev $iface scope link table $id - #ip route replace default via $gateway dev $iface table $id - #ip route flush $id + else + ip rule del table $id > /dev/null 2>&1 + ip route flush $id > /dev/null 2>&1 + fi + + if [ -n "$gateway" ] && [ -n "$network" ]; then + if [ "$(uci -q get openmptcprouter.settings.uci_route)" = "1" ]; then + uci -q batch <<-EOF >/dev/null + delete network.${config}_rule + set network.${config}_rule=rule + set network.${config}_rule.lookup=${id} + set network.${config}_rule.priority=0 + set network.${config}_rule.src="${ipaddr}/32" + set network.${config}_rule.created=mptcp + delete network.${config}_route + set network.${config}_route=route + set network.${config}_route.interface=${config} + set network.${config}_route.target=${network} + set network.${config}_route.netmask=${netmask} + set network.${config}_route.table=${id} + set network.${config}_route.created=mptcp + delete network.${config}_route_default + set network.${config}_route_default=route + set network.${config}_route_default.interface=${config} + set network.${config}_route_default.target='0.0.0.0' + set network.${config}_route_default.netmask='0.0.0.0' + set network.${config}_route_default.gateway=$gateway + set network.${config}_route_default.table=${id} + set network.${config}_route_default.created=mptcp + commit network + EOF + else + ip rule add from $ipaddr table $id pref 0 + ip route replace $network/$netmask dev $iface scope link table $id + ip route replace default via $gateway dev $iface table $id + ip route flush $id + fi config_get mode "$config" multipath "off" [ "$mode" = "master" ] && { @@ -190,32 +199,47 @@ interface_multipath_settings() { network6=`ipcalc $ip6addr | sed -n '/NETWORK=/{;s/.*=//;s/ .*//;p;}'` fi fi - #ip -6 rule del table 6$id > /dev/null 2>&1 - #ip -6 route flush 6$id > /dev/null 2>&1 - if [ -n "$ip6addr" ] && [ -n "$gateway6" ] && [ -n "$network6" ]; then + if [ "$(uci -q get openmptcprouter.settings.uci_route)" = "1" ]; then uci -q batch <<-EOF >/dev/null delete network.${config}_rule6 - set network.${config}_rule6=rule6 - set network.${config}_rule6.lookup=6${id} - set network.${config}_rule6.priority=0 - set network.${config}_rule6.src="${ipaddr6}/127" delete network.${config}_route6 - set network.${config}_route6=route6 - set network.${config}_route6.interface=${config} - set network.${config}_route6.target=${network6}/${netmask6} - set network.${config}_route6.table=6${id} delete network.${config}_route6_default - set network.${config}_route6_default=route6 - set network.${config}_route6_default.interface=${config} - set network.${config}_route6_default.target='::' - set network.${config}_route6_default.gateway=$gateway6 - set network.${config}_route6_default.table=6${id} commit network EOF - #ip -6 rule add from $ip6addr table 6$id pref 0 - #ip -6 route replace $network6/$netmask6 dev $iface scope link table 6$id - #ip -6 route replace default via $gateway6 dev $iface table 6$id - #ip -6 route flush 6$id + else + ip -6 rule del table 6$id > /dev/null 2>&1 + ip -6 route flush 6$id > /dev/null 2>&1 + fi + if [ -n "$ip6addr" ] && [ -n "$gateway6" ] && [ -n "$network6" ]; then + if [ "$(uci -q get openmptcprouter.settings.uci_route)" = "1" ]; then + uci -q batch <<-EOF >/dev/null + delete network.${config}_rule6 + set network.${config}_rule6=rule6 + set network.${config}_rule6.lookup=6${id} + set network.${config}_rule6.priority=0 + set network.${config}_rule6.src="${ipaddr6}/127" + set network.${config}_rule6.created=mptcp + delete network.${config}_route6 + set network.${config}_route6=route6 + set network.${config}_route6.interface=${config} + set network.${config}_route6.target=${network6}/${netmask6} + set network.${config}_route6.table=6${id} + set network.${config}_route6.created=mptcp + delete network.${config}_route6_default + set network.${config}_route6_default=route6 + set network.${config}_route6_default.interface=${config} + set network.${config}_route6_default.target='::' + set network.${config}_route6_default.gateway=$gateway6 + set network.${config}_route6_default.table=6${id} + set network.${config}_route6_default.created=mptcp + commit network + EOF + else + ip -6 rule add from $ip6addr table 6$id pref 0 + ip -6 route replace $network6/$netmask6 dev $iface scope link table 6$id + ip -6 route replace default via $gateway6 dev $iface table 6$id + ip -6 route flush 6$id + fi config_get mode "$config" multipath "off" [ "$mode" = "master" ] && { @@ -248,6 +272,10 @@ set_multipath() { done } +remove() { + uci -q delete network.$1 +} + start_service() { local intf=$1 local id count intfmaster @@ -257,6 +285,10 @@ start_service() { mptcpintf="" master="" config_load network + config_foreach remove route + config_foreach remove route6 + config_foreach remove rule + config_foreach remove rule6 config_foreach interface_multipath_settings interface $intf set_multipath # If no master is defined, one interface is defined as master