network: add io.systemd.Network.Link.Reconfigure() Varlink method

The handler calls link_reconfigure_full() with UNCONDITIONALLY|CLEANLY
flags and defers the Varlink reply until reconfiguration completes.

Co-developed-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
noxiouz
2026-03-18 22:55:52 +00:00
parent 982a3fa59f
commit 506890fa0d
4 changed files with 43 additions and 1 deletions
+33
View File
@@ -158,3 +158,36 @@ int vl_method_link_force_renew(sd_varlink *vlink, sd_json_variant *parameters, s
return sd_varlink_reply(vlink, NULL);
}
int vl_method_link_reconfigure(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.reconfigure",
/* details= */ NULL,
&manager->polkit_registry);
if (r <= 0)
return r;
r = link_reconfigure_full(link,
LINK_RECONFIGURE_UNCONDITIONALLY | LINK_RECONFIGURE_CLEANLY,
/* message= */ NULL,
/* varlink= */ vlink,
/* counter= */ NULL);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to reconfigure link: %m");
if (r > 0)
return 0; /* Reply will be sent asynchronously via vlink */
return sd_varlink_reply(vlink, NULL);
}
+1
View File
@@ -14,3 +14,4 @@ int vl_method_link_up(sd_varlink *vlink, sd_json_variant *parameters, sd_varlink
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);
int vl_method_link_reconfigure(sd_varlink *vlink, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata);
+1
View File
@@ -275,6 +275,7 @@ int manager_varlink_init(Manager *m, int fd) {
"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.Network.Link.Reconfigure", vl_method_link_reconfigure,
"io.systemd.service.Ping", varlink_method_ping,
"io.systemd.service.SetLogLevel", varlink_method_set_log_level,
"io.systemd.service.GetEnvironment", varlink_method_get_environment);
+8 -1
View File
@@ -29,6 +29,11 @@ static SD_VARLINK_DEFINE_METHOD(
VARLINK_NETWORK_INTERFACE_INPUTS,
VARLINK_DEFINE_POLKIT_INPUT);
static SD_VARLINK_DEFINE_METHOD(
Reconfigure,
VARLINK_NETWORK_INTERFACE_INPUTS,
VARLINK_DEFINE_POLKIT_INPUT);
SD_VARLINK_DEFINE_INTERFACE(
io_systemd_Network_Link,
"io.systemd.Network.Link",
@@ -39,4 +44,6 @@ SD_VARLINK_DEFINE_INTERFACE(
SD_VARLINK_SYMBOL_COMMENT("Renew DHCP leases on the specified link."),
&vl_method_Renew,
SD_VARLINK_SYMBOL_COMMENT("Force-renew DHCP server leases on the specified link."),
&vl_method_ForceRenew);
&vl_method_ForceRenew,
SD_VARLINK_SYMBOL_COMMENT("Unconditionally reconfigure the specified link."),
&vl_method_Reconfigure);