| #!/bin/sh |
| |
| . /usr/share/libubox/jshn.sh |
| |
| hostsfile_getname() |
| { |
| local config="$1" |
| local i=0 |
| local value file |
| |
| while value="$( uci -q get $config.@LoadPlugin[$i].library )"; do { |
| case "$value" in |
| 'olsrd_nameservice'*) |
| file="$( uci -q get $config.@LoadPlugin[$i].hosts_file )" |
| break |
| ;; |
| esac |
| |
| i=$(( i + 1 )) |
| } done |
| |
| echo "${file:-/var/run/hosts_olsr}" |
| } |
| |
| read_hostnames() |
| { |
| local file_list=" $( hostsfile_getname 'olsrd' ) $(hostsfile_getname 'olsrd6' ) " |
| local line ip hostname file file_list_uniq |
| |
| for file in $file_list; do { |
| case " $file_list_uniq " in |
| *" $file "*) |
| ;; |
| *) |
| file_list_uniq="$file_list_uniq $file" |
| ;; |
| esac |
| } done |
| |
| for file in $file_list_uniq; do { |
| [ -e "$file" ] || continue |
| |
| while read -r line; do { |
| case "$line" in |
| [0-9]*) |
| # 2001:ffff:ffff:ffff::1 SomeNode-core.olsr # myself |
| # 10.0.0.1 SomeNode # 10.0.0.1 |
| set -f |
| set +f -- $line |
| ip="$1" |
| hostname="$2" |
| |
| # global vars, e.g. |
| # IP_1_2_3_4='foo' or IP_2001_ffff_ffff_ffff__1='bar' |
| eval IP_${ip//[.:]/_}="$hostname" |
| ;; |
| esac |
| } done <"$file" |
| } done |
| } |
| |
| read_hostnames |
| |
| VARS='localIP:Local remoteIP:Remote validityTime:vTime linkQuality:LQ' |
| VARS="$VARS neighborLinkQuality:NLQ linkCost:Cost remoteHostname:Host" |
| |
| for HOST in '127.0.0.1' '::1';do |
| # check for availability of HOST |
| nc $HOST 9090 >/dev/null 2>&1 |
| if [ $? != 0 ]; then |
| continue |
| fi |
| |
| json_init |
| json_load "$( echo /links | nc $HOST 9090 | sed -n '/^[}{ ]/p' )" # remove header/non-json |
| |
| if json_is_a links array;then |
| json_select links |
| for v in ${VARS};do |
| eval _${v%:*}=0 |
| done |
| for j in 0 1;do |
| case ${j} in 1) |
| for v in ${VARS};do |
| eval printf \"%-\${_${v%:*}}s \" ${v#*:} |
| done |
| echo |
| ;;esac |
| i=1;while json_is_a ${i} object;do |
| json_select ${i} |
| json_get_vars $(for v in ${VARS};do echo ${v%:*};done) |
| case ${j} in 0) |
| for v in ${VARS};do |
| eval "test \${_${v%:*}} -lt \${#${v%:*}} && _${v%:*}=\${#${v%:*}}" |
| done |
| ;;*) |
| for v in ${VARS};do |
| eval printf \"%-\${_${v%:*}}s \" \$${v%:*} |
| eval remoteHostname="\$IP_${remoteIP//[.:]/_}" |
| done |
| echo |
| ;;esac |
| json_select .. |
| i=$(( i + 1 )) |
| done |
| done |
| fi |
| echo |
| done |