mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2025-12-30 06:10:11 +01:00
devices/wifi: flip meaning of scanning allowed signal
Change it to return TRUE when scanning is prohibited so that we don't have to use use g_signal_emitv() and its special handling of return values. Make the return value only change when we don't want the default behavior (which would be to allow the scan). Also add a parameter to the signal indicating whether the scan is user/dbus-requested or whether it's an internal periodic scan.
This commit is contained in:
parent
121a6bb638
commit
631ca80692
3 changed files with 45 additions and 65 deletions
|
|
@ -312,13 +312,13 @@ companion_state_changed_cb (NMDeviceWifi *companion,
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
companion_scan_allowed_cb (NMDeviceWifi *companion, gpointer user_data)
|
companion_scan_prohibited_cb (NMDeviceWifi *companion, gpointer user_data)
|
||||||
{
|
{
|
||||||
NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (user_data);
|
NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (user_data);
|
||||||
NMDeviceState state = nm_device_get_state (NM_DEVICE (self));
|
NMDeviceState state = nm_device_get_state (NM_DEVICE (self));
|
||||||
|
|
||||||
/* Don't allow the companion to scan while configuring the mesh interface */
|
/* Don't allow the companion to scan while configuring the mesh interface */
|
||||||
return (state < NM_DEVICE_STATE_PREPARE) || (state > NM_DEVICE_STATE_IP_CONFIG);
|
return (state >= NM_DEVICE_STATE_PREPARE) && (state <= NM_DEVICE_STATE_IP_CONFIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|
@ -358,8 +358,8 @@ check_companion (NMDeviceOlpcMesh *self, NMDevice *other)
|
||||||
g_signal_connect (G_OBJECT (other), "notify::" NM_DEVICE_WIFI_SCANNING,
|
g_signal_connect (G_OBJECT (other), "notify::" NM_DEVICE_WIFI_SCANNING,
|
||||||
G_CALLBACK (companion_notify_cb), self);
|
G_CALLBACK (companion_notify_cb), self);
|
||||||
|
|
||||||
g_signal_connect (G_OBJECT (other), NM_DEVICE_WIFI_SCANNING_ALLOWED,
|
g_signal_connect (G_OBJECT (other), NM_DEVICE_WIFI_SCANNING_PROHIBITED,
|
||||||
G_CALLBACK (companion_scan_allowed_cb), self);
|
G_CALLBACK (companion_scan_prohibited_cb), self);
|
||||||
|
|
||||||
g_signal_connect (G_OBJECT (other), NM_DEVICE_AUTOCONNECT_ALLOWED,
|
g_signal_connect (G_OBJECT (other), NM_DEVICE_AUTOCONNECT_ALLOWED,
|
||||||
G_CALLBACK (companion_autoconnect_allowed_cb), self);
|
G_CALLBACK (companion_autoconnect_allowed_cb), self);
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,7 @@ NM_GOBJECT_PROPERTIES_DEFINE (NMDeviceWifi,
|
||||||
enum {
|
enum {
|
||||||
ACCESS_POINT_ADDED,
|
ACCESS_POINT_ADDED,
|
||||||
ACCESS_POINT_REMOVED,
|
ACCESS_POINT_REMOVED,
|
||||||
SCANNING_ALLOWED,
|
SCANNING_PROHIBITED,
|
||||||
|
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
|
|
@ -134,7 +134,7 @@ struct _NMDeviceWifiClass
|
||||||
NMDeviceClass parent;
|
NMDeviceClass parent;
|
||||||
|
|
||||||
/* Signals */
|
/* Signals */
|
||||||
gboolean (*scanning_allowed) (NMDeviceWifi *device);
|
gboolean (*scanning_prohibited) (NMDeviceWifi *device, gboolean periodic);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
@ -145,7 +145,7 @@ G_DEFINE_TYPE (NMDeviceWifi, nm_device_wifi, NM_TYPE_DEVICE)
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static gboolean check_scanning_allowed (NMDeviceWifi *self);
|
static gboolean check_scanning_prohibited (NMDeviceWifi *self, gboolean periodic);
|
||||||
|
|
||||||
static void schedule_scan (NMDeviceWifi *self, gboolean backoff);
|
static void schedule_scan (NMDeviceWifi *self, gboolean backoff);
|
||||||
|
|
||||||
|
|
@ -183,7 +183,7 @@ static void supplicant_iface_notify_current_bss (NMSupplicantInterface *iface,
|
||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
NMDeviceWifi *self);
|
NMDeviceWifi *self);
|
||||||
|
|
||||||
static void request_wireless_scan (NMDeviceWifi *self, gboolean force_if_scanning, GVariant *scan_options);
|
static void request_wireless_scan (NMDeviceWifi *self, gboolean periodic, gboolean force_if_scanning, GVariant *scan_options);
|
||||||
|
|
||||||
static void ap_add_remove (NMDeviceWifi *self,
|
static void ap_add_remove (NMDeviceWifi *self,
|
||||||
guint signum,
|
guint signum,
|
||||||
|
|
@ -569,7 +569,7 @@ deactivate (NMDevice *device)
|
||||||
|
|
||||||
/* Ensure we trigger a scan after deactivating a Hotspot */
|
/* Ensure we trigger a scan after deactivating a Hotspot */
|
||||||
if (old_mode == NM_802_11_MODE_AP)
|
if (old_mode == NM_802_11_MODE_AP)
|
||||||
request_wireless_scan (self, FALSE, NULL);
|
request_wireless_scan (self, FALSE, FALSE, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -1193,11 +1193,11 @@ _hw_addr_set_scanning (NMDeviceWifi *self, gboolean do_reset)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
request_scan_cb (NMDevice *device,
|
dbus_request_scan_cb (NMDevice *device,
|
||||||
GDBusMethodInvocation *context,
|
GDBusMethodInvocation *context,
|
||||||
NMAuthSubject *subject,
|
NMAuthSubject *subject,
|
||||||
GError *error,
|
GError *error,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
NMDeviceWifi *self = NM_DEVICE_WIFI (device);
|
NMDeviceWifi *self = NM_DEVICE_WIFI (device);
|
||||||
NMDeviceWifiPrivate *priv;
|
NMDeviceWifiPrivate *priv;
|
||||||
|
|
@ -1208,7 +1208,7 @@ request_scan_cb (NMDevice *device,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!check_scanning_allowed (self)) {
|
if (check_scanning_prohibited (self, FALSE)) {
|
||||||
g_dbus_method_invocation_return_error_literal (context,
|
g_dbus_method_invocation_return_error_literal (context,
|
||||||
NM_DEVICE_ERROR,
|
NM_DEVICE_ERROR,
|
||||||
NM_DEVICE_ERROR_NOT_ALLOWED,
|
NM_DEVICE_ERROR_NOT_ALLOWED,
|
||||||
|
|
@ -1218,7 +1218,7 @@ request_scan_cb (NMDevice *device,
|
||||||
|
|
||||||
priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
|
priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
|
||||||
|
|
||||||
request_wireless_scan (self, FALSE, new_scan_options);
|
request_wireless_scan (self, FALSE, FALSE, new_scan_options);
|
||||||
g_dbus_method_invocation_return_value (context, NULL);
|
g_dbus_method_invocation_return_value (context, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1266,22 +1266,22 @@ impl_device_wifi_request_scan (NMDeviceWifi *self,
|
||||||
NULL,
|
NULL,
|
||||||
NM_AUTH_PERMISSION_NETWORK_CONTROL,
|
NM_AUTH_PERMISSION_NETWORK_CONTROL,
|
||||||
TRUE,
|
TRUE,
|
||||||
request_scan_cb,
|
dbus_request_scan_cb,
|
||||||
options ? g_variant_ref (options) : NULL);
|
options ? g_variant_ref (options) : NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
scanning_allowed (NMDeviceWifi *self)
|
scanning_prohibited (NMDeviceWifi *self, gboolean periodic)
|
||||||
{
|
{
|
||||||
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
|
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
|
||||||
NMSupplicantInterfaceState supplicant_state;
|
NMSupplicantInterfaceState supplicant_state;
|
||||||
NMConnection *connection;
|
NMConnection *connection;
|
||||||
|
|
||||||
g_return_val_if_fail (priv->sup_iface != NULL, FALSE);
|
g_return_val_if_fail (priv->sup_iface != NULL, TRUE);
|
||||||
|
|
||||||
/* Scanning not done in AP mode */
|
/* Scanning not done in AP mode */
|
||||||
if (priv->mode == NM_802_11_MODE_AP)
|
if (priv->mode == NM_802_11_MODE_AP)
|
||||||
return FALSE;
|
return TRUE;
|
||||||
|
|
||||||
switch (nm_device_get_state (NM_DEVICE (self))) {
|
switch (nm_device_get_state (NM_DEVICE (self))) {
|
||||||
case NM_DEVICE_STATE_UNKNOWN:
|
case NM_DEVICE_STATE_UNKNOWN:
|
||||||
|
|
@ -1294,25 +1294,25 @@ scanning_allowed (NMDeviceWifi *self)
|
||||||
case NM_DEVICE_STATE_IP_CHECK:
|
case NM_DEVICE_STATE_IP_CHECK:
|
||||||
case NM_DEVICE_STATE_SECONDARIES:
|
case NM_DEVICE_STATE_SECONDARIES:
|
||||||
case NM_DEVICE_STATE_DEACTIVATING:
|
case NM_DEVICE_STATE_DEACTIVATING:
|
||||||
/* Don't scan when unusable or activating */
|
/* Prohibit scans when unusable or activating */
|
||||||
return FALSE;
|
return TRUE;
|
||||||
case NM_DEVICE_STATE_DISCONNECTED:
|
case NM_DEVICE_STATE_DISCONNECTED:
|
||||||
case NM_DEVICE_STATE_FAILED:
|
case NM_DEVICE_STATE_FAILED:
|
||||||
/* Can always scan when disconnected */
|
/* Can always scan when disconnected */
|
||||||
return TRUE;
|
return FALSE;
|
||||||
case NM_DEVICE_STATE_ACTIVATED:
|
case NM_DEVICE_STATE_ACTIVATED:
|
||||||
/* Need to do further checks when activated */
|
/* Need to do further checks when activated */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Don't scan if the supplicant is busy */
|
/* Prohibit scans if the supplicant is busy */
|
||||||
supplicant_state = nm_supplicant_interface_get_state (priv->sup_iface);
|
supplicant_state = nm_supplicant_interface_get_state (priv->sup_iface);
|
||||||
if ( supplicant_state == NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATING
|
if ( supplicant_state == NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATING
|
||||||
|| supplicant_state == NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATED
|
|| supplicant_state == NM_SUPPLICANT_INTERFACE_STATE_ASSOCIATED
|
||||||
|| supplicant_state == NM_SUPPLICANT_INTERFACE_STATE_4WAY_HANDSHAKE
|
|| supplicant_state == NM_SUPPLICANT_INTERFACE_STATE_4WAY_HANDSHAKE
|
||||||
|| supplicant_state == NM_SUPPLICANT_INTERFACE_STATE_GROUP_HANDSHAKE
|
|| supplicant_state == NM_SUPPLICANT_INTERFACE_STATE_GROUP_HANDSHAKE
|
||||||
|| nm_supplicant_interface_get_scanning (priv->sup_iface))
|
|| nm_supplicant_interface_get_scanning (priv->sup_iface))
|
||||||
return FALSE;
|
return TRUE;
|
||||||
|
|
||||||
connection = nm_device_get_applied_connection (NM_DEVICE (self));
|
connection = nm_device_get_applied_connection (NM_DEVICE (self));
|
||||||
if (connection) {
|
if (connection) {
|
||||||
|
|
@ -1323,7 +1323,7 @@ scanning_allowed (NMDeviceWifi *self)
|
||||||
ip4_method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
|
ip4_method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG);
|
||||||
|
|
||||||
if (!strcmp (ip4_method, NM_SETTING_IP4_CONFIG_METHOD_SHARED))
|
if (!strcmp (ip4_method, NM_SETTING_IP4_CONFIG_METHOD_SHARED))
|
||||||
return FALSE;
|
return TRUE;
|
||||||
|
|
||||||
/* Don't scan when the connection is locked to a specifc AP, since
|
/* Don't scan when the connection is locked to a specifc AP, since
|
||||||
* intra-ESS roaming (which requires periodic scanning) isn't being
|
* intra-ESS roaming (which requires periodic scanning) isn't being
|
||||||
|
|
@ -1332,40 +1332,20 @@ scanning_allowed (NMDeviceWifi *self)
|
||||||
s_wifi = nm_connection_get_setting_wireless (connection);
|
s_wifi = nm_connection_get_setting_wireless (connection);
|
||||||
g_assert (s_wifi);
|
g_assert (s_wifi);
|
||||||
if (nm_setting_wireless_get_bssid (s_wifi))
|
if (nm_setting_wireless_get_bssid (s_wifi))
|
||||||
return FALSE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
/* Allow the scan */
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
scanning_allowed_accumulator (GSignalInvocationHint *ihint,
|
check_scanning_prohibited (NMDeviceWifi *self, gboolean periodic)
|
||||||
GValue *return_accu,
|
|
||||||
const GValue *handler_return,
|
|
||||||
gpointer data)
|
|
||||||
{
|
{
|
||||||
if (!g_value_get_boolean (handler_return))
|
gboolean prohibited = FALSE;
|
||||||
g_value_set_boolean (return_accu, FALSE);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
g_signal_emit (self, signals[SCANNING_PROHIBITED], 0, periodic, &prohibited);
|
||||||
check_scanning_allowed (NMDeviceWifi *self)
|
return prohibited;
|
||||||
{
|
|
||||||
GValue instance = G_VALUE_INIT;
|
|
||||||
GValue retval = G_VALUE_INIT;
|
|
||||||
|
|
||||||
g_value_init (&instance, G_TYPE_OBJECT);
|
|
||||||
g_value_take_object (&instance, self);
|
|
||||||
|
|
||||||
g_value_init (&retval, G_TYPE_BOOLEAN);
|
|
||||||
g_value_set_boolean (&retval, TRUE);
|
|
||||||
|
|
||||||
/* Use g_signal_emitv() rather than g_signal_emit() to avoid the return
|
|
||||||
* value being changed if no handlers are connected */
|
|
||||||
g_signal_emitv (&instance, signals[SCANNING_ALLOWED], 0, &retval);
|
|
||||||
|
|
||||||
return g_value_get_boolean (&retval);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
|
@ -1462,7 +1442,7 @@ ssids_options_to_ptrarray (GVariant *value)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
request_wireless_scan (NMDeviceWifi *self, gboolean force_if_scanning, GVariant *scan_options)
|
request_wireless_scan (NMDeviceWifi *self, gboolean periodic, gboolean force_if_scanning, GVariant *scan_options)
|
||||||
{
|
{
|
||||||
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
|
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
|
||||||
gboolean request_started = FALSE;
|
gboolean request_started = FALSE;
|
||||||
|
|
@ -1474,7 +1454,7 @@ request_wireless_scan (NMDeviceWifi *self, gboolean force_if_scanning, GVariant
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (check_scanning_allowed (self)) {
|
if (!check_scanning_prohibited (self, periodic)) {
|
||||||
gs_unref_ptrarray GPtrArray *ssids = NULL;
|
gs_unref_ptrarray GPtrArray *ssids = NULL;
|
||||||
|
|
||||||
_LOGD (LOGD_WIFI, "wifi-scan: scanning requested");
|
_LOGD (LOGD_WIFI, "wifi-scan: scanning requested");
|
||||||
|
|
@ -1531,7 +1511,7 @@ request_wireless_scan_periodic (gpointer user_data)
|
||||||
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
|
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
|
||||||
|
|
||||||
priv->pending_scan_id = 0;
|
priv->pending_scan_id = 0;
|
||||||
request_wireless_scan (self, FALSE, NULL);
|
request_wireless_scan (self, TRUE, FALSE, NULL);
|
||||||
return G_SOURCE_REMOVE;
|
return G_SOURCE_REMOVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2242,7 +2222,7 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
|
||||||
/* we would clear _requested_scan_set() and trigger a new scan.
|
/* we would clear _requested_scan_set() and trigger a new scan.
|
||||||
* However, we don't want to cancel the current pending action, so force
|
* However, we don't want to cancel the current pending action, so force
|
||||||
* a new scan request. */
|
* a new scan request. */
|
||||||
request_wireless_scan (self, TRUE, NULL);
|
request_wireless_scan (self, FALSE, TRUE, NULL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
@ -3190,7 +3170,7 @@ device_state_changed (NMDevice *device,
|
||||||
case NM_DEVICE_STATE_DISCONNECTED:
|
case NM_DEVICE_STATE_DISCONNECTED:
|
||||||
/* Kick off a scan to get latest results */
|
/* Kick off a scan to get latest results */
|
||||||
priv->scan_interval = SCAN_INTERVAL_MIN;
|
priv->scan_interval = SCAN_INTERVAL_MIN;
|
||||||
request_wireless_scan (self, FALSE, NULL);
|
request_wireless_scan (self, FALSE, FALSE, NULL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
@ -3456,7 +3436,7 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
|
||||||
|
|
||||||
parent_class->state_changed = device_state_changed;
|
parent_class->state_changed = device_state_changed;
|
||||||
|
|
||||||
klass->scanning_allowed = scanning_allowed;
|
klass->scanning_prohibited = scanning_prohibited;
|
||||||
|
|
||||||
obj_properties[PROP_MODE] =
|
obj_properties[PROP_MODE] =
|
||||||
g_param_spec_uint (NM_DEVICE_WIFI_MODE, "", "",
|
g_param_spec_uint (NM_DEVICE_WIFI_MODE, "", "",
|
||||||
|
|
@ -3517,13 +3497,13 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
|
||||||
G_TYPE_NONE, 1,
|
G_TYPE_NONE, 1,
|
||||||
NM_TYPE_WIFI_AP);
|
NM_TYPE_WIFI_AP);
|
||||||
|
|
||||||
signals[SCANNING_ALLOWED] =
|
signals[SCANNING_PROHIBITED] =
|
||||||
g_signal_new (NM_DEVICE_WIFI_SCANNING_ALLOWED,
|
g_signal_new (NM_DEVICE_WIFI_SCANNING_PROHIBITED,
|
||||||
G_OBJECT_CLASS_TYPE (object_class),
|
G_OBJECT_CLASS_TYPE (object_class),
|
||||||
G_SIGNAL_RUN_LAST,
|
G_SIGNAL_RUN_LAST,
|
||||||
G_STRUCT_OFFSET (NMDeviceWifiClass, scanning_allowed),
|
G_STRUCT_OFFSET (NMDeviceWifiClass, scanning_prohibited),
|
||||||
scanning_allowed_accumulator, NULL, NULL,
|
NULL, NULL, NULL,
|
||||||
G_TYPE_BOOLEAN, 0);
|
G_TYPE_BOOLEAN, 1, G_TYPE_BOOLEAN);
|
||||||
|
|
||||||
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (klass),
|
nm_exported_object_class_add_interface (NM_EXPORTED_OBJECT_CLASS (klass),
|
||||||
NMDBUS_TYPE_DEVICE_WIFI_SKELETON,
|
NMDBUS_TYPE_DEVICE_WIFI_SKELETON,
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@
|
||||||
#define NM_DEVICE_WIFI_ACCESS_POINT_REMOVED "access-point-removed"
|
#define NM_DEVICE_WIFI_ACCESS_POINT_REMOVED "access-point-removed"
|
||||||
|
|
||||||
/* internal signals */
|
/* internal signals */
|
||||||
#define NM_DEVICE_WIFI_SCANNING_ALLOWED "scanning-allowed"
|
#define NM_DEVICE_WIFI_SCANNING_PROHIBITED "scanning-prohibited"
|
||||||
|
|
||||||
typedef struct _NMDeviceWifi NMDeviceWifi;
|
typedef struct _NMDeviceWifi NMDeviceWifi;
|
||||||
typedef struct _NMDeviceWifiClass NMDeviceWifiClass;
|
typedef struct _NMDeviceWifiClass NMDeviceWifiClass;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue