From c872d5ad710872b0eb627f4dc8e38e06e0c10262 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 24 Oct 2007 17:25:48 +0000 Subject: [PATCH] fix olsrd cflags handling, add new init script and config by Alina Friedrichsen SVN-Revision: 9431 --- net/olsrd/Makefile | 9 +- net/olsrd/files/olsr.config | 40 +++++ net/olsrd/files/olsrd.init | 319 +++++++++++++++++++++++++++++++++++- 3 files changed, 359 insertions(+), 9 deletions(-) create mode 100644 net/olsrd/files/olsr.config diff --git a/net/olsrd/Makefile b/net/olsrd/Makefile index 731484409..32d99a042 100644 --- a/net/olsrd/Makefile +++ b/net/olsrd/Makefile @@ -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 diff --git a/net/olsrd/files/olsr.config b/net/olsrd/files/olsr.config new file mode 100644 index 000000000..ca1f92eaa --- /dev/null +++ b/net/olsrd/files/olsr.config @@ -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' diff --git a/net/olsrd/files/olsrd.init b/net/olsrd/files/olsrd.init index cfab3825e..d5c8495f9 100644 --- a/net/olsrd/files/olsrd.init +++ b/net/olsrd/files/olsrd.init @@ -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() { -- 2.30.2