From c8aa7b152f423cc2147afbb8b9245f056103d1f7 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 22 Feb 2026 14:15:20 +0100 Subject: [PATCH 1/6] network: enable LLDP for links that use only link-local addressing Links with link-local-only communication are typically peer-to-peer links between two laptops or similar. In such cases it makes sense to be able to see which device one is specifically connected to, hence let's just enable LLDP for it. This doesn't leak any data really, given that this is inherently local, and typically only used between isolated systems that are under the same user's possession. Background: I recently connected multiple laptops via thunderbolt networking and was kinda annoyed not being able to see what system I was actually talking to. (Also, the file touched here is an example only anyway, so even if this would leak too much info, it's not in effect by default) --- network/80-auto-link-local.network.example | 2 ++ 1 file changed, 2 insertions(+) diff --git a/network/80-auto-link-local.network.example b/network/80-auto-link-local.network.example index 286b532496..5af0c62782 100644 --- a/network/80-auto-link-local.network.example +++ b/network/80-auto-link-local.network.example @@ -18,3 +18,5 @@ Property=ID_NET_AUTO_LINK_LOCAL_ONLY=1 LinkLocalAddressing=yes IPv6AcceptRA=no MulticastDNS=yes +LLDP=yes +EmitLLDP=yes From 332ecf40f24b291178ad370a448b6a5227700ae2 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 23 Feb 2026 13:25:17 +0100 Subject: [PATCH 2/6] sd-netlink: pin reply slot while we execute callback The callback might drop the last ref to the slot object, and we still want to access it. Hence do what we usually do in these cases: keep an extra reference while processing the callback. --- src/libsystemd/sd-netlink/sd-netlink.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libsystemd/sd-netlink/sd-netlink.c b/src/libsystemd/sd-netlink/sd-netlink.c index 2deb49557d..65d731a20b 100644 --- a/src/libsystemd/sd-netlink/sd-netlink.c +++ b/src/libsystemd/sd-netlink/sd-netlink.c @@ -331,7 +331,6 @@ static int process_timeout(sd_netlink *nl) { static int process_reply(sd_netlink *nl, sd_netlink_message *m) { struct reply_callback *c; - sd_netlink_slot *slot; uint32_t serial; uint16_t type; int r; @@ -354,7 +353,8 @@ static int process_reply(sd_netlink *nl, sd_netlink_message *m) { if (type == NLMSG_DONE) m = NULL; - slot = container_of(c, sd_netlink_slot, reply_callback); + _cleanup_(sd_netlink_slot_unrefp) sd_netlink_slot *slot = + sd_netlink_slot_ref(container_of(c, sd_netlink_slot, reply_callback)); r = c->callback(nl, m, slot->userdata); if (r < 0) From a0276f6e12c231c46add34e483458ae91ebfa379 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 23 Feb 2026 13:22:27 +0100 Subject: [PATCH 3/6] sd-varlink: use correct error variable --- src/libsystemd/sd-varlink/sd-varlink.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libsystemd/sd-varlink/sd-varlink.c b/src/libsystemd/sd-varlink/sd-varlink.c index bcb16af89f..f5b721156f 100644 --- a/src/libsystemd/sd-varlink/sd-varlink.c +++ b/src/libsystemd/sd-varlink/sd-varlink.c @@ -280,7 +280,7 @@ _public_ int sd_varlink_connect_exec(sd_varlink **ret, const char *_command, cha } execvp(command, argv); - log_debug_errno(r, "Failed to invoke process '%s': %m", command); + log_debug_errno(errno, "Failed to invoke process '%s': %m", command); _exit(EXIT_FAILURE); } From a69dffbf4f450da7099a39bbe5ac11b0f04738dd Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 23 Feb 2026 13:22:44 +0100 Subject: [PATCH 4/6] sd-varlink: add a bit of debug logging indicating when exit-on-idle triggers --- src/libsystemd/sd-varlink/sd-varlink.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libsystemd/sd-varlink/sd-varlink.c b/src/libsystemd/sd-varlink/sd-varlink.c index f5b721156f..3b08577efc 100644 --- a/src/libsystemd/sd-varlink/sd-varlink.c +++ b/src/libsystemd/sd-varlink/sd-varlink.c @@ -4055,8 +4055,10 @@ _public_ int sd_varlink_server_shutdown(sd_varlink_server *s) { static void varlink_server_test_exit_on_idle(sd_varlink_server *s) { assert(s); - if (s->exit_on_idle && s->event && s->n_connections == 0) + if (s->exit_on_idle && s->event && s->n_connections == 0) { + varlink_server_log(s, "Exit-on-idle triggered."); (void) sd_event_exit(s->event, 0); + } } _public_ int sd_varlink_server_set_exit_on_idle(sd_varlink_server *s, int b) { From 3601697b2d3465fd53a2fc84b09bb296357b842f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 23 Feb 2026 21:56:40 +0100 Subject: [PATCH 5/6] analyzer: remove spurious empty line --- src/analyze/analyze.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c index d3040d03e0..c69f03ec15 100644 --- a/src/analyze/analyze.c +++ b/src/analyze/analyze.c @@ -310,7 +310,6 @@ static int help(int argc, char *argv[], void *userdata) { " --debugger=DEBUGGER Use the given debugger\n" " -A --debugger-arguments=ARGS\n" " Pass the given arguments to the debugger\n" - "\nSee the %2$s for details.\n", program_invocation_short_name, link, From 35e4cb2189cd66f4e2ca895261e59664bc5e4b6e Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 22 Feb 2026 21:08:45 +0100 Subject: [PATCH 6/6] update TODO --- TODO | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TODO b/TODO index 31634a9759..072ce83f0a 100644 --- a/TODO +++ b/TODO @@ -121,6 +121,9 @@ Deprecations and removals: Features: +* sd-lldp: pick up 802.3 maximum frame size/mtu, to be able to detect jumbo + frame capable networks + * networkd: maintain a file in /run/ that can be symlinked into /run/issue.d/ that always shows the current primary IP address