From: Lennart Poettering Date: Tue, 7 Jan 2025 14:21:53 +0000 (+0100) Subject: tree-wide: implement generic io.systemd.service Varlink interface in all long-running... X-Git-Tag: v258-rc1~1559^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c8127075ae22ad0f64d3072f400818f6e1a9ab48;p=thirdparty%2Fsystemd.git tree-wide: implement generic io.systemd.service Varlink interface in all long-running services Given we have the generic interface, let's hook it up everywhere. This doesnt bother with the Reload() call usually, since that's more involved, but hooks up the other relevant functions where applicable. --- diff --git a/src/core/core-varlink.c b/src/core/core-varlink.c index 4f0563a1c09..92cfd36e718 100644 --- a/src/core/core-varlink.c +++ b/src/core/core-varlink.c @@ -10,6 +10,7 @@ #include "varlink-internal.h" #include "varlink-io.systemd.UserDatabase.h" #include "varlink-io.systemd.ManagedOOM.h" +#include "varlink-io.systemd.service.h" #include "varlink-util.h" typedef struct LookupParameters { @@ -589,7 +590,8 @@ int manager_setup_varlink_server(Manager *m) { r = sd_varlink_server_add_interface_many( s, &vl_interface_io_systemd_UserDatabase, - &vl_interface_io_systemd_ManagedOOM); + &vl_interface_io_systemd_ManagedOOM, + &vl_interface_io_systemd_service); if (r < 0) return log_debug_errno(r, "Failed to add interfaces to varlink server: %m"); @@ -598,7 +600,9 @@ int manager_setup_varlink_server(Manager *m) { "io.systemd.UserDatabase.GetUserRecord", vl_method_get_user_record, "io.systemd.UserDatabase.GetGroupRecord", vl_method_get_group_record, "io.systemd.UserDatabase.GetMemberships", vl_method_get_memberships, - "io.systemd.ManagedOOM.SubscribeManagedOOMCGroups", vl_method_subscribe_managed_oom_cgroups); + "io.systemd.ManagedOOM.SubscribeManagedOOMCGroups", vl_method_subscribe_managed_oom_cgroups, + "io.systemd.service.Ping", varlink_method_ping, + "io.systemd.service.GetEnvironment", varlink_method_get_environment); if (r < 0) return log_debug_errno(r, "Failed to register varlink methods: %m"); diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c index bb4ad1f99f4..a0d38eb7014 100644 --- a/src/home/homed-manager.c +++ b/src/home/homed-manager.c @@ -54,6 +54,7 @@ #include "user-record-util.h" #include "user-record.h" #include "user-util.h" +#include "varlink-io.systemd.service.h" #include "varlink-io.systemd.UserDatabase.h" #include "varlink-util.h" @@ -1012,7 +1013,10 @@ static int manager_bind_varlink(Manager *m) { if (r < 0) return log_error_errno(r, "Failed to allocate varlink server: %m"); - r = sd_varlink_server_add_interface(m->varlink_server, &vl_interface_io_systemd_UserDatabase); + r = sd_varlink_server_add_interface_many( + m->varlink_server, + &vl_interface_io_systemd_UserDatabase, + &vl_interface_io_systemd_service); if (r < 0) return log_error_errno(r, "Failed to add UserDatabase interface to varlink server: %m"); @@ -1020,7 +1024,10 @@ static int manager_bind_varlink(Manager *m) { m->varlink_server, "io.systemd.UserDatabase.GetUserRecord", vl_method_get_user_record, "io.systemd.UserDatabase.GetGroupRecord", vl_method_get_group_record, - "io.systemd.UserDatabase.GetMemberships", vl_method_get_memberships); + "io.systemd.UserDatabase.GetMemberships", vl_method_get_memberships, + "io.systemd.service.Ping", varlink_method_ping, + "io.systemd.service.SetLogLevel", varlink_method_set_log_level, + "io.systemd.service.GetEnvironment", varlink_method_get_environment); if (r < 0) return log_error_errno(r, "Failed to register varlink methods: %m"); diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c index 2af9c68d988..a4549da8268 100644 --- a/src/hostname/hostnamed.c +++ b/src/hostname/hostnamed.c @@ -42,6 +42,7 @@ #include "user-util.h" #include "utf8.h" #include "varlink-io.systemd.Hostname.h" +#include "varlink-io.systemd.service.h" #include "varlink-util.h" #include "virt.h" @@ -1771,13 +1772,19 @@ static int connect_varlink(Context *c) { if (r < 0) return log_error_errno(r, "Failed to allocate Varlink server: %m"); - r = sd_varlink_server_add_interface(c->varlink_server, &vl_interface_io_systemd_Hostname); + r = sd_varlink_server_add_interface_many( + c->varlink_server, + &vl_interface_io_systemd_Hostname, + &vl_interface_io_systemd_service); if (r < 0) return log_error_errno(r, "Failed to add Hostname interface to Varlink server: %m"); r = sd_varlink_server_bind_method_many( c->varlink_server, - "io.systemd.Hostname.Describe", vl_method_describe); + "io.systemd.Hostname.Describe", vl_method_describe, + "io.systemd.service.Ping", varlink_method_ping, + "io.systemd.service.SetLogLevel", varlink_method_set_log_level, + "io.systemd.service.GetEnvironment", varlink_method_get_environment); if (r < 0) return log_error_errno(r, "Failed to bind Varlink method calls: %m"); diff --git a/src/import/importd.c b/src/import/importd.c index ea8257a833d..72c0e4a95a8 100644 --- a/src/import/importd.c +++ b/src/import/importd.c @@ -42,6 +42,7 @@ #include "syslog-util.h" #include "user-util.h" #include "varlink-io.systemd.Import.h" +#include "varlink-io.systemd.service.h" #include "varlink-util.h" #include "web-util.h" @@ -1979,14 +1980,20 @@ static int manager_connect_varlink(Manager *m) { if (r < 0) return log_error_errno(r, "Failed to allocate varlink server object: %m"); - r = sd_varlink_server_add_interface(m->varlink_server, &vl_interface_io_systemd_Import); + r = sd_varlink_server_add_interface_many( + m->varlink_server, + &vl_interface_io_systemd_Import, + &vl_interface_io_systemd_service); if (r < 0) return log_error_errno(r, "Failed to add Import interface to varlink server: %m"); r = sd_varlink_server_bind_method_many( m->varlink_server, - "io.systemd.Import.ListTransfers", vl_method_list_transfers, - "io.systemd.Import.Pull", vl_method_pull); + "io.systemd.Import.ListTransfers", vl_method_list_transfers, + "io.systemd.Import.Pull", vl_method_pull, + "io.systemd.service.Ping", varlink_method_ping, + "io.systemd.service.SetLogLevel", varlink_method_set_log_level, + "io.systemd.service.GetEnvironment", varlink_method_get_environment); if (r < 0) return log_error_errno(r, "Failed to bind Varlink method calls: %m"); diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index 8fcfa0c57bb..3469a90fefa 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -64,6 +64,7 @@ #include "uid-classification.h" #include "user-util.h" #include "varlink-io.systemd.Journal.h" +#include "varlink-io.systemd.service.h" #include "varlink-util.h" #define USER_JOURNALS_MAX 1024 @@ -2334,16 +2335,22 @@ static int server_open_varlink(Server *s, const char *socket, int fd) { if (r < 0) return log_error_errno(r, "Failed to allocate varlink server object: %m"); - r = sd_varlink_server_add_interface(s->varlink_server, &vl_interface_io_systemd_Journal); + r = sd_varlink_server_add_interface_many( + s->varlink_server, + &vl_interface_io_systemd_Journal, + &vl_interface_io_systemd_service); if (r < 0) return log_error_errno(r, "Failed to add Journal interface to varlink server: %m"); r = sd_varlink_server_bind_method_many( s->varlink_server, - "io.systemd.Journal.Synchronize", vl_method_synchronize, - "io.systemd.Journal.Rotate", vl_method_rotate, - "io.systemd.Journal.FlushToVar", vl_method_flush_to_var, - "io.systemd.Journal.RelinquishVar", vl_method_relinquish_var); + "io.systemd.Journal.Synchronize", vl_method_synchronize, + "io.systemd.Journal.Rotate", vl_method_rotate, + "io.systemd.Journal.FlushToVar", vl_method_flush_to_var, + "io.systemd.Journal.RelinquishVar", vl_method_relinquish_var, + "io.systemd.service.Ping", varlink_method_ping, + "io.systemd.service.SetLogLevel", varlink_method_set_log_level, + "io.systemd.service.GetEnvironment", varlink_method_get_environment); if (r < 0) return r; diff --git a/src/login/logind-varlink.c b/src/login/logind-varlink.c index a8a2542e184..a757033a55f 100644 --- a/src/login/logind-varlink.c +++ b/src/login/logind-varlink.c @@ -10,6 +10,7 @@ #include "terminal-util.h" #include "user-util.h" #include "varlink-io.systemd.Login.h" +#include "varlink-io.systemd.service.h" #include "varlink-util.h" static int manager_varlink_get_session_by_peer( @@ -355,14 +356,20 @@ int manager_varlink_init(Manager *m) { sd_varlink_server_set_userdata(s, m); - r = sd_varlink_server_add_interface(s, &vl_interface_io_systemd_Login); + r = sd_varlink_server_add_interface_many( + s, + &vl_interface_io_systemd_Login, + &vl_interface_io_systemd_service); if (r < 0) return log_error_errno(r, "Failed to add Login interface to varlink server: %m"); r = sd_varlink_server_bind_method_many( s, - "io.systemd.Login.CreateSession", vl_method_create_session, - "io.systemd.Login.ReleaseSession", vl_method_release_session); + "io.systemd.Login.CreateSession", vl_method_create_session, + "io.systemd.Login.ReleaseSession", vl_method_release_session, + "io.systemd.service.Ping", varlink_method_ping, + "io.systemd.service.SetLogLevel", varlink_method_set_log_level, + "io.systemd.service.GetEnvironment", varlink_method_get_environment); if (r < 0) return log_error_errno(r, "Failed to register varlink methods: %m"); diff --git a/src/machine/machined-varlink.c b/src/machine/machined-varlink.c index dc293f58958..5beec14ccd3 100644 --- a/src/machine/machined-varlink.c +++ b/src/machine/machined-varlink.c @@ -17,6 +17,7 @@ #include "varlink-io.systemd.Machine.h" #include "varlink-io.systemd.MachineImage.h" #include "varlink-io.systemd.UserDatabase.h" +#include "varlink-io.systemd.service.h" #include "varlink-util.h" typedef struct LookupParameters { @@ -776,7 +777,8 @@ static int manager_varlink_init_machine(Manager *m) { r = sd_varlink_server_add_interface_many( s, &vl_interface_io_systemd_Machine, - &vl_interface_io_systemd_MachineImage); + &vl_interface_io_systemd_MachineImage, + &vl_interface_io_systemd_service); if (r < 0) return log_error_errno(r, "Failed to add Machine and MachineImage interfaces to varlink server: %m"); @@ -798,7 +800,10 @@ static int manager_varlink_init_machine(Manager *m) { "io.systemd.MachineImage.Update", vl_method_update_image, "io.systemd.MachineImage.Clone", vl_method_clone_image, "io.systemd.MachineImage.Remove", vl_method_remove_image, - "io.systemd.MachineImage.SetPoolLimit", vl_method_set_pool_limit); + "io.systemd.MachineImage.SetPoolLimit", vl_method_set_pool_limit, + "io.systemd.service.Ping", varlink_method_ping, + "io.systemd.service.SetLogLevel", varlink_method_set_log_level, + "io.systemd.service.GetEnvironment", varlink_method_get_environment); if (r < 0) return log_error_errno(r, "Failed to register varlink methods: %m"); diff --git a/src/network/networkd-manager-varlink.c b/src/network/networkd-manager-varlink.c index b2a196c5fc3..6206fb6e448 100644 --- a/src/network/networkd-manager-varlink.c +++ b/src/network/networkd-manager-varlink.c @@ -12,6 +12,7 @@ #include "networkd-manager-varlink.h" #include "stat-util.h" #include "varlink-io.systemd.Network.h" +#include "varlink-io.systemd.service.h" #include "varlink-util.h" static int vl_method_get_states(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) { @@ -269,16 +270,22 @@ int manager_connect_varlink(Manager *m) { (void) sd_varlink_server_set_description(s, "varlink-api-network"); - r = sd_varlink_server_add_interface(s, &vl_interface_io_systemd_Network); + r = sd_varlink_server_add_interface_many( + s, + &vl_interface_io_systemd_Network, + &vl_interface_io_systemd_service); if (r < 0) return log_error_errno(r, "Failed to add Network interface to varlink server: %m"); r = sd_varlink_server_bind_method_many( s, - "io.systemd.Network.GetStates", vl_method_get_states, - "io.systemd.Network.GetNamespaceId", vl_method_get_namespace_id, - "io.systemd.Network.GetLLDPNeighbors", vl_method_get_lldp_neighbors, - "io.systemd.Network.SetPersistentStorage", vl_method_set_persistent_storage); + "io.systemd.Network.GetStates", vl_method_get_states, + "io.systemd.Network.GetNamespaceId", vl_method_get_namespace_id, + "io.systemd.Network.GetLLDPNeighbors", vl_method_get_lldp_neighbors, + "io.systemd.Network.SetPersistentStorage", vl_method_set_persistent_storage, + "io.systemd.service.Ping", varlink_method_ping, + "io.systemd.service.SetLogLevel", varlink_method_set_log_level, + "io.systemd.service.GetEnvironment", varlink_method_get_environment); if (r < 0) return log_error_errno(r, "Failed to register varlink methods: %m"); diff --git a/src/oom/oomd-manager.c b/src/oom/oomd-manager.c index ce3674365a3..352d558281c 100644 --- a/src/oom/oomd-manager.c +++ b/src/oom/oomd-manager.c @@ -20,6 +20,7 @@ #include "path-util.h" #include "percent-util.h" #include "varlink-io.systemd.oom.h" +#include "varlink-io.systemd.service.h" #include "varlink-util.h" typedef struct ManagedOOMMessage { @@ -746,13 +747,21 @@ static int manager_varlink_init(Manager *m, int fd) { if (r < 0) return log_error_errno(r, "Failed to allocate varlink server object: %m"); - r = sd_varlink_server_add_interface(s, &vl_interface_io_systemd_oom); + r = sd_varlink_server_add_interface_many( + s, + &vl_interface_io_systemd_oom, + &vl_interface_io_systemd_service); if (r < 0) - return log_error_errno(r, "Failed to add oom interface to varlink server: %m"); + return log_error_errno(r, "Failed to add Varlink interfaces to varlink server: %m"); - r = sd_varlink_server_bind_method(s, "io.systemd.oom.ReportManagedOOMCGroups", process_managed_oom_request); + r = sd_varlink_server_bind_method_many( + s, + "io.systemd.oom.ReportManagedOOMCGroups", process_managed_oom_request, + "io.systemd.service.Ping", varlink_method_ping, + "io.systemd.service.SetLogLevel", varlink_method_set_log_level, + "io.systemd.service.GetEnvironment", varlink_method_get_environment); if (r < 0) - return log_error_errno(r, "Failed to register varlink method: %m"); + return log_error_errno(r, "Failed to register varlink methods: %m"); if (fd < 0) r = sd_varlink_server_listen_address(s, VARLINK_ADDR_PATH_MANAGED_OOM_USER, 0666); diff --git a/src/resolve/resolved-varlink.c b/src/resolve/resolved-varlink.c index 107f722e7d8..c30a2a3feac 100644 --- a/src/resolve/resolved-varlink.c +++ b/src/resolve/resolved-varlink.c @@ -9,6 +9,7 @@ #include "socket-netlink.h" #include "varlink-io.systemd.Resolve.h" #include "varlink-io.systemd.Resolve.Monitor.h" +#include "varlink-io.systemd.service.h" #include "varlink-util.h" typedef struct LookupParameters { @@ -1410,7 +1411,10 @@ static int varlink_main_server_init(Manager *m) { if (r < 0) return log_error_errno(r, "Failed to allocate varlink server object: %m"); - r = sd_varlink_server_add_interface(s, &vl_interface_io_systemd_Resolve); + r = sd_varlink_server_add_interface_many( + s, + &vl_interface_io_systemd_Resolve, + &vl_interface_io_systemd_service); if (r < 0) return log_error_errno(r, "Failed to add Resolve interface to varlink server: %m"); @@ -1419,7 +1423,10 @@ static int varlink_main_server_init(Manager *m) { "io.systemd.Resolve.ResolveHostname", vl_method_resolve_hostname, "io.systemd.Resolve.ResolveAddress", vl_method_resolve_address, "io.systemd.Resolve.ResolveService", vl_method_resolve_service, - "io.systemd.Resolve.ResolveRecord", vl_method_resolve_record); + "io.systemd.Resolve.ResolveRecord", vl_method_resolve_record, + "io.systemd.service.Ping", varlink_method_ping, + "io.systemd.service.SetLogLevel", varlink_method_set_log_level, + "io.systemd.service.GetEnvironment", varlink_method_get_environment); if (r < 0) return log_error_errno(r, "Failed to register varlink methods: %m");