fix olsrd cflags handling, add new init script and config by Alina Friedrichsen
authorFelix Fietkau <nbd@openwrt.org>
Wed, 24 Oct 2007 17:25:48 +0000 (17:25 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Wed, 24 Oct 2007 17:25:48 +0000 (17:25 +0000)
SVN-Revision: 9431

net/olsrd/Makefile
net/olsrd/files/olsr.config [new file with mode: 0644]
net/olsrd/files/olsrd.init

index 7314844..32d99a0 100644 (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
diff --git a/net/olsrd/files/olsr.config b/net/olsrd/files/olsr.config
new file mode 100644 (file)
index 0000000..ca1f92e
--- /dev/null
@@ -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'
index cfab382..d5c8495 100644 (file)
 #!/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() {