network: add io.systemd.Network.Link.ForceRenew() Varlink method
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>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user