4 . /lib/functions/network.sh
7 [ -f /proc/net/ipv6_route ] && proto="4 6"
9 config_load freifunk-policyrouting
10 config_get enable pr enable
11 config_get fallback pr fallback
12 config_get zones pr zones
14 if [ "$ACTION" = "ifup" ] && [ "$enable" = "1" ]; then
15 network_get_subnet net $INTERFACE
16 network_get_subnet6 net6 $INTERFACE
17 network_get_physdev dev $INTERFACE
19 if [ "$net" != "" -a -n "$dev" ]; then
20 eval $(/bin/ipcalc.sh $net)
21 if [ "$PREFIX" != "0" ]; then
22 if [ ! "$(ip r s t olsr-default |grep "throw $NETWORK/$PREFIX")" ]; then
23 ip r a throw $NETWORK/$PREFIX table olsr-default
25 logger -s -t policyrouting "Add route: throw $NETWORK/$PREFIX table olsr-default"
27 logger -s -t policyrouting "Error! Could not add route: throw $NETWORK/$PREFIX table olsr-default"
32 if [ -n "$net6" ]; then
33 if [ ! "$(ip -6 r s t olsr-default |grep "throw $net6")" ]; then
34 rule="throw $net6 table olsr-default dev $dev"
37 logger -s -t policyrouting "Add route: $rule (IPv6)"
39 logger -s -t policyrouting "Error! Could not add route: $rule (IPv6)"
46 network_zone="$(uci -q get firewall.zone_${z}.network)"
47 if [ -z "$network_zone" ]; then
50 networks="$networks $network_zone"
52 for n in $networks; do
53 if [ "$INTERFACE" = "$n" ]; then
55 if [ ! "$(ip -$p ru s | grep "from all iif $dev lookup olsr-default")" ]; then
56 ip -$p rule add dev "$dev" lookup olsr-default prio 20000
58 logger -s -t policyrouting "Use mesh gateway for interface $dev (IPv$p)"
59 if [ -z "$(uci -P /var/state get freifunk-policyrouting.${INTERFACE})" ]; then
60 uci -P /var/state set freifunk-policyrouting.${INTERFACE}="state"
62 uci -P /var/state set freifunk-policyrouting.${INTERFACE}.device="$dev"
64 logger -s -t policyrouting "Error: Could not add rule: dev "$dev" lookup olsr-default prio 20000 (IPv$p)"
73 if [ "$ACTION" = "ifdown" ]; then
74 dev="$(uci -q -P /var/state get freifunk-policyrouting.${INTERFACE}.device)"
75 if [ -n "$dev" ]; then
78 network_zone="$(uci -q get firewall.zone_${z}.network)"
79 if [ -z "$network_zone" ]; then
82 networks="$networks $network_zone"
84 for n in $networks; do
85 if [ "$INTERFACE" = "$n" ]; then
87 if [ "$(ip -$p ru s | grep "from all iif $dev lookup olsr-default")" ]; then
88 ip -$p rule del dev "$dev" lookup olsr-default prio 20000
90 logger -s -t policyrouting "Remove rule: dev "$dev" lookup olsr-default prio 20000 (IPv$p)"
92 logger -s -t policyrouting "Error! Could not remove rule: dev "$dev" lookup olsr-default prio 20000 (IPv$p)"