summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMario Sanchez Prada <mario@endlessm.com>2016-07-20 16:21:12 +0100
committerBeniamino Galvani <bgalvani@redhat.com>2016-07-28 22:22:14 +0200
commitdfd9d85bebc11bd8719ca60447c01bc3ea52769e (patch)
tree3c82cfd20c105c0dbd4b753030ab02f702ec6147
parent283562ef18cbc2d62a567656e8fc0bc3fb5d433d (diff)
downloadNetworkManager-dfd9d85bebc11bd8719ca60447c01bc3ea52769e.tar.gz
nm-dispatcher: Added new 'connectivity-state' parameter to private D-Bus API
In order to pass the connectivity state to the relevant hooks along with the event itself, we need to add this parameter for the 'Action' method of then internal 'org.freedesktop.nm_dispatcher' interface, which will be sent by the network manager main process to the dispatcher. https://bugzilla.gnome.org/show_bug.cgi?id=768969
-rw-r--r--callouts/nm-dispatcher.c2
-rw-r--r--callouts/nm-dispatcher.xml2
-rw-r--r--src/nm-connectivity.c2
-rw-r--r--src/nm-dispatcher.c32
-rw-r--r--src/nm-dispatcher.h3
5 files changed, 28 insertions, 13 deletions
diff --git a/callouts/nm-dispatcher.c b/callouts/nm-dispatcher.c
index 7ddffb0493..282b7ae691 100644
--- a/callouts/nm-dispatcher.c
+++ b/callouts/nm-dispatcher.c
@@ -80,6 +80,7 @@ handle_action (NMDBusDispatcher *dbus_dispatcher,
GVariant *device_ip6_props,
GVariant *device_dhcp4_props,
GVariant *device_dhcp6_props,
+ const char *connectivity_state,
const char *vpn_ip_iface,
GVariant *vpn_ip4_props,
GVariant *vpn_ip6_props,
@@ -668,6 +669,7 @@ handle_action (NMDBusDispatcher *dbus_dispatcher,
GVariant *device_ip6_props,
GVariant *device_dhcp4_props,
GVariant *device_dhcp6_props,
+ const char *connectivity_state,
const char *vpn_ip_iface,
GVariant *vpn_ip4_props,
GVariant *vpn_ip6_props,
diff --git a/callouts/nm-dispatcher.xml b/callouts/nm-dispatcher.xml
index 27f15fe5b9..6268f970b5 100644
--- a/callouts/nm-dispatcher.xml
+++ b/callouts/nm-dispatcher.xml
@@ -13,6 +13,7 @@
@device_ip6_config: Properties of the device's IPv6 configuration.
@device_dhcp4_config: Properties of the device's DHCPv4 configuration.
@device_dhcp6_config: Properties of the device's DHCPv6 configuration.
+ @connectivity_state: Current connectivity state: unknown, none, limited, portal or full.
@vpn_ip_iface: VPN interface name.
@vpn_ip4_config: Properties of the VPN's IPv4 configuration.
@vpn_ip6_config: Properties of the VPN's IPv6 configuration.
@@ -30,6 +31,7 @@
<arg name="device_ip6_config" type="a{sv}" direction="in"/>
<arg name="device_dhcp4_config" type="a{sv}" direction="in"/>
<arg name="device_dhcp6_config" type="a{sv}" direction="in"/>
+ <arg name="connectivity_state" type="s" direction="in"/>
<arg name="vpn_ip_iface" type="s" direction="in"/>
<arg name="vpn_ip4_config" type="a{sv}" direction="in"/>
<arg name="vpn_ip6_config" type="a{sv}" direction="in"/>
diff --git a/src/nm-connectivity.c b/src/nm-connectivity.c
index 2b8b170a51..7cf3e70797 100644
--- a/src/nm-connectivity.c
+++ b/src/nm-connectivity.c
@@ -99,7 +99,7 @@ update_state (NMConnectivity *self, NMConnectivityState state)
g_object_notify (G_OBJECT (self), NM_CONNECTIVITY_STATE);
/* Notify dispatcher scripts of a connectivity state change */
- nm_dispatcher_call_connectivity (DISPATCHER_ACTION_CONNECTIVITY_CHANGE);
+ nm_dispatcher_call_connectivity (DISPATCHER_ACTION_CONNECTIVITY_CHANGE, state);
}
}
diff --git a/src/nm-dispatcher.c b/src/nm-dispatcher.c
index c8193c33ff..df9be2e711 100644
--- a/src/nm-dispatcher.c
+++ b/src/nm-dispatcher.c
@@ -28,11 +28,13 @@
#include "nm-dispatcher-api.h"
#include "NetworkManagerUtils.h"
#include "nm-utils.h"
+#include "nm-connectivity.h"
#include "nm-device.h"
#include "nm-dhcp4-config.h"
#include "nm-dhcp6-config.h"
#include "nm-ip4-config.h"
#include "nm-ip6-config.h"
+#include "nm-manager.h"
#include "nm-settings-connection.h"
#include "nm-platform.h"
#include "nm-core-internal.h"
@@ -450,6 +452,7 @@ _dispatcher_call (DispatcherAction action,
NMSettingsConnection *settings_connection,
NMConnection *applied_connection,
NMDevice *device,
+ NMConnectivityState connectivity_state,
const char *vpn_iface,
NMIP4Config *vpn_ip4_config,
NMIP6Config *vpn_ip6_config,
@@ -581,7 +584,7 @@ _dispatcher_call (DispatcherAction action,
GVariantIter *results;
ret = _nm_dbus_proxy_call_sync (dispatcher_proxy, "Action",
- g_variant_new ("(s@a{sa{sv}}a{sv}a{sv}a{sv}a{sv}@a{sv}@a{sv}sa{sv}a{sv}b)",
+ g_variant_new ("(s@a{sa{sv}}a{sv}a{sv}a{sv}a{sv}@a{sv}@a{sv}ssa{sv}a{sv}b)",
action_to_string (action),
connection_dict,
&connection_props,
@@ -590,6 +593,7 @@ _dispatcher_call (DispatcherAction action,
&device_ip6_props,
device_dhcp4_props,
device_dhcp6_props,
+ nm_connectivity_state_to_string (connectivity_state),
vpn_iface ? vpn_iface : "",
&vpn_ip4_props,
&vpn_ip6_props,
@@ -616,7 +620,7 @@ _dispatcher_call (DispatcherAction action,
info->callback = callback;
info->user_data = user_data;
g_dbus_proxy_call (dispatcher_proxy, "Action",
- g_variant_new ("(s@a{sa{sv}}a{sv}a{sv}a{sv}a{sv}@a{sv}@a{sv}sa{sv}a{sv}b)",
+ g_variant_new ("(s@a{sa{sv}}a{sv}a{sv}a{sv}a{sv}@a{sv}@a{sv}ssa{sv}a{sv}b)",
action_to_string (action),
connection_dict,
&connection_props,
@@ -625,6 +629,7 @@ _dispatcher_call (DispatcherAction action,
&device_ip6_props,
device_dhcp4_props,
device_dhcp6_props,
+ nm_connectivity_state_to_string (connectivity_state),
vpn_iface ? vpn_iface : "",
&vpn_ip4_props,
&vpn_ip6_props,
@@ -674,8 +679,9 @@ nm_dispatcher_call (DispatcherAction action,
gpointer user_data,
guint *out_call_id)
{
- return _dispatcher_call (action, FALSE, settings_connection, applied_connection, device, NULL, NULL,
- NULL, callback, user_data, out_call_id);
+ return _dispatcher_call (action, FALSE, settings_connection, applied_connection, device,
+ NM_CONNECTIVITY_UNKNOWN, NULL, NULL, NULL,
+ callback, user_data, out_call_id);
}
/**
@@ -696,8 +702,8 @@ nm_dispatcher_call_sync (DispatcherAction action,
NMConnection *applied_connection,
NMDevice *device)
{
- return _dispatcher_call (action, TRUE, settings_connection, applied_connection, device, NULL, NULL,
- NULL, NULL, NULL, NULL);
+ return _dispatcher_call (action, TRUE, settings_connection, applied_connection, device,
+ NM_CONNECTIVITY_UNKNOWN, NULL, NULL, NULL, NULL, NULL, NULL);
}
/**
@@ -731,8 +737,9 @@ nm_dispatcher_call_vpn (DispatcherAction action,
gpointer user_data,
guint *out_call_id)
{
- return _dispatcher_call (action, FALSE, settings_connection, applied_connection, parent_device, vpn_iface,
- vpn_ip4_config, vpn_ip6_config, callback, user_data, out_call_id);
+ return _dispatcher_call (action, FALSE, settings_connection, applied_connection,
+ parent_device, NM_CONNECTIVITY_UNKNOWN, vpn_iface, vpn_ip4_config,
+ vpn_ip6_config, callback, user_data, out_call_id);
}
/**
@@ -759,22 +766,25 @@ nm_dispatcher_call_vpn_sync (DispatcherAction action,
NMIP4Config *vpn_ip4_config,
NMIP6Config *vpn_ip6_config)
{
- return _dispatcher_call (action, TRUE, settings_connection, applied_connection, parent_device, vpn_iface,
+ return _dispatcher_call (action, TRUE, settings_connection, applied_connection,
+ parent_device, NM_CONNECTIVITY_UNKNOWN, vpn_iface,
vpn_ip4_config, vpn_ip6_config, NULL, NULL, NULL);
}
/**
* nm_dispatcher_call_connectivity():
* @action: the %DispatcherAction
+ * @connectivity_state: the #NMConnectivityState value
*
* This method does not block the caller.
*
* Returns: %TRUE if the action was dispatched, %FALSE on failure
*/
gboolean
-nm_dispatcher_call_connectivity (DispatcherAction action)
+nm_dispatcher_call_connectivity (DispatcherAction action,
+ NMConnectivityState connectivity_state)
{
- return _dispatcher_call (action, FALSE, NULL, NULL, NULL,
+ return _dispatcher_call (action, FALSE, NULL, NULL, NULL, connectivity_state,
NULL, NULL, NULL, NULL, NULL, NULL);
}
diff --git a/src/nm-dispatcher.h b/src/nm-dispatcher.h
index 72c7e6e815..47cb64816b 100644
--- a/src/nm-dispatcher.h
+++ b/src/nm-dispatcher.h
@@ -76,7 +76,8 @@ gboolean nm_dispatcher_call_vpn_sync (DispatcherAction action,
NMIP4Config *vpn_ip4_config,
NMIP6Config *vpn_ip6_config);
-gboolean nm_dispatcher_call_connectivity (DispatcherAction action);
+gboolean nm_dispatcher_call_connectivity (DispatcherAction action,
+ NMConnectivityState state);
void nm_dispatcher_call_cancel (guint call_id);