src/network/bridge_driver: convert to use GLib DBus

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Pavel Hrdina 2020-09-09 16:43:32 +02:00
parent bf50ada8c1
commit 0887a7afc5
2 changed files with 39 additions and 44 deletions

View File

@ -59,7 +59,7 @@
#include "virnetdevtap.h" #include "virnetdevtap.h"
#include "virnetdevvportprofile.h" #include "virnetdevvportprofile.h"
#include "virpci.h" #include "virpci.h"
#include "virdbus.h" #include "virgdbus.h"
#include "virfile.h" #include "virfile.h"
#include "virstring.h" #include "virstring.h"
#include "viraccessapicheck.h" #include "viraccessapicheck.h"
@ -638,33 +638,29 @@ networkAutostartConfig(virNetworkObjPtr obj,
#ifdef WITH_FIREWALLD #ifdef WITH_FIREWALLD
static DBusHandlerResult static void
firewalld_dbus_filter_bridge(DBusConnection *connection G_GNUC_UNUSED, firewalld_dbus_signal_callback(GDBusConnection *connection G_GNUC_UNUSED,
DBusMessage *message, const char *senderName G_GNUC_UNUSED,
void *user_data) const char *objectPath G_GNUC_UNUSED,
const char *interfaceName,
const char *signalName,
GVariant *parameters,
gpointer user_data)
{ {
virNetworkDriverStatePtr driver = user_data; virNetworkDriverStatePtr driver = user_data;
bool reload = false; bool reload = false;
if (dbus_message_is_signal(message, if (STREQ(interfaceName, "org.fedoraproject.FirewallD1") &&
"org.fedoraproject.FirewallD1", "Reloaded")) { STREQ(signalName, "Reloaded")) {
reload = true; reload = true;
} else if (STREQ(interfaceName, "org.freedesktop.DBus") &&
STREQ(signalName, "NameOwnerChanged")) {
char *name = NULL;
char *old_owner = NULL;
char *new_owner = NULL;
} else if (dbus_message_is_signal(message, g_variant_get(parameters, "(&s&s&s)", &name, &old_owner, &new_owner);
DBUS_INTERFACE_DBUS, "NameOwnerChanged")) {
g_autofree char *name = NULL;
g_autofree char *old_owner = NULL;
g_autofree char *new_owner = NULL;
if (virDBusMessageDecode(message, "sss", &name, &old_owner, &new_owner) < 0) {
VIR_WARN("Failed to decode DBus NameOwnerChanged message");
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
/*
* if new_owner is empty, firewalld is shutting down. If it is
* non-empty, then it is starting
*/
if (new_owner && *new_owner) if (new_owner && *new_owner)
reload = true; reload = true;
} }
@ -673,8 +669,6 @@ firewalld_dbus_filter_bridge(DBusConnection *connection G_GNUC_UNUSED,
VIR_DEBUG("Reload in bridge_driver because of firewalld."); VIR_DEBUG("Reload in bridge_driver because of firewalld.");
networkReloadFirewallRules(driver, false, true); networkReloadFirewallRules(driver, false, true);
} }
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
} }
#endif #endif
@ -694,7 +688,7 @@ networkStateInitialize(bool privileged,
g_autofree char *rundir = NULL; g_autofree char *rundir = NULL;
bool autostart = true; bool autostart = true;
#ifdef WITH_FIREWALLD #ifdef WITH_FIREWALLD
DBusConnection *sysbus = NULL; GDBusConnection *sysbus = NULL;
#endif #endif
if (root != NULL) { if (root != NULL) {
@ -793,27 +787,30 @@ networkStateInitialize(bool privileged,
network_driver->networkEventState = virObjectEventStateNew(); network_driver->networkEventState = virObjectEventStateNew();
#ifdef WITH_FIREWALLD #ifdef WITH_FIREWALLD
if (!(sysbus = virDBusGetSystemBus())) { if (!(sysbus = virGDBusGetSystemBus())) {
VIR_WARN("DBus not available, disabling firewalld support " VIR_WARN("DBus not available, disabling firewalld support "
"in bridge_network_driver: %s", virGetLastErrorMessage()); "in bridge_network_driver: %s", virGetLastErrorMessage());
} else { } else {
/* add matches for g_dbus_connection_signal_subscribe(sysbus,
* NameOwnerChanged on org.freedesktop.DBus for firewalld start/stop NULL,
* Reloaded on org.fedoraproject.FirewallD1 for firewalld reload "org.freedesktop.DBus",
*/ "NameOwnerChanged",
dbus_bus_add_match(sysbus, NULL,
"type='signal'" "org.fedoraproject.FirewallD1",
",interface='"DBUS_INTERFACE_DBUS"'" G_DBUS_SIGNAL_FLAGS_NONE,
",member='NameOwnerChanged'" firewalld_dbus_signal_callback,
",arg0='org.fedoraproject.FirewallD1'", network_driver,
NULL); NULL);
dbus_bus_add_match(sysbus, g_dbus_connection_signal_subscribe(sysbus,
"type='signal'" NULL,
",interface='org.fedoraproject.FirewallD1'" "org.fedoraproject.FirewallD1",
",member='Reloaded'", "Reloaded",
NULL,
NULL,
G_DBUS_SIGNAL_FLAGS_NONE,
firewalld_dbus_signal_callback,
network_driver,
NULL); NULL);
dbus_connection_add_filter(sysbus, firewalld_dbus_filter_bridge,
network_driver, NULL);
} }
#endif #endif

View File

@ -18,7 +18,6 @@ if conf.has('WITH_NETWORK')
], ],
dependencies: [ dependencies: [
access_dep, access_dep,
dbus_dep,
libnl_dep, libnl_dep,
src_dep, src_dep,
], ],
@ -30,7 +29,6 @@ if conf.has('WITH_NETWORK')
virt_modules += { virt_modules += {
'name': 'virt_driver_network', 'name': 'virt_driver_network',
'deps': [ 'deps': [
dbus_dep,
libnl_dep, libnl_dep,
], ],
'link_whole': [ 'link_whole': [