diff --git a/0002-do-not-remove-config.patch b/0002-do-not-remove-config.patch new file mode 100644 index 0000000..10488c0 --- /dev/null +++ b/0002-do-not-remove-config.patch @@ -0,0 +1,101 @@ +From cfef0032247f9a3950a9909d59db88e948741ee3 Mon Sep 17 00:00:00 2001 +From: Hangbin Liu +Date: Wed, 9 Oct 2024 03:53:16 +0000 +Subject: [PATCH 2/2] lldpad: do not remove config when stopping lldpad + +When lldpad is terminated by systemd or kill, the remove_all_adapters() +function is called. However, this function is intended to release port +resources, and the configuration file should not be destroyed. We only +need to remove the port when it is explicitly deleted. Otherwise, all +configurations will be lost when lldpad is stopped. + +Fixes: a75e35a0cb36 ("lldpad: remove device from config file when ports are removed") +Reported-by: Fei Liu +Signed-off-by: Hangbin Liu +Signed-off-by: Aaron Conole +--- + config.c | 2 +- + event_iface.c | 2 +- + lldp/ports.c | 5 +++-- + lldp/ports.h | 2 +- + lldpad.c | 2 +- + 5 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/config.c b/config.c +index 13ee7aa7ba47..e046f94fe911 100644 +--- a/config.c ++++ b/config.c +@@ -135,7 +135,7 @@ void scan_port(UNUSED void *eloop_data, UNUSED void *user_ctx) + } + next = port->next; + if (!found) +- remove_port(port->ifname); ++ remove_port(port->ifname, true); + } + + /* Walk port list looking for devices that should have been added +diff --git a/event_iface.c b/event_iface.c +index 916bf4b4cbe8..65f1f83bf8e7 100644 +--- a/event_iface.c ++++ b/event_iface.c +@@ -297,7 +297,7 @@ static void event_if_decode_nlmsg(int route_type, void *data, int len) + if (route_type == RTM_DELLINK) { + LLDPAD_INFO("%s: %s: device removed!\n", + __func__, device_name); +- remove_port(device_name); ++ remove_port(device_name, true); + } + break; + case IF_OPER_DORMANT: +diff --git a/lldp/ports.c b/lldp/ports.c +index 3eab71f8eff1..284f8f6c7108 100644 +--- a/lldp/ports.c ++++ b/lldp/ports.c +@@ -297,7 +297,7 @@ fail: + return NULL; + } + +-int remove_port(const char *ifname) ++int remove_port(const char *ifname, bool remove_config) + { + int ifindex = get_ifidx(ifname); + struct port *port; /* Pointer to port to remove */ +@@ -356,7 +356,8 @@ int remove_port(const char *ifname) + + LIST_REMOVE(agent, entry); + +- remove_config_device(ifname, agent->type); ++ if (remove_config) ++ remove_config_device(ifname, agent->type); + + free(agent); + } +diff --git a/lldp/ports.h b/lldp/ports.h +index 21280e0ef0e2..a5006fa86a74 100644 +--- a/lldp/ports.h ++++ b/lldp/ports.h +@@ -97,7 +97,7 @@ extern struct port *porthead; + extern "C" { + #endif + struct port *add_port(int ifindex, const char *); +-int remove_port(const char *); ++int remove_port(const char *, bool remove_config); + #ifdef __cplusplus + } + #endif +diff --git a/lldpad.c b/lldpad.c +index 65e92c703c42..ddc8b631e0e5 100644 +--- a/lldpad.c ++++ b/lldpad.c +@@ -167,7 +167,7 @@ static void remove_all_adapters(void) + + for (port = porthead; port; port = next) { + next = port->next; +- remove_port(port->ifname); ++ remove_port(port->ifname, false); + } + + return; +-- +2.39.5 (Apple Git-154) + diff --git a/lldpad.spec b/lldpad.spec index 30f5132..962defb 100644 --- a/lldpad.spec +++ b/lldpad.spec @@ -11,7 +11,7 @@ Name: lldpad Version: 1.1.1 -Release: 3.git%{shortcommit}%{?dist} +Release: 4.git%{shortcommit}%{?dist} Summary: Intel LLDP Agent %forgemeta @@ -22,6 +22,7 @@ Source0: %{forgesource}#/%{name}-%{version}.tar.gz # When 1.1.2 or later is released, simply remove this # patch and generate a new one. Patch1: 0001-patch-to-latest.patch +Patch2: 0002-do-not-remove-config.patch BuildRequires: automake autoconf BuildRequires: flex @@ -96,6 +97,9 @@ rm -f %{buildroot}%{_libdir}/liblldp_clif.la %{_libdir}/liblldp_clif.so %changelog +* Mon Jan 20 2025 Hangbin Liu - 1.1.1-4.gitf1dd9eb +- do not remove config when stopping lldpad (RHEL-61874) + * Mon Sep 9 2024 Hangbin Liu - 1.1.1-3.gitf1dd9eb - Rebase to latest upstream code - Remove interface configure if the interface deleted (RHEL-13242)