public inbox for ipfire-scm@lists.ipfire.org
 help / color / mirror / Atom feed
* [git.ipfire.org] IPFire 2.x development tree branch, next, updated. 57d92ffc448a5dcdd810b77d1c332f8e4ef104e6
@ 2025-11-07 11:33 Michael Tremer
  0 siblings, 0 replies; only message in thread
From: Michael Tremer @ 2025-11-07 11:33 UTC (permalink / raw)
  To: ipfire-scm

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 66579 bytes --]

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "IPFire 2.x development tree".

The branch, next has been updated
       via  57d92ffc448a5dcdd810b77d1c332f8e4ef104e6 (commit)
       via  91a6323cfa0622a5e8cc198673515d858f36e220 (commit)
       via  afb4beb9ce2ac4bc0997a0d13e19f407186640fd (commit)
       via  307d487ff21f5bcf2045c45532106f90aa2c9a39 (commit)
       via  f2d3502503d6a6cb156e190073ff5c5a3f473d47 (commit)
       via  32ac8ca0ad3a355443f053a2d36ac49b0fd44a3c (commit)
       via  66a4be0ef3a2467f052adcdc90590a07ee441ee9 (commit)
       via  dacaa3d6445dc7dcc97e89c7e3406746fa02298f (commit)
       via  1012793690ee178fad41a2a8f8b63ee9a06304d2 (commit)
       via  b19df51f81fb3912d027d54c0ce86cbecb8fe8e2 (commit)
       via  82ef22b790828d07c5879c02f87a98fa45a49ffb (commit)
       via  580cd121d6712606f367bfbf7abec3a8671c6b78 (commit)
      from  60551d777c014d15718566a408817e0d5398ab33 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 57d92ffc448a5dcdd810b77d1c332f8e4ef104e6
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Fri Nov 7 11:32:07 2025 +0000

    core199: Ship LLDP changes
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 91a6323cfa0622a5e8cc198673515d858f36e220
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Fri Nov 7 11:23:09 2025 +0000

    lldpd: Don't install the static library
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit afb4beb9ce2ac4bc0997a0d13e19f407186640fd
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Thu Nov 6 16:46:56 2025 +0000

    initscripts: Add an initscript for lldpd
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 307d487ff21f5bcf2045c45532106f90aa2c9a39
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Thu Nov 6 16:46:55 2025 +0000

    web-user-interface: Add LLDP to the network menu
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit f2d3502503d6a6cb156e190073ff5c5a3f473d47
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Thu Nov 6 16:46:54 2025 +0000

    web-user-interface: Add lldp.cgi
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 32ac8ca0ad3a355443f053a2d36ac49b0fd44a3c
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Thu Nov 6 16:46:53 2025 +0000

    cfgroot: Create /var/ipfire/lldp/settings
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 66a4be0ef3a2467f052adcdc90590a07ee441ee9
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Thu Nov 6 16:46:52 2025 +0000

    misc-progs: Add lldpdctrl
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit dacaa3d6445dc7dcc97e89c7e3406746fa02298f
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Thu Nov 6 16:46:51 2025 +0000

    lldpd: New package
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
    Reviewed-by: Adolf Belka <adolf.belka@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 1012793690ee178fad41a2a8f8b63ee9a06304d2
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Fri Nov 7 11:20:15 2025 +0000

    core199: Add the forgotten usb-modeswitch-data file
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit b19df51f81fb3912d027d54c0ce86cbecb8fe8e2
Author: Michael Tremer <michael.tremer@ipfire.org>
Date:   Fri Nov 7 11:19:52 2025 +0000

    core199: Restart strongSwan
    
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 82ef22b790828d07c5879c02f87a98fa45a49ffb
Author: Adolf Belka <adolf.belka@ipfire.org>
Date:   Fri Nov 7 10:59:44 2025 +0100

    core199: Ship strongswan
    
    Signed-off-by: Adolf Belka <adolf.belka@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

commit 580cd121d6712606f367bfbf7abec3a8671c6b78
Author: Adolf Belka <adolf.belka@ipfire.org>
Date:   Fri Nov 7 10:59:43 2025 +0100

    strongswan: Update to version 6.0.3
    
    - Update from version 6.0.2 to 6.0.3
    - Update of rootfile
    - Changelog
        6.0.3
    	- Fixed a vulnerability in the eap-mschapv2 plugin related to processing Failure
    	  Request packets on the client that can lead to a heap-based buffer overflow
    	  and potentially remote code execution.
    	  This vulnerability has been registered as CVE-2025-62291.
    	- The new `alert` event for vici is raised for certain error conditions.
    	- Only plugins with matching version number are loaded by programs.
    	- IKE SAs redirected during IKE_AUTH are now properly tracked by controller and
    	  trap-manager.
    	- Fallback to the IKE identity for clients that don't provide an EAP-Identity to
    	  fix a regression in 6.0.2.
    	- Detecting unwrapped CKA_EC_POINTs has been improved in the pkcs11 plugin.
    	- The whitelist plugin uses non-blocking I/O to avoid issues with clients that
    	  stay connected for a long time.  The buffer size for IDs was increased to 256.
    	- The certexpire plugins also uses 256 bytes for its identity buffer.
    	- Convenient decorators for event handling are provided by the Python bindings
    	  for vici.
    	- The openssl plugin also supports Ed25519 via AWS-LC.  It also loads EdDSA keys
    	  from PKCS#12 containers.
    	- The testing environment is now based on Debian 13 (trixie), by default.
    
    Signed-off-by: Adolf Belka <adolf.belka@ipfire.org>
    Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>

-----------------------------------------------------------------------

Summary of changes:
 config/menu/30-network.menu                        |   5 +
 config/rootfiles/common/aarch64/initscripts        |   4 +
 config/rootfiles/common/configroot                 |   2 +
 config/rootfiles/common/lldpd                      |  24 +++
 config/rootfiles/common/misc-progs                 |   1 +
 config/rootfiles/common/riscv64/initscripts        |   4 +
 config/rootfiles/common/strongswan                 |   2 -
 config/rootfiles/common/web-user-interface         |   1 +
 config/rootfiles/common/x86_64/initscripts         |   4 +
 config/rootfiles/core/199/filelists/files          |   7 +
 config/rootfiles/core/199/filelists/lldpd          |   1 +
 .../{oldcore/106 => core/199}/filelists/strongswan |   0
 .../106 => core/199}/filelists/usb_modeswitch_data |   0
 config/rootfiles/core/199/update.sh                |   1 +
 doc/language_issues.de                             |   1 -
 doc/language_issues.en                             |   7 +-
 doc/language_issues.es                             |   5 +-
 doc/language_issues.fr                             |   5 +-
 doc/language_issues.it                             |   5 +-
 doc/language_issues.nl                             |   5 +-
 doc/language_issues.pl                             |   5 +-
 doc/language_issues.ru                             |   5 +-
 doc/language_issues.tr                             |   5 +-
 doc/language_issues.tw                             |   5 +-
 doc/language_issues.zh                             |   5 +-
 doc/language_missings                              |  36 ++++
 html/cgi-bin/lldp.cgi                              | 240 +++++++++++++++++++++
 langs/de/cgi-bin/de.pl                             |   6 +-
 langs/en/cgi-bin/en.pl                             |   6 +-
 langs/es/cgi-bin/es.pl                             |   2 +-
 langs/fr/cgi-bin/fr.pl                             |   2 +-
 langs/nl/cgi-bin/nl.pl                             |   2 +-
 langs/pl/cgi-bin/pl.pl                             |   2 +-
 langs/ru/cgi-bin/ru.pl                             |   2 +-
 langs/tr/cgi-bin/tr.pl                             |   2 +-
 lfs/configroot                                     |   4 +-
 lfs/initscripts                                    |   3 +
 lfs/{wget => lldpd}                                |  21 +-
 lfs/strongswan                                     |  58 +++--
 make.sh                                            |   1 +
 src/initscripts/{packages/dnsdist => system/lldpd} |  50 ++---
 src/misc-progs/Makefile                            |   2 +-
 src/misc-progs/{wireguardctrl.c => lldpdctrl.c}    |  21 +-
 43 files changed, 463 insertions(+), 106 deletions(-)
 create mode 100644 config/rootfiles/common/lldpd
 create mode 120000 config/rootfiles/core/199/filelists/lldpd
 copy config/rootfiles/{oldcore/106 => core/199}/filelists/strongswan (100%)
 copy config/rootfiles/{oldcore/106 => core/199}/filelists/usb_modeswitch_data (100%)
 create mode 100644 html/cgi-bin/lldp.cgi
 copy lfs/{wget => lldpd} (89%)
 copy src/initscripts/{packages/dnsdist => system/lldpd} (68%)
 mode change 100644 => 100755
 copy src/misc-progs/{wireguardctrl.c => lldpdctrl.c} (57%)

Difference in files:
diff --git a/config/menu/30-network.menu b/config/menu/30-network.menu
index 4ef537ed4..128d346f8 100644
--- a/config/menu/30-network.menu
+++ b/config/menu/30-network.menu
@@ -34,6 +34,11 @@
 				 'title' => "$Lang::tr{'dhcp server'}",
 				 'enabled' => 1,
 				 };
+    $subnetwork->{'31.lldp'} = {'caption' => $Lang::tr{'lldp'},
+				 'uri' => '/cgi-bin/lldp.cgi',
+				 'title' => "$Lang::tr{'lldp'}",
+				 'enabled' => 1,
+				 };
 	$subnetwork->{'32.captive'} = {'caption' => $Lang::tr{'Captive'},
 			        'uri' => '/cgi-bin/captive.cgi',
 			        'title' => $Lang::tr{'Captive'},
diff --git a/config/rootfiles/common/aarch64/initscripts b/config/rootfiles/common/aarch64/initscripts
index 51f5ed51f..feb2aba44 100644
--- a/config/rootfiles/common/aarch64/initscripts
+++ b/config/rootfiles/common/aarch64/initscripts
@@ -31,6 +31,7 @@ etc/rc.d/init.d/grub-btrfsd
 etc/rc.d/init.d/halt
 etc/rc.d/init.d/ipsec
 etc/rc.d/init.d/leds
+etc/rc.d/init.d/lldpd
 etc/rc.d/init.d/localnet
 etc/rc.d/init.d/messagebus
 etc/rc.d/init.d/modules
@@ -100,6 +101,7 @@ etc/rc.d/init.d/wlanclient
 etc/rc.d/rc0.d/K01grub-btrfsd
 #etc/rc.d/rc0.d/K01vdradmin
 etc/rc.d/rc0.d/K08fcron
+etc/rc.d/rc0.d/K09lldpd
 etc/rc.d/rc0.d/K10openvpn-rw
 etc/rc.d/rc0.d/K11openvpn-n2n
 etc/rc.d/rc0.d/K28apache
@@ -139,6 +141,7 @@ etc/rc.d/rc3.d/S24cyrus-sasl
 etc/rc.d/rc3.d/S30sshd
 etc/rc.d/rc3.d/S32apache
 etc/rc.d/rc3.d/S40fcron
+etc/rc.d/rc3.d/S41lldpd
 etc/rc.d/rc3.d/S51openvpn-n2n
 etc/rc.d/rc3.d/S50openvpn-rw
 etc/rc.d/rc3.d/S50wireguard
@@ -149,6 +152,7 @@ etc/rc.d/rc3.d/S99grub-btrfsd
 etc/rc.d/rc6.d/K01grub-btrfsd
 #etc/rc.d/rc6.d/K01vdradmin
 etc/rc.d/rc6.d/K08fcron
+etc/rc.d/rc6.d/K09lldpd
 etc/rc.d/rc6.d/K10openvpn-rw
 etc/rc.d/rc6.d/K11openvpn-n2n
 etc/rc.d/rc6.d/K28apache
diff --git a/config/rootfiles/common/configroot b/config/rootfiles/common/configroot
index a9c6fb589..b2c4a4930 100644
--- a/config/rootfiles/common/configroot
+++ b/config/rootfiles/common/configroot
@@ -100,6 +100,8 @@ var/ipfire/langs
 #var/ipfire/langs/tr.pl
 #var/ipfire/langs/tw.pl
 #var/ipfire/langs/zh.pl
+var/ipfire/lldp
+#var/ipfire/lldp/settings
 var/ipfire/location-functions.pl
 var/ipfire/logging
 #var/ipfire/logging/settings
diff --git a/config/rootfiles/common/lldpd b/config/rootfiles/common/lldpd
new file mode 100644
index 000000000..510c1bac0
--- /dev/null
+++ b/config/rootfiles/common/lldpd
@@ -0,0 +1,24 @@
+#etc/lldpd.d
+#etc/lldpd.d/README.conf
+#usr/include/lldp-const.h
+#usr/include/lldpctl.h
+#usr/include/lldpctl.hpp
+#usr/lib/liblldpctl.la
+#usr/lib/liblldpctl.so
+usr/lib/liblldpctl.so.4
+usr/lib/liblldpctl.so.4.10.0
+#usr/lib/pkgconfig/lldpctl.pc
+usr/sbin/lldpcli
+usr/sbin/lldpctl
+usr/sbin/lldpd
+#usr/share/bash-completion/completions/lldpcli
+#usr/share/doc/lldpd
+#usr/share/doc/lldpd/CONTRIBUTE.md
+#usr/share/doc/lldpd/ChangeLog
+#usr/share/doc/lldpd/LICENSE
+#usr/share/doc/lldpd/NEWS
+#usr/share/doc/lldpd/README.md
+#usr/share/man/man8/lldpcli.8
+#usr/share/man/man8/lldpctl.8
+#usr/share/man/man8/lldpd.8
+#usr/share/zsh/site-functions/_lldpcli
diff --git a/config/rootfiles/common/misc-progs b/config/rootfiles/common/misc-progs
index b92a1e32a..2c846878a 100644
--- a/config/rootfiles/common/misc-progs
+++ b/config/rootfiles/common/misc-progs
@@ -13,6 +13,7 @@ usr/local/bin/getipstat
 #usr/local/bin/iowrap
 usr/local/bin/ipfirereboot
 usr/local/bin/ipsecctrl
+usr/local/bin/lldpdctrl
 usr/local/bin/logwatch
 #usr/local/bin/mpfirectrl
 usr/local/bin/openvpnctrl
diff --git a/config/rootfiles/common/riscv64/initscripts b/config/rootfiles/common/riscv64/initscripts
index e1865cb03..09d19bc46 100644
--- a/config/rootfiles/common/riscv64/initscripts
+++ b/config/rootfiles/common/riscv64/initscripts
@@ -31,6 +31,7 @@ etc/rc.d/init.d/grub-btrfsd
 etc/rc.d/init.d/halt
 etc/rc.d/init.d/ipsec
 etc/rc.d/init.d/leds
+etc/rc.d/init.d/lldpd
 etc/rc.d/init.d/localnet
 etc/rc.d/init.d/messagebus
 etc/rc.d/init.d/modules
@@ -99,6 +100,7 @@ etc/rc.d/init.d/wlanclient
 etc/rc.d/rc0.d/K01grub-btrfsd
 #etc/rc.d/rc0.d/K01vdradmin
 etc/rc.d/rc0.d/K08fcron
+etc/rc.d/rc0.d/K09lldpd
 etc/rc.d/rc0.d/K10openvpn-rw
 etc/rc.d/rc0.d/K11openvpn-n2n
 etc/rc.d/rc0.d/K28apache
@@ -138,6 +140,7 @@ etc/rc.d/rc3.d/S24cyrus-sasl
 etc/rc.d/rc3.d/S30sshd
 etc/rc.d/rc3.d/S32apache
 etc/rc.d/rc3.d/S40fcron
+etc/rc.d/rc3.d/S41lldpd
 etc/rc.d/rc3.d/S51openvpn-n2n
 etc/rc.d/rc3.d/S50openvpn-rw
 etc/rc.d/rc3.d/S50wireguard
@@ -148,6 +151,7 @@ etc/rc.d/rc3.d/S99grub-btrfsd
 etc/rc.d/rc6.d/K01grub-btrfsd
 #etc/rc.d/rc6.d/K01vdradmin
 etc/rc.d/rc6.d/K08fcron
+etc/rc.d/rc6.d/K09lldpd
 etc/rc.d/rc6.d/K10openvpn-rw
 etc/rc.d/rc6.d/K11openvpn-n2n
 etc/rc.d/rc6.d/K28apache
diff --git a/config/rootfiles/common/strongswan b/config/rootfiles/common/strongswan
index 48f4fdf43..2e1671b11 100644
--- a/config/rootfiles/common/strongswan
+++ b/config/rootfiles/common/strongswan
@@ -130,8 +130,6 @@ usr/lib/ipsec/plugins/libstrongswan-kdf.so
 usr/lib/ipsec/plugins/libstrongswan-kernel-netlink.so
 usr/lib/ipsec/plugins/libstrongswan-mgf1.so
 usr/lib/ipsec/plugins/libstrongswan-ml.so
-usr/lib/ipsec/plugins/libstrongswan-ml.so.0
-usr/lib/ipsec/plugins/libstrongswan-ml.so.0.0.0
 usr/lib/ipsec/plugins/libstrongswan-nonce.so
 usr/lib/ipsec/plugins/libstrongswan-openssl.so
 usr/lib/ipsec/plugins/libstrongswan-pem.so
diff --git a/config/rootfiles/common/web-user-interface b/config/rootfiles/common/web-user-interface
index aa31491d2..29fb52c28 100644
--- a/config/rootfiles/common/web-user-interface
+++ b/config/rootfiles/common/web-user-interface
@@ -29,6 +29,7 @@ srv/web/ipfire/cgi-bin/index.cgi
 srv/web/ipfire/cgi-bin/ipblocklist.cgi
 srv/web/ipfire/cgi-bin/ipinfo.cgi
 srv/web/ipfire/cgi-bin/iptables.cgi
+srv/web/ipfire/cgi-bin/lldp.cgi
 srv/web/ipfire/cgi-bin/location-block.cgi
 srv/web/ipfire/cgi-bin/logs.cgi
 srv/web/ipfire/cgi-bin/logs.cgi/calamaris.dat
diff --git a/config/rootfiles/common/x86_64/initscripts b/config/rootfiles/common/x86_64/initscripts
index e1865cb03..09d19bc46 100644
--- a/config/rootfiles/common/x86_64/initscripts
+++ b/config/rootfiles/common/x86_64/initscripts
@@ -31,6 +31,7 @@ etc/rc.d/init.d/grub-btrfsd
 etc/rc.d/init.d/halt
 etc/rc.d/init.d/ipsec
 etc/rc.d/init.d/leds
+etc/rc.d/init.d/lldpd
 etc/rc.d/init.d/localnet
 etc/rc.d/init.d/messagebus
 etc/rc.d/init.d/modules
@@ -99,6 +100,7 @@ etc/rc.d/init.d/wlanclient
 etc/rc.d/rc0.d/K01grub-btrfsd
 #etc/rc.d/rc0.d/K01vdradmin
 etc/rc.d/rc0.d/K08fcron
+etc/rc.d/rc0.d/K09lldpd
 etc/rc.d/rc0.d/K10openvpn-rw
 etc/rc.d/rc0.d/K11openvpn-n2n
 etc/rc.d/rc0.d/K28apache
@@ -138,6 +140,7 @@ etc/rc.d/rc3.d/S24cyrus-sasl
 etc/rc.d/rc3.d/S30sshd
 etc/rc.d/rc3.d/S32apache
 etc/rc.d/rc3.d/S40fcron
+etc/rc.d/rc3.d/S41lldpd
 etc/rc.d/rc3.d/S51openvpn-n2n
 etc/rc.d/rc3.d/S50openvpn-rw
 etc/rc.d/rc3.d/S50wireguard
@@ -148,6 +151,7 @@ etc/rc.d/rc3.d/S99grub-btrfsd
 etc/rc.d/rc6.d/K01grub-btrfsd
 #etc/rc.d/rc6.d/K01vdradmin
 etc/rc.d/rc6.d/K08fcron
+etc/rc.d/rc6.d/K09lldpd
 etc/rc.d/rc6.d/K10openvpn-rw
 etc/rc.d/rc6.d/K11openvpn-n2n
 etc/rc.d/rc6.d/K28apache
diff --git a/config/rootfiles/core/199/filelists/files b/config/rootfiles/core/199/filelists/files
index d04204f4a..297d4e7e2 100644
--- a/config/rootfiles/core/199/filelists/files
+++ b/config/rootfiles/core/199/filelists/files
@@ -1,12 +1,16 @@
 etc/rc.d/init.d/dhcp
+etc/rc.d/init.d/lldpd
 etc/rc.d/init.d/messagebus
 etc/rc.d/init.d/networking/red
 etc/rc.d/init.d/openvpn-n2n
 etc/rc.d/init.d/openvpn-rw
 etc/rc.d/init.d/squid
 etc/rc.d/init.d/wireguard
+etc/rc.d/rc0.d/K09lldpd
 etc/rc.d/rc0.d/K85messagebus
 etc/rc.d/rc3.d/S15messagebus
+etc/rc.d/rc3.d/S41lldpd
+etc/rc.d/rc6.d/K09lldpd
 etc/rc.d/rc6.d/K85messagebus
 etc/ssh/ssh_config
 etc/ssh/sshd_config
@@ -18,6 +22,9 @@ srv/web/ipfire/cgi-bin/modem-status.cgi
 srv/web/ipfire/cgi-bin/vulnerabilities.cgi
 srv/web/ipfire/cgi-bin/wireguard.cgi
 srv/web/ipfire/cgi-bin/wirelessclient.cgi
+usr/local/bin/lldpdctrl
 usr/sbin/openvpn-authenticator
 var/ipfire/header.pl
+var/ipfire/lldp
+var/ipfire/menu.d/30-network.menu
 var/ipfire/qos/bin/makeqosscripts.pl
diff --git a/config/rootfiles/core/199/filelists/lldpd b/config/rootfiles/core/199/filelists/lldpd
new file mode 120000
index 000000000..35e3b1d01
--- /dev/null
+++ b/config/rootfiles/core/199/filelists/lldpd
@@ -0,0 +1 @@
+../../../common/lldpd
\ No newline at end of file
diff --git a/config/rootfiles/core/199/filelists/strongswan b/config/rootfiles/core/199/filelists/strongswan
new file mode 120000
index 000000000..90c727e26
--- /dev/null
+++ b/config/rootfiles/core/199/filelists/strongswan
@@ -0,0 +1 @@
+../../../common/strongswan
\ No newline at end of file
diff --git a/config/rootfiles/core/199/filelists/usb_modeswitch_data b/config/rootfiles/core/199/filelists/usb_modeswitch_data
new file mode 120000
index 000000000..4cbce46cf
--- /dev/null
+++ b/config/rootfiles/core/199/filelists/usb_modeswitch_data
@@ -0,0 +1 @@
+../../../common/usb_modeswitch_data
\ No newline at end of file
diff --git a/config/rootfiles/core/199/update.sh b/config/rootfiles/core/199/update.sh
index 0e0bb85ef..ec4116ae2 100644
--- a/config/rootfiles/core/199/update.sh
+++ b/config/rootfiles/core/199/update.sh
@@ -140,6 +140,7 @@ sudo -u nobody /srv/web/ipfire/cgi-bin/ovpnmain.cgi
 /etc/init.d/suricata restart
 /etc/init.d/unbound restart
 /etc/init.d/sshd restart
+/etc/init.d/ipsec restart
 
 # Build initial ramdisks
 dracut --regenerate-all --force
diff --git a/doc/language_issues.de b/doc/language_issues.de
index ed9c20449..37be0c63c 100644
--- a/doc/language_issues.de
+++ b/doc/language_issues.de
@@ -218,7 +218,6 @@ WARNING: translation string unused: delete pc
 WARNING: translation string unused: delete share
 WARNING: translation string unused: delete user
 WARNING: translation string unused: deprecated fs warn
-WARNING: translation string unused: description
 WARNING: translation string unused: destination ip bad
 WARNING: translation string unused: destination ip or net
 WARNING: translation string unused: destination net
diff --git a/doc/language_issues.en b/doc/language_issues.en
index e40571450..b2250d8af 100644
--- a/doc/language_issues.en
+++ b/doc/language_issues.en
@@ -548,6 +548,7 @@ WARNING: untranslated string: default IP address = Default IP Address
 WARNING: untranslated string: default lease time = Default lease time (mins):
 WARNING: untranslated string: default renewal time = Default Renewal Time
 WARNING: untranslated string: delete = Delete
+WARNING: untranslated string: description = Description
 WARNING: untranslated string: desired = Desired
 WARNING: untranslated string: dest ip and port = Dest. IP: Port
 WARNING: untranslated string: destination = Destination
@@ -1235,6 +1236,9 @@ WARNING: untranslated string: least preferred = least preferred
 WARNING: untranslated string: legend = Legend
 WARNING: untranslated string: lifetime = Lifetime:
 WARNING: untranslated string: link-layer encapsulation = Link-Layer Encapsulation
+WARNING: untranslated string: lldp = Link Layer Discovery Protocol
+WARNING: untranslated string: lldp neighbors = Neighbors
+WARNING: untranslated string: lldp there are no neighbors = There are currently no neighbors
 WARNING: untranslated string: load average = Load Average
 WARNING: untranslated string: local ip address = Local IP Address
 WARNING: untranslated string: local ntp server specified but not enabled = Local NTP server specified but not enabled
@@ -1558,7 +1562,7 @@ WARNING: untranslated string: profile name = Profile name:
 WARNING: untranslated string: profile name not given = Profile name not given.
 WARNING: untranslated string: profile saved = Profile saved: 
 WARNING: untranslated string: proto = Proto
-WARNING: untranslated string: protocol = Protocol:
+WARNING: untranslated string: protocol = Protocol
 WARNING: untranslated string: proxy admin password = Cache administrator password
 WARNING: untranslated string: proxy cachemgr = Activate cachemanager
 WARNING: untranslated string: proxy errmsg filedescriptors = Wrong amount of filedescriptors
@@ -2140,6 +2144,7 @@ WARNING: untranslated string: version = Version
 WARNING: untranslated string: virtual address = Virtual Address
 WARNING: untranslated string: virtual private networking = Virtual Private Networking
 WARNING: untranslated string: visit us at = Visit us at
+WARNING: untranslated string: vlan = VLAN
 WARNING: untranslated string: vpi number = VPI number:
 WARNING: untranslated string: vpn = VPN
 WARNING: untranslated string: vpn altname syntax = SubjectAltName is a comma separated list of email, dns, uri, rid and ip objects.<br />email:an email address. Syntax email:copy takes the email field from the cert to be used.<br />DNS:a valid domain name.<br />URI:any valid uri.<br />RID:registered object identifier.<br />IP:an IP address.<br />Note:charset is limited and case is significant.<br />Example:<br /><b>email:</b>ipfire@foo.org<b>,email:</b>copy<b>,DNS:</b>www.ipfire.org<b>,IP:</b>127.0.0.1<b>,URI:</b>http://url/to/something
diff --git a/doc/language_issues.es b/doc/language_issues.es
index ffb077eb0..48c69f189 100644
--- a/doc/language_issues.es
+++ b/doc/language_issues.es
@@ -240,7 +240,6 @@ WARNING: translation string unused: delete pc
 WARNING: translation string unused: delete share
 WARNING: translation string unused: delete user
 WARNING: translation string unused: deprecated fs warn
-WARNING: translation string unused: description
 WARNING: translation string unused: destination ip bad
 WARNING: translation string unused: destination ip or net
 WARNING: translation string unused: destination net
@@ -1075,6 +1074,9 @@ WARNING: untranslated string: ids reports weekly = Send a weekly report
 WARNING: untranslated string: ids send email on alert = Send email on alert
 WARNING: untranslated string: indirect target selection = Indirect target selection
 WARNING: untranslated string: info messages = unknown string
+WARNING: untranslated string: lldp = Link Layer Discovery Protocol
+WARNING: untranslated string: lldp neighbors = Neighbors
+WARNING: untranslated string: lldp there are no neighbors = There are currently no neighbors
 WARNING: untranslated string: mdstat = Mdstat
 WARNING: untranslated string: no data = unknown string
 WARNING: untranslated string: offloaded = Offloaded
@@ -1107,6 +1109,7 @@ WARNING: untranslated string: rss = RSS
 WARNING: untranslated string: rss long = Resident Set Size
 WARNING: untranslated string: smt not implemented = Not Implemented
 WARNING: untranslated string: transient sheduler attacks = Transient sheduler attacks
+WARNING: untranslated string: vlan = VLAN
 WARNING: untranslated string: vpn deprecated = Deprecated
 WARNING: untranslated string: wio = unknown string
 WARNING: untranslated string: wio checked = unknown string
diff --git a/doc/language_issues.fr b/doc/language_issues.fr
index 2dbaeb3bc..28408469c 100644
--- a/doc/language_issues.fr
+++ b/doc/language_issues.fr
@@ -240,7 +240,6 @@ WARNING: translation string unused: delete pc
 WARNING: translation string unused: delete share
 WARNING: translation string unused: delete user
 WARNING: translation string unused: deprecated fs warn
-WARNING: translation string unused: description
 WARNING: translation string unused: destination ip bad
 WARNING: translation string unused: destination ip or net
 WARNING: translation string unused: destination net
@@ -1071,6 +1070,9 @@ WARNING: untranslated string: invalid keepalive interval = Invalid Keepalive Int
 WARNING: untranslated string: invalid network = Invalid Network
 WARNING: untranslated string: ips throughput = Throughput
 WARNING: untranslated string: last updated = Last Updated
+WARNING: untranslated string: lldp = Link Layer Discovery Protocol
+WARNING: untranslated string: lldp neighbors = Neighbors
+WARNING: untranslated string: lldp there are no neighbors = There are currently no neighbors
 WARNING: untranslated string: load average = Load Average
 WARNING: untranslated string: local port = Local Port
 WARNING: untranslated string: local subnets = Local Subnets
@@ -1120,6 +1122,7 @@ WARNING: untranslated string: system time = System Time (as of last page load)
 WARNING: untranslated string: timeformat = %Y-%m-%d at %H:%M:%S %Z
 WARNING: untranslated string: total = Total
 WARNING: untranslated string: transient sheduler attacks = Transient sheduler attacks
+WARNING: untranslated string: vlan = VLAN
 WARNING: untranslated string: vpn deprecated = Deprecated
 WARNING: untranslated string: warning = Warning
 WARNING: untranslated string: wg client pool = Client Pool
diff --git a/doc/language_issues.it b/doc/language_issues.it
index 4b1685986..e1a71dea0 100644
--- a/doc/language_issues.it
+++ b/doc/language_issues.it
@@ -208,7 +208,6 @@ WARNING: translation string unused: delete pc
 WARNING: translation string unused: delete share
 WARNING: translation string unused: delete user
 WARNING: translation string unused: deprecated fs warn
-WARNING: translation string unused: description
 WARNING: translation string unused: destination ip bad
 WARNING: translation string unused: destination ip or net
 WARNING: translation string unused: destination net
@@ -1263,6 +1262,9 @@ WARNING: untranslated string: ipsec settings = IPsec Settings
 WARNING: untranslated string: itlb multihit = iTLB MultiHit
 WARNING: untranslated string: last updated = Last Updated
 WARNING: untranslated string: link-layer encapsulation = Link-Layer Encapsulation
+WARNING: untranslated string: lldp = Link Layer Discovery Protocol
+WARNING: untranslated string: lldp neighbors = Neighbors
+WARNING: untranslated string: lldp there are no neighbors = There are currently no neighbors
 WARNING: untranslated string: load average = Load Average
 WARNING: untranslated string: local ip address = Local IP Address
 WARNING: untranslated string: local port = Local Port
@@ -1437,6 +1439,7 @@ WARNING: untranslated string: updxlrtr passive mode = Delivery only/no download
 WARNING: untranslated string: uplink bit rate = Uplink Bit Rate
 WARNING: untranslated string: user management = User Management
 WARNING: untranslated string: version = Version
+WARNING: untranslated string: vlan = VLAN
 WARNING: untranslated string: vpn broken = Broken
 WARNING: untranslated string: vpn connecting = CONNECTING
 WARNING: untranslated string: vpn deprecated = Deprecated
diff --git a/doc/language_issues.nl b/doc/language_issues.nl
index 0857c00ce..2a5f24b9d 100644
--- a/doc/language_issues.nl
+++ b/doc/language_issues.nl
@@ -209,7 +209,6 @@ WARNING: translation string unused: delete share
 WARNING: translation string unused: delete user
 WARNING: translation string unused: demon login script
 WARNING: translation string unused: deprecated fs warn
-WARNING: translation string unused: description
 WARNING: translation string unused: destination ip bad
 WARNING: translation string unused: destination ip or net
 WARNING: translation string unused: destination net
@@ -1270,6 +1269,9 @@ WARNING: untranslated string: ipsec settings = IPsec Settings
 WARNING: untranslated string: itlb multihit = iTLB MultiHit
 WARNING: untranslated string: last updated = Last Updated
 WARNING: untranslated string: link-layer encapsulation = Link-Layer Encapsulation
+WARNING: untranslated string: lldp = Link Layer Discovery Protocol
+WARNING: untranslated string: lldp neighbors = Neighbors
+WARNING: untranslated string: lldp there are no neighbors = There are currently no neighbors
 WARNING: untranslated string: load average = Load Average
 WARNING: untranslated string: local ip address = Local IP Address
 WARNING: untranslated string: local port = Local Port
@@ -1457,6 +1459,7 @@ WARNING: untranslated string: updxlrtr passive mode = Delivery only/no download
 WARNING: untranslated string: uplink bit rate = Uplink Bit Rate
 WARNING: untranslated string: user management = User Management
 WARNING: untranslated string: vendor = Vendor
+WARNING: untranslated string: vlan = VLAN
 WARNING: untranslated string: vpn broken = Broken
 WARNING: untranslated string: vpn connecting = CONNECTING
 WARNING: untranslated string: vpn deprecated = Deprecated
diff --git a/doc/language_issues.pl b/doc/language_issues.pl
index b005b9946..570f4a3d5 100644
--- a/doc/language_issues.pl
+++ b/doc/language_issues.pl
@@ -193,7 +193,6 @@ WARNING: translation string unused: delete cron
 WARNING: translation string unused: delete pc
 WARNING: translation string unused: delete share
 WARNING: translation string unused: delete user
-WARNING: translation string unused: description
 WARNING: translation string unused: destination ip bad
 WARNING: translation string unused: destination ip or net
 WARNING: translation string unused: destination net
@@ -1399,6 +1398,9 @@ WARNING: untranslated string: last updated = Last Updated
 WARNING: untranslated string: least preferred = least preferred
 WARNING: untranslated string: lifetime = Lifetime:
 WARNING: untranslated string: link-layer encapsulation = Link-Layer Encapsulation
+WARNING: untranslated string: lldp = Link Layer Discovery Protocol
+WARNING: untranslated string: lldp neighbors = Neighbors
+WARNING: untranslated string: lldp there are no neighbors = There are currently no neighbors
 WARNING: untranslated string: load average = Load Average
 WARNING: untranslated string: local ip address = Local IP Address
 WARNING: untranslated string: local port = Local Port
@@ -1675,6 +1677,7 @@ WARNING: untranslated string: user management = User Management
 WARNING: untranslated string: vendor = Vendor
 WARNING: untranslated string: version = Version
 WARNING: untranslated string: visit us at = Visit us at
+WARNING: untranslated string: vlan = VLAN
 WARNING: untranslated string: vpn broken = Broken
 WARNING: untranslated string: vpn connecting = CONNECTING
 WARNING: untranslated string: vpn deprecated = Deprecated
diff --git a/doc/language_issues.ru b/doc/language_issues.ru
index 46aa8120f..272998de3 100644
--- a/doc/language_issues.ru
+++ b/doc/language_issues.ru
@@ -192,7 +192,6 @@ WARNING: translation string unused: delete cron
 WARNING: translation string unused: delete pc
 WARNING: translation string unused: delete share
 WARNING: translation string unused: delete user
-WARNING: translation string unused: description
 WARNING: translation string unused: destination ip bad
 WARNING: translation string unused: destination ip or net
 WARNING: translation string unused: destination net
@@ -1398,6 +1397,9 @@ WARNING: untranslated string: last updated = Last Updated
 WARNING: untranslated string: least preferred = least preferred
 WARNING: untranslated string: lifetime = Lifetime:
 WARNING: untranslated string: link-layer encapsulation = Link-Layer Encapsulation
+WARNING: untranslated string: lldp = Link Layer Discovery Protocol
+WARNING: untranslated string: lldp neighbors = Neighbors
+WARNING: untranslated string: lldp there are no neighbors = There are currently no neighbors
 WARNING: untranslated string: load average = Load Average
 WARNING: untranslated string: local ip address = Local IP Address
 WARNING: untranslated string: local port = Local Port
@@ -1674,6 +1676,7 @@ WARNING: untranslated string: user management = User Management
 WARNING: untranslated string: vendor = Vendor
 WARNING: untranslated string: version = Version
 WARNING: untranslated string: visit us at = Visit us at
+WARNING: untranslated string: vlan = VLAN
 WARNING: untranslated string: vpn broken = Broken
 WARNING: untranslated string: vpn connecting = CONNECTING
 WARNING: untranslated string: vpn deprecated = Deprecated
diff --git a/doc/language_issues.tr b/doc/language_issues.tr
index 8e3eb45cb..3b30c7d4c 100644
--- a/doc/language_issues.tr
+++ b/doc/language_issues.tr
@@ -230,7 +230,6 @@ WARNING: translation string unused: delete pc
 WARNING: translation string unused: delete share
 WARNING: translation string unused: delete user
 WARNING: translation string unused: deprecated fs warn
-WARNING: translation string unused: description
 WARNING: translation string unused: destination ip bad
 WARNING: translation string unused: destination ip or net
 WARNING: translation string unused: destination net
@@ -1201,6 +1200,9 @@ WARNING: untranslated string: ipsec settings = IPsec Settings
 WARNING: untranslated string: itlb multihit = iTLB MultiHit
 WARNING: untranslated string: last updated = Last Updated
 WARNING: untranslated string: link-layer encapsulation = Link-Layer Encapsulation
+WARNING: untranslated string: lldp = Link Layer Discovery Protocol
+WARNING: untranslated string: lldp neighbors = Neighbors
+WARNING: untranslated string: lldp there are no neighbors = There are currently no neighbors
 WARNING: untranslated string: load average = Load Average
 WARNING: untranslated string: local ip address = Local IP Address
 WARNING: untranslated string: local port = Local Port
@@ -1334,6 +1336,7 @@ WARNING: untranslated string: transport mode does not support vti = VTI is not s
 WARNING: untranslated string: updxlrtr passive mode = Delivery only/no download mode
 WARNING: untranslated string: user management = User Management
 WARNING: untranslated string: version = Version
+WARNING: untranslated string: vlan = VLAN
 WARNING: untranslated string: vpn deprecated = Deprecated
 WARNING: untranslated string: vpn start action add = Wait for connection initiation
 WARNING: untranslated string: vpn subjectaltname missing = SubjectAlternativeName cannot be emtpy.
diff --git a/doc/language_issues.tw b/doc/language_issues.tw
index 2a058e720..9fe0df551 100644
--- a/doc/language_issues.tw
+++ b/doc/language_issues.tw
@@ -242,7 +242,6 @@ WARNING: translation string unused: delete pc
 WARNING: translation string unused: delete share
 WARNING: translation string unused: delete user
 WARNING: translation string unused: deprecated fs warn
-WARNING: translation string unused: description
 WARNING: translation string unused: destination ip bad
 WARNING: translation string unused: destination ip or net
 WARNING: translation string unused: destination net
@@ -1083,6 +1082,9 @@ WARNING: untranslated string: ids reports weekly = Send a weekly report
 WARNING: untranslated string: ids send email on alert = Send email on alert
 WARNING: untranslated string: indirect target selection = Indirect target selection
 WARNING: untranslated string: info messages = unknown string
+WARNING: untranslated string: lldp = Link Layer Discovery Protocol
+WARNING: untranslated string: lldp neighbors = Neighbors
+WARNING: untranslated string: lldp there are no neighbors = There are currently no neighbors
 WARNING: untranslated string: max bandwidth = Maximum bandwidth
 WARNING: untranslated string: no data = unknown string
 WARNING: untranslated string: offloaded = Offloaded
@@ -1125,6 +1127,7 @@ WARNING: untranslated string: rss = RSS
 WARNING: untranslated string: rss long = Resident Set Size
 WARNING: untranslated string: smt not implemented = Not Implemented
 WARNING: untranslated string: transient sheduler attacks = Transient sheduler attacks
+WARNING: untranslated string: vlan = VLAN
 WARNING: untranslated string: vpn deprecated = Deprecated
 WARNING: untranslated string: wio = unknown string
 WARNING: untranslated string: wio checked = unknown string
diff --git a/doc/language_issues.zh b/doc/language_issues.zh
index 2a058e720..9fe0df551 100644
--- a/doc/language_issues.zh
+++ b/doc/language_issues.zh
@@ -242,7 +242,6 @@ WARNING: translation string unused: delete pc
 WARNING: translation string unused: delete share
 WARNING: translation string unused: delete user
 WARNING: translation string unused: deprecated fs warn
-WARNING: translation string unused: description
 WARNING: translation string unused: destination ip bad
 WARNING: translation string unused: destination ip or net
 WARNING: translation string unused: destination net
@@ -1083,6 +1082,9 @@ WARNING: untranslated string: ids reports weekly = Send a weekly report
 WARNING: untranslated string: ids send email on alert = Send email on alert
 WARNING: untranslated string: indirect target selection = Indirect target selection
 WARNING: untranslated string: info messages = unknown string
+WARNING: untranslated string: lldp = Link Layer Discovery Protocol
+WARNING: untranslated string: lldp neighbors = Neighbors
+WARNING: untranslated string: lldp there are no neighbors = There are currently no neighbors
 WARNING: untranslated string: max bandwidth = Maximum bandwidth
 WARNING: untranslated string: no data = unknown string
 WARNING: untranslated string: offloaded = Offloaded
@@ -1125,6 +1127,7 @@ WARNING: untranslated string: rss = RSS
 WARNING: untranslated string: rss long = Resident Set Size
 WARNING: untranslated string: smt not implemented = Not Implemented
 WARNING: untranslated string: transient sheduler attacks = Transient sheduler attacks
+WARNING: untranslated string: vlan = VLAN
 WARNING: untranslated string: vpn deprecated = Deprecated
 WARNING: untranslated string: wio = unknown string
 WARNING: untranslated string: wio checked = unknown string
diff --git a/doc/language_missings b/doc/language_missings
index 24602b7d1..bb07f3fab 100644
--- a/doc/language_missings
+++ b/doc/language_missings
@@ -179,6 +179,9 @@
 < ids reports weekly
 < ids send email on alert
 < indirect target selection
+< lldp
+< lldp neighbors
+< lldp there are no neighbors
 < mdstat
 < offloaded
 < online
@@ -206,6 +209,7 @@
 < rss long
 < smt not implemented
 < transient sheduler attacks
+< vlan
 < vpn deprecated
 < wlanap 802.11ac
 < wlanap 802.11ac 160mhz
@@ -287,6 +291,9 @@
 < invalid network
 < ips throughput
 < last updated
+< lldp
+< lldp neighbors
+< lldp there are no neighbors
 < load average
 < local port
 < local subnets
@@ -335,6 +342,7 @@
 < total
 < transient sheduler attacks
 < upload fcdsl.o
+< vlan
 < vpn deprecated
 < warning
 < wg
@@ -768,6 +776,9 @@
 < last updated
 < legacy architecture warning
 < link-layer encapsulation
+< lldp
+< lldp neighbors
+< lldp there are no neighbors
 < load average
 < local ip address
 < local port
@@ -952,6 +963,7 @@
 < uplink bit rate
 < user management
 < version
+< vlan
 < vpn broken
 < vpn connecting
 < vpn deprecated
@@ -1461,6 +1473,9 @@
 < last updated
 < legacy architecture warning
 < link-layer encapsulation
+< lldp
+< lldp neighbors
+< lldp there are no neighbors
 < load average
 < local ip address
 < local port
@@ -1662,6 +1677,7 @@
 < uplink bit rate
 < user management
 < vendor
+< vlan
 < vpn broken
 < vpn connecting
 < vpn deprecated
@@ -2464,6 +2480,9 @@
 < legacy architecture warning
 < lifetime
 < link-layer encapsulation
+< lldp
+< lldp neighbors
+< lldp there are no neighbors
 < load average
 < local ip address
 < local port
@@ -2785,6 +2804,7 @@
 < vendor
 < version
 < visit us at
+< vlan
 < vpn broken
 < vpn connecting
 < vpn deprecated
@@ -3626,6 +3646,9 @@
 < legacy architecture warning
 < lifetime
 < link-layer encapsulation
+< lldp
+< lldp neighbors
+< lldp there are no neighbors
 < load average
 < local ip address
 < local port
@@ -3946,6 +3969,7 @@
 < vendor
 < version
 < visit us at
+< vlan
 < vpn broken
 < vpn connecting
 < vpn deprecated
@@ -4363,6 +4387,9 @@
 < last updated
 < legacy architecture warning
 < link-layer encapsulation
+< lldp
+< lldp neighbors
+< lldp there are no neighbors
 < load average
 < local ip address
 < local port
@@ -4500,6 +4527,7 @@
 < updxlrtr passive mode
 < user management
 < version
+< vlan
 < vpn deprecated
 < vpn start action add
 < vpn subjectaltname missing
@@ -4646,6 +4674,9 @@
 < ids reports weekly
 < ids send email on alert
 < indirect target selection
+< lldp
+< lldp neighbors
+< lldp there are no neighbors
 < max bandwidth
 < offloaded
 < online
@@ -4684,6 +4715,7 @@
 < rss long
 < smt not implemented
 < transient sheduler attacks
+< vlan
 < vpn deprecated
 < wlanap 802.11ac
 < wlanap 802.11ac 160mhz
@@ -4741,6 +4773,9 @@
 < ids reports weekly
 < ids send email on alert
 < indirect target selection
+< lldp
+< lldp neighbors
+< lldp there are no neighbors
 < max bandwidth
 < offloaded
 < online
@@ -4779,6 +4814,7 @@
 < rss long
 < smt not implemented
 < transient sheduler attacks
+< vlan
 < vpn deprecated
 < wlanap 802.11ac
 < wlanap 802.11ac 160mhz
diff --git a/html/cgi-bin/lldp.cgi b/html/cgi-bin/lldp.cgi
new file mode 100644
index 000000000..755d3dc46
--- /dev/null
+++ b/html/cgi-bin/lldp.cgi
@@ -0,0 +1,240 @@
+#!/usr/bin/perl
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2025 Michael Tremer <michael.tremer@ipfire.org>               #
+#                                                                             #
+# This program is free software: you can redistribute it and/or modify        #
+# it under the terms of the GNU General Public License as published by        #
+# the Free Software Foundation, either version 3 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# This program is distributed in the hope that it will be useful,             #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+use strict;
+use JSON::PP;
+
+# enable only the following on debugging purpose
+#use warnings;
+#use CGI::Carp 'fatalsToBrowser';
+
+require "/var/ipfire/general-functions.pl";
+require "${General::swroot}/header.pl";
+
+my %cgiparams = ();
+my @errormessages = ();
+
+# Fetch CGI parameters
+&Header::getcgihash(\%cgiparams, {'wantfile' => 1, 'filevar' => 'FH'});
+
+# Read the settings
+my %settings = ();
+&General::readhash("${General::swroot}/lldp/settings", \%settings);
+
+# Save on main page
+if ($cgiparams{"ACTION"} eq $Lang::tr{'save'}) {
+	# Store whether enabled or not
+	if ($cgiparams{'ENABLED'} =~ m/^(on|off)?$/) {
+		$settings{'ENABLED'} = $cgiparams{'ENABLED'};
+	}
+
+	# XXX Validate the description
+	$settings{"DESCRIPTION"} = $cgiparams{"DESCRIPTION"};
+
+	# Don't continue on error
+	goto MAIN if (scalar @errormessages);
+
+	# Store the configuration file
+	&General::writehash("${General::swroot}/lldp/settings", \%settings);
+
+	# Start if enabled
+	if ($settings{"ENABLED"} eq "on") {
+		&General::system("/usr/local/bin/lldpdctrl", "restart");
+	} else {
+		&General::system("/usr/local/bin/lldpdctrl", "stop");
+	}
+}
+
+# The main page starts here
+MAIN:
+	# Send HTTP Headers
+	&Header::showhttpheaders();
+
+	# Open the page
+	&Header::openpage($Lang::tr{'lldp'}, 1, '');
+
+	# Show any error messages
+	&Header::errorbox(@errormessages);
+
+	# Open a box for Global Settings
+	&Header::openbox('100%', '', $Lang::tr{'global settings'});
+
+	my %checked = (
+		"ENABLED" => ($settings{"ENABLED"} eq "on") ? "checked" : "",
+	);
+
+	print <<END;
+		<form method="POST" action="">
+			<table class="form">
+				<tr>
+					<td>$Lang::tr{'enabled'}</td>
+					<td>
+						<input type="checkbox" name="ENABLED" $checked{'ENABLED'} />
+					</td>
+				</tr>
+
+				<tr>
+					<td>$Lang::tr{'description'}</td>
+					<td>
+						<input type="text" name="DESCRIPTION" value="$settings{'DESCRIPTION'}" />
+					</td>
+				</tr>
+
+				<tr class="action">
+					<td colspan="2">
+						<input type='submit' name='ACTION' value='$Lang::tr{'save'}' />
+					</td>
+				</tr>
+			</table>
+		</form>
+END
+	&Header::closebox();
+
+	# Load data about all peers
+	my @output = &General::system_output("lldpctl", "-f", "json0");
+
+	my $json;
+
+	# Parse the JSON output
+	eval {
+		$json = decode_json join("\n", @output);
+		1;
+	} or do {
+		$json = undef;
+	};
+
+	# Show a list with all peers if the service is enabled
+	if ($settings{"ENABLED"} eq "on") {
+		&Header::opensection($Lang::tr{'lldp neighbors'});
+
+		# Fetch the interface object
+		my $interface = $json->{"lldp"}[0]->{"interface"};
+
+		print <<END;
+			<table class='tbl'>
+				<tr>
+					<th>
+						$Lang::tr{'name'}
+					</th>
+
+					<th>
+						$Lang::tr{'interface'}
+					</th>
+
+					<th>
+						$Lang::tr{'port'}
+					</th>
+
+					<th style="text-align: right;">
+						$Lang::tr{'vlan'}
+					</th>
+
+					<th>
+						$Lang::tr{'protocol'}
+					</th>
+
+					<th>
+						$Lang::tr{'description'}
+					</th>
+				</tr>
+END
+
+				foreach my $peer (@{ $interface }) {
+					my $intf = $peer->{"name"};
+					my $proto = $peer->{"via"};
+					my $name = "";
+					my $descr = "";
+					my $port_name = "";
+					my $vlan_id = "";
+
+					# Fetch the chassis
+					foreach my $chassis (@{ $peer->{"chassis"} }) {
+						$name = &Header::escape(
+							$chassis->{"name"}[0]->{"value"}
+						);;
+						$descr = &Header::escape(
+							$chassis->{"descr"}[0]->{"value"}
+						);
+
+						# Replace any line breaks in the description
+						$descr =~ s/\n/<br>/g;
+					}
+
+					# Fetch the port
+					foreach my $port (@{ $peer->{"port"} }) {
+						$port_name = $port->{"descr"}[0]->{"value"};
+					}
+
+					# Fetch the VLAN
+					foreach my $vlan (@{ $peer->{"vlan"} }) {
+						$vlan_id = $vlan->{"vlan-id"};
+					}
+
+					print <<END;
+						<tr>
+							<th scope="row">
+								$name
+							</th>
+
+							<td>
+								$intf
+							</td>
+
+							<td>
+								$port_name
+							</td>
+
+							<td style="text-align: right;">
+								$vlan_id
+							</td>
+
+							<td>
+								$proto
+							</td>
+
+							<td>
+								$descr
+							</td>
+						</tr>
+END
+				}
+
+				# Show a message if there are no neighbors
+				unless (scalar @{ $interface }) {
+					print <<END;
+						<tr>
+							<td colspan="6" style="text-align: center;">
+								$Lang::tr{'lldp there are no neighbors'}
+							</td>
+						</tr>
+END
+				}
+
+		print <<END;
+			</table>
+END
+
+		&Header::closesection();
+	}
+
+	&Header::closepage();
+
+	exit(0);
diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl
index 55804a897..132c04ff1 100644
--- a/langs/de/cgi-bin/de.pl
+++ b/langs/de/cgi-bin/de.pl
@@ -1639,6 +1639,9 @@
 'lifetime' => 'Lebensdauer:',
 'line' => 'Leitung',
 'linkq' => 'Antwortzeit',
+'lldp' => 'Link-Layer-Discovery-Protokoll',
+'lldp neighbors' => 'Nachbarn',
+'lldp there are no neighbors' => 'Aktuell gibt es keine Nachbarn',
 'load average' => 'Load Average',
 'load printer' => 'Lade Drucker',
 'loaded modules' => 'Geladene Module:',
@@ -2140,7 +2143,7 @@
 'profile saved' => 'Profil gespeichert: ',
 'profiles' => 'Profile:',
 'proto' => 'Proto',
-'protocol' => 'Protokoll:',
+'protocol' => 'Protokoll',
 'proxy' => 'Proxy',
 'proxy access graphs' => 'Diagramme zur Proxyauslastung',
 'proxy admin password' => 'Cache Administrator Passwort',
@@ -2920,6 +2923,7 @@
 'virtual private networking' => 'Virtuelles Privates Netzwerk',
 'visible in browselist' => 'Sichtbar in der Verzeichnisliste',
 'visit us at' => 'Besuchen Sie uns auf',
+'vlan' => 'VLAN',
 'voldown10' => 'Laustärke um 10 verringern',
 'voldown5' => 'Laustärke um 5 verringern',
 'volup10' => 'Laustärke um 10 erhöhen',
diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl
index 08967bc84..9cef3edd2 100644
--- a/langs/en/cgi-bin/en.pl
+++ b/langs/en/cgi-bin/en.pl
@@ -1705,6 +1705,9 @@
 'line' => 'Line',
 'link-layer encapsulation' => 'Link-Layer Encapsulation',
 'linkq' => 'Link Quality',
+'lldp' => 'Link Layer Discovery Protocol',
+'lldp neighbors' => 'Neighbors',
+'lldp there are no neighbors' => 'There are currently no neighbors',
 'load average' => 'Load Average',
 'load printer' => 'Load Printer',
 'loaded modules' => 'Loaded modules:',
@@ -2227,7 +2230,7 @@
 'profile saved' => 'Profile saved: ',
 'profiles' => 'Profiles:',
 'proto' => 'Proto',
-'protocol' => 'Protocol:',
+'protocol' => 'Protocol',
 'proxy' => 'Proxy',
 'proxy access graphs' => 'Proxy access graphs',
 'proxy admin password' => 'Cache administrator password',
@@ -3032,6 +3035,7 @@
 'virtual private networking' => 'Virtual Private Networking',
 'visible in browselist' => 'visible in browselist',
 'visit us at' => 'Visit us at',
+'vlan' => 'VLAN',
 'voldown10' => 'Decrease volume by 10',
 'voldown5' => 'Decrease volume by 5',
 'volup10' => 'Increase volume by 10',
diff --git a/langs/es/cgi-bin/es.pl b/langs/es/cgi-bin/es.pl
index a4764e6cb..fb529805e 100644
--- a/langs/es/cgi-bin/es.pl
+++ b/langs/es/cgi-bin/es.pl
@@ -2194,7 +2194,7 @@
 'profile saved' => 'Perfil guardado:',
 'profiles' => 'Perfiles:',
 'proto' => 'Proto',
-'protocol' => 'Protocolo:',
+'protocol' => 'Protocolo',
 'proxy' => 'Proxy',
 'proxy access graphs' => 'Gráficas de acceso al proxy',
 'proxy admin password' => 'Contraseña del Administrador del Caché',
diff --git a/langs/fr/cgi-bin/fr.pl b/langs/fr/cgi-bin/fr.pl
index a7085b773..57db1f394 100644
--- a/langs/fr/cgi-bin/fr.pl
+++ b/langs/fr/cgi-bin/fr.pl
@@ -2161,7 +2161,7 @@
 'profile saved' => 'Profil sauvegardé:',
 'profiles' => 'Profils :',
 'proto' => 'Proto',
-'protocol' => 'Protocole :',
+'protocol' => 'Protocole',
 'proxy' => 'Proxy',
 'proxy access graphs' => 'Graphiques des accès proxy',
 'proxy admin password' => 'Mot de passe admnistrateur du cache',
diff --git a/langs/nl/cgi-bin/nl.pl b/langs/nl/cgi-bin/nl.pl
index 17db7389f..c4612da4a 100644
--- a/langs/nl/cgi-bin/nl.pl
+++ b/langs/nl/cgi-bin/nl.pl
@@ -1764,7 +1764,7 @@
 'profile saved' => 'Profiel opgeslagen: ',
 'profiles' => 'Profielen:',
 'proto' => 'Proto',
-'protocol' => 'Protocol:',
+'protocol' => 'Protocol',
 'proxy' => 'Proxy',
 'proxy access graphs' => 'Proxy toegangsgrafieken',
 'proxy admin password' => 'Cache beheerder wachtwoord',
diff --git a/langs/pl/cgi-bin/pl.pl b/langs/pl/cgi-bin/pl.pl
index 0326a37e6..0972de0b3 100644
--- a/langs/pl/cgi-bin/pl.pl
+++ b/langs/pl/cgi-bin/pl.pl
@@ -1429,7 +1429,7 @@
 'profile saved' => 'Zapisano profil: ',
 'profiles' => 'Profile:',
 'proto' => 'Proto',
-'protocol' => 'Protokół:',
+'protocol' => 'Protokół',
 'proxy' => 'Proxy',
 'proxy access graphs' => 'Wykresy dostępu do Proxy',
 'proxy admin password' => 'Hasło administratora Cache',
diff --git a/langs/ru/cgi-bin/ru.pl b/langs/ru/cgi-bin/ru.pl
index ae4450fe3..8472e1fde 100644
--- a/langs/ru/cgi-bin/ru.pl
+++ b/langs/ru/cgi-bin/ru.pl
@@ -1424,7 +1424,7 @@
 'profile saved' => 'Профиль сохранён: ',
 'profiles' => 'Профили:',
 'proto' => 'Proto',
-'protocol' => 'Протокол:',
+'protocol' => 'Протокол',
 'proxy' => 'Proxy',
 'proxy access graphs' => 'Proxy access graphs',
 'proxy admin password' => 'Cache administrator password',
diff --git a/langs/tr/cgi-bin/tr.pl b/langs/tr/cgi-bin/tr.pl
index ad8fec7eb..320ff2018 100644
--- a/langs/tr/cgi-bin/tr.pl
+++ b/langs/tr/cgi-bin/tr.pl
@@ -1935,7 +1935,7 @@
 'profile saved' => 'Kaydedilen profiller: ',
 'profiles' => 'Profiller:',
 'proto' => 'Kural',
-'protocol' => 'Kural ',
+'protocol' => 'Kural',
 'proxy' => 'Vekil sunucu',
 'proxy access graphs' => 'Vekil sunucu erişim grafiği',
 'proxy admin password' => 'Önbellek yönetici parolası',
diff --git a/lfs/configroot b/lfs/configroot
index 997b4908c..f01a1b686 100644
--- a/lfs/configroot
+++ b/lfs/configroot
@@ -51,7 +51,7 @@ $(TARGET) :
 
 	# Create all directories
 	for i in addon-lang auth backup ca captive certs connscheduler crls ddns dhcp dhcpc dns dnsforward \
-			ethernet extrahd/bin fwlogs fwhosts firewall ipblocklist key langs logging mac main \
+			ethernet extrahd/bin fwlogs fwhosts firewall ipblocklist key langs lldp logging mac main \
 			menu.d modem optionsfw \
 			ovpn patches pakfire portfw ppp private proxy/advanced/cre \
 			proxy/calamaris/bin qos/bin red remote sensors suricata time \
@@ -66,7 +66,7 @@ $(TARGET) :
 	    dhcp/fixleases dhcp/advoptions dhcp/dhcpd.conf.local dns/settings dns/servers dnsforward/config ethernet/aliases ethernet/settings ethernet/known_nics ethernet/scanned_nics \
 	    ethernet/wireless extrahd/scan extrahd/devices extrahd/partitions extrahd/settings firewall/settings firewall/locationblock firewall/input firewall/outgoing \
 	    fwhosts/customnetworks fwhosts/customhosts fwhosts/customgroups fwhosts/customservicegrp fwhosts/customlocationgrp fwlogs/ipsettings fwlogs/portsettings ipblocklist/modified \
-	    ipblocklist/settings mac/settings main/hosts main/routing main/security main/settings optionsfw/settings \
+	    ipblocklist/settings lldp/settings mac/settings main/hosts main/routing main/security main/settings optionsfw/settings \
 	    ovpn/ccd.conf ovpn/ccdroute ovpn/ccdroute2 pakfire/settings portfw/config ppp/settings-1 ppp/settings-2 ppp/settings-3 ppp/settings-4 \
 	    ppp/settings-5 ppp/settings proxy/settings proxy/squid.conf proxy/advanced/settings proxy/advanced/cre/enable remote/settings qos/settings qos/classes qos/subclasses qos/level7config qos/portconfig \
 	    qos/tosconfig suricata/settings vpn/config vpn/settings vpn/ipsec.conf \
diff --git a/lfs/initscripts b/lfs/initscripts
index 49215c0ae..d2ef7ef85 100644
--- a/lfs/initscripts
+++ b/lfs/initscripts
@@ -94,6 +94,7 @@ $(TARGET) :
 	ln -sf ../init.d/grub-btrfsd		/etc/rc.d/rc0.d/K01grub-btrfsd
 	ln -sf ../init.d/vdradmin		/etc/rc.d/rc0.d/K01vdradmin
 	ln -sf ../init.d/fcron			/etc/rc.d/rc0.d/K08fcron
+	ln -sf ../init.d/lldpd			/etc/rc.d/rc0.d/K09lldpd
 	ln -sf ../init.d/apache			/etc/rc.d/rc0.d/K28apache
 	ln -sf ../init.d/openvpn-rw		/etc/rc.d/rc0.d/K10openvpn-rw
 	ln -sf ../init.d/openvpn-n2n		/etc/rc.d/rc0.d/K11openvpn-n2n
@@ -131,6 +132,7 @@ $(TARGET) :
 	ln -sf ../init.d/sshd			/etc/rc.d/rc3.d/S30sshd
 	ln -sf ../init.d/apache			/etc/rc.d/rc3.d/S32apache
 	ln -sf ../init.d/fcron			/etc/rc.d/rc3.d/S40fcron
+	ln -sf ../init.d/lldpd			/etc/rc.d/rc3.d/S41lldpd
 	ln -sf ../init.d/openvpn-n2n		/etc/rc.d/rc3.d/S51openvpn-n2n
 	ln -sf ../init.d/openvpn-rw		/etc/rc.d/rc3.d/S50openvpn-rw
 	ln -sf ../init.d/wireguard		/etc/rc.d/rc3.d/S50wireguard
@@ -141,6 +143,7 @@ $(TARGET) :
 	ln -sf ../init.d/grub-btrfsd		/etc/rc.d/rc6.d/K01grub-btrfsd
 	ln -sf ../init.d/vdradmin		/etc/rc.d/rc6.d/K01vdradmin
 	ln -sf ../init.d/fcron			/etc/rc.d/rc6.d/K08fcron
+	ln -sf ../init.d/lldpd			/etc/rc.d/rc6.d/K09lldpd
 	ln -sf ../init.d/openvpn-rw		/etc/rc.d/rc6.d/K10openvpn-rw
 	ln -sf ../init.d/openvpn-n2n		/etc/rc.d/rc6.d/K11openvpn-n2n
 	ln -sf ../init.d/apache			/etc/rc.d/rc6.d/K28apache
diff --git a/lfs/lldpd b/lfs/lldpd
new file mode 100644
index 000000000..e84dfaef2
--- /dev/null
+++ b/lfs/lldpd
@@ -0,0 +1,88 @@
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007-2024  IPFire Team  <info@ipfire.org>                     #
+#                                                                             #
+# This program is free software: you can redistribute it and/or modify        #
+# it under the terms of the GNU General Public License as published by        #
+# the Free Software Foundation, either version 3 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# This program is distributed in the hope that it will be useful,             #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+###############################################################################
+# Definitions
+###############################################################################
+
+include Config
+
+VER        = 1.0.20
+
+THISAPP    = lldpd-$(VER)
+DL_FILE    = $(THISAPP).tar.gz
+DL_FROM    = $(URL_IPFIRE)
+DIR_APP    = $(DIR_SRC)/$(THISAPP)
+TARGET     = $(DIR_INFO)/$(THISAPP)
+
+###############################################################################
+# Top-level Rules
+###############################################################################
+
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_BLAKE2 = 95743f28d9b3c8ad6f354f7def5f835d9b0668c151ad429dccfc7a249e29234a9ca1fda6b3bcc2890c424053b5adf2d4d9d7c0cb2887e97cc32b42577b91c63a
+
+install : $(TARGET)
+
+check : $(patsubst %,$(DIR_CHK)/%,$(objects))
+
+download :$(patsubst %,$(DIR_DL)/%,$(objects))
+
+b2 : $(subst %,%_BLAKE2,$(objects))
+
+dist:
+	$(PAK)
+
+###############################################################################
+# Downloading, checking, b2sum
+###############################################################################
+
+$(patsubst %,$(DIR_CHK)/%,$(objects)) :
+	@$(CHECK)
+
+$(patsubst %,$(DIR_DL)/%,$(objects)) :
+	@$(LOAD)
+
+$(subst %,%_BLAKE2,$(objects)) :
+	@$(B2SUM)
+
+###############################################################################
+# Installation Details
+###############################################################################
+
+$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
+	@$(PREBUILD)
+	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+	cd $(DIR_APP) && ./configure \
+		--prefix=/usr \
+		--sysconfdir=/etc \
+		--localstatedir=/var \
+		--disable-static \
+		--with-seccomp \
+		--with-privsep-user=nobody \
+		--with-privsep-group=nobody \
+		--without-embedded-libevent
+	cd $(DIR_APP) && make $(MAKETUNING)
+	cd $(DIR_APP) && make install
+	@rm -rf $(DIR_APP)
+	@$(POSTBUILD)
diff --git a/lfs/strongswan b/lfs/strongswan
index 7075ab7ef..728e01636 100644
--- a/lfs/strongswan
+++ b/lfs/strongswan
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 6.0.2
+VER        = 6.0.3
 
 THISAPP    = strongswan-$(VER)
 DL_FILE    = $(THISAPP).tar.bz2
@@ -43,7 +43,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_BLAKE2 = 3cfc248831832a9b75da549fcaf490a4a0c33e2f680e04a02d04a035c05215ae0236f1fdcdb4a00b71b5a08d07626e8028959045aff1b77827c21fe7e1fb13ad
+$(DL_FILE)_BLAKE2 = 355dff5de259e545b1bb5e24853dc91148c3d400b1977a2de35271e019dfc236c838ccac4552974a4999e2768900150c432753fc0d422444d4cc34486566e192
 
 install : $(TARGET)
 
@@ -75,36 +75,34 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
 	@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
 	cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/strongswan-disable-ipv6.patch
 	cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/strongswan-ipfire.patch
-
 	$(UPDATE_AUTOMAKE)
 	cd $(DIR_APP) && ./configure \
-		--prefix="/usr" \
-		--sysconfdir="/etc" \
-		--enable-curl \
-		--enable-dhcp \
-		--enable-farp \
-		--enable-openssl \
-		--enable-gcrypt \
-		--enable-ccm \
-		--enable-ctr \
-		--enable-gcm \
-		--enable-xauth-eap \
-		--enable-xauth-noauth \
-		--enable-eap-radius \
-		--enable-eap-tls \
-		--enable-eap-ttls \
-		--enable-eap-peap \
-		--enable-eap-mschapv2 \
-		--enable-eap-identity \
-		--enable-chapoly \
-		--enable-sha3 \
-		--enable-stroke \
-		--enable-fips-prf \
-		--enable-mgf1 \
-		--enable-hmac \
-		--enable-ml \
-		$(CONFIGURE_OPTIONS)
-
+				--prefix="/usr" \
+				--sysconfdir="/etc" \
+				--enable-curl \
+				--enable-dhcp \
+				--enable-farp \
+				--enable-openssl \
+				--enable-gcrypt \
+				--enable-ccm \
+				--enable-ctr \
+				--enable-gcm \
+				--enable-xauth-eap \
+				--enable-xauth-noauth \
+				--enable-eap-radius \
+				--enable-eap-tls \
+				--enable-eap-ttls \
+				--enable-eap-peap \
+				--enable-eap-mschapv2 \
+				--enable-eap-identity \
+				--enable-chapoly \
+				--enable-sha3 \
+				--enable-stroke \
+				--enable-fips-prf \
+				--enable-mgf1 \
+				--enable-hmac \
+				--enable-ml \
+				$(CONFIGURE_OPTIONS)
 	cd $(DIR_APP) && make $(MAKETUNING)
 	cd $(DIR_APP) && make install
 
diff --git a/make.sh b/make.sh
index cacacb210..ed4222ac5 100755
--- a/make.sh
+++ b/make.sh
@@ -2125,6 +2125,7 @@ build_system() {
 	lfsmake2 fort-validator
 	lfsmake2 arpwatch
 	lfsmake2 suricata-reporter
+	lfsmake2 lldpd
 
 	lfsmake2 linux
 	lfsmake2 rtl8812au
diff --git a/src/initscripts/system/lldpd b/src/initscripts/system/lldpd
new file mode 100755
index 000000000..128115dbb
--- /dev/null
+++ b/src/initscripts/system/lldpd
@@ -0,0 +1,79 @@
+#!/bin/sh
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2007-2022  IPFire Team  <info@ipfire.org>                     #
+#                                                                             #
+# This program is free software: you can redistribute it and/or modify        #
+# it under the terms of the GNU General Public License as published by        #
+# the Free Software Foundation, either version 3 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# This program is distributed in the hope that it will be useful,             #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+# Read the configuration
+readhash CONFIG "/var/ipfire/lldp/settings"
+
+generate_config() {
+	# Set the description (if given)
+	if [ -n "${CONFIG["DESCRIPTION"]}" ]; then
+		echo "configure system description ${CONFIG["DESCRIPTION"]}"
+	fi
+
+	return 0
+}
+
+case "${1}" in
+	start)
+		# Do nothing if the service is not enabled
+		if [ "${CONFIG["ENABLED"]}" != "on" ]; then
+			exit 0
+		fi
+
+		# Generate the configuration file
+		if ! generate_config > /etc/lldpd.d/lldpd.conf; then
+			boot_mesg -n "Failed to generate configuration for lldpd" ${WARNING}
+			boot_mesg "" ${NORMAL}
+			exit 1
+		fi
+
+		boot_mesg "Starting Link-Layer Discovery Protocol Daemon..."
+		loadproc /usr/sbin/lldpd
+		;;
+
+	stop)
+		boot_mesg "Stopping Link-Layer Discovery Protocol Daemon..."
+		killproc /usr/sbin/lldpd
+		;;
+
+	reload)
+		boot_mesg "Reloading Link-Layer Discovery Protocol Daemoon..."
+		reloadproc /usr/sbin/lldpd
+		;;
+
+	restart)
+		${0} stop
+		sleep 1
+		${0} start
+		;;
+
+	status)
+		statusproc /usr/sbin/lldpd
+		;;
+
+	*)
+		echo "Usage: ${0} {start|stop|reload|restart|status}"
+		exit 1
+		;;
+esac
diff --git a/src/misc-progs/Makefile b/src/misc-progs/Makefile
index 9d380c158..4c994638a 100644
--- a/src/misc-progs/Makefile
+++ b/src/misc-progs/Makefile
@@ -32,7 +32,7 @@ SUID_PROGS = squidctrl sshctrl ipfirereboot \
 	smartctrl clamavctrl addonctrl pakfire wlanapctrl \
 	setaliases urlfilterctrl updxlratorctrl fireinfoctrl rebuildroutes \
 	getconntracktable wirelessclient torctrl ddnsctrl unboundctrl \
-	captivectrl wireguardctrl
+	captivectrl wireguardctrl lldpdctrl
 
 OBJS = $(patsubst %,%.o,$(PROGS) $(SUID_PROGS))
 
diff --git a/src/misc-progs/lldpdctrl.c b/src/misc-progs/lldpdctrl.c
new file mode 100644
index 000000000..8ae0d9d97
--- /dev/null
+++ b/src/misc-progs/lldpdctrl.c
@@ -0,0 +1,35 @@
+/* This file is part of the IPFire Firewall.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence.  See the file COPYING for details.
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "setuid.h"
+
+int main(int argc, char** argv) {
+	// Become root
+	if (!initsetuid())
+		exit(1);
+
+	// Check if we have enough arguments
+	if (argc < 2) {
+		fprintf(stderr, "\nNot enough arguments.\n\n");
+		exit(1);
+	}
+
+	if (strcmp(argv[1], "start") == 0)
+		return run("/etc/rc.d/init.d/lldpd", argv + 1);
+
+	else if (strcmp(argv[1], "stop") == 0)
+		return run("/etc/rc.d/init.d/lldpd", argv + 1);
+
+	else if (strcmp(argv[1], "restart") == 0)
+		return run("/etc/rc.d/init.d/lldpd", argv + 1);
+ 
+	fprintf(stderr, "Invalid command\n");
+	exit(1);
+}


hooks/post-receive
--
IPFire 2.x development tree


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-11-07 11:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-07 11:33 [git.ipfire.org] IPFire 2.x development tree branch, next, updated. 57d92ffc448a5dcdd810b77d1c332f8e4ef104e6 Michael Tremer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox