Changeset 36299


Ignore:
Timestamp:
2013-04-10T12:48:35+02:00 (5 years ago)
Author:
zioproto
Message:

[packages] olsrd: init: parse new var 'speed', which translates to several other vars

Range is 1...20 where 1 is fastest protocol speed and 20 is the slowest protocol speed

Like in the Freifunk-Firmware from sven-ola we accept now a per-interface
option 'speed', which should range from 1...20 and is sanitized. when the
value is not in valid range, it defaults to 6 which allows the daemon to
start and behave like in a city-wide mesh. (same default like in freifunk firmware)

The value 'speed' overrides the normal values for emission intervals like
Hello-, Tc-, Mid-, Hna-Interval/ValidityTime or sets them explicitely. this
makes it much easier to play with intervals on several routers:

Instead of changes eight values, we only have to alter 1 value.

The value-calculation is tested since several years.

Signed-off-by: Bastian Bittorf <bittorf@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • packages/net/olsrd/files/olsrd.init

    r36298 r36299  
    226226 
    227227config_write_options() { 
     228        local funcname="config_write_options" 
    228229        unset IFS 
    229230        local schema="$1" 
     
    245246        local i 
    246247        local position 
     248        local speed 
     249        local list_speed_vars="HelloInterval HelloValidityTime TcInterval TcValidityTime MidInterval MidValidityTime HnaInterval HnaValidityTime" 
    247250 
    248251        get_value_for_entry() 
     
    263266 
    264267                config_get value "$cfg" "$option" 
     268                [ "$option" = "speed" ] && return 1 
    265269 
    266270                return 0 
    267271        } 
    268272 
     273        case " $schema " in 
     274                *" speed "*) 
     275                        get_value_for_entry "speed" 
     276 
     277                        if [ 2>/dev/null $value -gt 0 -a $value -le 20 ]; then 
     278                                speed="$value" 
     279                        else 
     280                                log "$funcname() Warning: invalid speed-value: '$value' - allowed integers: 1...20, fallback to 6" 
     281                                speed=6 
     282                        fi 
     283 
     284                        already_in_schema() 
     285                        { 
     286                                case " $schema " in 
     287                                        *" $1 "*) 
     288                                                return 0 
     289                                        ;; 
     290                                        *) 
     291                                                return 1 
     292                                        ;; 
     293                                esac 
     294                        } 
     295 
     296                        for schema_entry in $list_speed_vars; do { 
     297                                already_in_schema "$schema_entry" || schema="$schema $schema_entry" 
     298                        } done 
     299                ;; 
     300        esac 
     301 
    269302        for schema_entry in $schema; do 
    270                 get_value_for_entry "$schema_entry" || continue 
     303                if [ -n "$speed" ]; then                # like sven-ola freifunk firmware fff-1.7.4 
     304                        case "$schema_entry" in 
     305                                HelloInterval) 
     306                                        value="$(( $speed / 2 + 1 )).0" 
     307                                ;; 
     308                                HelloValidityTime) 
     309                                        value="$(( $speed * 25 )).0" 
     310                                ;; 
     311                                TcInterval)     # todo: not fisheye? -> $(( $speed * 2 )) 
     312                                        value=$(( $speed / 2 )) 
     313                                        [ $value -eq 0 ] && value=1 
     314                                        value="$value.0" 
     315                                ;; 
     316                                TcValidityTime) 
     317                                        value="$(( $speed * 100 )).0" 
     318                                ;; 
     319                                MidInterval) 
     320                                        value="$(( $speed * 5 )).0" 
     321                                ;; 
     322                                MidValidityTime) 
     323                                        value="$(( $speed * 100 )).0" 
     324                                ;; 
     325                                HnaInterval) 
     326                                        value="$(( $speed * 2 )).0" 
     327                                ;; 
     328                                HnaValidityTime) 
     329                                        value="$(( $speed * 25 )).0" 
     330                                ;; 
     331                                *) 
     332                                        get_value_for_entry "$schema_entry" || continue 
     333                                ;; 
     334                        esac 
     335 
     336                        is_speed_var() 
     337                        { 
     338                                case " $list_speed_vars " in 
     339                                        *" $1 "*) 
     340                                                return 0 
     341                                        ;; 
     342                                        *) 
     343                                                return 1 
     344                                        ;; 
     345                                esac 
     346                        } 
     347 
     348                        is_speed_var "$schema_entry" && option="$schema_entry" 
     349                else 
     350                        get_value_for_entry "$schema_entry" || continue 
     351                fi 
    271352 
    272353                if [ -z "$value" ]; then 
Note: See TracChangeset for help on using the changeset viewer.