#!/bin/sh
|
|
|
|
. /lib/functions.sh
|
|
. /lib/functions/network.sh
|
|
. /usr/share/libubox/jshn.sh
|
|
. /lib/mwan3/common.sh
|
|
|
|
MWAN3TRACK_STATUS_DIR="/var/run/mwan3track"
|
|
|
|
IPS="ipset"
|
|
IPT4="iptables -t mangle -w"
|
|
IPT6="ip6tables -t mangle -w"
|
|
|
|
report_connected_v4() {
|
|
local address
|
|
|
|
if [ -n "$($IPT4 -S mwan3_connected 2> /dev/null)" ]; then
|
|
for address in $($IPS list mwan3_connected_v4 | tail -n +8); do
|
|
json_add_string "" "${address}"
|
|
done
|
|
fi
|
|
}
|
|
|
|
report_connected_v6() {
|
|
local address
|
|
|
|
if [ -n "$($IPT6 -S mwan3_connected 2> /dev/null)" ]; then
|
|
for address in $($IPS list mwan3_connected_v6 | tail -n +8); do
|
|
json_add_string "" "${address}"
|
|
done
|
|
fi
|
|
}
|
|
|
|
get_mwan3_status() {
|
|
local iface="${1}"
|
|
local iface_select="${2}"
|
|
local running="0"
|
|
local age=0
|
|
local pid device time_p time_n
|
|
|
|
network_get_device device $1
|
|
|
|
if [ "${iface}" = "${iface_select}" ] || [ "${iface_select}" = "" ]; then
|
|
pid="$(pgrep -f "mwan3track $iface $device")"
|
|
if [ "${pid}" != "" ]; then
|
|
running="1"
|
|
fi
|
|
|
|
time_p="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/TIME")"
|
|
[ -z "${time_p}" ] || {
|
|
time_n="$(get_uptime)"
|
|
let age=time_n-time_p
|
|
}
|
|
|
|
json_add_object "${iface}"
|
|
json_add_int age "$age"
|
|
json_add_int "score" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/SCORE")"
|
|
json_add_int "lost" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/LOST")"
|
|
json_add_int "turn" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/TURN")"
|
|
json_add_string "status" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/STATUS")"
|
|
json_add_boolean "running" "${running}"
|
|
json_add_array "track_ip"
|
|
for file in $MWAN3TRACK_STATUS_DIR/${iface}/*; do
|
|
track="${file#*/TRACK_}"
|
|
if [ "${track}" != "${file}" ]; then
|
|
json_add_object
|
|
json_add_string ip "${track}"
|
|
json_add_string status "$(cat "${file}")"
|
|
json_add_int latency "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/LATENCY_${track}")"
|
|
json_add_int packetloss "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/LOSS_${track}")"
|
|
json_close_object
|
|
fi
|
|
done
|
|
json_close_array
|
|
json_close_object
|
|
fi
|
|
}
|
|
|
|
main () {
|
|
|
|
case "$1" in
|
|
list)
|
|
json_init
|
|
json_add_object "status"
|
|
json_add_string "section" "x"
|
|
json_add_string "interface" "x"
|
|
json_close_object
|
|
json_dump
|
|
;;
|
|
call)
|
|
case "$2" in
|
|
status)
|
|
local section iface
|
|
read input;
|
|
json_load "$input"
|
|
json_get_var section section
|
|
json_get_var iface interface
|
|
|
|
config_load mwan3
|
|
json_init
|
|
case "$section" in
|
|
interfaces)
|
|
json_add_object interfaces
|
|
config_foreach get_mwan3_status interface "${iface}"
|
|
json_close_object
|
|
;;
|
|
connected)
|
|
json_add_object connected
|
|
json_add_array ipv4
|
|
report_connected_v4
|
|
json_close_array
|
|
json_add_array ipv6
|
|
report_connected_v6
|
|
json_close_array
|
|
json_close_object
|
|
;;
|
|
*)
|
|
# interfaces
|
|
json_add_object interfaces
|
|
config_foreach get_mwan3_status interface
|
|
json_close_object
|
|
# connected
|
|
json_add_object connected
|
|
json_add_array ipv4
|
|
report_connected_v4
|
|
json_close_array
|
|
json_add_array ipv6
|
|
report_connected_v6
|
|
json_close_array
|
|
json_close_object
|
|
;;
|
|
esac
|
|
json_dump
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
}
|
|
|
|
main "$@"
|