From: Yu Watanabe Date: Thu, 18 Nov 2021 21:49:25 +0000 (+0900) Subject: network: use BusObjectImplementation X-Git-Tag: v250-rc1~208^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6e194652b8a2843883e717319ead18b0b98ec65e;p=thirdparty%2Fsystemd.git network: use BusObjectImplementation --- diff --git a/src/network/networkd-dhcp-server-bus.c b/src/network/networkd-dhcp-server-bus.c index 81f4a6706bb..cc132da8b76 100644 --- a/src/network/networkd-dhcp-server-bus.c +++ b/src/network/networkd-dhcp-server-bus.c @@ -1,7 +1,5 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ -#include "sd-dhcp-server.h" - #include "alloc-util.h" #include "bus-common-errors.h" #include "bus-util.h" @@ -106,11 +104,17 @@ void dhcp_server_callback(sd_dhcp_server *s, uint64_t event, void *data) { (void) dhcp_server_emit_changed(l, "Leases", NULL); } - -const sd_bus_vtable dhcp_server_vtable[] = { +static const sd_bus_vtable dhcp_server_vtable[] = { SD_BUS_VTABLE_START(0), SD_BUS_PROPERTY("Leases", "a(uayayayayt)", property_get_leases, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), SD_BUS_VTABLE_END }; + +const BusObjectImplementation dhcp_server_object = { + "/org/freedesktop/network1/link", + "org.freedesktop.network1.DHCPServer", + .fallback_vtables = BUS_FALLBACK_VTABLES({dhcp_server_vtable, link_object_find}), + .node_enumerator = link_node_enumerator, +}; diff --git a/src/network/networkd-dhcp-server-bus.h b/src/network/networkd-dhcp-server-bus.h index 71914782002..f52be8253e1 100644 --- a/src/network/networkd-dhcp-server-bus.h +++ b/src/network/networkd-dhcp-server-bus.h @@ -2,8 +2,10 @@ #pragma once #include "sd-bus.h" -#include "networkd-link.h" +#include "sd-dhcp-server.h" -extern const sd_bus_vtable dhcp_server_vtable[]; +#include "bus-object.h" + +extern const BusObjectImplementation dhcp_server_object; void dhcp_server_callback(sd_dhcp_server *server, uint64_t event, void *data); diff --git a/src/network/networkd-link-bus.c b/src/network/networkd-link-bus.c index f4e35565174..47e0d40d576 100644 --- a/src/network/networkd-link-bus.c +++ b/src/network/networkd-link-bus.c @@ -709,7 +709,7 @@ int bus_link_method_describe(sd_bus_message *message, void *userdata, sd_bus_err return sd_bus_send(NULL, reply, NULL); } -const sd_bus_vtable link_vtable[] = { +static const sd_bus_vtable link_vtable[] = { SD_BUS_VTABLE_START(0), SD_BUS_PROPERTY("OperationalState", "s", property_get_operational_state, offsetof(Link, operstate), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), @@ -914,3 +914,10 @@ int link_send_changed(Link *link, const char *property, ...) { return link_send_changed_strv(link, properties); } + +const BusObjectImplementation link_object = { + "/org/freedesktop/network1/link", + "org.freedesktop.network1.Link", + .fallback_vtables = BUS_FALLBACK_VTABLES({link_vtable, link_object_find}), + .node_enumerator = link_node_enumerator, +}; diff --git a/src/network/networkd-link-bus.h b/src/network/networkd-link-bus.h index e8fa84b4e52..924d9976b5a 100644 --- a/src/network/networkd-link-bus.h +++ b/src/network/networkd-link-bus.h @@ -3,11 +3,12 @@ #include "sd-bus.h" +#include "bus-object.h" #include "macro.h" typedef struct Link Link; -extern const sd_bus_vtable link_vtable[]; +extern const BusObjectImplementation link_object; char *link_bus_path(Link *link); int link_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error); diff --git a/src/network/networkd-manager-bus.c b/src/network/networkd-manager-bus.c index 8a5ad8eac3e..4c517d829aa 100644 --- a/src/network/networkd-manager-bus.c +++ b/src/network/networkd-manager-bus.c @@ -8,11 +8,13 @@ #include "bus-common-errors.h" #include "bus-message-util.h" #include "bus-polkit.h" +#include "networkd-dhcp-server-bus.h" #include "networkd-json.h" #include "networkd-link-bus.h" #include "networkd-link.h" #include "networkd-manager-bus.h" #include "networkd-manager.h" +#include "networkd-network-bus.h" #include "path-util.h" #include "strv.h" #include "user-util.h" @@ -285,7 +287,7 @@ static int property_get_namespace_id( return sd_bus_message_append(reply, "t", id); } -const sd_bus_vtable manager_vtable[] = { +static const sd_bus_vtable manager_vtable[] = { SD_BUS_VTABLE_START(0), SD_BUS_PROPERTY("OperationalState", "s", property_get_operational_state, offsetof(Manager, operational_state), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), @@ -418,3 +420,10 @@ int manager_send_changed_strv(Manager *manager, char **properties) { "org.freedesktop.network1.Manager", properties); } + +const BusObjectImplementation manager_object = { + "/org/freedesktop/network1", + "org.freedesktop.network1.Manager", + .vtables = BUS_VTABLES(manager_vtable), + .children = BUS_IMPLEMENTATIONS(&dhcp_server_object, &link_object, &network_object), +}; diff --git a/src/network/networkd-manager-bus.h b/src/network/networkd-manager-bus.h index 08ddfbdb73b..5cd7f16761e 100644 --- a/src/network/networkd-manager-bus.h +++ b/src/network/networkd-manager-bus.h @@ -3,8 +3,10 @@ #include "sd-bus.h" +#include "bus-object.h" + typedef struct Manager Manager; -extern const sd_bus_vtable manager_vtable[]; +extern const BusObjectImplementation manager_object; int manager_send_changed_strv(Manager *m, char **properties); diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index e25092058b7..2141e206224 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -123,29 +123,9 @@ static int manager_connect_bus(Manager *m) { if (r < 0) return log_error_errno(r, "Failed to connect to bus: %m"); - r = sd_bus_add_object_vtable(m->bus, NULL, "/org/freedesktop/network1", "org.freedesktop.network1.Manager", manager_vtable, m); + r = bus_add_implementation(m->bus, &manager_object, m); if (r < 0) - return log_error_errno(r, "Failed to add manager object vtable: %m"); - - r = sd_bus_add_fallback_vtable(m->bus, NULL, "/org/freedesktop/network1/link", "org.freedesktop.network1.Link", link_vtable, link_object_find, m); - if (r < 0) - return log_error_errno(r, "Failed to add link object vtable: %m"); - - r = sd_bus_add_fallback_vtable(m->bus, NULL, "/org/freedesktop/network1/link", "org.freedesktop.network1.DHCPServer", dhcp_server_vtable, link_object_find, m); - if (r < 0) - return log_error_errno(r, "Failed to add link object vtable: %m"); - - r = sd_bus_add_node_enumerator(m->bus, NULL, "/org/freedesktop/network1/link", link_node_enumerator, m); - if (r < 0) - return log_error_errno(r, "Failed to add link enumerator: %m"); - - r = sd_bus_add_fallback_vtable(m->bus, NULL, "/org/freedesktop/network1/network", "org.freedesktop.network1.Network", network_vtable, network_object_find, m); - if (r < 0) - return log_error_errno(r, "Failed to add network object vtable: %m"); - - r = sd_bus_add_node_enumerator(m->bus, NULL, "/org/freedesktop/network1/network", network_node_enumerator, m); - if (r < 0) - return log_error_errno(r, "Failed to add network enumerator: %m"); + return r; r = bus_log_control_api_register(m->bus); if (r < 0) diff --git a/src/network/networkd-network-bus.c b/src/network/networkd-network-bus.c index e265277f603..4f141c3c296 100644 --- a/src/network/networkd-network-bus.c +++ b/src/network/networkd-network-bus.c @@ -39,7 +39,7 @@ static int property_get_ether_addrs( return sd_bus_message_close_container(reply); } -const sd_bus_vtable network_vtable[] = { +static const sd_bus_vtable network_vtable[] = { SD_BUS_VTABLE_START(0), SD_BUS_PROPERTY("Description", "s", NULL, offsetof(Network, description), SD_BUS_VTABLE_PROPERTY_CONST), @@ -134,3 +134,10 @@ int network_object_find(sd_bus *bus, const char *path, const char *interface, vo return 1; } + +const BusObjectImplementation network_object = { + "/org/freedesktop/network1/network", + "org.freedesktop.network1.Network", + .fallback_vtables = BUS_FALLBACK_VTABLES({network_vtable, network_object_find}), + .node_enumerator = network_node_enumerator, +}; diff --git a/src/network/networkd-network-bus.h b/src/network/networkd-network-bus.h index cca1e0af33f..68ed951425b 100644 --- a/src/network/networkd-network-bus.h +++ b/src/network/networkd-network-bus.h @@ -3,9 +3,11 @@ #include "sd-bus.h" +#include "bus-object.h" + typedef struct Link Link; -extern const sd_bus_vtable network_vtable[]; +extern const BusObjectImplementation network_object; int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error); int network_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);