wifi: cleanup type implementation of NMDeviceWifi

- make NMDeviceWifi and NMDeviceWifiClass internal, opaque
  structures
- embed private data in NMDeviceWifi
- implement GObject properties via NM_GOBJECT_PROPERTIES_DEFINE()
This commit is contained in:
Thomas Haller
2016-07-06 10:00:18 +02:00
parent 788583d9fd
commit 652dc4b379
2 changed files with 112 additions and 120 deletions

View File

@@ -66,22 +66,16 @@ _LOG_DECLARE_SELF(NMDeviceWifi);
#define WIRELESS_SECRETS_TRIES "wireless-secrets-tries" #define WIRELESS_SECRETS_TRIES "wireless-secrets-tries"
G_DEFINE_TYPE (NMDeviceWifi, nm_device_wifi, NM_TYPE_DEVICE) /*****************************************************************************/
#define NM_DEVICE_WIFI_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DEVICE_WIFI, NMDeviceWifiPrivate)) NM_GOBJECT_PROPERTIES_DEFINE (NMDeviceWifi,
enum {
PROP_0,
PROP_MODE, PROP_MODE,
PROP_BITRATE, PROP_BITRATE,
PROP_ACCESS_POINTS, PROP_ACCESS_POINTS,
PROP_ACTIVE_ACCESS_POINT, PROP_ACTIVE_ACCESS_POINT,
PROP_CAPABILITIES, PROP_CAPABILITIES,
PROP_SCANNING, PROP_SCANNING,
);
LAST_PROP
};
enum { enum {
ACCESS_POINT_ADDED, ACCESS_POINT_ADDED,
@@ -93,7 +87,7 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 }; static guint signals[LAST_SIGNAL] = { 0 };
struct _NMDeviceWifiPrivate { typedef struct {
gint8 invalid_strength_counter; gint8 invalid_strength_counter;
GHashTable * aps; GHashTable * aps;
@@ -124,8 +118,41 @@ struct _NMDeviceWifiPrivate {
gint32 hw_addr_scan_expire; gint32 hw_addr_scan_expire;
char *hw_addr_scan; char *hw_addr_scan;
} NMDeviceWifiPrivate;
struct _NMDeviceWifi
{
NMDevice parent;
NMDeviceWifiPrivate _priv;
}; };
struct _NMDeviceWifiClass
{
NMDeviceClass parent;
/* Signals */
gboolean (*scanning_allowed) (NMDeviceWifi *device);
};
/*****************************************************************************/
G_DEFINE_TYPE (NMDeviceWifi, nm_device_wifi, NM_TYPE_DEVICE)
#define NM_DEVICE_WIFI_GET_PRIVATE(self) \
({ \
/* preserve the const-ness of self. Unfortunately, that
* way, @self cannot be a void pointer */ \
typeof (self) _self = (self); \
\
/* Get compiler error if variable is of wrong type */ \
_nm_unused const NMDeviceWifi *_self2 = (_self); \
\
nm_assert (NM_IS_DEVICE_WIFI (_self)); \
&_self->_priv; \
})
/*****************************************************************************/
static gboolean check_scanning_allowed (NMDeviceWifi *self); static gboolean check_scanning_allowed (NMDeviceWifi *self);
static void schedule_scan (NMDeviceWifi *self, gboolean backoff); static void schedule_scan (NMDeviceWifi *self, gboolean backoff);
@@ -176,7 +203,7 @@ static void remove_supplicant_interface_error_handler (NMDeviceWifi *self);
static void _hw_addr_set_scanning (NMDeviceWifi *self, gboolean do_reset); static void _hw_addr_set_scanning (NMDeviceWifi *self, gboolean do_reset);
/*****************************************************************/ /*****************************************************************************/
static void static void
constructed (GObject *object) constructed (GObject *object)
@@ -379,7 +406,7 @@ set_current_ap (NMDeviceWifi *self, NMAccessPoint *new_ap, gboolean recheck_avai
g_object_unref (old_ap); g_object_unref (old_ap);
} }
g_object_notify (G_OBJECT (self), NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT); _notify (self, PROP_ACTIVE_ACCESS_POINT);
} }
static void static void
@@ -425,7 +452,7 @@ periodic_update (NMDeviceWifi *self)
new_rate = nm_platform_wifi_get_rate (NM_PLATFORM_GET, ifindex); new_rate = nm_platform_wifi_get_rate (NM_PLATFORM_GET, ifindex);
if (new_rate != priv->rate) { if (new_rate != priv->rate) {
priv->rate = new_rate; priv->rate = new_rate;
g_object_notify (G_OBJECT (self), NM_DEVICE_WIFI_BITRATE); _notify (self, PROP_BITRATE);
} }
} }
@@ -439,7 +466,7 @@ periodic_update_cb (gpointer user_data)
static gboolean static gboolean
bring_up (NMDevice *device, gboolean *no_firmware) bring_up (NMDevice *device, gboolean *no_firmware)
{ {
if (!NM_DEVICE_WIFI_GET_PRIVATE (device)->enabled) if (!NM_DEVICE_WIFI_GET_PRIVATE ((NMDeviceWifi *) device)->enabled)
return FALSE; return FALSE;
return NM_DEVICE_CLASS (nm_device_wifi_parent_class)->bring_up (device, no_firmware); return NM_DEVICE_CLASS (nm_device_wifi_parent_class)->bring_up (device, no_firmware);
@@ -462,7 +489,7 @@ ap_add_remove (NMDeviceWifi *self,
} }
g_signal_emit (self, signals[signum], 0, ap); g_signal_emit (self, signals[signum], 0, ap);
g_object_notify (G_OBJECT (self), NM_DEVICE_WIFI_ACCESS_POINTS); _notify (self, PROP_ACCESS_POINTS);
if (signum == ACCESS_POINT_REMOVED) { if (signum == ACCESS_POINT_REMOVED) {
g_hash_table_remove (priv->aps, nm_exported_object_get_path ((NMExportedObject *) ap)); g_hash_table_remove (priv->aps, nm_exported_object_get_path ((NMExportedObject *) ap));
@@ -527,7 +554,7 @@ deactivate (NMDevice *device)
if (priv->mode != NM_802_11_MODE_INFRA) { if (priv->mode != NM_802_11_MODE_INFRA) {
priv->mode = NM_802_11_MODE_INFRA; priv->mode = NM_802_11_MODE_INFRA;
g_object_notify (G_OBJECT (self), NM_DEVICE_WIFI_MODE); _notify (self, PROP_MODE);
} }
/* Ensure we trigger a scan after deactivating a Hotspot */ /* Ensure we trigger a scan after deactivating a Hotspot */
@@ -1433,10 +1460,11 @@ request_wireless_scan (NMDeviceWifi *self, GVariant *scan_options)
static gboolean static gboolean
request_wireless_scan_periodic (gpointer user_data) request_wireless_scan_periodic (gpointer user_data)
{ {
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (user_data); NMDeviceWifi *self = user_data;
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
priv->pending_scan_id = 0; priv->pending_scan_id = 0;
request_wireless_scan (user_data, NULL); request_wireless_scan (self, NULL);
return FALSE; return FALSE;
} }
@@ -2052,7 +2080,7 @@ supplicant_iface_state_cb (NMSupplicantInterface *iface,
/* Signal scanning state changes */ /* Signal scanning state changes */
if ( new_state == NM_SUPPLICANT_INTERFACE_STATE_SCANNING if ( new_state == NM_SUPPLICANT_INTERFACE_STATE_SCANNING
|| old_state == NM_SUPPLICANT_INTERFACE_STATE_SCANNING) || old_state == NM_SUPPLICANT_INTERFACE_STATE_SCANNING)
g_object_notify (G_OBJECT (self), "scanning"); _notify (self, PROP_SCANNING);
} }
static void static void
@@ -2096,7 +2124,7 @@ supplicant_iface_notify_scanning_cb (NMSupplicantInterface *iface,
scanning = nm_supplicant_interface_get_scanning (iface); scanning = nm_supplicant_interface_get_scanning (iface);
_LOGD (LOGD_WIFI_SCAN, "now %s", scanning ? "scanning" : "idle"); _LOGD (LOGD_WIFI_SCAN, "now %s", scanning ? "scanning" : "idle");
g_object_notify (G_OBJECT (self), "scanning"); _notify (self, PROP_SCANNING);
/* Run a quick update of current AP when coming out of a scan */ /* Run a quick update of current AP when coming out of a scan */
state = nm_device_get_state (NM_DEVICE (self)); state = nm_device_get_state (NM_DEVICE (self));
@@ -2378,7 +2406,7 @@ act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason)
/* Scanning not done in AP mode; clear the scan list */ /* Scanning not done in AP mode; clear the scan list */
remove_all_aps (self); remove_all_aps (self);
} }
g_object_notify (G_OBJECT (self), NM_DEVICE_WIFI_MODE); _notify (self, PROP_MODE);
/* The kernel doesn't support Ad-Hoc WPA connections well at this time, /* The kernel doesn't support Ad-Hoc WPA connections well at this time,
* and turns them into open networks. It's been this way since at least * and turns them into open networks. It's been this way since at least
@@ -3107,8 +3135,6 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass);
NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass); NMDeviceClass *parent_class = NM_DEVICE_CLASS (klass);
g_type_class_add_private (object_class, sizeof (NMDeviceWifiPrivate));
NM_DEVICE_CLASS_DECLARE_TYPES (klass, NM_SETTING_WIRELESS_SETTING_NAME, NM_LINK_TYPE_WIFI) NM_DEVICE_CLASS_DECLARE_TYPES (klass, NM_SETTING_WIRELESS_SETTING_NAME, NM_LINK_TYPE_WIFI)
object_class->constructed = constructed; object_class->constructed = constructed;
@@ -3141,77 +3167,73 @@ nm_device_wifi_class_init (NMDeviceWifiClass *klass)
klass->scanning_allowed = scanning_allowed; klass->scanning_allowed = scanning_allowed;
/* Properties */ /* Properties */
g_object_class_install_property obj_properties[PROP_MODE] =
(object_class, PROP_MODE, g_param_spec_uint (NM_DEVICE_WIFI_MODE, "", "",
g_param_spec_uint (NM_DEVICE_WIFI_MODE, "", "", NM_802_11_MODE_UNKNOWN,
NM_802_11_MODE_UNKNOWN, NM_802_11_MODE_AP,
NM_802_11_MODE_AP, NM_802_11_MODE_INFRA,
NM_802_11_MODE_INFRA, G_PARAM_READABLE |
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
G_PARAM_STATIC_STRINGS));
g_object_class_install_property obj_properties[PROP_BITRATE] =
(object_class, PROP_BITRATE, g_param_spec_uint (NM_DEVICE_WIFI_BITRATE, "", "",
g_param_spec_uint (NM_DEVICE_WIFI_BITRATE, "", "", 0, G_MAXUINT32, 0,
0, G_MAXUINT32, 0, G_PARAM_READABLE |
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
G_PARAM_STATIC_STRINGS));
g_object_class_install_property obj_properties[PROP_ACCESS_POINTS] =
(object_class, PROP_ACCESS_POINTS, g_param_spec_boxed (NM_DEVICE_WIFI_ACCESS_POINTS, "", "",
g_param_spec_boxed (NM_DEVICE_WIFI_ACCESS_POINTS, "", "", G_TYPE_STRV,
G_TYPE_STRV, G_PARAM_READABLE |
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
G_PARAM_STATIC_STRINGS));
g_object_class_install_property obj_properties[PROP_ACTIVE_ACCESS_POINT] =
(object_class, PROP_ACTIVE_ACCESS_POINT, g_param_spec_string (NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT, "", "",
g_param_spec_string (NM_DEVICE_WIFI_ACTIVE_ACCESS_POINT, "", "", NULL,
NULL, G_PARAM_READABLE |
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
G_PARAM_STATIC_STRINGS));
g_object_class_install_property obj_properties[PROP_CAPABILITIES] =
(object_class, PROP_CAPABILITIES, g_param_spec_uint (NM_DEVICE_WIFI_CAPABILITIES, "", "",
g_param_spec_uint (NM_DEVICE_WIFI_CAPABILITIES, "", "", 0, G_MAXUINT32, NM_WIFI_DEVICE_CAP_NONE,
0, G_MAXUINT32, NM_WIFI_DEVICE_CAP_NONE, G_PARAM_READWRITE |
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
G_PARAM_STATIC_STRINGS));
g_object_class_install_property obj_properties[PROP_SCANNING] =
(object_class, PROP_SCANNING, g_param_spec_boolean (NM_DEVICE_WIFI_SCANNING, "", "",
g_param_spec_boolean (NM_DEVICE_WIFI_SCANNING, "", "", FALSE,
FALSE, G_PARAM_READABLE |
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
G_PARAM_STATIC_STRINGS));
g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties);
/* Signals */ /* Signals */
signals[ACCESS_POINT_ADDED] = signals[ACCESS_POINT_ADDED] =
g_signal_new ("access-point-added", g_signal_new ("access-point-added",
G_OBJECT_CLASS_TYPE (object_class), G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST, G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMDeviceWifiClass, access_point_added), 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_NONE, 1,
NM_TYPE_AP); NM_TYPE_AP);
signals[ACCESS_POINT_REMOVED] = signals[ACCESS_POINT_REMOVED] =
g_signal_new ("access-point-removed", g_signal_new ("access-point-removed",
G_OBJECT_CLASS_TYPE (object_class), G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST, G_SIGNAL_RUN_FIRST,
0, 0,
NULL, NULL, NULL, NULL, NULL, NULL,
G_TYPE_NONE, 1, G_TYPE_NONE, 1,
NM_TYPE_AP); NM_TYPE_AP);
signals[SCANNING_ALLOWED] = signals[SCANNING_ALLOWED] =
g_signal_new ("scanning-allowed", g_signal_new ("scanning-allowed",
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_allowed),
scanning_allowed_accumulator, NULL, NULL, scanning_allowed_accumulator, NULL, NULL,
G_TYPE_BOOLEAN, 0); G_TYPE_BOOLEAN, 0);
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,

View File

@@ -15,7 +15,7 @@
* with this program; if not, write to the Free Software Foundation, Inc., * with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* *
* Copyright (C) 2005 - 2010 Red Hat, Inc. * Copyright (C) 2005 - 2016 Red Hat, Inc.
* Copyright (C) 2006 - 2008 Novell, Inc. * Copyright (C) 2006 - 2008 Novell, Inc.
*/ */
@@ -25,16 +25,12 @@
#include "nm-device.h" #include "nm-device.h"
#include "nm-wifi-ap.h" #include "nm-wifi-ap.h"
struct NMAccessPointList; #define NM_TYPE_DEVICE_WIFI (nm_device_wifi_get_type ())
#define NM_DEVICE_WIFI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_WIFI, NMDeviceWifi))
G_BEGIN_DECLS #define NM_DEVICE_WIFI_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_WIFI, NMDeviceWifiClass))
#define NM_IS_DEVICE_WIFI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_WIFI))
#define NM_TYPE_DEVICE_WIFI (nm_device_wifi_get_type ()) #define NM_IS_DEVICE_WIFI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_WIFI))
#define NM_DEVICE_WIFI(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_DEVICE_WIFI, NMDeviceWifi)) #define NM_DEVICE_WIFI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_WIFI, NMDeviceWifiClass))
#define NM_DEVICE_WIFI_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_DEVICE_WIFI, NMDeviceWifiClass))
#define NM_IS_DEVICE_WIFI(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_DEVICE_WIFI))
#define NM_IS_DEVICE_WIFI_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_DEVICE_WIFI))
#define NM_DEVICE_WIFI_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_DEVICE_WIFI, NMDeviceWifiClass))
#define NM_DEVICE_WIFI_MODE "mode" #define NM_DEVICE_WIFI_MODE "mode"
#define NM_DEVICE_WIFI_BITRATE "bitrate" #define NM_DEVICE_WIFI_BITRATE "bitrate"
@@ -43,37 +39,11 @@ G_BEGIN_DECLS
#define NM_DEVICE_WIFI_CAPABILITIES "wireless-capabilities" #define NM_DEVICE_WIFI_CAPABILITIES "wireless-capabilities"
#define NM_DEVICE_WIFI_SCANNING "scanning" #define NM_DEVICE_WIFI_SCANNING "scanning"
#ifndef NM_DEVICE_WIFI_DEFINED
#define NM_DEVICE_WIFI_DEFINED
typedef struct _NMDeviceWifi NMDeviceWifi; typedef struct _NMDeviceWifi NMDeviceWifi;
#endif
typedef struct _NMDeviceWifiClass NMDeviceWifiClass; typedef struct _NMDeviceWifiClass NMDeviceWifiClass;
typedef struct _NMDeviceWifiPrivate NMDeviceWifiPrivate;
struct _NMDeviceWifi
{
NMDevice parent;
/*< private >*/
NMDeviceWifiPrivate *priv;
};
struct _NMDeviceWifiClass
{
NMDeviceClass parent;
/* Signals */
void (*access_point_added) (NMDeviceWifi *device, NMAccessPoint *ap);
void (*access_point_removed) (NMDeviceWifi *device, NMAccessPoint *ap);
gboolean (*scanning_allowed) (NMDeviceWifi *device);
};
GType nm_device_wifi_get_type (void); GType nm_device_wifi_get_type (void);
NMDevice * nm_device_wifi_new (const char *iface, NMDeviceWifiCapabilities capabilities); NMDevice * nm_device_wifi_new (const char *iface, NMDeviceWifiCapabilities capabilities);
G_END_DECLS #endif /* __NETWORKMANAGER_DEVICE_WIFI_H__ */
#endif /* NM_DEVICE_WIFI_H */