From af1594ef83e5dec4194fca86df324a7fb741ce37 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Mon, 8 Sep 2008 12:42:13 +0000 Subject: [PATCH] add new olsrd init script and default config by Alina Friedrichsen git-svn-id: svn://svn.openwrt.org/openwrt/packages/net/olsrd@12553 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- Makefile | 2 +- files/olsr.config | 47 --- files/olsrd.config | 23 ++ files/olsrd.init | 727 +++++++++++++++++++++++++++++---------------- 4 files changed, 499 insertions(+), 300 deletions(-) delete mode 100644 files/olsr.config create mode 100644 files/olsrd.config diff --git a/Makefile b/Makefile index c641eff..7103c21 100644 --- a/Makefile +++ b/Makefile @@ -107,7 +107,7 @@ endef define Package/olsrd/install $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_DATA) ./files/olsr.config $(1)/etc/config/olsr + $(INSTALL_DATA) ./files/olsrd.config $(1)/etc/config/olsrd $(INSTALL_DATA) $(PKG_BUILD_DIR)/src/cfgparser/olsrd.conf.example $(1)/etc/olsrd.conf $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_BUILD_DIR)/olsrd $(1)/usr/sbin/ diff --git a/files/olsr.config b/files/olsr.config deleted file mode 100644 index ecdce43..0000000 --- a/files/olsr.config +++ /dev/null @@ -1,47 +0,0 @@ -config "olsr" "general" - option DebugLevel '0' - option IpVersion '4' - option AllowNoInt 'yes' - option Pollrate '0.025' - option TcRedundancy '2' - option MprCoverage '3' - option LinkQualityFishEye '1' - option LinkQualityWinSize '100' - option LinkQualityDijkstraLimit '0 9.0' - option LinkQualityLevel '2' - option UseHysteresis 'no' - option FIBMetric "flat" - option ClearScreen "yes" - option Willingness "3" - option LinkQualityAging "0.1" - option LinkQualityAlgorithm "etx_fpm" - - -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" - option Interface "wlan" - option Ip4Broadcast "255.255.255.255" - option HelloInterval '2.0' - option HelloValidityTime '40.0' - option TcInterval '5.0' - option TcValidityTime '100.0' - option MidInterval '18.0' - option MidValidityTime '324.0' - option HnaInterval '18.0' - option HnaValidityTime '108.0' diff --git a/files/olsrd.config b/files/olsrd.config new file mode 100644 index 0000000..78c5a22 --- /dev/null +++ b/files/olsrd.config @@ -0,0 +1,23 @@ +config olsrd + option IpVersion '4' + +config LoadPlugin + option library 'olsrd_arprefresh.so.0.1' + +config LoadPlugin + option library 'olsrd_dyn_gw.so.0.4' + +config LoadPlugin + option library 'olsrd_httpinfo.so.0.1' + option port '1978' + list Net '0.0.0.0 0.0.0.0' + +config LoadPlugin + option library 'olsrd_nameservice.so.0.3' + +config LoadPlugin + option library 'olsrd_txtinfo.so.0.1' + option accept '' + +config Interface + list interface 'wlan' diff --git a/files/olsrd.init b/files/olsrd.init index d5c8495..2cadcaf 100644 --- a/files/olsrd.init +++ b/files/olsrd.init @@ -1,331 +1,554 @@ #!/bin/sh /etc/rc.common +# Copyright (C) 2008 Alina Friedrichsen +# Special thanks to bittorf wireless )) 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 +OLSRD_OLSRD_SCHEMA='ignore:internal config_file:internal DebugLevel=0 IpVersion=4 AllowNoInt:bool=1 Pollrate=0.025 TcRedundancy=2 MprCoverage=3 LinkQualityFishEye=1 LinkQualityWinSize=100 LinkQualityDijkstraLimit=0+9.0 LinkQualityLevel=2 UseHysteresis:bool=0 FIBMetric=flat ClearScreen:bool=1 Willingness=3 LinkQualityAging=0.1 LinkQualityAlgorithm=etx_fpm' +OLSRD_IPCCONNECT_SCHEMA='ignore:internal Host:list Net:list2' +OLSRD_LOADPLUGIN_SCHEMA='ignore:internal library:internal Host:list Net: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 Ip4Broadcast=255.255.255.255 HelloInterval=2.0 HelloValidityTime=40.0 TcInterval=5.0 TcValidityTime=100.0 MidInterval=18.0 MidValidityTime=324.0 HnaInterval=18.0 HnaValidityTime=108.0' -format_olsr_option() { - local str="$*" - echo -n "$str" | tr -d '\n\r\t\v ' -} +T=' ' +N=' +' -format_olsr_value() { - local str="$*" - echo -n "$str" | tr -d '\n\r\v' +validate_varname() { + local varname=$1 + [ -z "$varname" -o "$varname" != "${varname%%[!A-Za-z0-9_]*}" ] && return 1 + return 0 } -format_olsr_param() { - local str="$*" - echo -n "$str" | tr -d '\n\r\v"' +validate_ifname() { + local ifname=$1 + [ -z "$ifname" -o "$ifname" != "${ifname%%[!A-Za-z0-9.:_-]*}" ] && return 1 + return 0 } -format_uci_varname() { - local str="$*" - echo -n "$str" | sed -e 's/[^a-zA-Z0-9_]//g' +validate_olsrd_option() { + local str=$1 + [ -z "$str" -o "$str" != "${str%%[! 0-9A-Za-z./:_-]*}" ] && return 1 + return 0 } -foreach_olsr() { - local cfg="$1" - local option - local value +get_ifname() { + IFNAME= + local interface=$1 + validate_varname "$interface" || return 1 + local ifname - for option in $CONFIG_OPTIONS - do - config_get value "$cfg" "$option" - option=$(format_olsr_option "$option") - value=$(format_olsr_value "$value") + config_get ifname "$interface" ifname + validate_ifname "$ifname" || return 1 + IFNAME=$ifname - if [ -n "$value" -a "$option" != "ConfigFile" ]; then - echo "$option $value" >> "$CONF_F" - fi - done - echo >> "$CONF_F" + return 0 } -foreach_Hna4() { - local cfg="$1" - local netaddr - local netmask +system_config() { + local cfg=$1 + local cfgt + local hostname + local latlon - config_get netaddr "$cfg" NetAddr - config_get netmask "$cfg" NetMask - netaddr=$(format_olsr_option "$netaddr") - netmask=$(format_olsr_option "$netmask") + config_get cfgt "$cfg" TYPE - if [ -n "$netaddr" -a -n "$netmask" ]; then - if [ "$HNA4_COUNT" -le 0 ]; then - echo "Hna4" >> "$CONF_F" - echo "{" >> "$CONF_F" - fi + if [ "$cfgt" = "system" ]; then + config_get hostname "$cfg" hostname + hostname=${hostname:-OpenWrt} + SYSTEM_HOSTNAME=$hostname + fi - echo " $netaddr $netmask" >> "$CONF_F" - HNA4_COUNT=$((HNA4_COUNT + 1)) + if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then + config_get latlon "$cfg" latlon + IFS=" ${T}${N}," + set -- $latlon + unset IFS + SYSTEM_LAT=$1 + SYSTEM_LON=$2 fi } -write_Hna4() { - if [ "$HNA4_COUNT" -gt 0 ]; then - echo "}" >> "$CONF_F" - echo >> "$CONF_F" +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 package=$1 + validate_varname "$package" || package= + local config=$2 + validate_varname "$config" || config= + local option=$3 + validate_varname "$option" || option= + + echo -n "Warning: Invalid value" 1>&2 + + if [ -n "$package" -a -n "$config" ]; then + echo -n " in option '$package.$config${option:+.}$option'" 1>&2 fi + + echo ", skipped" 1>&2 + + return 0 } -foreach_Hna6() { - local cfg="$1" - local netaddr - local netmask +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 - config_get netaddr "$cfg" NetAddr - config_get prefix "$cfg" Prefix - netaddr=$(format_olsr_option "$netaddr") - prefix=$(format_olsr_option "$prefix") + if ! validate_olsrd_option "$value"; then + warning_invalid_value olsrd "$cfg" "$option" + return 1 + fi - if [ -n "$netaddr" -a -n "$prefix" ]; then - if [ "$HNA6_COUNT" -le 0 ]; then - echo "Hna6" >> "$CONF_F" - echo "{" >> "$CONF_F" + if [ "$value" != "${value%%[G-Zg-z_-]*}" ]; then + if [ "$value" != "yes" -a "$value" != "no" ]; then + value="\"$value\"" fi + fi + + echo -n "${N}$param$option $value" - echo " $netaddr $prefix" >> "$CONF_F" - HNA6_COUNT=$((HNA6_COUNT + 1)) + return 0 +} + +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 + + 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 + + IFS='-_' + set -- $option + option="$*" + unset IFS + _option="$option" + if [ "$option" = 'hosts' ]; then + set -- $value + option=$1 + shift + value="$*" + fi + + echo -n "${N}${param}PlParam \"$option\" \"$value\"" + + return 0 } -write_Hna6() { - if [ "$HNA6_COUNT" -gt 0 ]; then - echo "}" >> "$CONF_F" - echo >> "$CONF_F" +config_update_schema() { + unset IFS + 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 } -foreach_IpcConnect() { - local cfg="$1" +config_write_options() { + unset IFS + 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 local option + local option_length + local option_type + local default local value - local c + local list_size + local list_item + local list_value + local i + local position + + for schema_entry in $schema; do + default=${schema_entry#*[=]} + [ "$default" = "$schema_entry" ] && default= + option=${schema_entry%%[=]*} + IFS=':' + set -- $option + unset IFS + option=$1 + option_type=$2 + validate_varname "$option" || continue + [ -z "$option_type" ] || validate_varname "$option_type" || continue + [ "$option_type" = internal ] && continue + config_get value "$cfg" "$option" - echo "IpcConnect" >> "$CONF_F" - echo -n "{" >> "$CONF_F" + if [ -z "$value" ]; then + IFS='+' + set -- $default + unset IFS + value=$* + elif [ "$value" = '-' -a -n "$default" ]; then + continue + fi - 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" + [ -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 - 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" + 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 - c=$((c + 1)) done - else - echo >> "$CONF_F" - echo -n " $option $value" >> "$CONF_F" + [ "$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 - echo >> "$CONF_F" - echo "}" >> "$CONF_F" - echo >> "$CONF_F" + return 0 } -foreach_LoadPlugin() { - local cfg="$1" - local library - local option - local value - local is_ip_addr - local item - local c +olsrd_write_olsrd() { + local cfg=$1 + validate_varname "$cfg" || return 0 + local ignore - config_get library "$cfg" Library - library=$(format_olsr_param "$library") + config_get_bool ignore "$cfg" ignore 0 + [ "$ignore" -ne 0 ] && return 0 - if [ -n "$library" ]; then - echo "LoadPlugin \"$library\"" >> "$CONF_F" - echo -n "{" >> "$CONF_F" + [ "$OLSRD_COUNT" -gt 0 ] && return 0 - for option in $CONFIG_OPTIONS - do - config_get value "$cfg" "$option" - option=$(format_olsr_param "$option") - value=$(format_olsr_param "$value") + config_write_options "$OLSRD_OLSRD_SCHEMA" "$cfg" olsrd_write_option + echo + OLSRD_COUNT=$((OLSRD_COUNT + 1)) - if [ -n "$value" ]; then - option=$(echo "$option" | sed -e y/[_]/[-]/) + return 0 +} - is_ip_addr=$(echo "$option" | sed -e 's/[^-]//g') - if [ "$is_ip_addr" = "---" ]; then - option=$(echo "$option" | sed -e y/[-]/[.]/) - fi +olsrd_write_ipcconnect() { + local cfg=$1 + validate_varname "$cfg" || return 0 + local ignore - 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 + config_get_bool ignore "$cfg" ignore 0 + [ "$ignore" -ne 0 ] && return 0 - echo >> "$CONF_F" - echo "}" >> "$CONF_F" - echo >> "$CONF_F" - fi + [ "$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 } -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 +olsrd_write_hna4() { + local cfg=$1 + validate_varname "$cfg" || return 0 + local ignore - echo >> "$CONF_F" - echo "}" >> "$CONF_F" + 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}$netaddr $netmask" + HNA4_COUNT=$((HNA4_COUNT + 1)) + + return 0 } -write_config() { - include /lib/network - scan_interfaces - config_load /var/state/network +olsrd_write_hna6() { + local cfg=$1 + validate_varname "$cfg" || return 0 + local ignore - config_cb() { - local cfgtype="$1" - local name="$2" - CONFIG_TYPE="$cfgtype" - } + config_get_bool ignore "$cfg" ignore 0 + [ "$ignore" -ne 0 ] && return 0 - option_cb() { - local varname="$1" - local value="$2" + config_get netaddr "$cfg" netaddr + if ! validate_olsrd_option "$netaddr"; then + warning_invalid_value olsrd "$cfg" "netaddr" + return 0 + fi - if [ "$CONFIG_TYPE" = "OLSR" -a "$varname" = "ConfigFile" ]; then - USE_CONF_F="$value" - fi + config_get prefix "$cfg" prefix + if ! validate_olsrd_option "$prefix"; then + warning_invalid_value olsrd "$cfg" "prefix" + return 0 + fi - if ! echo "$CONFIG_OPTIONS" | grep " $varname " > /dev/null; then - CONFIG_OPTIONS="$CONFIG_OPTIONS $varname " - fi - } + [ "$HNA6_COUNT" -le 0 ] && echo -n "${N}Hna6${N}{" + echo -n "${N}${T}$netaddr $prefix" + HNA6_COUNT=$((HNA6_COUNT + 1)) - CONFIG_OPTIONS="" - config_load olsr + return 0 +} - if [ -n "$USE_CONF_F" ]; then +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 + echo "Warning: Plugin library '$library' not found, skipped" 1>&2 return 0 - else - USE_CONF_F="$CONF_F" fi - mkdir -p $(dirname "$CONF_F") - > "$CONF_F" - config_foreach foreach_olsr olsr + 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 + + config_get latlon_file "$cfg" latlon_file + [ -z "$latlon_file" ] && config_set "$cfg" latlon_file '/var/run/latlon.js' + ;; + 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 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 get_ifname "$interface"; then + ifnames="$ifnames \"$IFNAME\"" + else + echo "Warning: Interface '$interface' not found, skipped" 1>&2 + 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_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";; + esac + + return 0 +} + +olsrd_write_config() { + OLSRD_COUNT=0 + config_foreach olsrd_write_olsrd olsrd + IPCCONNECT_COUNT=0 + config_foreach olsrd_write_ipcconnect IpcConnect HNA4_COUNT=0 - config_foreach foreach_Hna4 Hna4 - write_Hna4 + config_foreach olsrd_write_hna4 Hna4 + [ "$HNA4_COUNT" -gt 0 ] && echo "${N}}" 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 + 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 Interface + echo + + return 0 } start() { - [ -z "$USE_CONF_F" ] && write_config + 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" "$@" + } + + include /lib/network + scan_interfaces + 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 - [ -f $DEFAULT ] && . $DEFAULT - $BIN -f "$USE_CONF_F" -nofork $OPTIONS & + [ -z "$OLSRD_CONFIG_FILE" ] && return 1 - # write pid file (but strip out own pid ($$)) - mkdir -p $RUN_D - PID=`pidof $BIN` - echo ${PID%$$} > $PID_F + olsrd -f "$OLSRD_CONFIG_FILE" -nofork < /dev/null > /dev/null & } stop() { -- 2.30.2