1 #!/bin/sh /etc/rc.common
4 .
/lib
/functions
/network.sh
8 [ -f /proc
/net
/ipv6_route
] && proto
="4 6"
10 config_load freifunk-policyrouting
11 config_get
enable pr enable
12 config_get fallback
pr fallback
13 config_get zones
pr zones
16 # Remove custom routing tables from olsrd
17 if [ "`uci -q get olsrd.@olsrd[0].RtTable`" == "111" ] ||
[ "`uci -q get olsrd.@olsrd[0].RtTableDefault`" == "112" ]; then
18 uci delete olsrd.@olsrd
[0].RtTable
19 uci delete olsrd.@olsrd
[0].RtTableDefault
24 olsrd_intalltables
() {
25 if [ ! "`uci -q get olsrd.@olsrd[0].RtTable`" == "111" ] ||
[ ! "`uci -q get olsrd.@olsrd[0].RtTableDefault`" == "112" ]; then
26 uci
set olsrd.@olsrd
[0].RtTable
='111'
27 uci
set olsrd.@olsrd
[0].RtTableDefault
='112'
29 /etc
/init.d
/olsrd restart
35 tables
="/etc/iproute2/rt_tables"
36 if [ -z "`grep "111" $tables`" ]; then
37 echo "111 olsr" >> $tables
39 if [ -z "`grep "112" $tables`" ]; then
40 echo "112 olsr-default" >> $tables
45 dyngwlib
=`uci show olsrd |grep dyn_gw.so |awk {' FS="."; print $1"."$2 '}`
46 if [ -n "$dyngwlib" ]; then
47 uci
set $dyngwlib.ignore
=1
51 dyngwplainlib
=`uci show olsrd |grep dyn_gw_plain |awk {' FS="."; print $1"."$2 '}`
52 if [ -n "$dyngwplainlib" ]; then
53 uci
set $dyngwplainlib.ignore
=1
60 /etc
/init.d
/network restart
61 /etc
/init.d
/olsrd restart
65 if [ "$enable" = "1" ]; then
66 [ -d /var
/state
] || mkdir
-p /var
/state
67 touch /var
/state
/freifunk-policyrouting
74 if [ $enable = "1" ]; then
75 logger
-s -t policyrouting
"Starting policy routing."
81 if [ ! "$(ip -$p ru s | grep "1000: from all lookup olsr
")" ]; then
82 ip
-$p rule add lookup olsr prio
1000
83 if [ "$?" = "0" ]; then
84 logger
-s -t policyrouting
"Added rule: lookup olsr prio 1000 (IPv$p)"
86 logger
-s -t policyrouting
"Error! Could not add rule: lookup olsr prio 1000 (IPv$p)"
91 # add unreachable with high metric so packets stop here if they find no gateway
92 # in table olsr-default
93 if [ "$strict" != 0 ]; then
95 [ ! "$(ip -$p r s t olsr-default |grep "unreachable default
")" ] && {
96 ip
-$p route add unreachable default table olsr-default metric
65535
97 if [ "$?" = "0" ]; then
98 logger
-s -t policyrouting
"Added route: unreachable default table olsr-default metric 65535 (IPv$p)"
100 logger
-s -t policyrouting
"Error! Could not add route: unreachable default table olsr-default metric 65535 (IPv$p)"
106 if [ "$fallback" = 1 ]; then
108 [ ! "$(ip -$p ru s |grep "from all lookup olsr-default
")" ] && {
109 ip
-$p rule add lookup olsr-default prio
33000
110 if [ "$?" = "0" ]; then
111 logger
-s -t policyrouting
"Added rule: olsr-default prio 33000 (IPv$p)"
113 logger
-s -t policyrouting
"Error! Could not add rule: olsr-default prio 33000 (IPv$p)"
122 logger
-s -t policyrouting
"Stopping policy routing"
125 ip
-$p route flush table olsr-default
126 ip
-$p rule del lookup olsr-default
> /dev
/null
2>&1
127 ip
-$p rule del lookup olsr
> /dev
/null
2>&1
130 echo "Hint: To completely disable freifunk-policyrouting set enable=0 in /etc/config/freifunk-policyrouting."
134 logger
-s -t policyrouting
"Restarting policy routing"
137 ip
-$p route flush table olsr-default
138 ip
-$p rule del lookup olsr-default
> /dev
/null
2>&1
139 ip
-$p rule del lookup olsr
> /dev
/null
2>&1