Compile tested: mips_24kc, arm_cortex-a9_vfpv3-d16, i386_pentium4, x86_64, i386_pentium-mmx, mipsel_24kc Signed-off-by: Patrick Grimm <patrick@lunatiki.de>
61 lines
1.3 KiB
Bash
61 lines
1.3 KiB
Bash
# 1: destination variable
|
|
# 2: interface
|
|
# 3: path
|
|
# 4: separator
|
|
# 5: limit
|
|
__network_ifstatus() {
|
|
local __tmp
|
|
|
|
[ -z "$__NETWORK_CACHE" ] && {
|
|
__tmp="$(ubus call network.interface dump 2>&1)"
|
|
case "$?" in
|
|
4) : ;;
|
|
0) export __NETWORK_CACHE="$__tmp" ;;
|
|
*) echo "$__tmp" >&2 ;;
|
|
esac
|
|
}
|
|
|
|
__tmp="$(jsonfilter ${4:+-F "$4"} ${5:+-l "$5"} -s "${__NETWORK_CACHE:-{}}" -e "$1=@.interface${2:+[@.interface='$2']}$3")"
|
|
|
|
[ -z "$__tmp" ] && \
|
|
unset "$1" && \
|
|
return 1
|
|
|
|
eval "$__tmp"
|
|
}
|
|
|
|
# 1: addr
|
|
# 2: export var neighbour dev lladdr
|
|
network_get_neighbour_by_ip()
|
|
{
|
|
local __tmp
|
|
neighbour=''
|
|
dev=''
|
|
lladdr=''
|
|
local ipaddr="$1"
|
|
hostname=$(nslookup "$ipaddr" "$ipaddr" | grep name | cut -d " " -f 3 | cut -d '.' -f -1)
|
|
[ -z "$__NEIGH_CACHE" ] && {
|
|
__tmp="$(ip -6 neigh)"
|
|
export __NEIGH_CACHE="$__tmp"
|
|
}
|
|
[ -z "$__ROUTE_CACHE" ] && {
|
|
__tmp="$(ip -6 route)"
|
|
export __ROUTE_CACHE="$__tmp"
|
|
}
|
|
local gwaddr=$(echo "$__ROUTE_CACHE" | grep "^$ipaddr" | cut -d ' ' -f 3)
|
|
[ -z "$gwaddr" ] && return
|
|
local neigh=$(echo "$__NEIGH_CACHE" | grep "$gwaddr")
|
|
[ -z "$neigh" ] && return
|
|
set -- $neigh
|
|
eval "neighbour=$1;dev=$3;lladdr=$5"
|
|
}
|
|
|
|
# 1: destination variable
|
|
# 2: addr
|
|
network_get_name_by_device()
|
|
{
|
|
__network_ifstatus "$1" "" \
|
|
"[@.device='$2' && !@.table].interface" "" 1 && \
|
|
return 0
|
|
}
|
|
|