/* 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"
(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,
+};
#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);
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),
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,
+};
#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);
#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"
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),
"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),
+};
#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);
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)
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),
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,
+};
#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);