[PATCH] nodewatcher: Add support for layer 3 neighbors

Fabian Bläse fabian at blaese.de
So Sep 8 15:34:59 CEST 2019


Hallo Adrian,

On 08.09.19 13:49, Adrian Schmutzler wrote:
> diff --git a/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher b/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
> index 09f6843d..c9044fe8 100755
> --- a/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
> +++ b/src/packages/fff/fff-nodewatcher/files/usr/sbin/nodewatcher
> @@ -12,7 +12,7 @@ if ! lock -n "$lockfile"; then
>  fi
>  trap "lock -u \"$lockfile\"" INT TERM EXIT
>  
> -SCRIPT_VERSION="54"
> +SCRIPT_VERSION="55"
>  
>  #Get the configuration from the uci configuration file
>  #If it does not exists, then get it from a normal bash file with variables.
> @@ -291,6 +291,16 @@ crawl() {
>      DATA=$DATA"<batman_adv_originators>$batman_adv_originators</batman_adv_originators>"
>      DATA=$DATA"<batman_adv_gateway_mode>$batman_adv_gateway_mode</batman_adv_gateway_mode>"
>      DATA=$DATA"<batman_adv_gateway_list>$batman_adv_gateway_list</batman_adv_gateway_list>"
> +
> +    if [ -s /etc/config/babeld ]; then
> +        BABELS="$(echo dump | nc ::1 33123 | grep '^add neighbour' |
> +            awk -v RS='\n' \
> +                '{r = gensub(/.*add neighbour.*address ([0-9a-fA-F:]*) +if +([^ ]+).* cost +([0-9.]+).*/, \
> +                "<neighbour><ip>\\1</ip><outgoing_interface>\\2</outgoing_interface><link_cost>\\3</link_cost></neighbour>", "g"); print r;}')"
'printf "%s", r' statt 'print r' verwenden? Dann kommt da kein '\n' mitten ins XML.

Verrückt, was da für ein foo raus kommt, wenn man so simple Dinge in Shell parsen möchte.. Man müsste das irgendwie geschickt in eine Map (String -> Value) verwandeln.. Ich hab mich da mal an etwas awk versucht:
> awk '{ for (i=2; i < NF; i += 2) { vars[$i] = $(i+1) }} { printf "%s" vars["cost"] }'
bzw. insgesamt dann
> awk '{ for (i=2; i < NF; i += 2) { vars[$i] = $(i+1) }} \
>     { printf "<neighbour><ip>%s</ip><outgoing_interface>%s</outgoing_interface><link_cost>%s</link_cost></neighbour>\n", vars["address"], vars["if"], vars["cost"] }'
Was hältst du davon?

Gruß
Fabian

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 833 bytes
Beschreibung: OpenPGP digital signature
URL         : <https://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20190908/82d01474/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev