blob: 4afb6a92b7fb81a75c6569372019ee4e2eb7382d [file] [log] [blame]
developer0289a912024-02-20 12:06:42 +08001--- a/package/network/services/lldpd/Makefile
2+++ b/package/network/services/lldpd/Makefile
3@@ -8,18 +8,20 @@
4 include $(TOPDIR)/rules.mk
5
6 PKG_NAME:=lldpd
7-PKG_VERSION:=1.0.7
8-PKG_RELEASE:=1
9+PKG_VERSION:=1.0.17
developerbdcc0e42024-03-14 16:34:44 +080010+PKG_RELEASE:=3
developer0289a912024-02-20 12:06:42 +080011
12 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
13-PKG_SOURCE_URL:=https://media.luffy.cx/files/lldpd
14-PKG_HASH:=1df79179d489c841b49265f2ab5ff05f284a647e95862d2f3c02b3fb079a87e1
15+PKG_SOURCE_URL:=https://github.com/lldpd/lldpd/releases/download/$(PKG_VERSION)/
16+PKG_HASH:=89ae691a4917ac9e0ec3b8b2c1e634cc402d43b804f98850c73bd1c7df380882
17
18 PKG_MAINTAINER:=Stijn Tintel <stijn@linux-ipv6.be>
19 PKG_LICENSE:=ISC
20+PKG_CPE_ID:=cpe:/a:lldpd_project:lldpd
21
22 PKG_FIXUP:=autoreconf
23 PKG_BUILD_PARALLEL:=1
24+PKG_BUILD_FLAGS:=lto
25 PKG_INSTALL:=1
26
27 include $(INCLUDE_DIR)/package.mk
developerbdcc0e42024-03-14 16:34:44 +080028@@ -29,8 +31,8 @@ define Package/lldpd
29 CATEGORY:=Network
developer0289a912024-02-20 12:06:42 +080030 SUBMENU:=Routing and Redirection
31 TITLE:=Link Layer Discovery Protocol daemon
developerbdcc0e42024-03-14 16:34:44 +080032- URL:=https://vincentbernat.github.io/lldpd/
developer0289a912024-02-20 12:06:42 +080033- DEPENDS:=+libevent2 +USE_GLIBC:libbsd +LLDPD_WITH_JSON:libjson-c +LLDPD_WITH_SNMP:libnetsnmp
developerbdcc0e42024-03-14 16:34:44 +080034+ URL:=https://lldpd.github.io/
developer0289a912024-02-20 12:06:42 +080035+ DEPENDS:=+libcap +libevent2 +USE_GLIBC:libbsd +LLDPD_WITH_JSON:libjson-c +LLDPD_WITH_SNMP:libnetsnmp
36 USERID:=lldp=121:lldp=129
37 MENU:=1
38 endef
39@@ -66,19 +68,28 @@ define Package/lldpd/install
40 $(INSTALL_BIN) ./files/lldpd.init $(1)/etc/init.d/lldpd
41 $(INSTALL_CONF) ./files/lldpd.config $(1)/etc/config/lldpd
42 ifneq ($(CONFIG_LLDPD_WITH_CDP),y)
43- sed -i -e '/cdp/d' $(1)/etc/init.d/lldpd $(1)/etc/config/lldpd
44+ sed -i -e 's/CONFIG_LLDPD_WITH_CDP=y/CONFIG_LLDPD_WITH_CDP=n/g' $(1)/etc/init.d/lldpd
45+ sed -i -e '/cdp/d' $(1)/etc/config/lldpd
46 endif
47 ifneq ($(CONFIG_LLDPD_WITH_FDP),y)
48- sed -i -e '/fdp/d' $(1)/etc/init.d/lldpd $(1)/etc/config/lldpd
49+ sed -i -e 's/CONFIG_LLDPD_WITH_FDP=y/CONFIG_LLDPD_WITH_FDP=n/g' $(1)/etc/init.d/lldpd
50+ sed -i -e '/fdp/d' $(1)/etc/config/lldpd
51 endif
52 ifneq ($(CONFIG_LLDPD_WITH_EDP),y)
53- sed -i -e '/edp/d' $(1)/etc/init.d/lldpd $(1)/etc/config/lldpd
54+ sed -i -e 's/CONFIG_LLDPD_WITH_EDP=y/CONFIG_LLDPD_WITH_EDP=n/g' $(1)/etc/init.d/lldpd
55+ sed -i -e '/edp/d' $(1)/etc/config/lldpd
56 endif
57 ifneq ($(CONFIG_LLDPD_WITH_SONMP),y)
58- sed -i -e '/sonmp/d' $(1)/etc/init.d/lldpd $(1)/etc/config/lldpd
59+ sed -i -e 's/CONFIG_LLDPD_WITH_SONMP=y/CONFIG_LLDPD_WITH_SONMP=n/g' $(1)/etc/init.d/lldpd
60+ sed -i -e '/sonmp/d' $(1)/etc/config/lldpd
61 endif
62 ifneq ($(CONFIG_LLDPD_WITH_SNMP),y)
63- sed -i -e '/agentxsocket/d' $(1)/etc/init.d/lldpd $(1)/etc/config/lldpd
64+ sed -i -e 's/CONFIG_LLDPD_WITH_SNMP=y/CONFIG_LLDPD_WITH_SNMP=n/g' $(1)/etc/init.d/lldpd
65+ sed -i -e '/agentxsocket/d' $(1)/etc/config/lldpd
66+endif
67+ifneq ($(CONFIG_LLDPD_WITH_LLDPMED),y)
68+ sed -i -e 's/CONFIG_LLDPD_WITH_LLDPMED=y/CONFIG_LLDPD_WITH_LLDPMED=n/g' $(1)/etc/init.d/lldpd
69+ sed -i -e '/agentxsocket/d' $(1)/etc/config/lldpd
70 endif
71 endef
72
73@@ -110,4 +121,6 @@ CONFIGURE_ARGS += \
74 $(if $(CONFIG_LLDPD_WITH_SNMP),--with-snmp,) \
75 $(if $(CONFIG_USE_GLIBC),,--without-libbsd)
76
77+TARGET_LDFLAGS += -Wl,--gc-sections,--as-needed
78+
79 $(eval $(call BuildPackage,lldpd))
developerbdcc0e42024-03-14 16:34:44 +080080--- a/package/network/services/lldpd/files/lldpd.config
81+++ b/package/network/services/lldpd/files/lldpd.config
82@@ -7,7 +7,9 @@ config lldpd config
83 option agentxsocket /var/run/agentx.sock
84
85 option lldp_class 4
86- option lldp_location "2:FR:6:Commercial Rd:3:Roseville:19:4"
87+ # lldp_policy only needed for lldp_class 2-3
88+ # option lldp_policy 'application streaming-video unknown'
89+ option lldp_location "address country EU"
90
91 # if empty, the distribution description is sent
92 #option lldp_description "OpenWrt System"
developer0289a912024-02-20 12:06:42 +080093--- a/package/network/services/lldpd/files/lldpd.init
94+++ b/package/network/services/lldpd/files/lldpd.init
developerbdcc0e42024-03-14 16:34:44 +080095@@ -1,15 +1,29 @@
96 #!/bin/sh /etc/rc.common
97 # Copyright (C) 2008-2015 OpenWrt.org
98+# shellcheck disable=1091,2034,3037,3043,3045
99
developer0289a912024-02-20 12:06:42 +0800100 START=90
101 STOP=01
102
103+CONFIG_LLDPD_WITH_CDP=y
104+CONFIG_LLDPD_WITH_EDP=y
105+CONFIG_LLDPD_WITH_FDP=y
106+CONFIG_LLDPD_WITH_LLDPMED=y
107+CONFIG_LLDPD_WITH_SNMP=y
108+CONFIG_LLDPD_WITH_SONMP=y
109+
110 USE_PROCD=1
111+LLDPDBIN=/usr/sbin/lldpd
112 LLDPCLI=/usr/sbin/lldpcli
113 LLDPSOCKET=/var/run/lldpd.socket
114 LLDPD_CONF=/tmp/lldpd.conf
115 LLDPD_CONFS_DIR=/tmp/lldpd.d
116
117+LLDPD_RUN=/var/run/lldpd
118+LLDPD_RESTART_HASH=${LLDPD_RUN}/lldpd.restart_hash
119+
120+. "$IPKG_INSTROOT/lib/functions/network.sh"
121+
122 find_release_info()
123 {
124 [ -s /etc/os-release ] && . /etc/os-release
developerbdcc0e42024-03-14 16:34:44 +0800125@@ -19,10 +33,65 @@ find_release_info()
developer0289a912024-02-20 12:06:42 +0800126 echo "${PRETTY_NAME:-Unknown OpenWrt release} @ $(cat /proc/sys/kernel/hostname)"
127 }
128
129+get_config_restart_hash() {
130+ local var="$1"
131+ local _string _hash v
132+
133+ config_load 'lldpd'
134+
135+ config_get v 'config' 'lldp_class'; append _string "$v" ","
developerbdcc0e42024-03-14 16:34:44 +0800136+ if [ "$CONFIG_LLDPD_WITH_SNMP" = "y" ]; then
developer0289a912024-02-20 12:06:42 +0800137+ config_get v 'config' 'agentxsocket'; append _string "$v" ","
138+ fi
139+ config_get v 'config' 'cid_interface'; append _string "$v" ","
140+ config_get v 'config' 'filter'; append _string "$v" ","
141+ config_get_bool v 'config' 'readonly_mode'; append _string "$v" ","
142+ config_get_bool v 'config' 'lldp_no_version'; append _string "$v" ","
developerbdcc0e42024-03-14 16:34:44 +0800143+ if [ "$CONFIG_LLDPD_WITH_LLDPMED" = "y" ]; then
developer0289a912024-02-20 12:06:42 +0800144+ config_get_bool v 'config' 'lldpmed_no_inventory'; append _string "$v" ","
145+ fi
146+ config_get_bool v 'config' 'enable_lldp' 1; append _string "$v" ","
147+ config_get_bool v 'config' 'force_lldp'; append _string "$v" ","
developerbdcc0e42024-03-14 16:34:44 +0800148+ if [ "$CONFIG_LLDPD_WITH_CDP" = "y" ]; then
developer0289a912024-02-20 12:06:42 +0800149+ config_get_bool v 'config' 'enable_cdp'; append _string "$v" ","
150+ config_get v 'config' 'cdp_version'; append _string "$v" ","
151+ config_get_bool v 'config' 'force_cdp'; append _string "$v" ","
152+ config_get_bool v 'config' 'force_cdpv2'; append _string "$v" ","
153+ fi
developerbdcc0e42024-03-14 16:34:44 +0800154+ if [ "$CONFIG_LLDPD_WITH_EDP" = "y" ]; then
developer0289a912024-02-20 12:06:42 +0800155+ config_get_bool v 'config' 'enable_edp'; append _string "$v" ","
156+ config_get_bool v 'config' 'force_edp'; append _string "$v" ","
157+ fi
developerbdcc0e42024-03-14 16:34:44 +0800158+ if [ "$CONFIG_LLDPD_WITH_FDP" = "y" ]; then
developer0289a912024-02-20 12:06:42 +0800159+ config_get_bool v 'config' 'enable_fdp'; append _string "$v" ","
160+ config_get_bool v 'config' 'force_fdp'; append _string "$v" ","
161+ fi
developerbdcc0e42024-03-14 16:34:44 +0800162+ if [ "$CONFIG_LLDPD_WITH_SONMP" = "y" ]; then
developer0289a912024-02-20 12:06:42 +0800163+ config_get_bool v 'config' 'enable_sonmp'; append _string "$v" ","
164+ config_get_bool v 'config' 'force_sonmp'; append _string "$v" ","
165+ fi
166+
developerbdcc0e42024-03-14 16:34:44 +0800167+ _hash=$(echo -n "${_string}" | md5sum | awk '{ print $1 }')
developer0289a912024-02-20 12:06:42 +0800168+ export -n "$var=$_hash"
169+}
170+
171+get_config_cid_ifaces() {
developerbdcc0e42024-03-14 16:34:44 +0800172+ local _ifaces
173+ config_get _ifaces 'config' "$2"
developer0289a912024-02-20 12:06:42 +0800174+
175+ local _iface _ifnames=""
176+ for _iface in $_ifaces; do
177+ local _ifname=""
178+ if network_get_device _ifname "$_iface" || [ -e "/sys/class/net/$_iface" ]; then
179+ append _ifnames "${_ifname:-$_iface}" ","
180+ fi
181+ done
182+
183+ export -n "${1}=$_ifnames"
184+}
185+
186 write_lldpd_conf()
187 {
188- . /lib/functions/network.sh
189-
190 local lldp_description
191
192 config_load 'lldpd'
developerbdcc0e42024-03-14 16:34:44 +0800193@@ -31,91 +100,276 @@ write_lldpd_conf()
194 local lldp_hostname
195 config_get lldp_hostname 'config' 'lldp_hostname' "$(cat /proc/sys/kernel/hostname)"
196
197- local ifaces
198- config_get ifaces 'config' 'interface'
199-
200- local iface ifnames=""
201- for iface in $ifaces; do
202- local ifname=""
203- if network_get_device ifname "$iface" || [ -e "/sys/class/net/$iface" ]; then
204- append ifnames "${ifname:-$iface}" ","
205- fi
206- done
207+ local ifnames
208+ get_config_cid_ifaces ifnames "interface"
209
developer0289a912024-02-20 12:06:42 +0800210 local lldp_mgmt_ip
211 config_get lldp_mgmt_ip 'config' 'lldp_mgmt_ip'
212
213+ local lldp_syscapabilities
214+ config_get lldp_syscapabilities 'config' 'lldp_syscapabilities'
215+
developerbdcc0e42024-03-14 16:34:44 +0800216+ if [ "$CONFIG_LLDPD_WITH_LLDPMED" = "y" ]; then
developer0289a912024-02-20 12:06:42 +0800217+ local lldpmed_fast_start
218+ config_get_bool lldpmed_fast_start 'config' 'lldpmed_fast_start' 0
219+
220+ local lldpmed_fast_start_tx_interval
221+ config_get lldpmed_fast_start_tx_interval 'config' 'lldpmed_fast_start_tx_interval' 0
developerbdcc0e42024-03-14 16:34:44 +0800222+
223+ local lldp_location
224+ config_get lldp_location 'config' 'lldp_location'
225+
226+ local lldp_class
227+ config_get lldp_class 'config' 'lldp_class'
228+
229+ local lldp_policy
230+ config_get lldp_policy 'config' 'lldp_policy'
231+
developer0289a912024-02-20 12:06:42 +0800232+ fi
233+
234+ local lldp_agenttype
235+ config_get lldp_agenttype 'config' 'lldp_agenttype' 'nearest-bridge'
236+
237+ local lldp_portidsubtype
238+ config_get lldp_portidsubtype 'config' 'lldp_portidsubtype' 'macaddress'
239+
240+ local lldp_platform
241+ config_get lldp_platform 'config' 'lldp_platform' ""
242+
243+ local lldp_tx_interval
244+ config_get lldp_tx_interval 'config' 'lldp_tx_interval' 0
245+
246+ local lldp_tx_hold
247+ config_get lldp_tx_hold 'config' 'lldp_tx_hold' 0
248+
249 # Clear out the config file first
250 echo -n > "$LLDPD_CONF"
developerbdcc0e42024-03-14 16:34:44 +0800251- [ -n "$ifnames" ] && echo "configure system interface pattern" "$ifnames" >> "$LLDPD_CONF"
252+ [ -n "$ifnames" ] && echo "configure system interface pattern $ifnames" >> "$LLDPD_CONF"
developer0289a912024-02-20 12:06:42 +0800253 [ -n "$lldp_description" ] && echo "configure system description" "\"$lldp_description\"" >> "$LLDPD_CONF"
254 [ -n "$lldp_hostname" ] && echo "configure system hostname" "\"$lldp_hostname\"" >> "$LLDPD_CONF"
255 [ -n "$lldp_mgmt_ip" ] && echo "configure system ip management pattern" "\"$lldp_mgmt_ip\"" >> "$LLDPD_CONF"
developerbdcc0e42024-03-14 16:34:44 +0800256+ [ -n "$lldp_syscapabilities" ] && echo "configure system capabilities enabled $lldp_syscapabilities" >> "$LLDPD_CONF"
257+ if [ "$CONFIG_LLDPD_WITH_LLDPMED" = "y" ] && [ "$lldpmed_fast_start" -gt 0 ]; then
258+ if [ "$lldpmed_fast_start_tx_interval" -gt 0 ]; then
259+ echo "configure med fast-start tx-interval $lldpmed_fast_start_tx_interval" >> "$LLDPD_CONF"
developer0289a912024-02-20 12:06:42 +0800260+ else
developerbdcc0e42024-03-14 16:34:44 +0800261+ echo "configure med fast-start enable" >> "$LLDPD_CONF"
developer0289a912024-02-20 12:06:42 +0800262+ fi
263+ fi
developerbdcc0e42024-03-14 16:34:44 +0800264+ if [ "$CONFIG_LLDPD_WITH_LLDPMED" = "y" ]; then
265+ # other 'configure med xxx' statements go here
266+
267+ [ -n "$lldp_location" ] && echo "configure med location" "$lldp_location" >> "$LLDPD_CONF"
268+
269+ # Manual states that if Class (-M) is 2 or 3, at least one network policy must be defined
270+ case "$lldp_class" in
271+ 2 | 3 ) [ -n "$lldp_policy" ] && echo "configure med policy $lldp_policy" >> "$LLDPD_CONF"
272+ ;;
273+ esac
274+
275+ fi
276+
developer0289a912024-02-20 12:06:42 +0800277+ [ -n "$lldp_agenttype" ] && echo "configure lldp agent-type" "\"$lldp_agenttype\"" >> "$LLDPD_CONF"
278+ [ -n "$lldp_portidsubtype" ] && echo "configure lldp portidsubtype" "\"$lldp_portidsubtype\"" >> "$LLDPD_CONF"
279+ [ -n "$lldp_platform" ] && echo "configure system platform" "\"$lldp_platform\"" >> "$LLDPD_CONF"
developerbdcc0e42024-03-14 16:34:44 +0800280+ [ -n "$lldp_tx_interval" ] && echo "configure lldp tx-interval $lldp_tx_interval" >> "$LLDPD_CONF"
281+ [ "$lldp_tx_hold" -gt 0 ] && echo "configure lldp tx-hold $lldp_tx_hold" >> "$LLDPD_CONF"
developer0289a912024-02-20 12:06:42 +0800282
283 # Since lldpd's sysconfdir is /tmp, we'll symlink /etc/lldpd.d to /tmp/$LLDPD_CONFS_DIR
developerbdcc0e42024-03-14 16:34:44 +0800284- [ -e $LLDPD_CONFS_DIR ] || ln -s /etc/lldpd.d $LLDPD_CONFS_DIR
285+ [ -e "$LLDPD_CONFS_DIR" ] || ln -s /etc/lldpd.d "$LLDPD_CONFS_DIR"
286 }
developer0289a912024-02-20 12:06:42 +0800287
288 start_service() {
289
290+ local enable_lldp
291+ local force_lldp
292 local enable_cdp
293+ local cdp_version
294+ local force_cdp
295+ local force_cdpv2
296 local enable_fdp
297+ local force_fdp
298 local enable_sonmp
299+ local force_sonmp
300 local enable_edp
301+ local force_edp
302 local lldp_class
developerbdcc0e42024-03-14 16:34:44 +0800303- local lldp_location
developer0289a912024-02-20 12:06:42 +0800304+ local lldp_no_version
305+ local lldpmed_no_inventory
306 local readonly_mode
307 local agentxsocket
308+ local filter
309
310 config_load 'lldpd'
311- config_get_bool enable_cdp 'config' 'enable_cdp' 0
312- config_get_bool enable_fdp 'config' 'enable_fdp' 0
313- config_get_bool enable_sonmp 'config' 'enable_sonmp' 0
314- config_get_bool enable_edp 'config' 'enable_edp' 0
315+ config_get_bool enable_lldp 'config' 'enable_lldp' 1
316+ config_get_bool force_lldp 'config' 'force_lldp' 0
developerbdcc0e42024-03-14 16:34:44 +0800317+ if [ "$CONFIG_LLDPD_WITH_CDP" = "y" ]; then
developer0289a912024-02-20 12:06:42 +0800318+ config_get_bool enable_cdp 'config' 'enable_cdp' 0
319+ config_get cdp_version 'config' 'cdp_version' 'cdpv1v2'
320+ config_get_bool force_cdp 'config' 'force_cdp' 0
321+ config_get_bool force_cdpv2 'config' 'force_cdpv2' 0
322+ fi
developerbdcc0e42024-03-14 16:34:44 +0800323+ if [ "$CONFIG_LLDPD_WITH_FDP" = "y" ]; then
developer0289a912024-02-20 12:06:42 +0800324+ config_get_bool enable_fdp 'config' 'enable_fdp' 0
325+ config_get_bool force_fdp 'config' 'force_fdp' 0
326+ fi
developerbdcc0e42024-03-14 16:34:44 +0800327+ if [ "$CONFIG_LLDPD_WITH_SONMP" = "y" ]; then
developer0289a912024-02-20 12:06:42 +0800328+ config_get_bool enable_sonmp 'config' 'enable_sonmp' 0
329+ config_get_bool force_sonmp 'config' 'force_sonmp' 0
330+ fi
developerbdcc0e42024-03-14 16:34:44 +0800331+ if [ "$CONFIG_LLDPD_WITH_EDP" = "y" ]; then
developer0289a912024-02-20 12:06:42 +0800332+ config_get_bool enable_edp 'config' 'enable_edp' 0
333+ config_get_bool force_edp 'config' 'force_edp' 0
334+ fi
335 config_get lldp_class 'config' 'lldp_class'
developerbdcc0e42024-03-14 16:34:44 +0800336- config_get lldp_location 'config' 'lldp_location'
developer0289a912024-02-20 12:06:42 +0800337+ config_get_bool lldp_no_version 'config' 'lldp_no_version' 0
developerbdcc0e42024-03-14 16:34:44 +0800338+ if [ "$CONFIG_LLDPD_WITH_LLDPMED" = "y" ]; then
developer0289a912024-02-20 12:06:42 +0800339+ config_get_bool lldpmed_no_inventory 'config' 'lldpmed_no_inventory' 0
340+ fi
341 config_get_bool readonly_mode 'config' 'readonly_mode' 0
342- config_get agentxsocket 'config' 'agentxsocket'
developerbdcc0e42024-03-14 16:34:44 +0800343+ if [ "$CONFIG_LLDPD_WITH_SNMP" = "y" ]; then
developer0289a912024-02-20 12:06:42 +0800344+ config_get agentxsocket 'config' 'agentxsocket'
345+ fi
346+ config_get filter 'config' 'filter' 15
347
348- mkdir -p /var/run/lldp
349- chown lldp:lldp /var/run/lldp
350+ mkdir -p ${LLDPD_RUN}
351+ chown lldp:lldp ${LLDPD_RUN}
352
353 # When lldpd starts, it also loads up what we write in this config file
354 write_lldpd_conf
355
356 procd_open_instance
357- procd_set_param command /usr/sbin/lldpd
358- procd_append_param command -d # don't daemonize, procd will handle that for us
developerbdcc0e42024-03-14 16:34:44 +0800359-
360- [ $enable_cdp -gt 0 ] && procd_append_param command '-c'
361- [ $enable_fdp -gt 0 ] && procd_append_param command '-f'
362- [ $enable_sonmp -gt 0 ] && procd_append_param command '-s'
363- [ $enable_edp -gt 0 ] && procd_append_param command '-e'
364- [ $readonly_mode -gt 0 ] && procd_append_param command '-r'
developer0289a912024-02-20 12:06:42 +0800365+ procd_set_param command ${LLDPDBIN}
366+ procd_append_param command -d
367+
developerbdcc0e42024-03-14 16:34:44 +0800368+ if [ "$enable_lldp" -gt 0 ]; then
369+ if [ "$force_lldp" -gt 0 ]; then
developer0289a912024-02-20 12:06:42 +0800370+ procd_append_param command '-l'
371+ fi
372+ else
373+ # Disable LLDP
374+ procd_append_param command '-ll'
375+ fi
376+
developerbdcc0e42024-03-14 16:34:44 +0800377+ if [ "$CONFIG_LLDPD_WITH_CDP" = "y" ] && [ "$enable_cdp" -gt 0 ]; then
378+ if [ "$cdp_version" = "cdpv2" ]; then
379+ if [ "$force_cdp" -gt 0 ]; then
developer0289a912024-02-20 12:06:42 +0800380+ # CDPv1 disabled, CDPv2 forced
381+ procd_append_param command '-ccccc'
382+ else
383+ # CDPv1 disabled, CDPv2 enabled
384+ procd_append_param command '-cccc'
385+ fi
developerbdcc0e42024-03-14 16:34:44 +0800386+ elif [ "$cdp_version" = "cdpv1v2" ]; then
387+ if [ "$force_cdp" -gt 0 ] && [ "$force_cdpv2" -gt 0 ]; then
developer0289a912024-02-20 12:06:42 +0800388+ # CDPv1 enabled, CDPv2 forced
389+ procd_append_param command '-ccc'
developerbdcc0e42024-03-14 16:34:44 +0800390+ elif [ "$force_cdp" -gt 0 ]; then
developer0289a912024-02-20 12:06:42 +0800391+ # CDPv1 forced, CDPv2 enabled
392+ procd_append_param command '-cc'
393+ else
394+ # CDPv1 and CDPv2 enabled
395+ procd_append_param command '-c'
396+ fi
397+ fi
398+ fi
399+
developerbdcc0e42024-03-14 16:34:44 +0800400+ if [ "$CONFIG_LLDPD_WITH_FDP" = "y" ] && [ "$enable_fdp" -gt 0 ]; then
401+ if [ "$force_fdp" -gt 0 ]; then
402+ # FDP enabled and forced
developer0289a912024-02-20 12:06:42 +0800403+ procd_append_param command '-ff'
404+ else
405+ # FDP enabled
406+ procd_append_param command '-f'
407+ fi
408+ fi
409+
developerbdcc0e42024-03-14 16:34:44 +0800410+ if [ "$CONFIG_LLDPD_WITH_SONMP" = "y" ] && [ "$enable_sonmp" -gt 0 ]; then
411+ if [ "$force_sonmp" -gt 0 ]; then
developer0289a912024-02-20 12:06:42 +0800412+ # SONMP enabled and forced
413+ procd_append_param command '-ss'
414+ else
415+ # SONMP enabled
416+ procd_append_param command '-s'
417+ fi
418+ fi
419+
developerbdcc0e42024-03-14 16:34:44 +0800420+ if [ "$CONFIG_LLDPD_WITH_EDP" = "y" ] && [ "$enable_edp" -gt 0 ]; then
421+ if [ "$force_edp" -gt 0 ]; then
422+ # EDP enabled and forced
developer0289a912024-02-20 12:06:42 +0800423+ procd_append_param command '-ee'
424+ else
developerbdcc0e42024-03-14 16:34:44 +0800425+ # EDP enabled
developer0289a912024-02-20 12:06:42 +0800426+ procd_append_param command '-e'
427+ fi
428+ fi
developerbdcc0e42024-03-14 16:34:44 +0800429+
430+ [ "$readonly_mode" -gt 0 ] && procd_append_param command '-r'
431+ [ "$lldp_no_version" -gt 0 ] && procd_append_param command '-k'
432+ [ "$CONFIG_LLDPD_WITH_LLDPMED" = "y" ] && [ "$lldpmed_no_inventory" -gt 0 ] && procd_append_param command '-i'
developer0289a912024-02-20 12:06:42 +0800433 [ -n "$lldp_class" ] && procd_append_param command -M "$lldp_class"
434- [ -n "$agentxsocket" ] && procd_append_param command -x -X "$agentxsocket"
developerbdcc0e42024-03-14 16:34:44 +0800435+ [ "$CONFIG_LLDPD_WITH_SNMP" = "y" ] && [ -n "$agentxsocket" ] && procd_append_param command -x -X "$agentxsocket"
developer0289a912024-02-20 12:06:42 +0800436+ [ -n "$filter" ] && procd_append_param command -H "$filter"
437+
438+ # ChassisID interfaces
439+ local ifnames
developerbdcc0e42024-03-14 16:34:44 +0800440+ get_config_cid_ifaces ifnames "cid_interface"
441+
developer0289a912024-02-20 12:06:42 +0800442+ [ -n "$ifnames" ] && procd_append_param command -C "$ifnames"
443+
444+ # Overwrite default configuration locations processed by lldpcli at start
445+ procd_append_param command -O "$LLDPD_CONF"
446+
447+ local restart_hash
448+ get_config_restart_hash restart_hash
developerbdcc0e42024-03-14 16:34:44 +0800449+ echo -n "$restart_hash" > "$LLDPD_RESTART_HASH"
developer0289a912024-02-20 12:06:42 +0800450
451 # set auto respawn behavior
452 procd_set_param respawn
453 procd_close_instance
454 }
455
456+service_triggers() {
457+ procd_add_config_trigger "config.change" "lldpd" /etc/init.d/lldpd reload
458+}
459+
460 reload_service() {
461 running || return 1
developerbdcc0e42024-03-14 16:34:44 +0800462- $LLDPCLI -u $LLDPSOCKET &> /dev/null <<-EOF
developer0289a912024-02-20 12:06:42 +0800463+
464+ local running_hash=""
465+ local config_hash=""
466+
467+ get_config_restart_hash config_hash
developerbdcc0e42024-03-14 16:34:44 +0800468+ [ -f ${LLDPD_RESTART_HASH} ] && running_hash=$(cat "$LLDPD_RESTART_HASH")
developer0289a912024-02-20 12:06:42 +0800469+
470+ if [ "x$running_hash" != "x$config_hash" ]; then
471+ # Restart LLDPd
472+ # Some parameters can't be configured at runtime
473+ restart
474+ return 0
475+ fi
476+
developerbdcc0e42024-03-14 16:34:44 +0800477+ $LLDPCLI -u "$LLDPSOCKET" 2>&1 /dev/null <<-EOF
developer0289a912024-02-20 12:06:42 +0800478 pause
479 unconfigure lldp custom-tlv
developerbdcc0e42024-03-14 16:34:44 +0800480 unconfigure system interface pattern
developer0289a912024-02-20 12:06:42 +0800481 unconfigure system description
482 unconfigure system hostname
483 unconfigure system ip management pattern
484+ unconfigure system platform
485 EOF
developerbdcc0e42024-03-14 16:34:44 +0800486+ if [ "$CONFIG_LLDPD_WITH_LLDPMED" = "y" ]; then
487+ $LLDPCLI -u "$LLDPSOCKET" 2>&1 /dev/null <<-EOF
developer0289a912024-02-20 12:06:42 +0800488+ unconfigure med fast-start
489+ EOF
490+
491+ fi
492 # Rewrite lldpd.conf
493 # If something changed it should be included by the lldpcli call
494 write_lldpd_conf
developerbdcc0e42024-03-14 16:34:44 +0800495- $LLDPCLI -u $LLDPSOCKET -c $LLDPD_CONF -c $LLDPD_CONFS_DIR &> /dev/null
496+ $LLDPCLI -u "$LLDPSOCKET" -c "$LLDPD_CONF" -c "$LLDPD_CONFS_DIR" 2>&1 /dev/null
497 # Broadcast update over the wire
498- $LLDPCLI -u $LLDPSOCKET &> /dev/null <<-EOF
499+ $LLDPCLI -u "$LLDPSOCKET" 2>&1 /dev/null <<-EOF
500 resume
501 update
502 EOF
503@@ -123,5 +377,6 @@ reload_service() {
developer0289a912024-02-20 12:06:42 +0800504 }
505
506 stop_service() {
507- rm -rf /var/run/lldp $LLDPSOCKET
developerbdcc0e42024-03-14 16:34:44 +0800508+ rm -rf ${LLDPD_RUN} "$LLDPSOCKET" 2> /dev/null
developer0289a912024-02-20 12:06:42 +0800509 }
510+
511--- a/package/network/services/lldpd/patches/001-disable_libcap.patch
512+++ /dev/null
513@@ -1,17 +0,0 @@
514---- a/configure.ac
515-+++ b/configure.ac
516-@@ -246,7 +246,13 @@ PKG_CHECK_MODULES([check], [check >= 0.9
517-
518- # Third-party libraries
519- lldp_CHECK_LIBEVENT
520--lldp_CHECK_LIBCAP
521-+
522-+#libcap is not a core package so disable this capability
523-+#lldp_CHECK_LIBCAP
524-+libcap_LIBS=
525-+libcap_CFLAGS=
526-+AC_SUBST([libcap_LIBS])
527-+AC_SUBST([libcap_CFLAGS])
528-
529- # Compatibility with pkg.m4 < 0.27
530- m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR],
531--- a/package/network/services/lldpd/patches/002-fix-AX_LIB_READLINE-macro-conflict.patch
532+++ /dev/null
533@@ -1,61 +0,0 @@
534-From 23509dc05b24a28fb46022800e0e271ae0118de2 Mon Sep 17 00:00:00 2001
535-From: Jo-Philipp Wich <jo@mein.io>
536-Date: Wed, 9 Dec 2020 12:04:04 +0100
537-Subject: [PATCH] build: prevent conflict with official AX_LIB_READLINE macro
538-
539-On systems where the official AX_LIB_READLINE (ax_lib_readline.m4) is
540-present in a globally shared autoconf include directory, auto(re)conf
541-will prefer including that offical version over the local variant due
542-to the offical macro having a higher serial number.
543-
544-As a consequence, @READLINE_LIBS@ will not be substituted in *.in files,
545-eventually failing the compilation with errors similar to:
546-
547- gcc: error: READLINE_LIBS@: No such file or directory
548-
549-Avoid this problem by renaming the incompatible local macro to
550-AX_LIB_READLINE_LLDPD which is sufficient to prevent any clashes.
551-
552-We encountered this problem on OpenWrt which uses GNU autoconf-archive
553-to provide commonly used M4 macros through a global include directory,
554-which happens to ship AX_LIB_READLINE as well.
555-
556-Signed-off-by: Jo-Philipp Wich <jo@mein.io>
557----
558- configure.ac | 2 +-
559- m4/ax_lib_readline.m4 | 6 +++---
560- 2 files changed, 4 insertions(+), 4 deletions(-)
561-
562---- a/configure.ac
563-+++ b/configure.ac
564-@@ -273,7 +273,7 @@ AC_ARG_WITH([readline],
565- [],
566- [with_readline=auto])
567- if test x"$with_readline" != x"no"; then
568-- AX_LIB_READLINE
569-+ AX_LIB_READLINE_LLDPD
570- if test x"$with_readline" != x"check" -a x"$with_readline" != x"auto"; then
571- if test x"$ax_cv_lib_readline" = x"no"; then
572- AC_MSG_FAILURE([*** no readline support found])
573---- a/m4/ax_lib_readline.m4
574-+++ b/m4/ax_lib_readline.m4
575-@@ -4,7 +4,7 @@
576- #
577- # SYNOPSIS
578- #
579--# AX_LIB_READLINE
580-+# AX_LIB_READLINE_LLDPD
581- #
582- # DESCRIPTION
583- #
584-@@ -66,8 +66,8 @@
585-
586- #serial 6
587-
588--AU_ALIAS([VL_LIB_READLINE], [AX_LIB_READLINE])
589--AC_DEFUN([AX_LIB_READLINE], [
590-+AU_ALIAS([VL_LIB_READLINE], [AX_LIB_READLINE_LLDPD])
591-+AC_DEFUN([AX_LIB_READLINE_LLDPD], [
592- AC_CACHE_CHECK([for a readline compatible library],
593- ax_cv_lib_readline, [
594- _save_LIBS="$LIBS"
595--
5962.18.0
597