--- /dev/null
+config "olsr" "general"
+ option DebugLevel '0'
+ option IpVersion '4'
+ option AllowNoInt 'yes'
+ option Pollrate '0.025'
+ option TcRedundancy '2'
+ option NatThreshold '0.9'
+ option MprCoverage '7'
+ option LinkQualityFishEye '1'
+ option LinkQualityWinSize '100'
+ option LinkQualityDijkstraLimit '0 9.0'
+ option LinkQualityLevel '2'
+ option UseHysteresis 'no'
+
+config "LoadPlugin" "arprefresh"
+ option Library 'olsrd_arprefresh.so.0.1'
+
+config "LoadPlugin" "dyn_gw_plain"
+ option Library 'olsrd_dyn_gw_plain.so.0.4'
+
+config "LoadPlugin" "nameservice"
+ option Library 'olsrd_nameservice.so.0.3'
+ option name 'sven-ola-gs'
+ option hosts_file '/var/etc/hosts'
+ option suffix '.olsr'
+ option latlon_infile '/var/run/latlon.txt'
+
+config "LoadPlugin" "txtinfo"
+ option Library 'olsrd_txtinfo.so.0.1'
+ option Accept '127.0.0.1'
+
+config "Interface" "if1"
+ option HelloInterval '6.0'
+ option HelloValidityTime '108.0'
+ option TcInterval '4.0'
+ option TcValidityTime '324.0'
+ option MidInterval '18.0'
+ option MidValidityTime '324.0'
+ option HnaInterval '18.0'
+ option HnaValidityTime '108.0'
#!/bin/sh /etc/rc.common
-# Copyright (C) 2006 OpenWrt.org
START=50
BIN=olsrd
+CONF_F=/var/etc/olsrd.conf
+USE_CONF_F=
DEFAULT=/etc/default/olsrd
RUN_D=/var/run
PID_F=$RUN_D/$BIN.pid
+format_olsr_option() {
+ local str="$*"
+ echo -n "$str" | tr -d '\n\r\t\v '
+}
+
+format_olsr_value() {
+ local str="$*"
+ echo -n "$str" | tr -d '\n\r\v'
+}
+
+format_olsr_param() {
+ local str="$*"
+ echo -n "$str" | tr -d '\n\r\v"'
+}
+
+format_uci_varname() {
+ local str="$*"
+ echo -n "$str" | sed -e 's/[^a-zA-Z0-9_]//g'
+}
+
+foreach_olsr() {
+ local cfg="$1"
+ local option
+ local value
+
+ for option in $CONFIG_OPTIONS
+ do
+ config_get value "$cfg" "$option"
+ option=$(format_olsr_option "$option")
+ value=$(format_olsr_value "$value")
+
+ if [ -n "$value" -a "$option" != "ConfigFile" ]; then
+ echo "$option $value" >> "$CONF_F"
+ fi
+ done
+ echo >> "$CONF_F"
+}
+
+foreach_Hna4() {
+ local cfg="$1"
+ local netaddr
+ local netmask
+
+ config_get netaddr "$cfg" NetAddr
+ config_get netmask "$cfg" NetMask
+ netaddr=$(format_olsr_option "$netaddr")
+ netmask=$(format_olsr_option "$netmask")
+
+ if [ -n "$netaddr" -a -n "$netmask" ]; then
+ if [ "$HNA4_COUNT" -le 0 ]; then
+ echo "Hna4" >> "$CONF_F"
+ echo "{" >> "$CONF_F"
+ fi
+
+ echo " $netaddr $netmask" >> "$CONF_F"
+ HNA4_COUNT=$((HNA4_COUNT + 1))
+ fi
+}
+
+write_Hna4() {
+ if [ "$HNA4_COUNT" -gt 0 ]; then
+ echo "}" >> "$CONF_F"
+ echo >> "$CONF_F"
+ fi
+}
+
+foreach_Hna6() {
+ local cfg="$1"
+ local netaddr
+ local netmask
+
+ config_get netaddr "$cfg" NetAddr
+ config_get prefix "$cfg" Prefix
+ netaddr=$(format_olsr_option "$netaddr")
+ prefix=$(format_olsr_option "$prefix")
+
+ if [ -n "$netaddr" -a -n "$prefix" ]; then
+ if [ "$HNA6_COUNT" -le 0 ]; then
+ echo "Hna6" >> "$CONF_F"
+ echo "{" >> "$CONF_F"
+ fi
+
+ echo " $netaddr $prefix" >> "$CONF_F"
+ HNA6_COUNT=$((HNA6_COUNT + 1))
+ fi
+}
+
+write_Hna6() {
+ if [ "$HNA6_COUNT" -gt 0 ]; then
+ echo "}" >> "$CONF_F"
+ echo >> "$CONF_F"
+ fi
+}
+
+foreach_IpcConnect() {
+ local cfg="$1"
+ local option
+ local value
+ local c
+
+ echo "IpcConnect" >> "$CONF_F"
+ echo -n "{" >> "$CONF_F"
+
+ for option in $CONFIG_OPTIONS
+ do
+ config_get value "$cfg" "$option"
+ option=$(format_olsr_option "$option")
+ value=$(format_olsr_value "$value")
+
+ if [ -n "$value" ]; then
+ if [ "$option" = "Host" ]; then
+ for item in $value
+ do
+ echo >> "$CONF_F"
+ echo -n " $option $item" >> "$CONF_F"
+ done
+ elif [ "$option" = "Net" ]; then
+ c=0
+ for item in $value
+ do
+ if [ $((c % 2)) -eq 0 ]; then
+ echo >> "$CONF_F"
+ echo -n " $option $item" >> "$CONF_F"
+ else
+ echo -n " $item" >> "$CONF_F"
+ fi
+ c=$((c + 1))
+ done
+ else
+ echo >> "$CONF_F"
+ echo -n " $option $value" >> "$CONF_F"
+ fi
+ fi
+ done
+
+ echo >> "$CONF_F"
+ echo "}" >> "$CONF_F"
+ echo >> "$CONF_F"
+}
+
+foreach_LoadPlugin() {
+ local cfg="$1"
+ local library
+ local option
+ local value
+ local is_ip_addr
+ local item
+ local c
+
+ config_get library "$cfg" Library
+ library=$(format_olsr_param "$library")
+
+ if [ -n "$library" ]; then
+ echo "LoadPlugin \"$library\"" >> "$CONF_F"
+ echo -n "{" >> "$CONF_F"
+
+ for option in $CONFIG_OPTIONS
+ do
+ config_get value "$cfg" "$option"
+ option=$(format_olsr_param "$option")
+ value=$(format_olsr_param "$value")
+
+ if [ -n "$value" ]; then
+ option=$(echo "$option" | sed -e y/[_]/[-]/)
+
+ is_ip_addr=$(echo "$option" | sed -e 's/[^-]//g')
+ if [ "$is_ip_addr" = "---" ]; then
+ option=$(echo "$option" | sed -e y/[-]/[.]/)
+ fi
+
+ if [ "$option" = "Ping" -o "$option" = "redistribute" -o "$option" = "Host" -o "$option" = "NonOlsrIf" -o "$option" = "name" -o "$is_ip_addr" = "---" ]; then
+ for item in $value
+ do
+ echo >> "$CONF_F"
+ echo -n " PlParam \"$option\" \"$item\"" >> "$CONF_F"
+ done
+ elif [ "$option" = "Net" -o "$option" = "HNA" ]; then
+ c=0
+ for item in $value
+ do
+ if [ $((c % 2)) -eq 0 ]; then
+ echo >> "$CONF_F"
+ echo -n " PlParam \"$option\" \"$item" >> "$CONF_F"
+ else
+ echo -n " $item\"" >> "$CONF_F"
+ fi
+ c=$((c + 1))
+ done
+ elif [ "$option" != "Library" ]; then
+ echo >> "$CONF_F"
+ echo -n " PlParam \"$option\" \"$value\"" >> "$CONF_F"
+ fi
+ fi
+ done
+
+ echo >> "$CONF_F"
+ echo "}" >> "$CONF_F"
+ echo >> "$CONF_F"
+ fi
+}
+
+foreach_Interface() {
+ local cfg="$1"
+ local interfaces
+ local interface
+ local ifname
+ local option
+ local value
+ local item
+ local c
+
+ config_get interfaces "$cfg" Interface
+
+ if [ -n "$interfaces" ]; then
+ echo -n "Interface" >> "$CONF_F"
+
+ for interface in $interfaces
+ do
+ interface=$(format_uci_varname "$interface")
+ config_get ifnames "$interface" ifname
+ for ifname in $ifnames
+ do
+ ifname=$(format_olsr_param "$ifname")
+ echo -n " \"$ifname\"" >> "$CONF_F"
+ done
+ done
+
+ echo >> "$CONF_F"
+ echo -n "{" >> "$CONF_F"
+
+ for option in $CONFIG_OPTIONS
+ do
+ config_get value "$cfg" "$option"
+ option=$(format_olsr_option "$option")
+ value=$(format_olsr_value "$value")
+
+ if [ -n "$value" ]; then
+ if [ "$option" = "LinkQualityMult" ]; then
+ c=0
+ for item in $value
+ do
+ if [ $((c % 2)) -eq 0 ]; then
+ echo >> "$CONF_F"
+ echo -n " $option $item" >> "$CONF_F"
+ else
+ echo -n " $item" >> "$CONF_F"
+ fi
+ c=$((c + 1))
+ done
+ elif [ "$option" != "Interface" ]; then
+ echo >> "$CONF_F"
+ echo -n " $option $value" >> "$CONF_F"
+ fi
+ fi
+ done
+
+ echo >> "$CONF_F"
+ echo "}" >> "$CONF_F"
+ fi
+}
+
+write_config() {
+ include /lib/network
+ scan_interfaces
+ config_load /var/state/network
+
+ config_cb() {
+ local cfgtype="$1"
+ local name="$2"
+ CONFIG_TYPE="$cfgtype"
+ }
+
+ option_cb() {
+ local varname="$1"
+ local value="$2"
+
+ if [ "$CONFIG_TYPE" = "OLSR" -a "$varname" = "ConfigFile" ]; then
+ USE_CONF_F="$value"
+ fi
+
+ if ! echo "$CONFIG_OPTIONS" | grep " $varname " > /dev/null; then
+ CONFIG_OPTIONS="$CONFIG_OPTIONS $varname "
+ fi
+ }
+
+ CONFIG_OPTIONS=""
+ config_load olsr
+
+ if [ -n "$USE_CONF_F" ]; then
+ return 0
+ else
+ USE_CONF_F="$CONF_F"
+ fi
+
+ mkdir -p $(dirname "$CONF_F")
+ > "$CONF_F"
+ config_foreach foreach_olsr olsr
+ HNA4_COUNT=0
+ config_foreach foreach_Hna4 Hna4
+ write_Hna4
+ HNA6_COUNT=0
+ config_foreach foreach_Hna6 Hna6
+ write_Hna6
+ config_foreach foreach_IpcConnect IpcConnect
+ config_foreach foreach_LoadPlugin LoadPlugin
+ config_foreach foreach_Interface Interface
+}
+
start() {
+ [ -z "$USE_CONF_F" ] && write_config
+
[ -f $DEFAULT ] && . $DEFAULT
- $BIN -nofork $OPTIONS &
-
+ $BIN -f "$USE_CONF_F" -nofork $OPTIONS &
+
# write pid file (but strip out own pid ($$))
mkdir -p $RUN_D
PID=`pidof $BIN`
echo ${PID%$$} > $PID_F
-
-
}
stop() {