From 5fe7e167dafbefe389a944ed950e56f2b4950ed4 Mon Sep 17 00:00:00 2001 From: Paul Donald Date: Mon, 22 Apr 2024 00:08:48 +0200 Subject: [PATCH] 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 --- .../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 f8de88d4aff..8e25b1e5242 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" }