routing/olsrd/files/olsrd.init
Manuel Munz 385bb5489d if we could not get the l3 device in olsrd_write_interface then try to get the
physical device instead. But only if the protocoll is "static" or "none".
	This is useful to write Interfaces in the resulting olsrd.conf file which
	are not up at the time olsrd is starting (e.g. tunnel interfaces):
2013-08-07 23:39:18 +02:00

843 lines
20 KiB
Bash

#!/bin/sh /etc/rc.common
# Copyright (C) 2008-2013 OpenWrt.org
START=65
SERVICE_DAEMONIZE=1
SERVICE_WRITE_PID=1
CONF=/var/etc/olsrd.conf
PID=/var/run/olsrd.pid
PID6=/var/run/olsrd.ipv6.pid
OLSRD_OLSRD_SCHEMA='ignore:internal config_file:internal DebugLevel=0 AllowNoInt=yes'
OLSRD_IPCCONNECT_SCHEMA='ignore:internal Host:list Net:list2'
OLSRD_LOADPLUGIN_SCHEMA='ignore:internal library:internal Host4:list Net4:list2 Host:list Net:list2 Host6:list Net6:list2 Ping:list redistribute:list NonOlsrIf:list name:list lat lon latlon_infile HNA:list2 hosts:list2'
OLSRD_INTERFACE_SCHEMA='ignore:internal interface:internal AutoDetectChanges:bool'
OLSRD_INTERFACE_DEFAULTS_SCHEMA='AutoDetectChanges:bool'
T=' '
N='
'
log() {
logger -t olsrd -p daemon.info -s "${initscript}: $@"
}
error() {
log "ERROR: $@"
}
validate_varname() {
local varname="$1"
[ -z "$varname" -o "$varname" != "${varname%%[!A-Za-z0-9_]*}" ] && return 1
return 0
}
validate_olsrd_option() {
local str="$1"
[ -z "$str" -o "$str" != "${str%%[! 0-9A-Za-z./|:_-]*}" ] && return 1
return 0
}
system_config() {
local cfg="$1"
local cfgt hostname latlon oldIFS
config_get cfgt "$cfg" TYPE
if [ "$cfgt" = "system" ]; then
config_get hostname "$cfg" hostname
hostname="${hostname:-OpenWrt}"
SYSTEM_HOSTNAME="$hostname"
fi
if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then
config_get latlon "$cfg" latlon
oldIFS="$IFS"; IFS=" ${T}${N},"; set -- $latlon; IFS="$oldIFS"
SYSTEM_LAT="$1"
SYSTEM_LON="$2"
fi
if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then
config_get latlon "$cfg" latitude
SYSTEM_LAT="$latlon"
config_get latlon "$cfg" longitude
SYSTEM_LON="$latlon"
fi
}
olsrd_find_config_file() {
local cfg="$1"
validate_varname "$cfg" || return 0
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
config_get OLSRD_CONFIG_FILE "$cfg" config_file
return 0
}
warning_invalid_value() {
local funcname="warning_invalid_value"
local package="$1"
validate_varname "$package" || package=
local config="$2"
validate_varname "$config" || config=
local option="$3"
validate_varname "$option" || option=
if [ -n "$package" -a -n "$config" ]; then
log "$funcname() in option '$package.$config${option:+.}$option', skipped"
else
log "$funcname() skipped"
fi
return 0
}
olsrd_write_option() {
local param="$1"
local cfg="$2"
validate_varname "$cfg" || return 1
local option="$3"
validate_varname "$option" || return 1
local value="$4"
local option_type="$5"
if [ "$option_type" = bool ]; then
case "$value" in
1|on|true|enabled|yes) value=yes;;
0|off|false|disabled|no) value=no;;
*) warning_invalid_value olsrd "$cfg" "$option"; return 1;;
esac
fi
if ! validate_olsrd_option "$value"; then
warning_invalid_value olsrd "$cfg" "$option"
return 1
fi
if [ "$value" != "${value%%[G-Zg-z_-]*}" ]; then
if [ "$option" != "Ip6AddrType" -a "$option" != "LinkQualityMult" -a "$value" != "yes" -a "$value" != "no" ]; then
value="\"$value\""
fi
fi
echo -n "${N}$param$option $value"
return 0
}
olsrd_write_plparam() {
local funcname="olsrd_write_plparam"
local param="$1"
local cfg="$2"
validate_varname "$cfg" || return 1
local option="$3"
validate_varname "$option" || return 1
local value="$4"
local option_type="$5"
local _option oldIFS
if [ "$option_type" = bool ]; then
case "$value" in
1|on|true|enabled|yes) value=yes;;
0|off|false|disabled|no) value=no;;
*) warning_invalid_value olsrd "$cfg" "$option"; return 1;;
esac
fi
if ! validate_olsrd_option "$value"; then
warning_invalid_value olsrd "$cfg" "$option"
return 1
fi
oldIFS="$IFS"
IFS='-_'
set -- $option
option="$*"
IFS="$oldIFS"
_option="$option"
if [ "$option" = 'hosts' ]; then
set -- $value
option="$1"
shift
value="$*"
fi
if [ "$option" = 'NonOlsrIf' ]; then
if validate_varname "$value"; then
if network_get_device ifname "$value"; then
log "$funcname() Info: mdns Interface '$value' ifname '$ifname' found"
else
log "$funcname() Warning: mdns Interface '$value' not found, skipped"
fi
else
warning_invalid_value olsrd "$cfg" "NonOlsrIf"
fi
[ -z "$ifname" ] || value=$ifname
fi
echo -n "${N}${param}PlParam \"$option\" \"$value\""
return 0
}
config_update_schema() {
local schema_varname="$1"
validate_varname "$schema_varname" || return 1
local command="$2"
validate_varname "$command" || return 1
local option="$3"
validate_varname "$option" || return 1
local value="$4"
local schema
local cur_option
case "$varname" in
*_LENGTH) return 0;;
*_ITEM*) return 0;;
esac
eval "export -n -- \"schema=\${$schema_varname}\""
for cur_option in $schema; do
[ "${cur_option%%[:=]*}" = "$option" ] && return 0
done
if [ "$command" = list ]; then
set -- $value
if [ "$#" -ge "3" ]; then
schema_entry="$option:list3"
elif [ "$#" -ge "2" ]; then
schema_entry="$option:list2"
else
schema_entry="$option:list"
fi
else
schema_entry="$option"
fi
append "$schema_varname" "$schema_entry"
return 0
}
config_write_options() {
local funcname="config_write_options"
local schema="$1"
local cfg="$2"
validate_varname "$cfg" || return 1
local write_func="$3"
[ -z "$write_func" ] && output_func=echo
local write_param="$4"
local schema_entry option option_length option_type default value list_size list_item list_value i position speed oldIFS
local list_speed_vars="HelloInterval HelloValidityTime TcInterval TcValidityTime MidInterval MidValidityTime HnaInterval HnaValidityTime"
get_value_for_entry()
{
local schema_entry="$1"
default="${schema_entry#*[=]}"
[ "$default" = "$schema_entry" ] && default=
option="${schema_entry%%[=]*}"
oldIFS="$IFS"; IFS=':'; set -- $option; IFS="$oldIFS"
option="$1"
option_type="$2"
validate_varname "$option" || return 1
[ -z "$option_type" ] || validate_varname "$option_type" || return 1
[ "$option_type" = internal ] && return 1
config_get value "$cfg" "$option"
[ "$option" = "speed" ] && return 1
return 0
}
already_in_schema()
{
case " $schema " in
*" $1 "*)
return 0
;;
*)
return 1
;;
esac
}
already_in_schema "speed" && {
get_value_for_entry "speed"
if [ 2>/dev/null $value -gt 0 -a $value -le 20 ]; then
speed="$value"
else
log "$funcname() Warning: invalid speed-value: '$value' - allowed integers: 1...20, fallback to 6"
speed=6
fi
for schema_entry in $list_speed_vars; do {
already_in_schema "$schema_entry" || schema="$schema $schema_entry"
} done
}
for schema_entry in $schema; do
if [ -n "$speed" ]; then # like sven-ola freifunk firmware fff-1.7.4
case "$schema_entry" in
HelloInterval)
value="$(( $speed / 2 + 1 )).0"
;;
HelloValidityTime)
value="$(( $speed * 25 )).0"
;;
TcInterval) # todo: not fisheye? -> $(( $speed * 2 ))
value=$(( $speed / 2 ))
[ $value -eq 0 ] && value=1
value="$value.0"
;;
TcValidityTime)
value="$(( $speed * 100 )).0"
;;
MidInterval)
value="$(( $speed * 5 )).0"
;;
MidValidityTime)
value="$(( $speed * 100 )).0"
;;
HnaInterval)
value="$(( $speed * 2 )).0"
;;
HnaValidityTime)
value="$(( $speed * 25 )).0"
;;
*)
get_value_for_entry "$schema_entry" || continue
;;
esac
is_speed_var()
{
case " $list_speed_vars " in
*" $1 "*)
return 0
;;
*)
return 1
;;
esac
}
is_speed_var "$schema_entry" && option="$schema_entry"
else
get_value_for_entry "$schema_entry" || continue
fi
if [ -z "$value" ]; then
oldIFS="$IFS"; IFS='+'; set -- $default; IFS="$oldIFS"
value=$*
elif [ "$value" = '-' -a -n "$default" ]; then
continue
fi
[ -z "$value" ] && continue
case "$option_type" in
list) list_size=1;;
list2) list_size=2;;
list3) list_size=3;;
*) list_size=0;;
esac
if [ "$list_size" -gt 0 ]; then
config_get option_length "$cfg" "${option}_LENGTH"
if [ -n "$option_length" ]; then
i=1
while [ "$i" -le "$option_length" ]; do
config_get list_value "$cfg" "${option}_ITEM$i"
"$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type" || break
i=$((i + 1))
done
else
list_value=
i=0
for list_item in $value; do
append "list_value" "$list_item"
i=$((i + 1))
position=$((i % list_size))
if [ "$position" -eq 0 ]; then
"$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type" || break
list_value=
fi
done
[ "$position" -ne 0 ] && "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type"
fi
else
"$write_func" "$write_param" "$cfg" "$option" "$value" "$option_type"
fi
done
return 0
}
olsrd_write_olsrd() {
local cfg="$1"
validate_varname "$cfg" || return 0
local ignore
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
[ "$OLSRD_COUNT" -gt 0 ] && return 0
config_get ipversion "$cfg" IpVersion
if [ "$ipversion" = "6and4" ]; then
OLSRD_IPVERSION_6AND4=1
config_set "$cfg" IpVersion '6'
fi
config_get smartgateway "$cfg" SmartGateway
config_get smartgatewayuplink "$cfg" SmartGatewayUplink
config_write_options "$OLSRD_OLSRD_SCHEMA" "$cfg" olsrd_write_option
echo
OLSRD_COUNT=$((OLSRD_COUNT + 1))
return 0
}
olsrd_write_ipcconnect() {
local cfg="$1"
validate_varname "$cfg" || return 0
local ignore
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
[ "$IPCCONNECT_COUNT" -gt 0 ] && return 0
echo -n "${N}IpcConnect${N}{"
config_write_options "$OLSRD_IPCCONNECT_SCHEMA" "$cfg" olsrd_write_option "${T}"
echo "${N}}"
IPCCONNECT_COUNT=$((IPCCONNECT_COUNT + 1))
return 0
}
olsrd_write_hna4() {
local cfg="$1"
validate_varname "$cfg" || return 0
local ignore
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
config_get netaddr "$cfg" netaddr
if ! validate_olsrd_option "$netaddr"; then
warning_invalid_value olsrd "$cfg" "netaddr"
return 0
fi
config_get netmask "$cfg" netmask
if ! validate_olsrd_option "$netmask"; then
warning_invalid_value olsrd "$cfg" "netmask"
return 0
fi
[ "$HNA4_COUNT" -le 0 ] && echo -n "${N}Hna4${N}{"
echo -n "${N}${T}${T}$netaddr $netmask"
HNA4_COUNT=$((HNA4_COUNT + 1))
return 0
}
olsrd_write_hna6() {
local cfg="$1"
validate_varname "$cfg" || return 0
local ignore
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
config_get netaddr "$cfg" netaddr
if ! validate_olsrd_option "$netaddr"; then
warning_invalid_value olsrd "$cfg" "netaddr"
return 0
fi
config_get prefix "$cfg" prefix
if ! validate_olsrd_option "$prefix"; then
warning_invalid_value olsrd "$cfg" "prefix"
return 0
fi
[ "$HNA6_COUNT" -le 0 ] && echo -n "${N}Hna6${N}{"
echo -n "${N}${T}${T}$netaddr $prefix"
HNA6_COUNT=$((HNA6_COUNT + 1))
return 0
}
olsrd_write_loadplugin() {
local funcname="olsrd_write_loadplugin"
local cfg="$1"
validate_varname "$cfg" || return 0
local ignore
local name
local suffix
local lat
local lon
local latlon_infile
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
config_get library "$cfg" library
if ! validate_olsrd_option "$library"; then
warning_invalid_value olsrd "$cfg" "library"
return 0
fi
if ! [ -x "/lib/$library" -o -x "/usr/lib/$library" -o -x "/usr/local/lib/$library" ]; then
log "$funcname() Warning: Plugin library '$library' not found, skipped"
return 0
fi
case "$library" in
olsrd_nameservice.*)
config_get name "$cfg" name
[ -z "$name" ] && config_set "$cfg" name $SYSTEM_HOSTNAME
config_get suffix "$cfg" suffix
[ -z "$suffix" ] && config_set "$cfg" suffix '.olsr'
config_get lat "$cfg" lat
config_get lon "$cfg" lon
config_get latlon_infile "$cfg" latlon_infile
if [ \( -z "$lat" -o -z "$lat" \) -a -z "$latlon_infile" ]; then
if [ -f '/var/run/latlon.txt' ]; then
config_set "$cfg" lat ''
config_set "$cfg" lon ''
config_set "$cfg" latlon_infile '/var/run/latlon.txt'
else
config_set "$cfg" lat "$SYSTEM_LAT"
config_set "$cfg" lon "$SYSTEM_LON"
fi
fi
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'
;;
olsrd_watchdog.*)
config_get wd_file "$cfg" file
;;
esac
echo -n "${N}LoadPlugin \"$library\"${N}{"
config_write_options "$OLSRD_LOADPLUGIN_SCHEMA" "$cfg" olsrd_write_plparam "${T}"
echo "${N}}"
return 0
}
olsrd_write_interface() {
local funcname="olsrd_write_interface"
local cfg="$1"
validate_varname "$cfg" || return 0
local ignore
local interfaces
local interface
local ifnames
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
ifnames=
config_get interfaces "$cfg" interface
for interface in $interfaces; do
if validate_varname "$interface"; then
if network_get_device IFNAME "$interface"; then
ifnames="$ifnames \"$IFNAME\""
ifsglobal="$ifsglobal $IFNAME"
elif network_get_physdev IFNAME "$interface"; then
local proto="$(uci -q get network.${interface}.proto)"
if [ "$proto" = "static" -o "$proto" = "none" ]; then
ifnames="$ifnames \"$IFNAME\""
ifsglobal="$ifsglobal $IFNAME"
fi
else
log "$funcname() Warning: Interface '$interface' not found, skipped"
fi
else
warning_invalid_value olsrd "$cfg" "interface"
fi
done
[ -z "$ifnames" ] && return 0
echo -n "${N}Interface$ifnames${N}{"
config_write_options "$OLSRD_INTERFACE_SCHEMA" "$cfg" olsrd_write_option "${T}"
echo "${N}}"
INTERFACES_COUNT=$((INTERFACES_COUNT + 1))
return 0
}
olsrd_write_interface_defaults() {
local cfg="$1"
validate_varname "$cfg" || return 0
echo -n "${N}InterfaceDefaults$ifnames${N}{"
config_write_options "$OLSRD_INTERFACE_DEFAULTS_SCHEMA" "$cfg" olsrd_write_option "${T}"
echo "${N}}"
return 1
}
olsrd_update_schema() {
local command="$1"
validate_varname "$command" || return 0
local varname="$2"
validate_varname "$varname" || return 0
local value="$3"
local cfg="$CONFIG_SECTION"
local cfgt
local cur_varname
config_get cfgt "$cfg" TYPE
case "$cfgt" in
olsrd) config_update_schema OLSRD_OLSRD_SCHEMA "$command" "$varname" "$value";;
IpcConnect) config_update_schema OLSRD_IPCCONNECT_SCHEMA "$command" "$varname" "$value";;
LoadPlugin) config_update_schema OLSRD_LOADPLUGIN_SCHEMA "$command" "$varname" "$value";;
Interface) config_update_schema OLSRD_INTERFACE_SCHEMA "$command" "$varname" "$value";;
InterfaceDefaults) config_update_schema OLSRD_INTERFACE_DEFAULTS_SCHEMA "$command" "$varname" "$value";;
esac
return 0
}
olsrd_write_config() {
OLSRD_IPVERSION_6AND4=0
OLSRD_COUNT=0
config_foreach olsrd_write_olsrd olsrd
IPCCONNECT_COUNT=0
config_foreach olsrd_write_ipcconnect IpcConnect
HNA4_COUNT=0
config_foreach olsrd_write_hna4 Hna4
[ "$HNA4_COUNT" -gt 0 ] && echo "${N}}"
HNA6_COUNT=0
config_foreach olsrd_write_hna6 Hna6
[ "$HNA6_COUNT" -gt 0 ] && echo "${N}}"
config_foreach olsrd_write_loadplugin LoadPlugin
INTERFACES_COUNT=0
config_foreach olsrd_write_interface_defaults InterfaceDefaults
config_foreach olsrd_write_interface Interface
echo
return 0
}
get_wan_ifnames()
{
local wanifnames word catch_next
which ip >/dev/null || return 1
set -- $( ip route list exact 0.0.0.0/0 table all )
for word in $*; do
case "$word" in
dev)
catch_next="true"
;;
*)
[ -n "$catch_next" ] && {
case "$wanifnames" in
*" $word "*)
;;
*)
wanifnames="$wanifnames $word "
;;
esac
catch_next=
}
;;
esac
done
echo "$wanifnames"
}
olsrd_setup_smartgw_rules() {
local funcname="olsrd_setup_smartgw_rules"
# Check if ipip is installed
[ -e /etc/modules.d/[0-9]*-ipip ] || {
log "$funcname() Warning: kmod-ipip is missing. SmartGateway will not work until you install it."
return 1
}
local wanifnames="$( get_wan_ifnames )"
if [ -z "$wanifnames" ]; then
nowan=1
else
nowan=0
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
log "$funcname() 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() {
SYSTEM_HOSTNAME=
SYSTEM_LAT=
SYSTEM_LON=
config_load system
config_foreach system_config system
option_cb() {
olsrd_update_schema "option" "$@"
}
list_cb() {
olsrd_update_schema "list" "$@"
}
. /lib/functions/network.sh
config_load olsrd
reset_cb
OLSRD_CONFIG_FILE=
config_foreach olsrd_find_config_file olsrd
if [ -z "$OLSRD_CONFIG_FILE" ]; then
mkdir -p -- /var/etc/
olsrd_write_config > /var/etc/olsrd.conf
if [ "$INTERFACES_COUNT" -gt 0 -a "$OLSRD_COUNT" -gt 0 ]; then
OLSRD_CONFIG_FILE=/var/etc/olsrd.conf
fi
fi
[ -z "$OLSRD_CONFIG_FILE" ] && return 1
local bindv6only='0'
if [ "$OLSRD_IPVERSION_6AND4" -ne 0 ]; then
bindv6only="$(sysctl -n net.ipv6.bindv6only)"
sysctl -w net.ipv6.bindv6only=1 > /dev/null
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 -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
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
SERVICE_PID_FILE="$PID6"
if service_check /usr/sbin/olsrd; then
error "there is already an IPv6 instance of olsrd running (pid: '$(cat $PID6)'), not starting."
else
service_start /usr/sbin/olsrd -f /var/etc/olsrd.conf.ipv6 -nofork
fi
SERVICE_PID_FILE="$PID"
if service_check /usr/sbin/olsrd; then
error "there is already an IPv4 instance of olsrd running (pid: '$(cat $PID)'), not starting."
else
service_start /usr/sbin/olsrd -f /var/etc/olsrd.conf.ipv4 -nofork
fi
sleep 3
sysctl -w net.ipv6.bindv6only="$bindv6only" > /dev/null
else
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
SERVICE_PID_FILE="$PID"
if service_check /usr/sbin/olsrd; then
error "there is already an IPv4 instance of olsrd running (pid: '$(cat $PID)'), not starting."
return 1
else
service_start /usr/sbin/olsrd -f "$OLSRD_CONFIG_FILE" -nofork
service_check /usr/sbin/olsrd || {
log "startup-error: check via: '/usr/sbin/olsrd -f \"$OLSRD_CONFIG_FILE\" -nofork'"
}
fi
fi
olsrd_setup_smartgw_rules
}
stop() {
SERVICE_PID_FILE="$PID"
service_stop /usr/sbin/olsrd
SERVICE_PID_FILE="$PID6"
service_stop /usr/sbin/olsrd
}