Ticket #13410: olsrd.init.diff

File olsrd.init.diff, 5.6 KB (added by ab@…, 5 years ago)

diff of a working olsrd init script to the current one

  • olsr.

    old new  
    11#!/bin/sh /etc/rc.common 
    2 # Copyright (C) 2008-2012 OpenWrt.org 
     2# Copyright (C) 2008-2013 OpenWrt.org 
    33 
    44START=65 
    55 
     
    2020N=' 
    2121' 
    2222 
    23 log() 
    24 { 
    25         logger -t olsrd -p daemon.info -s "$1" 
     23log() { 
     24        logger -t olsrd -p daemon.info -s "${initscript}: $@" 
     25} 
     26 
     27error() { 
     28        log "ERROR: $@" 
    2629} 
    2730 
    2831validate_varname() { 
     
    3942 
    4043system_config() { 
    4144        local cfg="$1" 
    42         local cfgt 
    43         local hostname 
    44         local latlon 
     45        local cfgt hostname latlon oldIFS 
    4546 
    4647        config_get cfgt "$cfg" TYPE 
    4748 
     
    5354 
    5455        if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then 
    5556                config_get latlon "$cfg" latlon 
    56                 IFS=" ${T}${N}," 
    57                 set -- $latlon 
    58                 unset IFS 
     57                oldIFS="$IFS"; IFS=" ${T}${N},"; set -- $latlon; IFS="$oldIFS" 
    5958                SYSTEM_LAT="$1" 
    6059                SYSTEM_LON="$2" 
    6160        fi 
     
    139138        validate_varname "$option" || return 1 
    140139        local value="$4" 
    141140        local option_type="$5" 
    142         local _option 
     141        local _option oldIFS 
    143142 
    144143        if [ "$option_type" = bool ]; then 
    145144                case "$value" in 
     
    154153                return 1 
    155154        fi 
    156155 
    157         IFS='-_' 
    158         set -- $option 
     156        oldIFS="$IFS"; IFS='-_'; set -- $option; IFS="$oldIFS" 
    159157        option="$*" 
    160         unset IFS 
    161158        _option="$option" 
     159 
    162160        if [ "$option" = 'hosts' ]; then 
    163161                set -- $value 
    164162                option="$1" 
    165163                shift 
    166164                value="$*" 
    167165        fi 
     166 
    168167        if [ "$option" = 'NonOlsrIf' ]; then 
    169168                if validate_varname "$value"; then 
    170169                        if network_get_device ifname "$value"; then 
     
    184183} 
    185184 
    186185config_update_schema() { 
    187         unset IFS 
    188186        local schema_varname="$1" 
    189187        validate_varname "$schema_varname" || return 1 
    190188        local command="$2" 
     
    225223} 
    226224 
    227225config_write_options() { 
    228         unset IFS 
     226        local funcname="config_write_options" 
    229227        local schema="$1" 
    230228        local cfg="$2" 
    231229        validate_varname "$cfg" || return 1 
    232230        local write_func="$3" 
    233231        [ -z "$write_func" ] && output_func=echo 
    234232        local write_param="$4" 
    235         local schema_entry 
    236         local option 
    237         local option_length 
    238         local option_type 
    239         local default 
    240         local value 
    241         local list_size 
    242         local list_item 
    243         local list_value 
    244         local i 
    245         local position 
    246233 
    247         for schema_entry in $schema; do 
     234        local schema_entry option option_length option_type default value list_size list_item list_value i position speed oldIFS 
     235        local list_speed_vars="HelloInterval HelloValidityTime TcInterval TcValidityTime MidInterval MidValidityTime HnaInterval HnaValidityTime" 
     236 
     237        get_value_for_entry() 
     238        { 
     239                local schema_entry="$1" 
     240 
    248241                default="${schema_entry#*[=]}" 
    249242                [ "$default" = "$schema_entry" ] && default= 
    250243                option="${schema_entry%%[=]*}" 
    251                 IFS=':' 
    252                 set -- $option 
    253                 unset IFS 
     244 
     245                oldIFS="$IFS"; IFS=':'; set -- $option; IFS="$oldIFS" 
    254246                option="$1" 
    255247                option_type="$2" 
    256                 validate_varname "$option" || continue 
    257                 [ -z "$option_type" ] || validate_varname "$option_type" || continue 
    258                 [ "$option_type" = internal ] && continue 
     248 
     249                validate_varname "$option" || return 1 
     250                [ -z "$option_type" ] || validate_varname "$option_type" || return 1 
     251                [ "$option_type" = internal ] && return 1 
     252 
    259253                config_get value "$cfg" "$option" 
     254                [ "$option" = "speed" ] && return 1 
     255 
     256                return 0 
     257        } 
     258 
     259        already_in_schema() 
     260        { 
     261                case " $schema " in 
     262                        *" $1 "*) 
     263                                return 0 
     264                        ;; 
     265                        *) 
     266                                return 1 
     267                        ;; 
     268                esac 
     269        } 
     270 
     271        already_in_schema "speed" && { 
     272                get_value_for_entry "speed" 
     273 
     274                if [ 2>/dev/null $value -gt 0 -a $value -le 20 ]; then 
     275                        speed="$value" 
     276                else 
     277                        log "$funcname() Warning: invalid speed-value: '$value' - allowed integers: 1...20, fallback to 6" 
     278                        speed=6 
     279                fi 
     280 
     281                for schema_entry in $list_speed_vars; do { 
     282                        already_in_schema "$schema_entry" || schema="$schema $schema_entry" 
     283                } done 
     284        } 
     285 
     286        for schema_entry in $schema; do 
     287                if [ -n "$speed" ]; then                # like sven-ola freifunk firmware fff-1.7.4 
     288                        case "$schema_entry" in 
     289                                HelloInterval) 
     290                                        value="$(( $speed / 2 + 1 )).0" 
     291                                ;; 
     292                                HelloValidityTime) 
     293                                        value="$(( $speed * 25 )).0" 
     294                                ;; 
     295                                TcInterval)     # todo: not fisheye? -> $(( $speed * 2 )) 
     296                                        value=$(( $speed / 2 )) 
     297                                        [ $value -eq 0 ] && value=1 
     298                                        value="$value.0" 
     299                                ;; 
     300                                TcValidityTime) 
     301                                        value="$(( $speed * 100 )).0" 
     302                                ;; 
     303                                MidInterval) 
     304                                        value="$(( $speed * 5 )).0" 
     305                                ;; 
     306                                MidValidityTime) 
     307                                        value="$(( $speed * 100 )).0" 
     308                                ;; 
     309                                HnaInterval) 
     310                                        value="$(( $speed * 2 )).0" 
     311                                ;; 
     312                                HnaValidityTime) 
     313                                        value="$(( $speed * 25 )).0" 
     314                                ;; 
     315                                *) 
     316                                        get_value_for_entry "$schema_entry" || continue 
     317                                ;; 
     318                        esac 
     319 
     320                        is_speed_var() 
     321                        { 
     322                                case " $list_speed_vars " in 
     323                                        *" $1 "*) 
     324                                                return 0 
     325                                        ;; 
     326                                        *) 
     327                                                return 1 
     328                                        ;; 
     329                                esac 
     330                        } 
     331 
     332                        is_speed_var "$schema_entry" && option="$schema_entry" 
     333                else 
     334                        get_value_for_entry "$schema_entry" || continue 
     335                fi 
    260336 
    261337                if [ -z "$value" ]; then 
    262                         IFS='+' 
    263                         set -- $default 
    264                         unset IFS 
     338                        oldIFS="$IFS"; IFS='+'; set -- $default; IFS="$oldIFS" 
    265339                        value=$* 
    266340                elif [ "$value" = '-' -a -n "$default" ]; then 
    267341                        continue 
     
    481555 
    482556        ifnames= 
    483557        config_get interfaces "$cfg" interface 
     558 
    484559        for interface in $interfaces; do 
    485560                if validate_varname "$interface"; then 
    486561                        if network_get_device IFNAME "$interface"; then case $IFNAME in wlan*) for IFNAME in $IFNAME $IFNAME-1 $IFNAME-2 $IFNAME-3 $IFNAME; do iwconfig $IFNAME | grep -q "Cell: " && break; done;; esac 
     
    665740        fi 
    666741} 
    667742 
    668 error() { 
    669         log "error() ${initscript}: $@" 
    670 } 
    671  
    672743start() { 
    673744        SYSTEM_HOSTNAME= 
    674745        SYSTEM_LAT= 
     
    745816                        return 1 
    746817                else 
    747818                        service_start /usr/sbin/olsrd -f "$OLSRD_CONFIG_FILE" -nofork 
     819                        service_check /usr/sbin/olsrd || { 
     820                                log "startup-error: check via: '/usr/sbin/olsrd -f \"$OLSRD_CONFIG_FILE\" -nofork'" 
     821                        } 
    748822                fi 
    749823        fi 
     824 
    750825        olsrd_setup_smartgw_rules 
    751826} 
    752827