From a8b88b8de06915dacde984777617700fe5c051bf Mon Sep 17 00:00:00 2001 From: bergware Date: Wed, 24 May 2023 18:34:27 +0200 Subject: [PATCH 1/4] Network Extra: show current listening interfaces --- plugins/dynamix/NetworkExtra.page | 8 ++- plugins/dynamix/scripts/show_interfaces | 92 +++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 plugins/dynamix/scripts/show_interfaces diff --git a/plugins/dynamix/NetworkExtra.page b/plugins/dynamix/NetworkExtra.page index a8ce09aa5..11764a955 100644 --- a/plugins/dynamix/NetworkExtra.page +++ b/plugins/dynamix/NetworkExtra.page @@ -95,12 +95,16 @@ $(function(){ -_(Include interfaces)_: +_(Current listening interfaces)_: +: +
+ +_(Include listening interfaces)_: : :eth_network_extra_include_help: -_(Exclude interfaces)_: +_(Exclude listening interfaces)_: : :eth_network_extra_exclude_help: diff --git a/plugins/dynamix/scripts/show_interfaces b/plugins/dynamix/scripts/show_interfaces new file mode 100644 index 000000000..2ea27200e --- /dev/null +++ b/plugins/dynamix/scripts/show_interfaces @@ -0,0 +1,92 @@ +#!/bin/bash + +NETWORK_INI="/var/local/emhttp/network.ini" +SYSTEM="/sys/class/net" +EXTRA="/boot/config/network-extra.cfg" + +link() { + grep -Pom1 "^$1=\"\K[^\"]+" $NETWORK_INI.eth +} + +zero() { + data=; + for i in ${!bind[@]}; do + [[ ${bind[$i]} == $1 ]] && data=$1 + done + echo $data +} + +show() { + case $# in + 1) ip addr show to $1 2>/dev/null|grep -Pom1 '^\d+: \K[^:]+';; + 2) ip addr show $1 $2 2>/dev/null|grep -Pom1 'inet6? \K[^\/]+';; + 3) ip $1 addr show $2 $3 2>/dev/null|grep -Pom1 'inet6? \K[^\/]+';; + esac +} + +remove() { + [[ $# -eq 0 ]] && return + for i in ${!bind[@]}; do + [[ ${bind[$i]} == $1 ]] && unset 'bind[i]' + done +} + +extra() { + source <(/usr/bin/fromdos <$EXTRA) + for net in $include_interfaces; do + if [[ -z ${net//[^.:]} ]]; then + # net is an interface name, validate + [[ -n $(show dev $net) && -z $(zero $net) ]] && bind+=($net) + else + # net is an IP address, convert to name + net=$(show $net) + [[ -n $net && -z $(zero $net) ]] && bind+=($net) + fi + done + for net in $exclude_interfaces; do + if [[ -z ${net//[^.:]} ]]; then + # net is an interface name, remove + remove $net + else + # net is an IP address, convert to name and remove + remove $(show $net) + fi + done +} + +bind=(); +if [[ -f $NETWORK_INI ]]; then + # get interface and vlan configurations + for eth in $(grep -Po '^\[\K[^\]]+' $NETWORK_INI); do + # main interface + if [[ -e $SYSTEM/$eth ]]; then + sed -n "/^\[$eth\]/,/^\[eth/p" $NETWORK_INI >$NETWORK_INI.eth + net=$eth + [[ $(link BONDING) == yes ]] && net=${eth/eth/bond} + [[ $(link BRIDGING) == yes ]] && net=${eth/eth/br} + net4=$(link IPADDR:0) + net6=$(link IPADDR6:0) + [[ -n $net4 || -n $net6 ]] && bind+=($net) + if [[ $(link TYPE) == trunk ]]; then + # vlan interface + for vlan in $(grep -Po '^VLANID:\K\d+' $NETWORK_INI.eth); do + net4=$(link IPADDR:$vlan) + net6=$(link IPADDR6:$vlan) + [[ -n $net4 || -n $net6 ]] && bind+=($net) + done + fi + fi + done + # add active WG tunnels + for wg in $(wg show interfaces); do + net4=$(show -4 dev $wg) + net6=$(show -6 dev $wg) + [[ -n $net4 || -n $net6 ]] && bind+=($wg) + done + # add user defined interfaces + [[ -f $EXTRA ]] && extra + # remove temporary file + rm -f $NETWORK_INI.eth +fi +bind=${bind[@]} +echo ${bind// /, } From 7573020e5551b68ae9407b003e3f6045a3a406f0 Mon Sep 17 00:00:00 2001 From: bergware Date: Wed, 24 May 2023 18:34:48 +0200 Subject: [PATCH 2/4] Make script executable --- plugins/dynamix/scripts/show_interfaces | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 plugins/dynamix/scripts/show_interfaces diff --git a/plugins/dynamix/scripts/show_interfaces b/plugins/dynamix/scripts/show_interfaces old mode 100644 new mode 100755 From b21b250df50e71d0335444910df03ec350412ef2 Mon Sep 17 00:00:00 2001 From: bergware Date: Wed, 24 May 2023 18:58:15 +0200 Subject: [PATCH 3/4] Update show_interfaces --- plugins/dynamix/scripts/show_interfaces | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/dynamix/scripts/show_interfaces b/plugins/dynamix/scripts/show_interfaces index 2ea27200e..6d4075f0f 100755 --- a/plugins/dynamix/scripts/show_interfaces +++ b/plugins/dynamix/scripts/show_interfaces @@ -72,7 +72,7 @@ if [[ -f $NETWORK_INI ]]; then for vlan in $(grep -Po '^VLANID:\K\d+' $NETWORK_INI.eth); do net4=$(link IPADDR:$vlan) net6=$(link IPADDR6:$vlan) - [[ -n $net4 || -n $net6 ]] && bind+=($net) + [[ -n $net4 || -n $net6 ]] && bind+=($net.$vlan) done fi fi From 342fc9c0fe5f71ad48e53a7ae15e068b9314b7f2 Mon Sep 17 00:00:00 2001 From: bergware Date: Wed, 24 May 2023 19:06:39 +0200 Subject: [PATCH 4/4] Update NetworkExtra.page --- plugins/dynamix/NetworkExtra.page | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/dynamix/NetworkExtra.page b/plugins/dynamix/NetworkExtra.page index 11764a955..6b16987a8 100644 --- a/plugins/dynamix/NetworkExtra.page +++ b/plugins/dynamix/NetworkExtra.page @@ -96,7 +96,7 @@ $(function(){ _(Current listening interfaces)_: -: +:
_(Include listening interfaces)_: