fix olsrd cflags handling, add new init script and config by Alina Friedrichsen

git-svn-id: svn://svn.openwrt.org/openwrt/packages/net/olsrd@9431 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
Felix Fietkau 2007-10-24 17:25:48 +00:00
parent f3337d12d2
commit a48f39dbc0
3 changed files with 359 additions and 9 deletions

View File

@ -102,7 +102,7 @@ define Build/Compile
$(MAKE) -C "$(PKG_BUILD_DIR)" \
$(TARGET_CONFIGURE_OPTS) \
NODEBUG=1 \
OFLAGS="$(TARGET_CFLAGS)" \
CFLAGS="$(TARGET_CFLAGS)" \
OS="linux" \
INSTALL_PREFIX="$(PKG_INSTALL_DIR)" \
LIBDIR="$(PKG_INSTALL_DIR)/usr/lib" \
@ -114,10 +114,11 @@ define Build/Compile
endef
define Package/olsrd/install
$(INSTALL_DIR) $(1)/etc
$(CP) $(PKG_INSTALL_DIR)/etc/olsrd.conf $(1)/etc/
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DATA) ./files/olsr.config $(1)/etc/config/olsr
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/etc/olsrd.conf $(1)/etc/
$(INSTALL_DIR) $(1)/usr/sbin
$(CP) $(PKG_INSTALL_DIR)/usr/sbin/olsrd $(1)/usr/sbin/
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/olsrd $(1)/usr/sbin/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/olsrd.init $(1)/etc/init.d/olsrd
endef

40
files/olsr.config Normal file
View File

@ -0,0 +1,40 @@
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'

View File

@ -1,22 +1,331 @@
#!/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() {