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 "110" $tables`" ]; then
37 echo "110 localnets" >> $tables
39 if [ -z "`grep "111" $tables`" ]; then
40 echo "111 olsr" >> $tables
42 if [ -z "`grep "112" $tables`" ]; then
43 echo "112 olsr-default" >> $tables
49 dyngwlib=`uci show olsrd |grep dyn_gw.so |awk {' FS="."; print $1"."$2 '}`
50 if [ -n "$dyngwlib" ]; then
51 uci set $dyngwlib.ignore=1
55 dyngwplainlib=`uci show olsrd |grep dyn_gw_plain |awk {' FS="."; print $1"."$2 '}`
56 if [ -n "$dyngwplainlib" ]; then
57 uci set $dyngwplainlib.ignore=1
64 /etc/init.d/network restart
65 /etc/init.d/olsrd restart
69 if [ "$enable" = "1" ]; then
70 [ -d /var/state ] || mkdir -p /var/state
71 touch /var/state/freifunk-policyrouting
78 if [ $enable = "1" ]; then
79 logger -s -t policyrouting "Starting policy routing."
85 if [ ! "$(ip -$p ru s | grep "1000: from all lookup olsr")" ]; then
86 ip -$p rule add lookup olsr prio 1000
87 # add table for routes to local networks
88 ip -$p rule add lookup localnets prio 2000
90 if [ "$?" = "0" ]; then
91 logger -s -t policyrouting "Added rule: lookup olsr prio 1000 (IPv$p)"
93 logger -s -t policyrouting "Error! Could not add rule: lookup olsr prio 1000 (IPv$p)"
98 # add unreachable with high metric so packets stop here if they find no gateway
99 # in table olsr-default
100 if [ "$strict" != 0 ]; then
102 [ ! "$(ip -$p r s t olsr-default |grep "unreachable default")" ] && {
103 ip -$p route add unreachable default table olsr-default metric 65535
104 if [ "$?" = "0" ]; then
105 logger -s -t policyrouting "Added route: unreachable default table olsr-default metric 65535 (IPv$p)"
107 logger -s -t policyrouting "Error! Could not add route: unreachable default table olsr-default metric 65535 (IPv$p)"
113 if [ "$fallback" = 1 ]; then
115 [ ! "$(ip -$p ru s |grep "from all lookup olsr-default")" ] && {
116 ip -$p rule add lookup olsr-default prio 33000
117 if [ "$?" = "0" ]; then
118 logger -s -t policyrouting "Added rule: olsr-default prio 33000 (IPv$p)"
120 logger -s -t policyrouting "Error! Could not add rule: olsr-default prio 33000 (IPv$p)"
129 logger -s -t policyrouting "Stopping policy routing"
132 ip -$p route flush table olsr-default
133 ip -$p rule del lookup olsr-default > /dev/null 2>&1
134 ip -$p rule del lookup olsr > /dev/null 2>&1
137 echo "Hint: To completely disable freifunk-policyrouting set enable=0 in /etc/config/freifunk-policyrouting."
141 logger -s -t policyrouting "Restarting policy routing"
144 ip -$p route flush table olsr-default
145 ip -$p rule del lookup olsr-default > /dev/null 2>&1
146 ip -$p rule del lookup olsr > /dev/null 2>&1