summaryrefslogtreecommitdiffhomepage
path: root/contrib/package/freifunk-policyrouting
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/package/freifunk-policyrouting')
-rw-r--r--contrib/package/freifunk-policyrouting/files/etc/config/freifunk-policyrouting1
-rw-r--r--contrib/package/freifunk-policyrouting/files/etc/hotplug.d/iface/30-policyrouting39
2 files changed, 26 insertions, 14 deletions
diff --git a/contrib/package/freifunk-policyrouting/files/etc/config/freifunk-policyrouting b/contrib/package/freifunk-policyrouting/files/etc/config/freifunk-policyrouting
index ba58625bc1..3dd2998f9f 100644
--- a/contrib/package/freifunk-policyrouting/files/etc/config/freifunk-policyrouting
+++ b/contrib/package/freifunk-policyrouting/files/etc/config/freifunk-policyrouting
@@ -2,5 +2,6 @@
config 'settings' 'pr'
option 'enable' '0'
option 'strict' '1'
+ option 'fallback' '1'
option 'zones' ''
diff --git a/contrib/package/freifunk-policyrouting/files/etc/hotplug.d/iface/30-policyrouting b/contrib/package/freifunk-policyrouting/files/etc/hotplug.d/iface/30-policyrouting
index acce981130..dc5e69e594 100644
--- a/contrib/package/freifunk-policyrouting/files/etc/hotplug.d/iface/30-policyrouting
+++ b/contrib/package/freifunk-policyrouting/files/etc/hotplug.d/iface/30-policyrouting
@@ -1,10 +1,11 @@
[ "$INTERFACE" != "wan" ] && exit 0
+[ -f /proc/net/ipv6_route ] && has_ipv6=1
case $ACTION in
ifup)
- pr=`uci get freifunk-policyrouting.pr.enable`
+ pr="`uci get freifunk-policyrouting.pr.enable`"
+ fallback="`uci get freifunk-policyrouting.pr.fallback`"
# check if ipv6 is enabled:
- [ -f /proc/net/ipv6_route ] && has_ipv6=1
if [ $pr = "1" ]; then
logger -t policyrouting "Starting policy routing on $INTERFACE"
@@ -58,24 +59,30 @@ case $ACTION in
ip route add $NETWORK/$NETMASK dev $device table default
ip route add default via $gw dev $device table default
- #if [ "$has_ipv6" = 1 ]; then
- # local ip6gw=$(ip -6 r |grep default |cut -d " " -f 3)
- # test -n "`ip -6 r s t default`" && ip -6 r d default t default
- # test -n "`ip -6 r s |grep default`" && ip -6 route del default
- # ip -6 r a $ip6gw via $ip6gw dev $dev table default
- # ip -6 route add default via $ip6gw dev $device table default
- #fi
-
+ if [ "$has_ipv6" = 1 ]; then
+ local ip6gw=$(ip -6 r |grep default |cut -d " " -f 3)
+ test -n "`ip -6 r s t default`" && ip -6 r d default t default
+ if [ -n "`ip -6 r s |grep default`" ]; then
+ ip -6 route del default
+ ip -6 r a $ip6gw via $ip6gw dev $dev table default
+ ip -6 route add default via $ip6gw dev $device table default
+ fi
+ fi
ip rule del lookup main
ip rule add fwmark 1 lookup olsr-default
ip rule add lookup main
ip rule add lookup olsr
+ # Fallback via mesh if no ipv4 gateway is found in default table
+ [ "$fallback" = 1 ] && ip rule add lookup olsr-default prio 32800
+
if [ "$has_ipv6" = 1 ]; then
ip -6 rule del lookup main
- ip -6 rule add fwmark 1 lookup olsr-default prio 16385
- ip -6 rule add lookup main prio 16383
ip -6 rule add lookup olsr prio 16380
+ ip -6 rule add lookup main prio 16390
+ ip -6 rule add fwmark 1 lookup olsr-default prio 16400
+ ip -6 rule add lookup default prio 16410
+ [ "$fallback" = 1 ] && ip -6 rule add lookup olsr-default prio 16420
fi
else
# Remove custom routing tables from olsrd
@@ -89,12 +96,16 @@ case $ACTION in
;;
ifdown)
- logger -t policyrouting "Deleting policy rules for $INTERFACE"
+ logger -t policyrouting "Deleting ipv4 policy rules for $INTERFACE"
ip rule del fwmark 1 lookup olsr-default > /dev/null 2>&1
+ ip rule del lookup olsr-default > /dev/null 2>&1
ip rule del lookup olsr > /dev/null 2>&1
if [ "$has_ipv6" = 1 ]; then
+ logger -t policyrouting "Deleting ipv4 policy rules for $INTERFACE"
ip -6 rule del fwmark 1 lookup olsr-default > /dev/null 2>&1
- ip -6 rule del lookup olsr > /dev/null 2>&1
+ ip -6 rule del lookup olsr-default > /dev/null 2>&1
+ ip -6 rule del lookup olsr > /dev/null 2>&1
+ ip -6 rule del lookup default > /dev/null 2>&1
fi
;;
esac