]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: add io.systemd.Network.Link.ForceRenew() Varlink method
authornoxiouz <atiurin@proton.me>
Sun, 22 Feb 2026 15:25:07 +0000 (15:25 +0000)
committernoxiouz <atiurin@proton.me>
Wed, 18 Mar 2026 22:55:52 +0000 (22:55 +0000)
The handler calls sd_dhcp_server_forcerenew() if the server is running
and logs a warning on failure.

Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
src/network/networkd-link-varlink.c
src/network/networkd-link-varlink.h
src/network/networkd-manager-varlink.c
src/shared/varlink-io.systemd.Network.Link.c

index c0abc8ef0647a3eb90184037ca242095938f9b11..edb7f3aa84d86f8ccd8ea6733093ce2648966753 100644 (file)
@@ -1,5 +1,6 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "sd-dhcp-server.h"
 #include "sd-varlink.h"
 
 #include "bus-polkit.h"
@@ -128,3 +129,32 @@ int vl_method_link_renew(sd_varlink *vlink, sd_json_variant *parameters, sd_varl
 
         return sd_varlink_reply(vlink, NULL);
 }
+
+int vl_method_link_force_renew(sd_varlink *vlink, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
+        Manager *manager = ASSERT_PTR(userdata);
+        Link *link;
+        int r;
+
+        assert(vlink);
+
+        r = dispatch_link(vlink, parameters, manager, DISPATCH_LINK_POLKIT | DISPATCH_LINK_MANDATORY, &link);
+        if (r != 0)
+                return r;
+
+        r = varlink_verify_polkit_async(
+                        vlink,
+                        manager->bus,
+                        "org.freedesktop.network1.forcerenew",
+                        /* details= */ NULL,
+                        &manager->polkit_registry);
+        if (r <= 0)
+                return r;
+
+        if (sd_dhcp_server_is_running(link->dhcp_server)) {
+                r = sd_dhcp_server_forcerenew(link->dhcp_server);
+                if (r < 0)
+                        return log_link_warning_errno(link, r, "Failed to force-renew DHCP server leases: %m");
+        }
+
+        return sd_varlink_reply(vlink, NULL);
+}
index 0d0dd3ad25a2d8eb56f8210a2bbbb62c3d3f72ae..b318d5950db8efa92ab8bb6b4ced836c3f0fb2d4 100644 (file)
@@ -13,3 +13,4 @@ int dispatch_link(sd_varlink *vlink, sd_json_variant *parameters, Manager *manag
 int vl_method_link_up(sd_varlink *vlink, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata);
 int vl_method_link_down(sd_varlink *vlink, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata);
 int vl_method_link_renew(sd_varlink *vlink, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata);
+int vl_method_link_force_renew(sd_varlink *vlink, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata);
index 9adfb0c2a5d0c5fb3aa24a65ae4db8a88e81e154..4ee7f8e9a2a9e6646f8635812df9d7d6e135023c 100644 (file)
@@ -274,6 +274,7 @@ int manager_varlink_init(Manager *m, int fd) {
                         "io.systemd.Network.Link.Up",              vl_method_link_up,
                         "io.systemd.Network.Link.Down",            vl_method_link_down,
                         "io.systemd.Network.Link.Renew",           vl_method_link_renew,
+                        "io.systemd.Network.Link.ForceRenew",      vl_method_link_force_renew,
                         "io.systemd.service.Ping",                 varlink_method_ping,
                         "io.systemd.service.SetLogLevel",          varlink_method_set_log_level,
                         "io.systemd.service.GetEnvironment",       varlink_method_get_environment);
index 338b2be123dfc57b5d4de0fbb6110065c964fb15..a42aab413f30292497f7848c1a86a9db54046868 100644 (file)
@@ -24,6 +24,11 @@ static SD_VARLINK_DEFINE_METHOD(
                 VARLINK_NETWORK_INTERFACE_INPUTS,
                 VARLINK_DEFINE_POLKIT_INPUT);
 
+static SD_VARLINK_DEFINE_METHOD(
+                ForceRenew,
+                VARLINK_NETWORK_INTERFACE_INPUTS,
+                VARLINK_DEFINE_POLKIT_INPUT);
+
 SD_VARLINK_DEFINE_INTERFACE(
                 io_systemd_Network_Link,
                 "io.systemd.Network.Link",
@@ -32,4 +37,6 @@ SD_VARLINK_DEFINE_INTERFACE(
                 SD_VARLINK_SYMBOL_COMMENT("Bring the specified link down."),
                 &vl_method_Down,
                 SD_VARLINK_SYMBOL_COMMENT("Renew DHCP leases on the specified link."),
-                &vl_method_Renew);
+                &vl_method_Renew,
+                SD_VARLINK_SYMBOL_COMMENT("Force-renew DHCP server leases on the specified link."),
+                &vl_method_ForceRenew);