[packages] olsrd: Manuel Munz freifunk@somakoma.de modified init file of olsrd with improvements for 6and4 operation and also for setup of smartgw
git-svn-id: svn://svn.openwrt.org/openwrt/packages@29134 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
7949f082b3
commit
ff3216995d
@ -1,12 +1,12 @@
|
|||||||
#!/bin/sh /etc/rc.common
|
#!/bin/sh /etc/rc.common
|
||||||
# Copyright (C) 2008-2011 OpenWrt.org
|
|
||||||
# Copyright (C) 2008 Alina Friedrichsen <x-alina@gmx.net>
|
# Copyright (C) 2008 Alina Friedrichsen <x-alina@gmx.net>
|
||||||
# Special thanks to bittorf wireless ))
|
# Special thanks to bittorf wireless ))
|
||||||
|
|
||||||
START=65
|
START=65
|
||||||
|
BIN=/usr/sbin/olsrd
|
||||||
SERVICE_DAEMONIZE=1
|
CONF=/var/etc/olsrd.conf
|
||||||
SERVICE_WRITE_PID=1
|
PID=/var/run/olsrd.pid
|
||||||
|
PID6=/var/run/olsrd.ipv6.pid
|
||||||
|
|
||||||
OLSRD_OLSRD_SCHEMA='ignore:internal config_file:internal DebugLevel=0 AllowNoInt=yes'
|
OLSRD_OLSRD_SCHEMA='ignore:internal config_file:internal DebugLevel=0 AllowNoInt=yes'
|
||||||
OLSRD_IPCCONNECT_SCHEMA='ignore:internal Host:list Net:list2'
|
OLSRD_IPCCONNECT_SCHEMA='ignore:internal Host:list Net:list2'
|
||||||
@ -45,7 +45,6 @@ get_ifname() {
|
|||||||
config_get ifname "$interface" ifname
|
config_get ifname "$interface" ifname
|
||||||
validate_ifname "$ifname" || return 1
|
validate_ifname "$ifname" || return 1
|
||||||
IFNAME="$ifname"
|
IFNAME="$ifname"
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -324,7 +323,6 @@ olsrd_write_olsrd() {
|
|||||||
local cfg="$1"
|
local cfg="$1"
|
||||||
validate_varname "$cfg" || return 0
|
validate_varname "$cfg" || return 0
|
||||||
local ignore
|
local ignore
|
||||||
local ipversion
|
|
||||||
|
|
||||||
config_get_bool ignore "$cfg" ignore 0
|
config_get_bool ignore "$cfg" ignore 0
|
||||||
[ "$ignore" -ne 0 ] && return 0
|
[ "$ignore" -ne 0 ] && return 0
|
||||||
@ -336,11 +334,12 @@ olsrd_write_olsrd() {
|
|||||||
OLSRD_IPVERSION_6AND4=1
|
OLSRD_IPVERSION_6AND4=1
|
||||||
config_set "$cfg" IpVersion '6'
|
config_set "$cfg" IpVersion '6'
|
||||||
fi
|
fi
|
||||||
|
config_get smartgateway "$cfg" SmartGateway
|
||||||
|
config_get smartgatewayuplink "$cfg" SmartGatewayUplink
|
||||||
|
|
||||||
config_write_options "$OLSRD_OLSRD_SCHEMA" "$cfg" olsrd_write_option
|
config_write_options "$OLSRD_OLSRD_SCHEMA" "$cfg" olsrd_write_option
|
||||||
echo
|
echo
|
||||||
OLSRD_COUNT=$((OLSRD_COUNT + 1))
|
OLSRD_COUNT=$((OLSRD_COUNT + 1))
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -461,9 +460,15 @@ olsrd_write_loadplugin() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
config_get latlon_file "$cfg" latlon_file
|
for f in latlon_file hosts_file services_file resolv_file macs_file; do
|
||||||
|
config_get $f "$cfg" $f
|
||||||
|
done
|
||||||
|
|
||||||
[ -z "$latlon_file" ] && config_set "$cfg" latlon_file '/var/run/latlon.js'
|
[ -z "$latlon_file" ] && config_set "$cfg" latlon_file '/var/run/latlon.js'
|
||||||
;;
|
;;
|
||||||
|
olsrd_watchdog.*)
|
||||||
|
config_get wd_file "$cfg" file
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo -n "${N}LoadPlugin \"$library\"${N}{"
|
echo -n "${N}LoadPlugin \"$library\"${N}{"
|
||||||
@ -490,6 +495,7 @@ olsrd_write_interface() {
|
|||||||
if validate_varname "$interface"; then
|
if validate_varname "$interface"; then
|
||||||
if get_ifname "$interface"; then
|
if get_ifname "$interface"; then
|
||||||
ifnames="$ifnames \"$IFNAME\""
|
ifnames="$ifnames \"$IFNAME\""
|
||||||
|
ifsglobal="$ifsglobal $IFNAME"
|
||||||
else
|
else
|
||||||
echo "Warning: Interface '$interface' not found, skipped" 1>&2
|
echo "Warning: Interface '$interface' not found, skipped" 1>&2
|
||||||
fi
|
fi
|
||||||
@ -562,6 +568,76 @@ olsrd_write_config() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
olsrd_setup_smartgw_rules() {
|
||||||
|
# Check if ipip is installed
|
||||||
|
[ ! -e /etc/modules.d/[0-9]*-ipip ] && echo "Warning: kmod-ipip is missing. SmartGateway will not work until you install it."
|
||||||
|
|
||||||
|
wanifnames=$(ip r l e 0/0 t all | sed -e 's/^.* dev //' |cut -d " " -f 1 | sort | uniq)
|
||||||
|
nowan=0
|
||||||
|
if [ -z "$wanifnames" ]; then
|
||||||
|
nowan=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
IP4T=$(which iptables)
|
||||||
|
IP6T=$(which ip6tables)
|
||||||
|
|
||||||
|
# Delete smartgw firewall rules first
|
||||||
|
for IPT in $IP4T $IP6T; do
|
||||||
|
while $IPT -D forwarding_rule -o tnl_+ -j ACCEPT 2> /dev/null; do :;done
|
||||||
|
for IFACE in $wanifnames; do
|
||||||
|
while $IPT -D forwarding_rule -i tunl0 -o $IFACE -j ACCEPT 2> /dev/null; do :; done
|
||||||
|
done
|
||||||
|
for IFACE in $ifsglobal; do
|
||||||
|
while $IPT -D input_rule -i $IFACE -p 4 -j ACCEPT 2> /dev/null; do :; done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
while $IP4T -t nat -D postrouting_rule -o tnl_+ -j MASQUERADE 2> /dev/null; do :;done
|
||||||
|
|
||||||
|
if [ "$smartgateway" == "yes" ]; then
|
||||||
|
echo "Notice: Inserting firewall rules for SmartGateway"
|
||||||
|
if [ ! "$smartgatewayuplink" == "none" ]; then
|
||||||
|
if [ "$smartgatewayuplink" == "ipv4" ]; then
|
||||||
|
# Allow everything to be forwarded to tnl_+ and use NAT for it
|
||||||
|
$IP4T -I forwarding_rule -o tnl_+ -j ACCEPT
|
||||||
|
$IP4T -t nat -I postrouting_rule -o tnl_+ -j MASQUERADE
|
||||||
|
# Allow forwarding from tunl0 to (all) wan-interfaces
|
||||||
|
if [ "$nowan"="0" ]; then
|
||||||
|
for IFACE in $wanifnames; do
|
||||||
|
$IP4T -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
# Allow incoming ipip on all olsr-interfaces
|
||||||
|
for IFACE in $ifsglobal; do
|
||||||
|
$IP4T -I input_rule -i $IFACE -p 4 -j ACCEPT
|
||||||
|
done
|
||||||
|
elif [ "$smartgatewayuplink" == "ipv6" ]; then
|
||||||
|
$IP6T -I forwarding_rule -o tnl_+ -j ACCEPT
|
||||||
|
if [ "$nowan"="0" ]; then
|
||||||
|
for IFACE in $wanifnames; do
|
||||||
|
$IP6T -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
for IFACE in $ifsglobal; do
|
||||||
|
$IP6T -I input_rule -i $IFACE -p 4 -j ACCEPT
|
||||||
|
done
|
||||||
|
else
|
||||||
|
for IPT in $IP4T $IP6T; do
|
||||||
|
$IPT -I forwarding_rule -o tnl_+ -j ACCEPT
|
||||||
|
$IPT -t nat -I postrouting_rule -o tnl_+ -j MASQUERADE
|
||||||
|
if [ "$nowan"="0" ]; then
|
||||||
|
for IFACE in $wanifnames; do
|
||||||
|
$IPT -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
for IFACE in $ifsglobal; do
|
||||||
|
$IPT -I input_rule -i $IFACE -p 4 -j ACCEPT
|
||||||
|
done
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
SYSTEM_HOSTNAME=
|
SYSTEM_HOSTNAME=
|
||||||
SYSTEM_LAT=
|
SYSTEM_LAT=
|
||||||
@ -598,19 +674,52 @@ start() {
|
|||||||
local bindv6only='0'
|
local bindv6only='0'
|
||||||
if [ "$OLSRD_IPVERSION_6AND4" -ne 0 ]; then
|
if [ "$OLSRD_IPVERSION_6AND4" -ne 0 ]; then
|
||||||
bindv6only="$(sysctl -n net.ipv6.bindv6only)"
|
bindv6only="$(sysctl -n net.ipv6.bindv6only)"
|
||||||
sysctl -w net.ipv6.bindv6only=1
|
sysctl -w net.ipv6.bindv6only=1 > /dev/null
|
||||||
sed -e 's/^\t\t[0-9.]*[ ][0-9.]*$//' < "$OLSRD_CONFIG_FILE" > /var/etc/olsrd.conf.ipv6
|
sed -e '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/d' < "$OLSRD_CONFIG_FILE" > /var/etc/olsrd.conf.ipv6
|
||||||
sed -i '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/d' /var/etc/olsrd.conf.ipv6
|
|
||||||
service_start /usr/sbin/olsrd -f /var/etc/olsrd.conf.ipv6 -nofork
|
|
||||||
sed -e 's/^IpVersion[ ][ ]*6$/IpVersion 4/' -e 's/^\t\t[A-Fa-f0-9.:]*[:][A-Fa-f0-9.:]*[ ][0-9]*$//' < "$OLSRD_CONFIG_FILE" > /var/etc/olsrd.conf.ipv4
|
sed -e 's/^IpVersion[ ][ ]*6$/IpVersion 4/' -e 's/^\t\t[A-Fa-f0-9.:]*[:][A-Fa-f0-9.:]*[ ][0-9]*$//' < "$OLSRD_CONFIG_FILE" > /var/etc/olsrd.conf.ipv4
|
||||||
service_start /usr/sbin/olsrd -f /var/etc/olsrd.conf.ipv4 -nofork
|
rm $OLSRD_CONFIG_FILE
|
||||||
|
|
||||||
|
# some filenames should get the suffix .ipv6
|
||||||
|
for file in $latlon_file $hosts_file $services_file $resolv_file $macs_file $wd_file;do
|
||||||
|
f=$(echo $file|sed 's/\//\\\//g')
|
||||||
|
sed -i "s/$f/$f.ipv6/g" /var/etc/olsrd.conf.ipv6
|
||||||
|
done
|
||||||
|
|
||||||
|
if ([ -s $PID6 ] && kill -0 $(cat $PID6) 2>&-); then
|
||||||
|
echo "Error: There already is a IPv6 instance of olsrd running ($(cat $PID6)), not starting."
|
||||||
|
else
|
||||||
|
start-stop-daemon -q -b -m -p $PID6 -x $BIN -S -- -f /var/etc/olsrd.conf.ipv6 -nofork
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ([ -s $PID ] && kill -0 $(cat $PID) 2>&-); then
|
||||||
|
echo "Error: There already is a IPv4 instance of olsrd running ($(cat $PID)), not starting."
|
||||||
|
else
|
||||||
|
start-stop-daemon -q -b -m -p $PID -x $BIN -S -- -f /var/etc/olsrd.conf.ipv4 -nofork
|
||||||
|
fi
|
||||||
|
|
||||||
sleep 3
|
sleep 3
|
||||||
sysctl -w net.ipv6.bindv6only="$bindv6only"
|
sysctl -w net.ipv6.bindv6only="$bindv6only" > /dev/null
|
||||||
|
|
||||||
else
|
else
|
||||||
service_start /usr/sbin/olsrd -f "$OLSRD_CONFIG_FILE" -nofork
|
|
||||||
|
if [ "$ipversion" = "6" ]; then
|
||||||
|
sed -i '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/d' "$OLSRD_CONFIG_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
### check for running instance
|
||||||
|
if ([ -s $PID ] && kill -0 $(cat $PID) 2>&-); then
|
||||||
|
echo "Error: There already is a instance of olsrd running ($(cat $PID)), exiting now."
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
start-stop-daemon -q -b -m -p $PID -x $BIN -S -- -f "$OLSRD_CONFIG_FILE" -nofork
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
olsrd_setup_smartgw_rules
|
||||||
}
|
}
|
||||||
|
|
||||||
stop() {
|
stop() {
|
||||||
service_stop /usr/sbin/olsrd
|
start-stop-daemon -q -p $PID -x $BIN -K
|
||||||
|
start-stop-daemon -q -p $PID6 -x $BIN -K
|
||||||
|
test -s $PID && rm $PID
|
||||||
|
test -s $PID6 && rm $PID6
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user