]> ## LLDP for UNRAID ###2026.10.22 - fix: the service stop waits for the neighbor watcher to finish before its final history write, so the restart grace is not lost - fix: a missing LLDP-MED "available" field no longer raises a PHP warning ###2026.10.21 - fix: interface patterns that only exclude (for example "!eth2") now select all other interfaces in the Ports table, the %i templates and the rc script - fix: link aggregation in the neighbor details is read from lldpcli's object (status, id) - fix: LLDP-MED capabilities reported as "no" are no longer listed as available - fix: LACP is only shown as ok when actor and partner churn state are both none - fix: neighbor history tracks every neighbor of an interface (interface + chassis ID + port ID), so multi-neighbor ports and reordering no longer cause false events - fix: after a service restart, neighbors loaded from the history get a startup grace (tx interval x hold, at least 90 seconds) before they can be reported removed - fix: the rate-limit summary of suppressed notifications is no longer lost when a new window starts - fix: notifications sent in one batch get distinct Unraid event names so none are dropped, and only delivered notifications count against the rate limit ###2026.10.20 - new: Ports table on the settings page: the physical NICs and bonds matching the interface pattern with link state/speed/MTU, bond membership (master/slave, mode, LACP state) and a per-port LLDP status (rx-and-tx, rx-only, tx-only, disabled) - new: port ID subtype (default, ifname, macaddress, local), port description and bond slave source MAC settings, with per-port overrides of the port ID (local) and port description; `%i` in the texts is replaced by the interface name - new: neighbor table: bond/LACP info per interface and an expandable details row (remote capabilities, PVID, VLANs, max frame size, PMD autoneg and MAU type, link aggregation, PoE, LLDP-MED); mismatches between the remote max frame size and the local MTU, or between the remote and local link speed, are highlighted - new: neighbor watcher (started and stopped with the service) that records neighbor changes (added, removed, changed) in a history (/boot/config/plugins/ulldpd/history.json, written only on change) and optionally sends Unraid notifications (off by default, importance normal or warning, rate limited); the page shows "previously on ..." for changed neighbors and a "Recent neighbor changes" table with a Clear button - not supported by lldpd 1.0.22 and therefore not offered: a different management address or management VLAN per port (the management address pattern is global), the "ifalias" port ID subtype, per-port ifname/macaddress subtypes - security: all new settings are whitelisted and validated in both rc.lldpd and PHP (texts: no quotes/newlines/leading dash, only %i as template); interface names are validated before they are passed to lldpcli as separate arguments; the new endpoint is POST + CSRF only; notification texts are reduced to a plain ASCII subset and passed to notify as arguments, never through a shell ###2026.10.19 - change: removed the introductory LLDP description text from the settings page ###2026.10.18 #### Settings page and dashboard rework - new: neighbors are shown as tables (interface, protocol, system name, chassis ID, port ID, port description, VLANs, management IPs, age) directly on the settings page and refresh automatically; the "Show Neighbors" popup is gone - new: local chassis information shown as a compact table - new: status line with running/stopped, pid, neighbor count and lldpd version - new: dashboard tile with the neighbor summary (local interface to switch/port) linking to the settings page - new: settings for interface pattern, management address pattern, chassis ID interface, system name and description overrides, transmit interval and hold, receive-only mode and interface description (ifAlias) updates - new: advanced custom lldpd configuration (/boot/config/plugins/ulldpd/custom.conf), edited on the settings page and copied to /etc/lldpd.d/ at start - change: help texts explain that Apply restarts the running service and what CDP/FDP/SONMP/EDP do - security: all new settings are whitelisted and validated in both rc.lldpd and PHP (invalid values are ignored); the new endpoints are CSRF-protected, size-limited and escape all output ###2026.10.17 #### Fork release (davidcoulson/LLDP-unRAID), continuing the unmaintained project by desertwitch - security: updated from lldpd-1.0.20 to lldpd-1.0.22 (fixes CVE-2026-46433, out-of-bounds read in VLAN handling) - security: lldpd now runs with privilege separation (user/group _lldpd, chroot /run/lldpd) - security: configuration is parsed as data (whitelisted keys/values) and no longer executed as shell code - security: all lldpcli output on the settings page and neighbor view is HTML-escaped - fix: lldpd is built without libxml2/readline and with its own libevent, so no libraries missing on Unraid 7.x are needed (minimum Unraid is now 6.12.0) - fix: packages are downloaded and verified (MD5 and SHA256) before the running service is stopped; old package files are pruned - fix: start/stop/restart report real failures, check readiness, and log with tag ulldpd; new status action - fix: protocol settings are no longer dropped when applying with the service running - change: update and download URLs now point to the davidcoulson fork ###2026.10.16 #### (upstream) Plugin Advisory: End of Support on 30.11.2026 The original author announced the end of support for the original repository; forks were explicitly welcome. This is such a fork. ###2026.10.06 - announce maintenance mode (no functional changes) ###2026.02.11 - new: updated from lldpd-1.0.19 to lldpd-1.0.20 ###2025.08.21 - fix: make pages and dashboards compliant with new responsive UI ###2025.02.26 - fix: future-proofing changes to base plugin structure ###2025.01.24 - new: updated from lldpd-1.0.18 to lldpd-1.0.19 ###2024.09.16 - fix: reworked bash scripts to better standards with more safety for strange configurational states ###2024.09.13 - important fix: address possible flock condition causing installation script to stall (thanks AgentXXL) ###2024.09.12 - fix: made optical changes regarding wording, positioning and helptexts on the LLDP Settings page - fix: improved script security by handling of leading and trailing whitespaces in configurational values - new: use of plugin usage metric functions to aid development of new features and planning for plugin updates (toggleable) ###2024.08.07 - new: switched from legacy to more recent update checking mechanism ###2024.04.15 - fix: only propagate LLDP information on physical network interfaces (eth*) instead of all network interfaces ###2024.03.11 - fix: moved around some statements in the installation and removal processes (no changes to packages) ###2024.02.26 - release note: welcome to the first version of the LLDP package. - release note: please report any problems in the respective support topic. &pkgURL;/&lldpdNAME;.txz &lldpdMD5; &lldpdSHA256; &gitURL;/archive/&plgNAME;.txz &plgMD5; &plgSHA256; PLG=&plgPATH; for f in "$PLG/&lldpdNAME;.txz" "$PLG/&plgNAME;.txz"; do if [ ! -s "$f" ]; then echo "ERROR: $f is missing; aborting before changing anything." exit 1 fi done echo "Stopping existing LLDP service (before install/upgrade)..." if [ -x /etc/rc.d/rc.lldpd ]; then /etc/rc.d/rc.lldpd stop fi killall lldpd >/dev/null 2>&1 echo "Installing packages..." if ! upgradepkg --install-new "$PLG/&lldpdNAME;.txz"; then echo "ERROR: installation of &lldpdNAME; failed." /etc/rc.d/rc.lldpd autostart exit 1 fi if ! upgradepkg --install-new "$PLG/&plgNAME;.txz"; then echo "ERROR: installation of &plgNAME; failed." /etc/rc.d/rc.lldpd autostart exit 1 fi echo "Removing superseded package files..." for f in "$PLG"/*.txz "$PLG"/*.md5 "$PLG"/*.sha256; do [ -e "$f" ] || continue case "$(basename "$f")" in "&lldpdNAME;.txz"|"&plgNAME;.txz") ;; *) rm -f "$f" ;; esac done echo "Determining if LLDP service should be started..." if ! /etc/rc.d/rc.lldpd autostart; then echo "WARNING: the LLDP service could not be started, see the syslog." fi echo "" echo "-------------------------------------------------------------" echo " LLDP for UNRAID has been installed." echo " Version: &version; / Plugin Maintainer: &author;" echo "-------------------------------------------------------------" echo "" exit 0 echo "Stopping LLDP service (before uninstall)..." if [ -x /etc/rc.d/rc.lldpd ]; then /etc/rc.d/rc.lldpd stop fi killall lldpd >/dev/null 2>&1 removepkg ulldpd removepkg lldpd # remove downloaded packages; the user configuration (ulldpd.cfg) is kept rm -f &plgPATH;/*.txz &plgPATH;/*.md5 &plgPATH;/*.sha256 rm -rf &emhttp; rm -rf /run/lldpd /run/lldpd.pid /run/lldpd.socket rm -f /run/ulldpd-watch.pid /run/ulldpd-state.json /run/ulldpd-state.lock echo "" echo "-----------------------------------------------------------" echo " LLDP for UNRAID has been removed." echo " Version: &version; / Plugin Maintainer: &author;" echo " Your settings were kept in &plgPATH;/&name;.cfg" echo "-----------------------------------------------------------" echo ""