blob: 65a32a6b4636273039a7ad1798dee073ed974dc4 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#!/bin/sh
2
3. /usr/share/libubox/jshn.sh
4
5hostsfile_getname()
6{
7 local config="$1"
8 local i=0
9 local value file
10
11 while value="$( uci -q get $config.@LoadPlugin[$i].library )"; do {
12 case "$value" in
13 'olsrd_nameservice'*)
14 file="$( uci -q get $config.@LoadPlugin[$i].hosts_file )"
15 break
16 ;;
17 esac
18
19 i=$(( i + 1 ))
20 } done
21
22 echo "${file:-/var/run/hosts_olsr}"
23}
24
25read_hostnames()
26{
27 local file_list=" $( hostsfile_getname 'olsrd' ) $(hostsfile_getname 'olsrd6' ) "
28 local line ip hostname file file_list_uniq
29
30 for file in $file_list; do {
31 case " $file_list_uniq " in
32 *" $file "*)
33 ;;
34 *)
35 file_list_uniq="$file_list_uniq $file"
36 ;;
37 esac
38 } done
39
40 for file in $file_list_uniq; do {
41 [ -e "$file" ] || continue
42
43 while read -r line; do {
44 case "$line" in
45 [0-9]*)
46 # 2001:ffff:ffff:ffff::1 SomeNode-core.olsr # myself
47 # 10.0.0.1 SomeNode # 10.0.0.1
48 set -f
49 set +f -- $line
50 ip="$1"
51 hostname="$2"
52
53 # global vars, e.g.
54 # IP_1_2_3_4='foo' or IP_2001_ffff_ffff_ffff__1='bar'
55 eval IP_${ip//[.:]/_}="$hostname"
56 ;;
57 esac
58 } done <"$file"
59 } done
60}
61
62read_hostnames
63
64VARS='localIP:Local remoteIP:Remote validityTime:vTime linkQuality:LQ'
65VARS="$VARS neighborLinkQuality:NLQ linkCost:Cost remoteHostname:Host"
66
67for HOST in '127.0.0.1' '::1';do
68 # check for availability of HOST
69 nc $HOST 9090 >/dev/null 2>&1
70 if [ $? != 0 ]; then
71 continue
72 fi
73
74 json_init
75 json_load "$( echo /links | nc $HOST 9090 | sed -n '/^[}{ ]/p' )" # remove header/non-json
76
77 if json_is_a links array;then
78 json_select links
79 for v in ${VARS};do
80 eval _${v%:*}=0
81 done
82 for j in 0 1;do
83 case ${j} in 1)
84 for v in ${VARS};do
85 eval printf \"%-\${_${v%:*}}s \" ${v#*:}
86 done
87 echo
88 ;;esac
89 i=1;while json_is_a ${i} object;do
90 json_select ${i}
91 json_get_vars $(for v in ${VARS};do echo ${v%:*};done)
92 case ${j} in 0)
93 for v in ${VARS};do
94 eval "test \${_${v%:*}} -lt \${#${v%:*}} && _${v%:*}=\${#${v%:*}}"
95 done
96 ;;*)
97 for v in ${VARS};do
98 eval printf \"%-\${_${v%:*}}s \" \$${v%:*}
99 eval remoteHostname="\$IP_${remoteIP//[.:]/_}"
100 done
101 echo
102 ;;esac
103 json_select ..
104 i=$(( i + 1 ))
105 done
106 done
107 fi
108 echo
109done