[PATCH] nodewatcher: Add support for layer 3 neighbors

robert rlanghammer at web.de
Mi Sep 11 21:22:45 CEST 2019


Hallo,

ich bevorzuge das awk von Fabian.

Gruss Robert

Am 08.09.19 um 15:34 schrieb Fabian Bläse:
> 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/20190911/f55d3be2/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev