lldpd: extended interface(s) parsing to handle patterns

For interface type parameters, the man page documents patterns:
```
*,!eth*,!!eth1

uses all interfaces, except interfaces starting with "eth",
but including "eth1".
```

* Renamed `_ifname` to `_l2dev`.
* get the l2dev via network_get_physdev (and not l3dev)
* Glob pattern `*` is also valid - use noglob for this

The net result is that now interface 'names' including globs '*' and '!'
inversions are included in the generated lldpd configs.

Temporarily `set -o noglob` and then `set +o noglob` to disable & enable
globbing respectively, because when we pass `*` as an interface choice,
other file and pathnames get sucked in from where the init script runs,
and the `*` never makes it to lldpd.

Tested extensively on: 22.03.6, 23.05.3

Signed-off-by: Paul Donald <newtwen+github@gmail.com>
[ squash with commit bumping release version ]
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
This commit is contained in:
Paul Donald 2024-04-12 21:27:56 +02:00 committed by Christian Marangi
parent ea609fe486
commit 4a81d868db
No known key found for this signature in database
GPG Key ID: AC001D09ADBFEAD7
2 changed files with 12 additions and 4 deletions

View File

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=lldpd PKG_NAME:=lldpd
PKG_VERSION:=1.0.17 PKG_VERSION:=1.0.17
PKG_RELEASE:=3 PKG_RELEASE:=4
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/lldpd/lldpd/releases/download/$(PKG_VERSION)/ PKG_SOURCE_URL:=https://github.com/lldpd/lldpd/releases/download/$(PKG_VERSION)/

View File

@ -80,12 +80,20 @@ get_config_cid_ifaces() {
config_get _ifaces 'config' "$2" config_get _ifaces 'config' "$2"
local _iface _ifnames="" local _iface _ifnames=""
# Set noglob to prevent '*' capturing diverse file names in the for ... in
set -o noglob
for _iface in $_ifaces; do for _iface in $_ifaces; do
local _ifname=""
if network_get_device _ifname "$_iface" || [ -e "/sys/class/net/$_iface" ]; then local _l2device=""
append _ifnames "${_ifname:-$_iface}" "," if network_get_physdev _l2device "$_iface" || [ -e "/sys/class/net/$_iface" ]; then
append _ifnames "${_l2device:-$_iface}" ","
else
# Glob case (interface is e.g. '!eth1' or 'eth*' or '*')
append _ifnames "$_iface" ","
fi fi
done done
# Turn noglob off i.e. enable glob again
set +o noglob
export -n "${1}=$_ifnames" export -n "${1}=$_ifnames"
} }