Message ID | 20190622195144.27620-2-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 4c94a12..e71f597 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 @@ -10,15 +10,19 @@ configure() { # remove peers missing in gateway config remove_babelpeer() { local name="$1" - if ! echo $name | grep cfg > /dev/null; then # do not delete default interface - if ! uci -q get gateway.$name > /dev/null; then - # remove interface - uci -q del network.$name - # remove iif-rules - babel_delete_iifrules "$name" || exit 1 - # remove babel interface - babel_delete_interface "$name" || exit 1 - fi + + # check prefix + if [ "$name" = "${name#babelpeer_}" ]; then + return + fi + + if ! uci -q get gateway.$name > /dev/null; then + # remove interface + uci -q del network.$name + # remove iif-rules + babel_delete_iifrules "$name" || exit 1 + # remove babel interface + babel_delete_interface "$name" || exit 1 fi } @@ -28,15 +32,10 @@ configure() { #add new peers add_babelpeer() { local name="$1" + local prefixname="babelpeer_$name" local vlan local type - # prohibit cfg* as name - if echo $name | grep cfg > /dev/null; then - echo "ERROR: name $name is invalid for babelpeer!" - exit 1 - fi - # get iface if vlan=$(uci -q get gateway.$name.vlan); then iface="${SWITCHDEV}.$vlan" @@ -62,21 +61,21 @@ configure() { fi # add interface - uci set network.$name=interface - uci set network.$name.proto=static - uci set network.$name.ifname=$iface + uci set network.$prefixname=interface + uci set network.$prefixname.proto=static + uci set network.$prefixname.ifname=$iface # add iif-rules - babel_add_iifrules "$name" || exit 1 + babel_add_iifrules "$prefixname" || exit 1 # peer_ip - 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 + uci -q delete "network.$prefixname.ipaddr" + uci -q delete "network.$prefixname.ip6addr" + babel_add_peeraddr "network.$prefixname.ipaddr" || exit 1 + babel_add_peer6addr "network.$prefixname.ip6addr" || exit 1 # add babel interface - babel_add_interface "$name" "$iface" "$type" "$rxcost" || exit 1 + babel_add_interface "$prefixname" "$iface" "$type" "$rxcost" || exit 1 } config_load gateway
Hallo Fabian, das ist eine nette Lösung , und das unschöne grep ist auch weg. Find ich gut. Die exit 1 kommen sicher auch noch weg wie im 1/1 Reviewed-by: Robert Langhammer <rlanghammer@web.de> Am 22.06.19 um 21:51 schrieb Fabian Bläse: > When the user removes a peer from /etc/config/gateway, > the script has to be able to find any leftover configurations > that have been created for it. > > This can be made very easy by prepending a prefix to every > automatically generated configuration. > > This also allows to remove the nasty check for the babeld default interface. > Therefore the naming check for cfg* also can be removed. > > As a side effect all manually created configuration blocks that do not match a > prefix will not be touched by configuregateway. > > Signed-off-by: Fabian Bläse <fabian@blaese.de> > --- > Using --word-diff might be very handy for reviewing this patch. :-) > --- > .../fff-babeld/files/etc/gateway.d/40-babel | 47 +++++++++---------- > 1 file changed, 23 insertions(+), 24 deletions(-) > > 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 4c94a12..e71f597 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 > @@ -10,15 +10,19 @@ configure() { > # remove peers missing in gateway config > remove_babelpeer() { > local name="$1" > - if ! echo $name | grep cfg > /dev/null; then # do not delete default interface > - if ! uci -q get gateway.$name > /dev/null; then > - # remove interface > - uci -q del network.$name > - # remove iif-rules > - babel_delete_iifrules "$name" || exit 1 > - # remove babel interface > - babel_delete_interface "$name" || exit 1 > - fi > + > + # check prefix > + if [ "$name" = "${name#babelpeer_}" ]; then > + return > + fi > + > + if ! uci -q get gateway.$name > /dev/null; then > + # remove interface > + uci -q del network.$name > + # remove iif-rules > + babel_delete_iifrules "$name" || exit 1 > + # remove babel interface > + babel_delete_interface "$name" || exit 1 > fi > } > > @@ -28,15 +32,10 @@ configure() { > #add new peers > add_babelpeer() { > local name="$1" > + local prefixname="babelpeer_$name" > local vlan > local type > > - # prohibit cfg* as name > - if echo $name | grep cfg > /dev/null; then > - echo "ERROR: name $name is invalid for babelpeer!" > - exit 1 > - fi > - > # get iface > if vlan=$(uci -q get gateway.$name.vlan); then > iface="${SWITCHDEV}.$vlan" > @@ -62,21 +61,21 @@ configure() { > fi > > # add interface > - uci set network.$name=interface > - uci set network.$name.proto=static > - uci set network.$name.ifname=$iface > + uci set network.$prefixname=interface > + uci set network.$prefixname.proto=static > + uci set network.$prefixname.ifname=$iface > > # add iif-rules > - babel_add_iifrules "$name" || exit 1 > + babel_add_iifrules "$prefixname" || exit 1 > > # peer_ip > - 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 > + uci -q delete "network.$prefixname.ipaddr" > + uci -q delete "network.$prefixname.ip6addr" > + babel_add_peeraddr "network.$prefixname.ipaddr" || exit 1 > + babel_add_peer6addr "network.$prefixname.ip6addr" || exit 1 > > # add babel interface > - babel_add_interface "$name" "$iface" "$type" "$rxcost" || exit 1 > + babel_add_interface "$prefixname" "$iface" "$type" "$rxcost" || exit 1 > } > > config_load gateway
Hallo Robert, On 25.06.19 14:26, robert wrote: > Hallo Fabian, > > das ist eine nette Lösung , und das unschöne grep ist auch weg. Find ich > gut. Die exit 1 kommen sicher auch noch weg wie im 1/1 genau, die kommen ja auch daher. Damit da beim Rebasen nichts aus versehen schief geht, schicke ich dafür auf jeden Fall nochmal eine v2. Gruß Fabian
When the user removes a peer from /etc/config/gateway, the script has to be able to find any leftover configurations that have been created for it. This can be made very easy by prepending a prefix to every automatically generated configuration. This also allows to remove the nasty check for the babeld default interface. Therefore the naming check for cfg* also can be removed. As a side effect all manually created configuration blocks that do not match a prefix will not be touched by configuregateway. Signed-off-by: Fabian Bläse <fabian@blaese.de> --- Using --word-diff might be very handy for reviewing this patch. :-) --- .../fff-babeld/files/etc/gateway.d/40-babel | 47 +++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-)