Message ID | 20190622195144.27620-1-fabian@blaese.de |
---|---|
State | Superseded |
Headers | show |
diff --git a/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel index cc1cf5d..4c94a12 100644 --- a/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel +++ b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel @@ -1,4 +1,5 @@ . /lib/functions.sh +. /lib/functions/fff/babel #load board specific properties BOARD="$(uci get board.model.name)" @@ -14,10 +15,9 @@ configure() { # remove interface uci -q del network.$name # remove iif-rules - uci -q del network.${name}_rule - uci -q del network.${name}_rule6 + babel_delete_iifrules "$name" || exit 1 # remove babel interface - uci -q del babeld.$name + babel_delete_interface "$name" || exit 1 fi fi } @@ -67,37 +67,16 @@ configure() { uci set network.$name.ifname=$iface # add iif-rules - uci set network.${name}_rule=rule - uci set network.${name}_rule.in="$name" - uci set network.${name}_rule.lookup='10' - uci set network.${name}_rule.priority='31' - - uci set network.${name}_rule6=rule6 - uci set network.${name}_rule6.in="$name" - uci set network.${name}_rule6.lookup='10' - uci set network.${name}_rule6.priority='31' + babel_add_iifrules "$name" || exit 1 # peer_ip - if peer_ip=$(uci -q get gateway.@gateway[0].peer_ip); then - uci set network.$name.ipaddr="$peer_ip" - elif ipaddr=$(uci -q get gateway.@client[0].ipaddr); then - # use ipaddr (without subnet) if no peer_ip set - uci set network.$name.ipaddr=$(echo $ipaddr | cut -d / -f1) - else - echo "FATAL: Neither peer_ip nor ipaddr set! No peering ipv4 set!" - exit 1 - fi - - # peer_ip6 - if peer_ip6=$(uci -q get gateway.@gateway[0].peer_ip6); then - uci set network.$name.ip6addr="$peer_ip6" - fi + uci -q delete "network.$name.ipaddr" + uci -q delete "network.$name.ip6addr" + babel_add_peeraddr "network.$name.ipaddr" || exit 1 + babel_add_peer6addr "network.$name.ip6addr" || exit 1 # add babel interface - uci set babeld.$name=interface - uci set babeld.$name.ifname=$iface - uci set babeld.$name.type=$type - uci set babeld.$name.rxcost=$rxcost + babel_add_interface "$name" "$iface" "$type" "$rxcost" || exit 1 } config_load gateway diff --git a/src/packages/fff/fff-babeld/files/lib/functions/fff/babel b/src/packages/fff/fff-babeld/files/lib/functions/fff/babel new file mode 100644 index 0000000..3789741 --- /dev/null +++ b/src/packages/fff/fff-babeld/files/lib/functions/fff/babel @@ -0,0 +1,74 @@ +babel_add_iifrules() { + [ "$#" -ne "1" ] && return 1 + + local name="$1" + local table='10' + local prio='31' + + uci set network.${name}_rule=rule + uci set network.${name}_rule.in="$name" + uci set network.${name}_rule.lookup="$table" + uci set network.${name}_rule.priority="$prio" + + uci set network.${name}_rule6=rule6 + uci set network.${name}_rule6.in="$name" + uci set network.${name}_rule6.lookup="$table" + uci set network.${name}_rule6.priority="$prio" +} + +babel_delete_iifrules() { + [ "$#" -ne "1" ] && return 1 + + local name="$1" + + uci -q del network.${name}_rule + uci -q del network.${name}_rule6 +} + +babel_add_peeraddr() { + [ "$#" -ne "1" ] && return 1 + + local option="$1" + + if peer_ip=$(uci -q get gateway.@gateway[0].peer_ip); then + uci add_list "$option"="$peer_ip" + elif ipaddr=$(uci -q get gateway.@client[0].ipaddr); then + # use ipaddr (without subnet) if no peer_ip set + uci add_list "$option"=$(echo $ipaddr | cut -d / -f1) + else + echo "FATAL: Neither peer_ip nor ipaddr set! No peering ipv4 set!" + return 1 + fi +} + +babel_add_peer6addr() { + [ "$#" -ne "1" ] && return 1 + + local option="$1" + + if peer_ip6=$(uci -q get gateway.@gateway[0].peer_ip6); then + uci add_list "$option"="$peer_ip6" + fi +} + +babel_add_interface() { + [ "$#" -ne "4" ] && return 1 + + local name="$1" + local interface="$2" + local type="$3" + local rxcost="$4" + + uci set babeld.$name=interface + uci set babeld.$name.ifname="$interface" + uci set babeld.$name.type="$type" + uci set babeld.$name.rxcost="$rxcost" +} + +babel_delete_interface() { + [ "$#" -ne "1" ] && return 1 + + local name="$1" + + uci -q del babeld.$name +}
Hallo, On 22.06.19 21:51, Fabian Bläse wrote: > diff --git a/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel > index cc1cf5d..4c94a12 100644 > --- a/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel > +++ b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel > @@ -1,4 +1,5 @@ > . /lib/functions.sh > +. /lib/functions/fff/babel > > #load board specific properties > BOARD="$(uci get board.model.name)" > @@ -14,10 +15,9 @@ configure() { > # remove interface > uci -q del network.$name > # remove iif-rules > - uci -q del network.${name}_rule > - uci -q del network.${name}_rule6 > + babel_delete_iifrules "$name" || exit 1 hier > # remove babel interface > - uci -q del babeld.$name > + babel_delete_interface "$name" || exit 1 und hier darf kein "|| exit 1" stehen, da es kein Fehler ist, wenn die Konfiguration bereits nicht existiert. Fabian
Hi Fabian, die beiden exit 1 nimmst du ja raus. Bei den anderen wäre ein echo "irgendwas" schön. Es hat allerdings nichts mit der Funktionalität zu tun. Darum schon mal ein Reviewed-by: Robert Langhammer <rlanghammer@web.de> Am 23.06.19 um 12:27 schrieb Fabian Bläse: > Hallo, > > On 22.06.19 21:51, Fabian Bläse wrote: >> diff --git a/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel >> index cc1cf5d..4c94a12 100644 >> --- a/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel >> +++ b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel >> @@ -1,4 +1,5 @@ >> . /lib/functions.sh >> +. /lib/functions/fff/babel >> >> #load board specific properties >> BOARD="$(uci get board.model.name)" >> @@ -14,10 +15,9 @@ configure() { >> # remove interface >> uci -q del network.$name >> # remove iif-rules >> - uci -q del network.${name}_rule >> - uci -q del network.${name}_rule6 >> + babel_delete_iifrules "$name" || exit 1 > hier > >> # remove babel interface >> - uci -q del babeld.$name >> + babel_delete_interface "$name" || exit 1 > und hier darf kein "|| exit 1" stehen, da es kein Fehler ist, wenn die Konfiguration bereits nicht existiert. > > Fabian >
Hallo Robert, wie macht man denn sowas schön, dass man echo und exit gemeinsam hinter das || packt? Hast du da ne Idee? Ansonsten würde ich das ist ein if verkapseln. Gruß Fabian On 25.06.19 14:08, robert wrote: > Hi Fabian, > > die beiden exit 1 nimmst du ja raus. Bei den anderen wäre ein echo > "irgendwas" schön. Es hat allerdings nichts mit der Funktionalität zu > tun. Darum schon mal ein > > Reviewed-by: Robert Langhammer <rlanghammer@web.de> > > Am 23.06.19 um 12:27 schrieb Fabian Bläse: >> Hallo, >> >> On 22.06.19 21:51, Fabian Bläse wrote: >>> diff --git a/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel >>> index cc1cf5d..4c94a12 100644 >>> --- a/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel >>> +++ b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel >>> @@ -1,4 +1,5 @@ >>> . /lib/functions.sh >>> +. /lib/functions/fff/babel >>> >>> #load board specific properties >>> BOARD="$(uci get board.model.name)" >>> @@ -14,10 +15,9 @@ configure() { >>> # remove interface >>> uci -q del network.$name >>> # remove iif-rules >>> - uci -q del network.${name}_rule >>> - uci -q del network.${name}_rule6 >>> + babel_delete_iifrules "$name" || exit 1 >> hier >> >>> # remove babel interface >>> - uci -q del babeld.$name >>> + babel_delete_interface "$name" || exit 1 >> und hier darf kein "|| exit 1" stehen, da es kein Fehler ist, wenn die Konfiguration bereits nicht existiert. >> >> Fabian >> >
Ein groupkommand sollte das richtig machen. false || { echo "hallo" ; exit 1; } man bash (Kapitel Compound Commands) Am 25.06.19 um 14:43 schrieb Fabian Bläse: > Hallo Robert, > > wie macht man denn sowas schön, dass man echo und exit gemeinsam hinter das || packt? Hast du da ne Idee? > Ansonsten würde ich das ist ein if verkapseln. > > Gruß > Fabian > > On 25.06.19 14:08, robert wrote: >> Hi Fabian, >> >> die beiden exit 1 nimmst du ja raus. Bei den anderen wäre ein echo >> "irgendwas" schön. Es hat allerdings nichts mit der Funktionalität zu >> tun. Darum schon mal ein >> >> Reviewed-by: Robert Langhammer <rlanghammer@web.de> >> >> Am 23.06.19 um 12:27 schrieb Fabian Bläse: >>> Hallo, >>> >>> On 22.06.19 21:51, Fabian Bläse wrote: >>>> diff --git a/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel >>>> index cc1cf5d..4c94a12 100644 >>>> --- a/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel >>>> +++ b/src/packages/fff/fff-babeld/files/etc/gateway.d/40-babel >>>> @@ -1,4 +1,5 @@ >>>> . /lib/functions.sh >>>> +. /lib/functions/fff/babel >>>> >>>> #load board specific properties >>>> BOARD="$(uci get board.model.name)" >>>> @@ -14,10 +15,9 @@ configure() { >>>> # remove interface >>>> uci -q del network.$name >>>> # remove iif-rules >>>> - uci -q del network.${name}_rule >>>> - uci -q del network.${name}_rule6 >>>> + babel_delete_iifrules "$name" || exit 1 >>> hier >>> >>>> # remove babel interface >>>> - uci -q del babeld.$name >>>> + babel_delete_interface "$name" || exit 1 >>> und hier darf kein "|| exit 1" stehen, da es kein Fehler ist, wenn die Konfiguration bereits nicht existiert. >>> >>> Fabian >>>
Various things have to be done for every interface on which babeld shall run. Those procedures are moved into functions to reduce duplicate code. Signed-off-by: Fabian Bläse <fabian@blaese.de> --- .../fff-babeld/files/etc/gateway.d/40-babel | 39 +++------- .../fff-babeld/files/lib/functions/fff/babel | 74 +++++++++++++++++++ 2 files changed, 83 insertions(+), 30 deletions(-) create mode 100644 src/packages/fff/fff-babeld/files/lib/functions/fff/babel