[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@bluebottle.com> git-svn-id: svn://svn.openwrt.org/openwrt/packages@36299 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
72dadf133b
commit
54e2dda469
@ -225,6 +225,7 @@ config_update_schema() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
config_write_options() {
|
config_write_options() {
|
||||||
|
local funcname="config_write_options"
|
||||||
unset IFS
|
unset IFS
|
||||||
local schema="$1"
|
local schema="$1"
|
||||||
local cfg="$2"
|
local cfg="$2"
|
||||||
@ -244,6 +245,8 @@ config_write_options() {
|
|||||||
local list_value
|
local list_value
|
||||||
local i
|
local i
|
||||||
local position
|
local position
|
||||||
|
local speed
|
||||||
|
local list_speed_vars="HelloInterval HelloValidityTime TcInterval TcValidityTime MidInterval MidValidityTime HnaInterval HnaValidityTime"
|
||||||
|
|
||||||
get_value_for_entry()
|
get_value_for_entry()
|
||||||
{
|
{
|
||||||
@ -262,12 +265,90 @@ config_write_options() {
|
|||||||
[ "$option_type" = internal ] && return 1
|
[ "$option_type" = internal ] && return 1
|
||||||
|
|
||||||
config_get value "$cfg" "$option"
|
config_get value "$cfg" "$option"
|
||||||
|
[ "$option" = "speed" ] && return 1
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case " $schema " in
|
||||||
|
*" speed "*)
|
||||||
|
get_value_for_entry "speed"
|
||||||
|
|
||||||
|
if [ 2>/dev/null $value -gt 0 -a $value -le 20 ]; then
|
||||||
|
speed="$value"
|
||||||
|
else
|
||||||
|
log "$funcname() Warning: invalid speed-value: '$value' - allowed integers: 1...20, fallback to 6"
|
||||||
|
speed=6
|
||||||
|
fi
|
||||||
|
|
||||||
|
already_in_schema()
|
||||||
|
{
|
||||||
|
case " $schema " in
|
||||||
|
*" $1 "*)
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
for schema_entry in $list_speed_vars; do {
|
||||||
|
already_in_schema "$schema_entry" || schema="$schema $schema_entry"
|
||||||
|
} done
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
for schema_entry in $schema; do
|
for schema_entry in $schema; do
|
||||||
|
if [ -n "$speed" ]; then # like sven-ola freifunk firmware fff-1.7.4
|
||||||
|
case "$schema_entry" in
|
||||||
|
HelloInterval)
|
||||||
|
value="$(( $speed / 2 + 1 )).0"
|
||||||
|
;;
|
||||||
|
HelloValidityTime)
|
||||||
|
value="$(( $speed * 25 )).0"
|
||||||
|
;;
|
||||||
|
TcInterval) # todo: not fisheye? -> $(( $speed * 2 ))
|
||||||
|
value=$(( $speed / 2 ))
|
||||||
|
[ $value -eq 0 ] && value=1
|
||||||
|
value="$value.0"
|
||||||
|
;;
|
||||||
|
TcValidityTime)
|
||||||
|
value="$(( $speed * 100 )).0"
|
||||||
|
;;
|
||||||
|
MidInterval)
|
||||||
|
value="$(( $speed * 5 )).0"
|
||||||
|
;;
|
||||||
|
MidValidityTime)
|
||||||
|
value="$(( $speed * 100 )).0"
|
||||||
|
;;
|
||||||
|
HnaInterval)
|
||||||
|
value="$(( $speed * 2 )).0"
|
||||||
|
;;
|
||||||
|
HnaValidityTime)
|
||||||
|
value="$(( $speed * 25 )).0"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
get_value_for_entry "$schema_entry" || continue
|
get_value_for_entry "$schema_entry" || continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
is_speed_var()
|
||||||
|
{
|
||||||
|
case " $list_speed_vars " in
|
||||||
|
*" $1 "*)
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
is_speed_var "$schema_entry" && option="$schema_entry"
|
||||||
|
else
|
||||||
|
get_value_for_entry "$schema_entry" || continue
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "$value" ]; then
|
if [ -z "$value" ]; then
|
||||||
IFS='+'
|
IFS='+'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user