X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkd-manager.c;h=0e204ebae6558ce1cd943ff46f9b7c50a7c148e5;hb=cdfee94318506c9348f8c30b9b7a7c87ec75927c;hp=e2c8a23e0f2d75d58b2bf1d4d75531e9c06e021c;hpb=dbffab87f1504abc9f189dd253111693c99fbd9a;p=elogind.git diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index e2c8a23e0..0e204ebae 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -27,13 +27,11 @@ #include "networkd.h" #include "networkd-netdev.h" #include "networkd-link.h" -#include "network-internal.h" #include "libudev-private.h" #include "udev-util.h" #include "rtnl-util.h" #include "bus-util.h" #include "def.h" -#include "mkdir.h" #include "virt.h" #include "sd-rtnl.h" @@ -174,6 +172,14 @@ int manager_connect_bus(Manager *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"); + r = sd_bus_request_name(m->bus, "org.freedesktop.network1", 0); if (r < 0) return log_error_errno(r, "Failed to register name: %m"); @@ -293,11 +299,14 @@ static int manager_rtnl_process_link(sd_rtnl *rtnl, sd_rtnl_message *message, vo if (r < 0) { log_warning_errno(r, "rtnl: could not get message type: %m"); return 0; + } else if (type != RTM_NEWLINK && type != RTM_DELLINK) { + log_warning("rtnl: received unexpected message type when processing link"); + return 0; } r = sd_rtnl_message_link_get_ifindex(message, &ifindex); if (r < 0) { - log_warning_errno(r, "rtnl: could not get ifindex: %m"); + log_warning_errno(r, "rtnl: could not get ifindex from link: %m"); return 0; } else if (ifindex <= 0) { log_warning("rtnl: received link message with invalid ifindex: %d", ifindex); @@ -526,13 +535,18 @@ static bool manager_check_idle(void *userdata) { int manager_run(Manager *m) { assert(m); - return bus_event_loop_with_idle( - m->event, - m->bus, - "org.freedesktop.network1", - DEFAULT_EXIT_USEC, - manager_check_idle, - m); + if (m->bus) + return bus_event_loop_with_idle( + m->event, + m->bus, + "org.freedesktop.network1", + DEFAULT_EXIT_USEC, + manager_check_idle, + m); + else + /* failed to connect to the bus, so we lose exit-on-idle logic, + this should not happen except if dbus is not around at all */ + return sd_event_loop(m->event); } int manager_load_config(Manager *m) {