[openwrt/openwrt] lldpd: add `custom-tlv` handling

LEDE Commits lede-commits at lists.infradead.org
Tue Mar 25 01:53:00 PDT 2025


robimarko pushed a commit to openwrt/openwrt.git, branch openwrt-24.10:
https://git.openwrt.org/de2718b2f36282d1ba8e85e99f37afa0821e5ed3

commit de2718b2f36282d1ba8e85e99f37afa0821e5ed3
Author: Paul Donald <newtwen+github at gmail.com>
AuthorDate: Mon Apr 22 00:08:48 2024 +0200

    lldpd: add `custom-tlv` handling
    
    Do not verify the format of TLV. Leave that to lldpd.
    
    These lldpd config entries:
    
    config custom-tlv
            list ports 'eth0'
            option tlv 'replace oui 33,44,55 subtype 254 oui-info 55,55,55,55,55'
    
    config custom-tlv
            option tlv 'oui 33,44,44 subtype 232'
            list ports 'br-lan'
            list ports 'eth0'
    
    config custom-tlv # oui-info truncated
            option tlv 'add oui 33,44,33 subtype 66 oui-info 5555555555'
    
    config custom-tlv
            option tlv 'add oui 33,44,31 subtype 44'
    
    config custom-tlv # invalid oui
            option tlv 'add oui 3322 subtype 79'
    
    config custom-tlv # invalid oui
            option tlv 'oui 3312 subtype 74'
    
    Produce the following lldpd.conf content:
    
    configure ports eth0 lldp custom-tlv replace oui 33,44,55 subtype 254 oui-info 55,55,55,55,55
    configure ports br-lan,eth0 lldp custom-tlv oui 33,44,44 subtype 232
    configure lldp custom-tlv add oui 33,44,33 subtype 66 oui-info 5555555555
    configure lldp custom-tlv add oui 33,44,31 subtype 44
    configure lldp custom-tlv add oui 3322 subtype 79
    configure lldp custom-tlv oui 3312 subtype 74
    
    And lldpd (v1.0.13 on v22) logs the following:
    
    Sat Mar 16 19:11:39 2024 daemon.info lldpd[10916]: custom TLV op replace oui 33:44:55 subtype fe
    Sat Mar 16 19:11:39 2024 daemon.info lldpd[10916]: custom TLV op add oui 33:44:44 subtype e8
    Sat Mar 16 19:11:39 2024 daemon.info lldpd[10916]: custom TLV op add oui 33:44:33 subtype 42
    Sat Mar 16 19:11:39 2024 daemon.info lldpd[10916]: custom TLV op add oui 33:44:33 subtype 42
    Sat Mar 16 19:11:39 2024 daemon.info lldpd[10916]: custom TLV op add oui 33:44:31 subtype 2c
    Sat Mar 16 19:11:39 2024 daemon.info lldpd[10916]: custom TLV op add oui 33:44:31 subtype 2c
    Sat Mar 16 19:11:39 2024 daemon.warn lldpcli[10915]: invalid OUI value '3322'
    Sat Mar 16 19:11:39 2024 daemon.info lldpcli[10915]: an error occurred while executing last command
    Sat Mar 16 19:11:39 2024 daemon.warn lldpcli[10915]: invalid OUI value '3312'
    Sat Mar 16 19:11:39 2024 daemon.info lldpcli[10915]: an error occurred while executing last command
    Sat Mar 16 19:11:39 2024 daemon.info lldpcli[10915]: lldpd should resume operations
    
    ( The last two TLV are invalid: their oui must be three hex bytes, comma
    separated. Only the first hex byte of oui-info 5555555555 is used )
    
    Depends on #14867 and its release version bump
    
    Tested on: 22.03.6
    
    Signed-off-by: Paul Donald <newtwen+github at gmail.com>
    Link: https://github.com/openwrt/openwrt/pull/14872
    (cherry picked from commit 8d1fe32c2c46a8de519f9926be2bc062cef66f24)
    Link: https://github.com/openwrt/openwrt/pull/18343
    Signed-off-by: Robert Marko <robimarko at gmail.com>
---
 package/network/services/lldpd/files/lldpd.init | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/package/network/services/lldpd/files/lldpd.init b/package/network/services/lldpd/files/lldpd.init
index 2ad59f8cb1..e60cc82fd3 100644
--- a/package/network/services/lldpd/files/lldpd.init
+++ b/package/network/services/lldpd/files/lldpd.init
@@ -98,6 +98,21 @@ get_interface_csv() {
 	export -n "${1}=$_ifnames"
 }
 
+add_custom_tlv_callback()
+{
+	# syntax: configure [ports ethX[,…]] lldp custom-tlv [add|replace] oui XX,XX,XX subtype XX oui-info XX[,XX,...]
+	# ex: configure ports br-lan,eth0 lldp custom-tlv replace oui 33,44,55 subtype 254 oui-info 55,55,55,55,55
+	# ex: configure lldp custom-tlv oui 33,44,44 subtype 232
+
+	local _ports
+	local _tlv
+	# CSV of device ports
+	get_interface_csv _ports "$1" 'ports'
+	config_get _tlv "$1" 'tlv'
+
+	echo "configure ${_ports:+ports $_ports }lldp custom-tlv $_tlv" >> "$LLDPD_CONF"
+}
+
 write_lldpd_conf()
 {
 	local lldp_description
@@ -197,6 +212,9 @@ write_lldpd_conf()
 	[ "$lldp_mgmt_addr_advertisements" -gt 0 ] && echo "configure lldp management-addresses-advertisements" >> "$LLDPD_CONF" ||\
 		echo "unconfigure lldp management-addresses-advertisements" >> "$LLDPD_CONF"
 
+	# Custom TLV handling
+	config_foreach add_custom_tlv_callback 'custom-tlv'
+
 	# Since lldpd's sysconfdir is /tmp, we'll symlink /etc/lldpd.d to /tmp/$LLDPD_CONFS_DIR
 	[ -e "$LLDPD_CONFS_DIR" ] || ln -s /etc/lldpd.d "$LLDPD_CONFS_DIR"
 }




More information about the lede-commits mailing list