From 8e9cdbea1411a68645d5e82caa7232c7f0ef2d61 Mon Sep 17 00:00:00 2001 From: Manuel Munz Date: Mon, 25 Mar 2013 16:36:36 +0000 Subject: contrib/freifunk-policyrouting: Use a new table 'localnets' for locally attached networks and populate it --- contrib/package/freifunk-policyrouting/Makefile | 2 +- .../files/etc/hotplug.d/iface/30-policyrouting | 27 +++++++++++----------- .../files/etc/init.d/freifunk-policyrouting | 7 ++++++ 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/contrib/package/freifunk-policyrouting/Makefile b/contrib/package/freifunk-policyrouting/Makefile index 13c770aed..cec08a2f3 100644 --- a/contrib/package/freifunk-policyrouting/Makefile +++ b/contrib/package/freifunk-policyrouting/Makefile @@ -4,7 +4,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=freifunk-policyrouting -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) 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 c4ae38d97..5c4eb38e9 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 @@ -11,6 +11,7 @@ config_get enable pr enable config_get fallback pr fallback config_get zones pr zones + if [ "$ACTION" = "ifup" ] && [ "$enable" = "1" ]; then network_get_subnet net $INTERFACE network_get_subnet6 net6 $INTERFACE @@ -18,27 +19,26 @@ if [ "$ACTION" = "ifup" ] && [ "$enable" = "1" ]; then if [ "$net" != "" -a -n "$dev" ]; then eval $(/bin/ipcalc.sh $net) - if [ "$PREFIX" != "0" ]; then - if [ ! "$(ip r s t olsr-default |grep "throw $NETWORK/$PREFIX")" ]; then - ip r a throw $NETWORK/$PREFIX table olsr-default + if [ "$PREFIX" != "0" -a "$NETWORK" != "127.0.0.0" ]; then + if [ ! "$(ip r s t localnets |grep "$NETWORK/$PREFIX dev")" ]; then + cmd="ip r a $NETWORK/$PREFIX dev $dev table localnets" + $cmd if [ "$?" = 0 ]; then - logger -s -t policyrouting "Add route: throw $NETWORK/$PREFIX table olsr-default" + logger -s -t policyrouting "Add route: $cmd" else - logger -s -t policyrouting "Error! Could not add route: throw $NETWORK/$PREFIX table olsr-default" + logger -s -t policyrouting "Error! Could not add route: $cmd" fi fi + fi if [ -n "$net6" ]; then - if [ ! "$(ip -6 r s t olsr-default |grep "throw $net6")" ]; then - rule="throw $net6 table olsr-default dev $dev" - ip -6 r a $rule - if [ "$?" = 0 ]; then - logger -s -t policyrouting "Add route: $rule (IPv6)" - else - logger -s -t policyrouting "Error! Could not add route: $rule (IPv6)" - fi + cmd="ip -6 r a $net6 dev $dev table localnets" + $cmd 2>&1 > /dev/null + if [ "$?" = 0 ]; then + logger -s -t policyrouting "Add route: $cmd (IPv6)" fi + fi networks="" @@ -68,6 +68,7 @@ if [ "$ACTION" = "ifup" ] && [ "$enable" = "1" ]; then fi done fi + fi if [ "$ACTION" = "ifdown" ]; then diff --git a/contrib/package/freifunk-policyrouting/files/etc/init.d/freifunk-policyrouting b/contrib/package/freifunk-policyrouting/files/etc/init.d/freifunk-policyrouting index a8e44244b..f31821a24 100755 --- a/contrib/package/freifunk-policyrouting/files/etc/init.d/freifunk-policyrouting +++ b/contrib/package/freifunk-policyrouting/files/etc/init.d/freifunk-policyrouting @@ -33,12 +33,16 @@ olsrd_intalltables() { rt_tables() { tables="/etc/iproute2/rt_tables" + if [ -z "`grep "110" $tables`" ]; then + echo "110 localnets" >> $tables + fi if [ -z "`grep "111" $tables`" ]; then echo "111 olsr" >> $tables fi if [ -z "`grep "112" $tables`" ]; then echo "112 olsr-default" >> $tables fi + } disable_dyngw() { @@ -80,6 +84,9 @@ start() { for p in $proto; do if [ ! "$(ip -$p ru s | grep "1000: from all lookup olsr")" ]; then ip -$p rule add lookup olsr prio 1000 + # add table for routes to local networks + ip -$p rule add lookup localnets prio 2000 + if [ "$?" = "0" ]; then logger -s -t policyrouting "Added rule: lookup olsr prio 1000 (IPv$p)" else -- cgit v1.2.3