mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-07 04:34:05 +08:00
59 lines
1.8 KiB
Bash
Executable File
59 lines
1.8 KiB
Bash
Executable File
#!/bin/sh
|
|
# Make vnStat track this router's network devices without any hard-coded
|
|
# names: every netifd interface that is up (WAN, LAN, modem, VPN, ...) gets
|
|
# its L3 device added to the "interface" list in /etc/config/vnstat, which
|
|
# the vnstat2 init script feeds to "vnstat --add".
|
|
#
|
|
# netstat-vnstat-track add the devices of all interfaces that are up
|
|
# netstat-vnstat-track <dev>... add the given devices
|
|
#
|
|
# Set "option vnstat_autoadd '0'" in /etc/config/netstats to turn this off.
|
|
|
|
[ -x /usr/bin/vnstat ] || exit 0
|
|
[ "$(uci -q get netstats.@config[0].vnstat_autoadd)" = "0" ] && exit 0
|
|
|
|
valid_name() {
|
|
case "$1" in
|
|
""|lo|*[!A-Za-z0-9._-]*) return 1 ;;
|
|
esac
|
|
return 0
|
|
}
|
|
|
|
discover() {
|
|
ubus call network.interface dump 2>/dev/null | \
|
|
jsonfilter -e '@.interface[@.up=true].l3_device' 2>/dev/null
|
|
}
|
|
|
|
[ $# -gt 0 ] && devices="$*" || devices="$(discover)"
|
|
[ -n "$devices" ] || exit 0
|
|
|
|
lock /var/lock/netstat-vnstat-track
|
|
|
|
# vnstat2 ships "config vnstat" in /etc/config/vnstat; recreate it if missing.
|
|
touch /etc/config/vnstat
|
|
uci -q get vnstat.@vnstat[0] >/dev/null || uci -q add vnstat vnstat >/dev/null
|
|
|
|
tracked=" $(uci -q get vnstat.@vnstat[0].interface) "
|
|
changed=0
|
|
for dev in $devices; do
|
|
valid_name "$dev" || continue
|
|
case "$tracked" in *" $dev "*) continue ;; esac
|
|
uci -q add_list vnstat.@vnstat[0].interface="$dev"
|
|
tracked="$tracked$dev "
|
|
changed=1
|
|
done
|
|
|
|
if [ "$changed" = 1 ]; then
|
|
uci -q commit vnstat
|
|
# reload runs "vnstat --add" for the list and sends SIGHUP so vnstatd
|
|
# picks the new entries up straight away.
|
|
if /etc/init.d/vnstat running 2>/dev/null; then
|
|
/etc/init.d/vnstat reload >/dev/null 2>&1
|
|
elif /etc/init.d/vnstat enabled 2>/dev/null; then
|
|
/etc/init.d/vnstat start >/dev/null 2>&1
|
|
fi
|
|
fi
|
|
|
|
lock -u /var/lock/netstat-vnstat-track
|
|
exit 0
|