summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2014-04-17 12:47:12 -0400
committerDan Winship <danw@gnome.org>2014-04-17 12:47:12 -0400
commit2b9b26d19b27a1835766b13b1f9c6ff1c6b9c0ca (patch)
tree316a335a5dbf50ba4811d005dbecbef89f5519fd
parentef770ca450f4d0086eae9bfbe28ce169d57a90ac (diff)
parentdf435f40152255aa95f82df00d4a776ea9605d58 (diff)
wifi: move wifi-utils into platform
https://bugzilla.gnome.org/show_bug.cgi?id=724365
-rw-r--r--src/Makefile.am15
-rw-r--r--src/devices/nm-device-olpc-mesh.c34
-rw-r--r--src/devices/nm-device-wifi.c59
-rw-r--r--src/platform/nm-fake-platform.c110
-rw-r--r--src/platform/nm-linux-platform.c192
-rw-r--r--src/platform/nm-platform.c132
-rw-r--r--src/platform/nm-platform.h33
-rw-r--r--src/platform/wifi/wifi-utils-nl80211.c (renamed from src/wifi/wifi-utils-nl80211.c)88
-rw-r--r--src/platform/wifi/wifi-utils-nl80211.h (renamed from src/wifi/wifi-utils-nl80211.h)0
-rw-r--r--src/platform/wifi/wifi-utils-private.h (renamed from src/wifi/wifi-utils-private.h)0
-rw-r--r--src/platform/wifi/wifi-utils-wext.c (renamed from src/wifi/wifi-utils-wext.c)18
-rw-r--r--src/platform/wifi/wifi-utils-wext.h (renamed from src/wifi/wifi-utils-wext.h)0
-rw-r--r--src/platform/wifi/wifi-utils.c (renamed from src/wifi/wifi-utils.c)0
-rw-r--r--src/platform/wifi/wifi-utils.h (renamed from src/wifi/wifi-utils.h)5
-rw-r--r--src/settings/plugins/ifcfg-rh/Makefile.am1
-rw-r--r--src/settings/plugins/ifcfg-rh/reader.c20
-rw-r--r--src/settings/plugins/ifcfg-rh/tests/Makefile.am1
-rw-r--r--src/settings/plugins/ifnet/Makefile.am2
-rw-r--r--src/settings/plugins/ifnet/net_parser.c10
-rw-r--r--src/settings/plugins/ifnet/tests/Makefile.am2
20 files changed, 594 insertions, 128 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index f3fcfba98e..ca2a372585 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -130,6 +130,11 @@ nm_sources = \
platform/nm-linux-platform.h \
platform/nm-platform.c \
platform/nm-platform.h \
+ platform/wifi/wifi-utils-nl80211.c \
+ platform/wifi/wifi-utils-nl80211.h \
+ platform/wifi/wifi-utils-private.h \
+ platform/wifi/wifi-utils.c \
+ platform/wifi/wifi-utils.h \
\
rdisc/nm-fake-rdisc.c \
rdisc/nm-fake-rdisc.h \
@@ -194,12 +199,6 @@ nm_sources = \
vpn-manager/nm-vpn-service.c \
vpn-manager/nm-vpn-service.h \
\
- wifi/wifi-utils-nl80211.c \
- wifi/wifi-utils-nl80211.h \
- wifi/wifi-utils-private.h \
- wifi/wifi-utils.c \
- wifi/wifi-utils.h \
- \
nm-activation-request.c \
nm-activation-request.h \
nm-active-connection.c \
@@ -270,7 +269,9 @@ nm_sources += nm-sleep-monitor-upower.c
endif
if WITH_WEXT
-nm_sources += wifi/wifi-utils-wext.c wifi/wifi-utils-wext.h
+nm_sources += \
+ platform/wifi/wifi-utils-wext.c \
+ platform/wifi/wifi-utils-wext.h
endif
diff --git a/src/devices/nm-device-olpc-mesh.c b/src/devices/nm-device-olpc-mesh.c
index b85956ef63..c80d9b345e 100644
--- a/src/devices/nm-device-olpc-mesh.c
+++ b/src/devices/nm-device-olpc-mesh.c
@@ -53,10 +53,6 @@
#include "nm-manager.h"
#include "nm-enum-types.h"
#include "nm-dbus-manager.h"
-#include "wifi-utils.h"
-#if HAVE_WEXT
-#include "wifi-utils-wext.h"
-#endif
/* This is a bug; but we can't really change API now... */
#include "NetworkManagerVPN.h"
@@ -83,8 +79,6 @@ enum {
struct _NMDeviceOlpcMeshPrivate {
gboolean dispose_has_run;
- WifiData * wifi_data;
-
NMDevice * companion;
gboolean stage1_waiting;
guint device_added_id;
@@ -126,6 +120,7 @@ constructor (GType type,
GObjectClass *klass;
NMDeviceOlpcMesh *self;
NMDeviceOlpcMeshPrivate *priv;
+ NMDeviceWifiCapabilities caps;
klass = G_OBJECT_CLASS (nm_device_olpc_mesh_parent_class);
object = klass->constructor (type, n_construct_params, construct_params);
@@ -139,17 +134,7 @@ constructor (GType type,
nm_device_get_iface (NM_DEVICE (self)),
nm_device_get_ifindex (NM_DEVICE (self)));
- /*
- * The kernel driver now uses nl80211, but we force use of WEXT because
- * the cfg80211 interactions are not quite ready to support access to
- * mesh control through nl80211 just yet.
- */
-#if HAVE_WEXT
- priv->wifi_data = wifi_wext_init (nm_device_get_iface (NM_DEVICE (self)),
- nm_device_get_ifindex (NM_DEVICE (self)),
- FALSE);
-#endif
- if (priv->wifi_data == NULL) {
+ if (!nm_platform_wifi_get_capabilities (nm_device_get_ifindex (NM_DEVICE (self)), &caps)) {
nm_log_warn (LOGD_HW | LOGD_OLPC_MESH, "(%s): failed to initialize WiFi driver",
nm_device_get_iface (NM_DEVICE (self)));
g_object_unref (object);
@@ -287,10 +272,10 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason)
static void
_mesh_set_channel (NMDeviceOlpcMesh *self, guint32 channel)
{
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
+ int ifindex = nm_device_get_ifindex (NM_DEVICE (self));
- if (wifi_utils_get_mesh_channel (priv->wifi_data) != channel) {
- if (wifi_utils_set_mesh_channel (priv->wifi_data, channel))
+ if (nm_platform_mesh_get_channel (ifindex) != channel) {
+ if (nm_platform_mesh_set_channel (ifindex, channel))
g_object_notify (G_OBJECT (self), NM_DEVICE_OLPC_MESH_ACTIVE_CHANNEL);
}
}
@@ -299,7 +284,6 @@ static NMActStageReturn
act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
{
NMDeviceOlpcMesh *self = NM_DEVICE_OLPC_MESH (dev);
- NMDeviceOlpcMeshPrivate *priv = NM_DEVICE_OLPC_MESH_GET_PRIVATE (self);
NMConnection *connection;
NMSettingOlpcMesh *s_mesh;
guint32 channel;
@@ -315,7 +299,8 @@ act_stage2_config (NMDevice *dev, NMDeviceStateReason *reason)
channel = nm_setting_olpc_mesh_get_channel (s_mesh);
if (channel != 0)
_mesh_set_channel (self, channel);
- wifi_utils_set_mesh_ssid (priv->wifi_data, nm_setting_olpc_mesh_get_ssid (s_mesh));
+ nm_platform_mesh_set_ssid (nm_device_get_ifindex (dev),
+ nm_setting_olpc_mesh_get_ssid (s_mesh));
anycast_addr_array = nm_setting_olpc_mesh_get_dhcp_anycast_address (s_mesh);
if (anycast_addr_array)
@@ -369,9 +354,6 @@ dispose (GObject *object)
}
priv->dispose_has_run = TRUE;
- if (priv->wifi_data)
- wifi_utils_deinit (priv->wifi_data);
-
companion_cleanup (self);
if (priv->device_added_id)
@@ -397,7 +379,7 @@ get_property (GObject *object, guint prop_id,
g_value_set_boxed (value, "/");
break;
case PROP_ACTIVE_CHANNEL:
- g_value_set_uint (value, wifi_utils_get_mesh_channel (priv->wifi_data));
+ g_value_set_uint (value, nm_platform_mesh_get_channel (nm_device_get_ifindex (NM_DEVICE (device))));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
diff --git a/src/devices/nm-device-wifi.c b/src/devices/nm-device-wifi.c
index 7d992c7b6c..d6b71396b1 100644
--- a/src/devices/nm-device-wifi.c
+++ b/src/devices/nm-device-wifi.c
@@ -57,7 +57,6 @@
#include "nm-manager-auth.h"
#include "nm-settings-connection.h"
#include "nm-enum-types.h"
-#include "wifi-utils.h"
#include "nm-dbus-glib-types.h"
@@ -149,7 +148,6 @@ struct _NMDeviceWifiPrivate {
gboolean requested_scan;
Supplicant supplicant;
- WifiData * wifi_data;
gboolean ssid_found;
NM80211Mode mode;
@@ -304,16 +302,13 @@ constructor (GType type,
nm_device_get_iface (NM_DEVICE (self)),
nm_device_get_ifindex (NM_DEVICE (self)));
- priv->wifi_data = wifi_utils_init (nm_device_get_iface (NM_DEVICE (self)),
- nm_device_get_ifindex (NM_DEVICE (self)),
- TRUE);
- if (priv->wifi_data == NULL) {
+ if (!nm_platform_wifi_get_capabilities (nm_device_get_ifindex (NM_DEVICE (self)),
+ &priv->capabilities)) {
nm_log_warn (LOGD_HW | LOGD_WIFI, "(%s): failed to initialize WiFi driver",
nm_device_get_iface (NM_DEVICE (self)));
g_object_unref (object);
return NULL;
}
- priv->capabilities = wifi_utils_get_caps (priv->wifi_data);
if (priv->capabilities & NM_WIFI_DEVICE_CAP_AP) {
nm_log_info (LOGD_HW | LOGD_WIFI, "(%s): driver supports Access Point (AP) mode",
@@ -487,6 +482,7 @@ find_active_ap (NMDeviceWifi *self,
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
const char *iface = nm_device_get_iface (NM_DEVICE (self));
+ int ifindex = nm_device_get_ifindex (NM_DEVICE (self));
struct ether_addr bssid;
GByteArray *ssid;
GSList *iter;
@@ -497,7 +493,7 @@ find_active_ap (NMDeviceWifi *self,
NM80211Mode devmode;
guint32 devfreq;
- wifi_utils_get_bssid (priv->wifi_data, &bssid);
+ nm_platform_wifi_get_bssid (ifindex, &bssid);
nm_log_dbg (LOGD_WIFI, "(%s): active BSSID: %02x:%02x:%02x:%02x:%02x:%02x",
iface,
bssid.ether_addr_octet[0], bssid.ether_addr_octet[1],
@@ -507,15 +503,15 @@ find_active_ap (NMDeviceWifi *self,
if (!nm_ethernet_address_is_valid (&bssid))
return NULL;
- ssid = wifi_utils_get_ssid (priv->wifi_data);
+ ssid = nm_platform_wifi_get_ssid (ifindex);
nm_log_dbg (LOGD_WIFI, "(%s): active SSID: %s%s%s",
iface,
ssid ? "'" : "",
ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)",
ssid ? "'" : "");
- devmode = wifi_utils_get_mode (priv->wifi_data);
- devfreq = wifi_utils_get_freq (priv->wifi_data);
+ devmode = nm_platform_wifi_get_mode (ifindex);
+ devfreq = nm_platform_wifi_get_frequency (ifindex);
/* When matching hidden APs, do a second pass that ignores the SSID check,
* because NM might not yet know the SSID of the hidden AP in the scan list
@@ -692,6 +688,7 @@ static void
periodic_update (NMDeviceWifi *self, NMAccessPoint *ignore_ap)
{
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ int ifindex = nm_device_get_ifindex (NM_DEVICE (self));
NMAccessPoint *new_ap;
guint32 new_rate;
int percent;
@@ -730,7 +727,7 @@ periodic_update (NMDeviceWifi *self, NMAccessPoint *ignore_ap)
if (priv->current_ap && (nm_ap_get_mode (priv->current_ap) == NM_802_11_MODE_ADHOC)) {
struct ether_addr bssid = { {0x0, 0x0, 0x0, 0x0, 0x0, 0x0} };
- wifi_utils_get_bssid (priv->wifi_data, &bssid);
+ nm_platform_wifi_get_bssid (ifindex, &bssid);
/* 0x02 means "locally administered" and should be OR-ed into
* the first byte of IBSS BSSIDs.
*/
@@ -744,7 +741,7 @@ periodic_update (NMDeviceWifi *self, NMAccessPoint *ignore_ap)
/* Try to smooth out the strength. Atmel cards, for example, will give no strength
* one second and normal strength the next.
*/
- percent = wifi_utils_get_qual (priv->wifi_data);
+ percent = nm_platform_wifi_get_quality (ifindex);
if (percent >= 0 || ++priv->invalid_strength_counter > 3) {
nm_ap_set_strength (new_ap, (gint8) percent);
priv->invalid_strength_counter = 0;
@@ -782,7 +779,7 @@ periodic_update (NMDeviceWifi *self, NMAccessPoint *ignore_ap)
set_current_ap (self, new_ap, TRUE, FALSE);
}
- new_rate = wifi_utils_get_rate (priv->wifi_data);
+ new_rate = nm_platform_wifi_get_rate (ifindex);
if (new_rate != priv->rate) {
priv->rate = new_rate;
g_object_notify (G_OBJECT (self), NM_DEVICE_WIFI_BITRATE);
@@ -854,6 +851,7 @@ deactivate (NMDevice *dev)
{
NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ int ifindex = nm_device_get_ifindex (dev);
NMActRequest *req;
NMConnection *connection;
NM80211Mode old_mode = priv->mode;
@@ -882,7 +880,7 @@ deactivate (NMDevice *dev)
set_current_ap (self, NULL, TRUE, FALSE);
/* Clear any critical protocol notification in the Wi-Fi stack */
- wifi_utils_indicate_addressing_running (priv->wifi_data, FALSE);
+ nm_platform_wifi_indicate_addressing_running (ifindex, FALSE);
/* Reset MAC address back to initial address */
nm_device_set_hw_addr (dev, priv->initial_hw_addr, "reset", LOGD_WIFI);
@@ -890,9 +888,9 @@ deactivate (NMDevice *dev)
/* Ensure we're in infrastructure mode after deactivation; some devices
* (usually older ones) don't scan well in adhoc mode.
*/
- if (wifi_utils_get_mode (priv->wifi_data) != NM_802_11_MODE_INFRA) {
+ if (nm_platform_wifi_get_mode (ifindex) != NM_802_11_MODE_INFRA) {
nm_device_take_down (NM_DEVICE (self), TRUE);
- wifi_utils_set_mode (priv->wifi_data, NM_802_11_MODE_INFRA);
+ nm_platform_wifi_set_mode (ifindex, NM_802_11_MODE_INFRA);
nm_device_bring_up (NM_DEVICE (self), TRUE, NULL);
}
@@ -2953,7 +2951,6 @@ ensure_hotspot_frequency (NMDeviceWifi *self,
NMSettingWireless *s_wifi,
NMAccessPoint *ap)
{
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
const char *band = nm_setting_wireless_get_band (s_wifi);
const guint32 a_freqs[] = { 5180, 5200, 5220, 5745, 5765, 5785, 5805, 0 };
const guint32 bg_freqs[] = { 2412, 2437, 2462, 2472, 0 };
@@ -2965,9 +2962,9 @@ ensure_hotspot_frequency (NMDeviceWifi *self,
return;
if (g_strcmp0 (band, "a") == 0)
- freq = wifi_utils_find_freq (priv->wifi_data, a_freqs);
+ freq = nm_platform_wifi_find_frequency (nm_device_get_ifindex (NM_DEVICE (self)), a_freqs);
else
- freq = wifi_utils_find_freq (priv->wifi_data, bg_freqs);
+ freq = nm_platform_wifi_find_frequency (nm_device_get_ifindex (NM_DEVICE (self)), bg_freqs);
if (!freq)
freq = (g_strcmp0 (band, "a") == 0) ? 5180 : 2462;
@@ -3099,7 +3096,6 @@ act_stage3_ip4_config_start (NMDevice *device,
NMIP4Config **out_config,
NMDeviceStateReason *reason)
{
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
NMConnection *connection;
NMSettingIP4Config *s_ip4;
const char *method = NM_SETTING_IP4_CONFIG_METHOD_AUTO;
@@ -3112,7 +3108,7 @@ act_stage3_ip4_config_start (NMDevice *device,
/* Indicate that a critical protocol is about to start */
if (strcmp (method, NM_SETTING_IP4_CONFIG_METHOD_AUTO) == 0)
- wifi_utils_indicate_addressing_running (priv->wifi_data, TRUE);
+ nm_platform_wifi_indicate_addressing_running (nm_device_get_ifindex (device), TRUE);
return NM_DEVICE_CLASS (nm_device_wifi_parent_class)->act_stage3_ip4_config_start (device, out_config, reason);
}
@@ -3122,7 +3118,6 @@ act_stage3_ip6_config_start (NMDevice *device,
NMIP6Config **out_config,
NMDeviceStateReason *reason)
{
- NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (device);
NMConnection *connection;
NMSettingIP6Config *s_ip6;
const char *method = NM_SETTING_IP6_CONFIG_METHOD_AUTO;
@@ -3136,7 +3131,7 @@ act_stage3_ip6_config_start (NMDevice *device,
/* Indicate that a critical protocol is about to start */
if (strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_AUTO) == 0 ||
strcmp (method, NM_SETTING_IP6_CONFIG_METHOD_DHCP) == 0)
- wifi_utils_indicate_addressing_running (priv->wifi_data, TRUE);
+ nm_platform_wifi_indicate_addressing_running (nm_device_get_ifindex (device), TRUE);
return NM_DEVICE_CLASS (nm_device_wifi_parent_class)->act_stage3_ip6_config_start (device, out_config, reason);
}
@@ -3277,6 +3272,7 @@ activation_success_handler (NMDevice *dev)
{
NMDeviceWifi *self = NM_DEVICE_WIFI (dev);
NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self);
+ int ifindex = nm_device_get_ifindex (dev);
NMAccessPoint *ap;
struct ether_addr bssid = { {0x0, 0x0, 0x0, 0x0, 0x0, 0x0} };
NMAccessPoint *tmp_ap = NULL;
@@ -3290,7 +3286,7 @@ activation_success_handler (NMDevice *dev)
g_assert (connection);
/* Clear any critical protocol notification in the wifi stack */
- wifi_utils_indicate_addressing_running (priv->wifi_data, FALSE);
+ nm_platform_wifi_indicate_addressing_running (ifindex, FALSE);
/* Clear wireless secrets tries on success */
g_object_set_data (G_OBJECT (connection), WIRELESS_SECRETS_TRIES, NULL);
@@ -3309,13 +3305,13 @@ activation_success_handler (NMDevice *dev)
* But if activation was successful, the card will know the BSSID. Grab
* the BSSID off the card and fill in the BSSID of the activation AP.
*/
- wifi_utils_get_bssid (priv->wifi_data, &bssid);
+ nm_platform_wifi_get_bssid (ifindex, &bssid);
if (!nm_ethernet_address_is_valid (nm_ap_get_address (ap)))
nm_ap_set_address (ap, &bssid);
if (!nm_ap_get_freq (ap))
- nm_ap_set_freq (ap, wifi_utils_get_freq (priv->wifi_data));
+ nm_ap_set_freq (ap, nm_platform_wifi_get_frequency (ifindex));
if (!nm_ap_get_max_bitrate (ap))
- nm_ap_set_max_bitrate (ap, wifi_utils_get_rate (priv->wifi_data));
+ nm_ap_set_max_bitrate (ap, nm_platform_wifi_get_rate (ifindex));
tmp_ap = find_active_ap (self, ap, TRUE);
if (tmp_ap) {
@@ -3363,7 +3359,7 @@ activation_failure_handler (NMDevice *dev)
g_object_set_data (G_OBJECT (connection), WIRELESS_SECRETS_TRIES, NULL);
/* Clear any critical protocol notification in the wifi stack */
- wifi_utils_indicate_addressing_running (NM_DEVICE_WIFI_GET_PRIVATE (dev)->wifi_data, FALSE);
+ nm_platform_wifi_indicate_addressing_running (nm_device_get_ifindex (dev), FALSE);
}
static void
@@ -3426,7 +3422,7 @@ device_state_changed (NMDevice *device,
break;
case NM_DEVICE_STATE_IP_CHECK:
/* Clear any critical protocol notification in the wifi stack */
- wifi_utils_indicate_addressing_running (priv->wifi_data, FALSE);
+ nm_platform_wifi_indicate_addressing_running (nm_device_get_ifindex (device), FALSE);
break;
case NM_DEVICE_STATE_ACTIVATED:
activation_success_handler (device);
@@ -3555,9 +3551,6 @@ dispose (GObject *object)
remove_all_aps (self);
- if (priv->wifi_data)
- wifi_utils_deinit (priv->wifi_data);
-
g_free (priv->ipw_rfkill_path);
if (priv->ipw_rfkill_id) {
g_source_remove (priv->ipw_rfkill_id);
diff --git a/src/platform/nm-fake-platform.c b/src/platform/nm-fake-platform.c
index 3eec6497f0..6215a81e77 100644
--- a/src/platform/nm-fake-platform.c
+++ b/src/platform/nm-fake-platform.c
@@ -678,6 +678,101 @@ gre_get_properties (NMPlatform *platform, int ifindex, NMPlatformGreProperties *
return FALSE;
}
+static gboolean
+wifi_get_capabilities (NMPlatform *platform, int ifindex, NMDeviceWifiCapabilities *caps)
+{
+ NMFakePlatformLink *device = link_get (platform, ifindex);
+
+ g_return_val_if_fail (device, FALSE);
+
+ if (device->link.type != NM_LINK_TYPE_WIFI)
+ return FALSE;
+
+ if (caps) {
+ *caps = ( NM_WIFI_DEVICE_CAP_CIPHER_WEP40
+ | NM_WIFI_DEVICE_CAP_CIPHER_WEP104
+ | NM_WIFI_DEVICE_CAP_CIPHER_TKIP
+ | NM_WIFI_DEVICE_CAP_CIPHER_CCMP
+ | NM_WIFI_DEVICE_CAP_WPA
+ | NM_WIFI_DEVICE_CAP_RSN
+ | NM_WIFI_DEVICE_CAP_AP
+ | NM_WIFI_DEVICE_CAP_ADHOC);
+ }
+ return TRUE;
+}
+
+static gboolean
+wifi_get_bssid (NMPlatform *platform, int ifindex, struct ether_addr *bssid)
+{
+ return FALSE;
+}
+
+static GByteArray *
+wifi_get_ssid (NMPlatform *platform, int ifindex)
+{
+ return NULL;
+}
+
+static guint32
+wifi_get_frequency (NMPlatform *platform, int ifindex)
+{
+ return 0;
+}
+
+static int
+wifi_get_quality (NMPlatform *platform, int ifindex)
+{
+ return 0;
+}
+
+static guint32
+wifi_get_rate (NMPlatform *platform, int ifindex)
+{
+ return 0;
+}
+
+static NM80211Mode
+wifi_get_mode (NMPlatform *platform, int ifindex)
+{
+ return NM_802_11_MODE_UNKNOWN;
+}
+
+static void
+wifi_set_mode (NMPlatform *platform, int ifindex, NM80211Mode mode)
+{
+ ;
+}
+
+static guint32
+wifi_find_frequency (NMPlatform *platform, int ifindex, const guint32 *freqs)
+{
+ return freqs[0];
+}
+
+static void
+wifi_indicate_addressing_running (NMPlatform *platform, int ifindex, gboolean running)
+{
+ ;
+}
+
+static guint32
+mesh_get_channel (NMPlatform *platform, int ifindex)
+{
+ return 0;
+}
+
+static gboolean
+mesh_set_channel (NMPlatform *platform, int ifindex, guint32 channel)
+{
+ return FALSE;
+}
+
+static gboolean
+mesh_set_ssid (NMPlatform *platform, int ifindex, const GByteArray *ssid)
+{
+ return FALSE;
+}
+
/******************************************************************/
static GArray *
@@ -1231,6 +1326,21 @@ nm_fake_platform_class_init (NMFakePlatformClass *klass)
platform_class->vxlan_get_properties = vxlan_get_properties;
platform_class->gre_get_properties = gre_get_properties;
+ platform_class->wifi_get_capabilities = wifi_get_capabilities;
+ platform_class->wifi_get_bssid = wifi_get_bssid;
+ platform_class->wifi_get_ssid = wifi_get_ssid;
+ platform_class->wifi_get_frequency = wifi_get_frequency;
+ platform_class->wifi_get_quality = wifi_get_quality;
+ platform_class->wifi_get_rate = wifi_get_rate;
+ platform_class->wifi_get_mode = wifi_get_mode;
+ platform_class->wifi_set_mode = wifi_set_mode;
+ platform_class->wifi_find_frequency = wifi_find_frequency;
+ platform_class->wifi_indicate_addressing_running = wifi_indicate_addressing_running;
+
+ platform_class->mesh_get_channel = mesh_get_channel;
+ platform_class->mesh_set_channel = mesh_set_channel;
+ platform_class->mesh_set_ssid = mesh_set_ssid;
+
platform_class->ip4_address_get_all = ip4_address_get_all;
platform_class->ip6_address_get_all = ip6_address_get_all;
platform_class->ip4_address_add = ip4_address_add;
diff --git a/src/platform/nm-linux-platform.c b/src/platform/nm-linux-platform.c
index 112e5095e9..439f0e8d02 100644
--- a/src/platform/nm-linux-platform.c
+++ b/src/platform/nm-linux-platform.c
@@ -49,6 +49,7 @@
#include "nm-utils.h"
#include "nm-logging.h"
#include "wifi/wifi-utils.h"
+#include "wifi/wifi-utils-wext.h"
/* This is only included for the translation of VLAN flags */
#include "nm-setting-vlan.h"
@@ -69,6 +70,8 @@ typedef struct {
GUdevClient *udev_client;
GHashTable *udev_devices;
+ GHashTable *wifi_data;
+
int support_kernel_extended_ifa_flags;
} NMLinuxPlatformPrivate;
@@ -1220,6 +1223,7 @@ announce_object (NMPlatform *platform, const struct nl_object *object, ObjectSta
case REMOVED:
check_cache_items (platform, priv->address_cache, device.ifindex);
check_cache_items (platform, priv->route_cache, device.ifindex);
+ g_hash_table_remove (priv->wifi_data, GINT_TO_POINTER (device.ifindex));
break;
default:
break;
@@ -2699,6 +2703,176 @@ gre_get_properties (NMPlatform *platform, int ifindex, NMPlatformGreProperties *
return (err == 0);
}
+static WifiData *
+wifi_get_wifi_data (NMPlatform *platform, int ifindex)
+{
+ NMLinuxPlatformPrivate *priv = NM_LINUX_PLATFORM_GET_PRIVATE (platform);
+ WifiData *wifi_data;
+
+ wifi_data = g_hash_table_lookup (priv->wifi_data, GINT_TO_POINTER (ifindex));
+ if (!wifi_data) {
+ NMLinkType type;
+ const char *ifname;
+
+ type = link_get_type (platform, ifindex);
+ ifname = link_get_name (platform, ifindex);
+
+ if (type == NM_LINK_TYPE_WIFI)
+ wifi_data = wifi_utils_init (ifname, ifindex, TRUE);
+ else if (type == NM_LINK_TYPE_OLPC_MESH) {
+ /* The kernel driver now uses nl80211, but we force use of WEXT because
+ * the cfg80211 interactions are not quite ready to support access to
+ * mesh control through nl80211 just yet.
+ */
+#if HAVE_WEXT
+ wifi_data = wifi_wext_init (ifname, ifindex, FALSE);
+#endif
+ }
+
+ if (wifi_data)
+ g_hash_table_insert (priv->wifi_data, GINT_TO_POINTER (ifindex), wifi_data);
+ }
+
+ return wifi_data;
+}
+
+static gboolean
+wifi_get_capabilities (NMPlatform *platform, int ifindex, NMDeviceWifiCapabilities *caps)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return FALSE;
+
+ if (caps)
+ *caps = wifi_utils_get_caps (wifi_data);
+ return TRUE;
+}
+
+static gboolean
+wifi_get_bssid (NMPlatform *platform, int ifindex, struct ether_addr *bssid)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return FALSE;
+ return wifi_utils_get_bssid (wifi_data, bssid);
+}
+
+static GByteArray *
+wifi_get_ssid (NMPlatform *platform, int ifindex)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return NULL;
+ return wifi_utils_get_ssid (wifi_data);
+}
+
+static guint32
+wifi_get_frequency (NMPlatform *platform, int ifindex)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return 0;
+ return wifi_utils_get_freq (wifi_data);
+}
+
+static gboolean
+wifi_get_quality (NMPlatform *platform, int ifindex)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return FALSE;
+ return wifi_utils_get_qual (wifi_data);
+}
+
+static guint32
+wifi_get_rate (NMPlatform *platform, int ifindex)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return FALSE;
+ return wifi_utils_get_rate (wifi_data);
+}
+
+static NM80211Mode
+wifi_get_mode (NMPlatform *platform, int ifindex)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return NM_802_11_MODE_UNKNOWN;
+
+ return wifi_utils_get_mode (wifi_data);
+}
+
+static void
+wifi_set_mode (NMPlatform *platform, int ifindex, NM80211Mode mode)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (wifi_data)
+ wifi_utils_set_mode (wifi_data, mode);
+}
+
+static guint32
+wifi_find_frequency (NMPlatform *platform, int ifindex, const guint32 *freqs)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return 0;
+
+ return wifi_utils_find_freq (wifi_data, freqs);
+}
+
+static void
+wifi_indicate_addressing_running (NMPlatform *platform, int ifindex, gboolean running)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (wifi_data)
+ wifi_utils_indicate_addressing_running (wifi_data, running);
+}
+
+
+static guint32
+mesh_get_channel (NMPlatform *platform, int ifindex)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return 0;
+
+ return wifi_utils_get_mesh_channel (wifi_data);
+}
+
+static gboolean
+mesh_set_channel (NMPlatform *platform, int ifindex, guint32 channel)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return FALSE;
+
+ return wifi_utils_set_mesh_channel (wifi_data, channel);
+}
+
+static gboolean
+mesh_set_ssid (NMPlatform *platform, int ifindex, const GByteArray *ssid)
+{
+ WifiData *wifi_data = wifi_get_wifi_data (platform, ifindex);
+
+ if (!wifi_data)
+ return FALSE;
+
+ return wifi_utils_set_mesh_ssid (wifi_data, ssid);
+}
+
/******************************************************************/
static int
@@ -3402,6 +3576,8 @@ setup (NMPlatform *platform)
if (nle < 0)
nm_log_warn (LOGD_PLATFORM, "Netlink error: requesting RTM_GETADDR failed with %s", nl_geterror (nle));
+ priv->wifi_data = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) wifi_utils_deinit);
+
return TRUE;
}
@@ -3421,6 +3597,7 @@ nm_linux_platform_finalize (GObject *object)
g_object_unref (priv->udev_client);
g_hash_table_unref (priv->udev_devices);
+ g_hash_table_unref (priv->wifi_data);
G_OBJECT_CLASS (nm_linux_platform_parent_class)->finalize (object);
}
@@ -3492,6 +3669,21 @@ nm_linux_platform_class_init (NMLinuxPlatformClass *klass)
platform_class->vxlan_get_properties = vxlan_get_properties;
platform_class->gre_get_properties = gre_get_properties;
+ platform_class->wifi_get_capabilities = wifi_get_capabilities;
+ platform_class->wifi_get_bssid = wifi_get_bssid;
+ platform_class->wifi_get_ssid = wifi_get_ssid;
+ platform_class->wifi_get_frequency = wifi_get_frequency;
+ platform_class->wifi_get_quality = wifi_get_quality;
+ platform_class->wifi_get_rate = wifi_get_rate;
+ platform_class->wifi_get_mode = wifi_get_mode;
+ platform_class->wifi_set_mode = wifi_set_mode;
+ platform_class->wifi_find_frequency = wifi_find_frequency;
+ platform_class->wifi_indicate_addressing_running = wifi_indicate_addressing_running;
+
+ platform_class->mesh_get_channel = mesh_get_channel;
+ platform_class->mesh_set_channel = mesh_set_channel;
+ platform_class->mesh_set_ssid = mesh_set_ssid;
+
platform_class->ip4_address_get_all = ip4_address_get_all;
platform_class->ip6_address_get_all = ip6_address_get_all;
platform_class->ip4_address_add = ip4_address_add;
diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c
index 6d0436cd95..dc42b50d82 100644
--- a/src/platform/nm-platform.c
+++ b/src/platform/nm-platform.c
@@ -1221,6 +1221,138 @@ nm_platform_gre_get_properties (int ifindex, NMPlatformGreProperties *props)
return klass->gre_get_properties (platform, ifindex, props);
}
+gboolean
+nm_platform_wifi_get_capabilities (int ifindex, NMDeviceWifiCapabilities *caps)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+
+ return klass->wifi_get_capabilities (platform, ifindex, caps);
+}
+
+gboolean
+nm_platform_wifi_get_bssid (int ifindex, struct ether_addr *bssid)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+
+ return klass->wifi_get_bssid (platform, ifindex, bssid);
+}
+
+GByteArray *
+nm_platform_wifi_get_ssid (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, NULL);
+
+ return klass->wifi_get_ssid (platform, ifindex);
+}
+
+guint32
+nm_platform_wifi_get_frequency (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, 0);
+
+ return klass->wifi_get_frequency (platform, ifindex);
+}
+
+int
+nm_platform_wifi_get_quality (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, 0);
+
+ return klass->wifi_get_quality (platform, ifindex);
+}
+
+guint32
+nm_platform_wifi_get_rate (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, 0);
+
+ return klass->wifi_get_rate (platform, ifindex);
+}
+
+NM80211Mode
+nm_platform_wifi_get_mode (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, NM_802_11_MODE_UNKNOWN);
+
+ return klass->wifi_get_mode (platform, ifindex);
+}
+
+void
+nm_platform_wifi_set_mode (int ifindex, NM80211Mode mode)
+{
+ reset_error ();
+
+ g_return_if_fail (ifindex > 0);
+
+ klass->wifi_set_mode (platform, ifindex, mode);
+}
+
+guint32
+nm_platform_wifi_find_frequency (int ifindex, const guint32 *freqs)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, 0);
+ g_return_val_if_fail (freqs != NULL, 0);
+
+ return klass->wifi_find_frequency (platform, ifindex, freqs);
+}
+
+void
+nm_platform_wifi_indicate_addressing_running (int ifindex, gboolean running)
+{
+ reset_error ();
+
+ g_return_if_fail (ifindex > 0);
+
+ klass->wifi_indicate_addressing_running (platform, ifindex, running);
+}
+
+guint32
+nm_platform_mesh_get_channel (int ifindex)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, 0);
+
+ return klass->mesh_get_channel (platform, ifindex);
+}
+
+gboolean
+nm_platform_mesh_set_channel (int ifindex, guint32 channel)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+
+ return klass->mesh_set_channel (platform, ifindex, channel);
+}
+
+gboolean
+nm_platform_mesh_set_ssid (int ifindex, const GByteArray *ssid)
+{
+ reset_error ();
+
+ g_return_val_if_fail (ifindex > 0, FALSE);
+ g_return_val_if_fail (ssid != NULL, FALSE);
+
+ return klass->mesh_set_ssid (platform, ifindex, ssid);
+}
+
/******************************************************************/
GArray *
diff --git a/src/platform/nm-platform.h b/src/platform/nm-platform.h
index 3128ba5fb7..6be78108f1 100644
--- a/src/platform/nm-platform.h
+++ b/src/platform/nm-platform.h
@@ -24,9 +24,12 @@
#include <glib-object.h>
#include "nm-glib-compat.h"
#include <netinet/in.h>
+#include <net/ethernet.h>
#include <linux/if.h>
#include <linux/if_addr.h>
+#include <NetworkManager.h>
+
#define NM_TYPE_PLATFORM (nm_platform_get_type ())
#define NM_PLATFORM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_PLATFORM, NMPlatform))
#define NM_PLATFORM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_PLATFORM, NMPlatformClass))
@@ -343,6 +346,21 @@ typedef struct {
gboolean (*vxlan_get_properties) (NMPlatform *, int ifindex, NMPlatformVxlanProperties *props);
gboolean (*gre_get_properties) (NMPlatform *, int ifindex, NMPlatformGreProperties *props);
+ gboolean (*wifi_get_capabilities) (NMPlatform *, int ifindex, NMDeviceWifiCapabilities *caps);
+ gboolean (*wifi_get_bssid) (NMPlatform *, int ifindex, struct ether_addr *bssid);
+ GByteArray *(*wifi_get_ssid) (NMPlatform *, int ifindex);
+ guint32 (*wifi_get_frequency) (NMPlatform *, int ifindex);
+ int (*wifi_get_quality) (NMPlatform *, int ifindex);
+ guint32 (*wifi_get_rate) (NMPlatform *, int ifindex);
+ NM80211Mode (*wifi_get_mode) (NMPlatform *, int ifindex);
+ void (*wifi_set_mode) (NMPlatform *, int ifindex, NM80211Mode mode);
+ guint32 (*wifi_find_frequency) (NMPlatform *, int ifindex, const guint32 *freqs);
+ void (*wifi_indicate_addressing_running) (NMPlatform *, int ifindex, gboolean running);
+
+ guint32 (*mesh_get_channel) (NMPlatform *, int ifindex);
+ gboolean (*mesh_set_channel) (NMPlatform *, int ifindex, guint32 channel);
+ gboolean (*mesh_set_ssid) (NMPlatform *, int ifindex, const GByteArray *ssid);
+
GArray * (*ip4_address_get_all) (NMPlatform *, int ifindex);
GArray * (*ip6_address_get_all) (NMPlatform *, int ifindex);
gboolean (*ip4_address_add) (NMPlatform *, int ifindex,
@@ -474,6 +492,21 @@ gboolean nm_platform_macvlan_get_properties (int ifindex, NMPlatformMacvlanPrope
gboolean nm_platform_vxlan_get_properties (int ifindex, NMPlatformVxlanProperties *props);
gboolean nm_platform_gre_get_properties (int ifindex, NMPlatformGreProperties *props);
+gboolean nm_platform_wifi_get_capabilities (int ifindex, NMDeviceWifiCapabilities *caps);
+gboolean nm_platform_wifi_get_bssid (int ifindex, struct ether_addr *bssid);
+GByteArray *nm_platform_wifi_get_ssid (int ifindex);
+guint32 nm_platform_wifi_get_frequency (int ifindex);
+int nm_platform_wifi_get_quality (int ifindex);
+guint32 nm_platform_wifi_get_rate (int ifindex);
+NM80211Mode nm_platform_wifi_get_mode (int ifindex);
+void nm_platform_wifi_set_mode (int ifindex, NM80211Mode mode);
+guint32 nm_platform_wifi_find_frequency (int ifindex, const guint32 *freqs);
+void nm_platform_wifi_indicate_addressing_running (int ifindex, gboolean running);
+
+guint32 nm_platform_mesh_get_channel (int ifindex);
+gboolean nm_platform_mesh_set_channel (int ifindex, guint32 channel);
+gboolean nm_platform_mesh_set_ssid (int ifindex, const GByteArray *ssid);
+
GArray *nm_platform_ip4_address_get_all (int ifindex);
GArray *nm_platform_ip6_address_get_all (int ifindex);
gboolean nm_platform_ip4_address_add (int ifindex,
diff --git a/src/wifi/wifi-utils-nl80211.c b/src/platform/wifi/wifi-utils-nl80211.c
index 0423ec08ee..6da4a5737a 100644
--- a/src/wifi/wifi-utils-nl80211.c
+++ b/src/platform/wifi/wifi-utils-nl80211.c
@@ -51,22 +51,24 @@ typedef struct {
int num_freqs;
} WifiDataNl80211;
-static int ack_handler (struct nl_msg *msg, void *arg)
+static int
+ack_handler (struct nl_msg *msg, void *arg)
{
int *done = arg;
*done = 1;
return NL_STOP;
}
-static int finish_handler (struct nl_msg *msg, void *arg)
+static int
+finish_handler (struct nl_msg *msg, void *arg)
{
int *done = arg;
*done = 1;
return NL_SKIP;
}
-static int error_handler (struct sockaddr_nl *nla, struct nlmsgerr *err,
- void *arg)
+static int
+error_handler (struct sockaddr_nl *nla, struct nlmsgerr *err, void *arg)
{
int *done = arg;
*done = err->error;
@@ -101,7 +103,7 @@ static int
_nl80211_send_and_recv (struct nl_sock *nl_sock,
struct nl_cb *nl_cb,
struct nl_msg *msg,
- int (*valid_handler)(struct nl_msg *, void *),
+ int (*valid_handler) (struct nl_msg *, void *),
void *valid_data)
{
struct nl_cb *cb;
@@ -158,10 +160,11 @@ _nl80211_send_and_recv (struct nl_sock *nl_sock,
static int
nl80211_send_and_recv (WifiDataNl80211 *nl80211,
struct nl_msg *msg,
- int (*valid_handler)(struct nl_msg *, void *),
+ int (*valid_handler) (struct nl_msg *, void *),
void *valid_data)
{
- return _nl80211_send_and_recv (nl80211->nl_sock, nl80211->nl_cb, msg, valid_handler, valid_data);
+ return _nl80211_send_and_recv (nl80211->nl_sock, nl80211->nl_cb, msg,
+ valid_handler, valid_data);
}
static void
@@ -180,12 +183,13 @@ struct nl80211_iface_info {
NM80211Mode mode;
};
-static int nl80211_iface_info_handler (struct nl_msg *msg, void *arg)
+static int
+nl80211_iface_info_handler (struct nl_msg *msg, void *arg)
{
struct nl80211_iface_info *info = arg;
struct genlmsghdr *gnlh = nlmsg_data (nlmsg_hdr (msg));
struct nlattr *tb[NL80211_ATTR_MAX + 1];
-
+
if (nla_parse (tb, NL80211_ATTR_MAX, genlmsg_attrdata (gnlh, 0),
genlmsg_attrlen (gnlh, 0), NULL) < 0)
return NL_SKIP;
@@ -204,7 +208,7 @@ static int nl80211_iface_info_handler (struct nl_msg *msg, void *arg)
info->mode = NM_802_11_MODE_INFRA;
break;
}
-
+
return NL_SKIP;
}
@@ -258,7 +262,8 @@ wifi_nl80211_set_mode (WifiData *data, const NM80211Mode mode)
}
/* @divisor: pass what value @xbm should be divided by to get dBm */
-static guint32 nl80211_xbm_to_percent (gint32 xbm, guint32 divisor)
+static guint32
+nl80211_xbm_to_percent (gint32 xbm, guint32 divisor)
{
#define NOISE_FLOOR_DBM -90
#define SIGNAL_MAX_DBM -20
@@ -281,8 +286,9 @@ struct nl80211_bss_info {
#define WLAN_EID_SSID 0
-static void find_ssid (guint8 *ies, guint32 ies_len,
- guint8 **ssid, guint32 *ssid_len)
+static void
+find_ssid (guint8 *ies, guint32 ies_len,
+ guint8 **ssid, guint32 *ssid_len)
{
*ssid = NULL;
*ssid_len = 0;
@@ -300,7 +306,8 @@ static void find_ssid (guint8 *ies, guint32 ies_len,
*ssid = ies + 2;
}
-static int nl80211_bss_dump_handler (struct nl_msg *msg, void *arg)
+static int
+nl80211_bss_dump_handler (struct nl_msg *msg, void *arg)
{
struct nl80211_bss_info *info = arg;
struct genlmsghdr *gnlh = nlmsg_data (nlmsg_hdr (msg));
@@ -318,7 +325,7 @@ static int nl80211_bss_dump_handler (struct nl_msg *msg, void *arg)
[NL80211_BSS_STATUS] = { .type = NLA_U32 },
};
guint32 status;
-
+
if (nla_parse (tb, NL80211_ATTR_MAX, genlmsg_attrdata (gnlh, 0),
genlmsg_attrlen (gnlh, 0), NULL) < 0)
return NL_SKIP;
@@ -362,7 +369,7 @@ static int nl80211_bss_dump_handler (struct nl_msg *msg, void *arg)
find_ssid(nla_data (bss[NL80211_BSS_INFORMATION_ELEMENTS]),
nla_len (bss[NL80211_BSS_INFORMATION_ELEMENTS]),
&ssid, &ssid_len);
- if (ssid && ssid_len && ssid_len <= sizeof(info->ssid)) {
+ if (ssid && ssid_len && ssid_len <= sizeof (info->ssid)) {
memcpy (info->ssid, ssid, ssid_len);
info->ssid_len = ssid_len;
}
@@ -373,12 +380,13 @@ static int nl80211_bss_dump_handler (struct nl_msg *msg, void *arg)
return NL_SKIP;
}
-static void nl80211_get_bss_info (WifiDataNl80211 *nl80211,
- struct nl80211_bss_info *bss_info)
+static void
+nl80211_get_bss_info (WifiDataNl80211 *nl80211,
+ struct nl80211_bss_info *bss_info)
{
struct nl_msg *msg;
- memset(bss_info, 0, sizeof(*bss_info));
+ memset(bss_info, 0, sizeof (*bss_info));
msg = nl80211_alloc_msg (nl80211, NL80211_CMD_GET_SCAN, NLM_F_DUMP);
@@ -451,7 +459,8 @@ struct nl80211_station_info {
gboolean signal_valid;
};
-static int nl80211_station_handler (struct nl_msg *msg, void *arg)
+static int
+nl80211_station_handler (struct nl_msg *msg, void *arg)
{
struct nl80211_station_info *info = arg;
struct nlattr *tb[NL80211_ATTR_MAX + 1];
@@ -479,23 +488,23 @@ static int nl80211_station_handler (struct nl_msg *msg, void *arg)
};
if (nla_parse (tb, NL80211_ATTR_MAX, genlmsg_attrdata (gnlh, 0),
- genlmsg_attrlen (gnlh, 0), NULL) < 0)
+ genlmsg_attrlen (gnlh, 0), NULL) < 0)
return NL_SKIP;
if (tb[NL80211_ATTR_STA_INFO] == NULL)
return NL_SKIP;
if (nla_parse_nested (sinfo, NL80211_STA_INFO_MAX,
- tb[NL80211_ATTR_STA_INFO],
- stats_policy))
+ tb[NL80211_ATTR_STA_INFO],
+ stats_policy))
return NL_SKIP;
if (sinfo[NL80211_STA_INFO_TX_BITRATE] == NULL)
return NL_SKIP;
if (nla_parse_nested (rinfo, NL80211_RATE_INFO_MAX,
- sinfo[NL80211_STA_INFO_TX_BITRATE],
- rate_policy))
+ sinfo[NL80211_STA_INFO_TX_BITRATE],
+ rate_policy))
return NL_SKIP;
if (rinfo[NL80211_RATE_INFO_BITRATE] == NULL)
@@ -513,13 +522,14 @@ static int nl80211_station_handler (struct nl_msg *msg, void *arg)
return NL_SKIP;
}
-static void nl80211_get_ap_info (WifiDataNl80211 *nl80211,
- struct nl80211_station_info *sta_info)
+static void
+nl80211_get_ap_info (WifiDataNl80211 *nl80211,
+ struct nl80211_station_info *sta_info)
{
struct nl_msg *msg;
struct nl80211_bss_info bss_info;
- memset(sta_info, 0, sizeof(*sta_info));
+ memset(sta_info, 0, sizeof (*sta_info));
nl80211_get_bss_info (nl80211, &bss_info);
if (!bss_info.valid)
@@ -635,7 +645,7 @@ static int nl80211_wiphy_info_handler (struct nl_msg *msg, void *arg)
};
if (nla_parse (tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
- genlmsg_attrlen (gnlh, 0), NULL) < 0)
+ genlmsg_attrlen (gnlh, 0), NULL) < 0)
return NL_SKIP;
if (tb[NL80211_ATTR_WIPHY_BANDS] == NULL)
@@ -693,18 +703,18 @@ static int nl80211_wiphy_info_handler (struct nl_msg *msg, void *arg)
}
}
- info->freqs = g_malloc0 (sizeof(guint32) * info->num_freqs);
+ info->freqs = g_malloc0 (sizeof (guint32) * info->num_freqs);
freq_idx = 0;
nla_for_each_nested (nl_band, tb[NL80211_ATTR_WIPHY_BANDS], rem_band) {
if (nla_parse_nested (tb_band, NL80211_BAND_ATTR_MAX, nl_band,
- NULL) < 0)
+ NULL) < 0)
return NL_SKIP;
nla_for_each_nested(nl_freq, tb_band[NL80211_BAND_ATTR_FREQS],
- rem_freq) {
+ rem_freq) {
nla_parse_nested (tb_freq, NL80211_FREQUENCY_ATTR_MAX,
- nl_freq, freq_policy);
+ nl_freq, freq_policy);
if (!tb_freq[NL80211_FREQUENCY_ATTR_FREQ])
continue;
@@ -720,7 +730,7 @@ static int nl80211_wiphy_info_handler (struct nl_msg *msg, void *arg)
int i;
__u32 *ciphers = nla_data (tb[NL80211_ATTR_CIPHER_SUITES]);
- num = nla_len (tb[NL80211_ATTR_CIPHER_SUITES]) / sizeof(__u32);
+ num = nla_len (tb[NL80211_ATTR_CIPHER_SUITES]) / sizeof (__u32);
for (i = 0; i < num; i++) {
switch (ciphers[i]) {
case WLAN_CIPHER_SUITE_WEP40:
@@ -730,12 +740,12 @@ static int nl80211_wiphy_info_handler (struct nl_msg *msg, void *arg)
info->caps |= NM_WIFI_DEVICE_CAP_CIPHER_WEP104;
break;
case WLAN_CIPHER_SUITE_TKIP:
- info->caps |= NM_WIFI_DEVICE_CAP_CIPHER_TKIP |
- NM_WIFI_DEVICE_CAP_WPA;
+ info->caps |= (NM_WIFI_DEVICE_CAP_CIPHER_TKIP |
+ NM_WIFI_DEVICE_CAP_WPA);
break;
case WLAN_CIPHER_SUITE_CCMP:
- info->caps |= NM_WIFI_DEVICE_CAP_CIPHER_CCMP |
- NM_WIFI_DEVICE_CAP_RSN;
+ info->caps |= (NM_WIFI_DEVICE_CAP_CIPHER_CCMP |
+ NM_WIFI_DEVICE_CAP_RSN);
break;
case WLAN_CIPHER_SUITE_AES_CMAC:
case WLAN_CIPHER_SUITE_GCMP:
@@ -804,7 +814,7 @@ wifi_nl80211_init (const char *iface, int ifindex)
msg = nl80211_alloc_msg (nl80211, NL80211_CMD_GET_WIPHY, 0);
if (nl80211_send_and_recv (nl80211, msg, nl80211_wiphy_info_handler,
- &device_info) < 0) {
+ &device_info) < 0) {
nm_log_dbg (LOGD_HW | LOGD_WIFI,
"(%s): NL80211_CMD_GET_WIPHY request failed",
nl80211->parent.iface);
diff --git a/src/wifi/wifi-utils-nl80211.h b/src/platform/wifi/wifi-utils-nl80211.h
index 2a7fe874a2..2a7fe874a2 100644
--- a/src/wifi/wifi-utils-nl80211.h
+++ b/src/platform/wifi/wifi-utils-nl80211.h
diff --git a/src/wifi/wifi-utils-private.h b/src/platform/wifi/wifi-utils-private.h
index 769e25298e..769e25298e 100644
--- a/src/wifi/wifi-utils-private.h
+++ b/src/platform/wifi/wifi-utils-private.h
diff --git a/src/wifi/wifi-utils-wext.c b/src/platform/wifi/wifi-utils-wext.c
index 5022550339..a042944c2f 100644
--- a/src/wifi/wifi-utils-wext.c
+++ b/src/platform/wifi/wifi-utils-wext.c
@@ -69,7 +69,7 @@ struct iw_range_with_scan_capa
guint8 old_num_frequency;
guint8 scan_capa;
-/* don't need the rest... */
+ /* don't need the rest... */
};
static guint32
@@ -284,7 +284,7 @@ wext_qual_to_percent (const struct iw_quality *qual,
max_qual->updated);
/* Try using the card's idea of the signal quality first as long as it tells us what the max quality is.
- * Drivers that fill in quality values MUST treat them as percentages, ie the "Link Quality" MUST be
+ * Drivers that fill in quality values MUST treat them as percentages, ie the "Link Quality" MUST be
* bounded by 0 and max_qual->qual, and MUST change in a linear fashion. Within those bounds, drivers
* are free to use whatever they want to calculate "Link Quality".
*/
@@ -302,10 +302,10 @@ wext_qual_to_percent (const struct iw_quality *qual,
* If drivers don't conform to it, they are wrong and need to be fixed.
*/
- if ( (max_qual->level == 0) && !(max_qual->updated & IW_QUAL_LEVEL_INVALID) /* Valid max_qual->level == 0 */
- && !(qual->updated & IW_QUAL_LEVEL_INVALID) /* Must have valid qual->level */
- && ( ((max_qual->noise > 0) && !(max_qual->updated & IW_QUAL_NOISE_INVALID)) /* Must have valid max_qual->noise */
- || ((qual->noise > 0) && !(qual->updated & IW_QUAL_NOISE_INVALID))) /* OR valid qual->noise */
+ if ( (max_qual->level == 0) && !(max_qual->updated & IW_QUAL_LEVEL_INVALID) /* Valid max_qual->level == 0 */
+ && !(qual->updated & IW_QUAL_LEVEL_INVALID) /* Must have valid qual->level */
+ && ( ((max_qual->noise > 0) && !(max_qual->updated & IW_QUAL_NOISE_INVALID)) /* Must have valid max_qual->noise */
+ || ((qual->noise > 0) && !(qual->updated & IW_QUAL_NOISE_INVALID))) /* OR valid qual->noise */
) {
/* Absolute power values (dBm) */
@@ -325,9 +325,8 @@ wext_qual_to_percent (const struct iw_quality *qual,
noise = CLAMP (noise, FALLBACK_NOISE_FLOOR_DBM, FALLBACK_SIGNAL_MAX_DBM);
/* A sort of signal-to-noise ratio calculation */
- level_percent = (int)(100 - 70 *(
- ((double)max_level - (double)level) /
- ((double)max_level - (double)noise)));
+ level_percent = (int) (100 - 70 * (((double)max_level - (double)level) /
+ ((double)max_level - (double)noise)));
nm_log_dbg (LOGD_WIFI, "QL1: level_percent is %d. max_level %d, level %d, noise_floor %d.",
level_percent, max_level, level, noise);
} else if ( (max_qual->level != 0)
@@ -670,4 +669,3 @@ wifi_wext_is_wifi (const char *iface)
}
return is_wifi;
}
-
diff --git a/src/wifi/wifi-utils-wext.h b/src/platform/wifi/wifi-utils-wext.h
index 96ad74eb40..96ad74eb40 100644
--- a/src/wifi/wifi-utils-wext.h
+++ b/src/platform/wifi/wifi-utils-wext.h
diff --git a/src/wifi/wifi-utils.c b/src/platform/wifi/wifi-utils.c
index 2902d0c8b0..2902d0c8b0 100644
--- a/src/wifi/wifi-utils.c
+++ b/src/platform/wifi/wifi-utils.c
diff --git a/src/wifi/wifi-utils.h b/src/platform/wifi/wifi-utils.h
index a3d3e9aaeb..fa9dc14c61 100644
--- a/src/wifi/wifi-utils.h
+++ b/src/platform/wifi/wifi-utils.h
@@ -59,6 +59,9 @@ guint32 wifi_utils_get_rate (WifiData *data);
/* Returns quality 0 - 100% on succes, or -1 on error */
int wifi_utils_get_qual (WifiData *data);
+/* Tells the driver DHCP or SLAAC is running */
+gboolean wifi_utils_indicate_addressing_running (WifiData *data, gboolean running);
+
/* OLPC Mesh-only functions */
guint32 wifi_utils_get_mesh_channel (WifiData *data);
@@ -67,6 +70,4 @@ gboolean wifi_utils_set_mesh_channel (WifiData *data, guint32 channel);
gboolean wifi_utils_set_mesh_ssid (WifiData *data, const GByteArray *ssid);
-gboolean wifi_utils_indicate_addressing_running (WifiData *data, gboolean running);
-
#endif /* WIFI_UTILS_H */
diff --git a/src/settings/plugins/ifcfg-rh/Makefile.am b/src/settings/plugins/ifcfg-rh/Makefile.am
index f0bc54b081..7feb262e79 100644
--- a/src/settings/plugins/ifcfg-rh/Makefile.am
+++ b/src/settings/plugins/ifcfg-rh/Makefile.am
@@ -27,7 +27,6 @@ libifcfg_rh_io_la_SOURCES = \
AM_CPPFLAGS = \
-I$(top_srcdir)/src/ \
-I$(top_srcdir)/src/platform \
- -I$(top_srcdir)/src/wifi \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/src/posix-signals \
-I$(top_srcdir)/src/config \
diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c
index 8b82ff9ac4..c6aa393f25 100644
--- a/src/settings/plugins/ifcfg-rh/reader.c
+++ b/src/settings/plugins/ifcfg-rh/reader.c
@@ -53,7 +53,7 @@
#include <nm-util-private.h>
#include <nm-utils.h>
-#include "wifi-utils.h"
+#include "nm-platform.h"
#include "nm-posix-signals.h"
#include "NetworkManagerUtils.h"
@@ -4723,6 +4723,21 @@ is_vlan_device (const char *name, shvarFile *parsed)
return FALSE;
}
+static gboolean
+is_wifi_device (const char *name, shvarFile *parsed)
+{
+ int ifindex;
+
+ g_return_val_if_fail (name != NULL, FALSE);
+ g_return_val_if_fail (parsed != NULL, FALSE);
+
+ ifindex = nm_platform_link_get_ifindex (name);
+ if (ifindex == 0)
+ return FALSE;
+
+ return nm_platform_link_get_type (ifindex) == NM_LINK_TYPE_WIFI;
+}
+
static void
parse_prio_map_list (NMSettingVlan *s_vlan,
shvarFile *ifcfg,
@@ -5130,8 +5145,7 @@ connection_from_file (const char *filename,
type = g_strdup (TYPE_BOND);
else if (is_vlan_device (device, parsed))
type = g_strdup (TYPE_VLAN);
- /* Test wireless extensions */
- else if (wifi_utils_is_wifi (device, NULL))
+ else if (is_wifi_device (device, parsed))
type = g_strdup (TYPE_WIRELESS);
else
type = g_strdup (TYPE_ETHERNET);
diff --git a/src/settings/plugins/ifcfg-rh/tests/Makefile.am b/src/settings/plugins/ifcfg-rh/tests/Makefile.am
index 6df9ac11b1..c360bba44c 100644
--- a/src/settings/plugins/ifcfg-rh/tests/Makefile.am
+++ b/src/settings/plugins/ifcfg-rh/tests/Makefile.am
@@ -16,7 +16,6 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/src/ \
-I$(top_srcdir)/src/platform \
-I$(top_srcdir)/src/settings \
- -I$(top_srcdir)/src/wifi \
-I$(top_srcdir)/src/posix-signals \
-I$(srcdir)/../ \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
diff --git a/src/settings/plugins/ifnet/Makefile.am b/src/settings/plugins/ifnet/Makefile.am
index a849552d16..75048752bb 100644
--- a/src/settings/plugins/ifnet/Makefile.am
+++ b/src/settings/plugins/ifnet/Makefile.am
@@ -5,7 +5,7 @@ SUBDIRS = . tests
AM_CPPFLAGS = \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/config \
- -I$(top_srcdir)/src/wifi \
+ -I$(top_srcdir)/src/platform \
-I$(top_srcdir)/src/settings \
-I$(top_srcdir)/include \
-I$(top_builddir)/include \
diff --git a/src/settings/plugins/ifnet/net_parser.c b/src/settings/plugins/ifnet/net_parser.c
index b39767b651..9e39925274 100644
--- a/src/settings/plugins/ifnet/net_parser.c
+++ b/src/settings/plugins/ifnet/net_parser.c
@@ -24,11 +24,10 @@
#include <stdio.h>
#include <sys/ioctl.h>
-#include <net/if.h>
#include <unistd.h>
#include "plugin.h"
-#include "wifi-utils.h"
+#include "nm-platform.h"
#include "net_parser.h"
#include "net_utils.h"
@@ -172,13 +171,16 @@ init_block_by_line (gchar * buf)
else if (ignore_connection_name (pos)) {
/* ignored connection */
conn = add_new_connection_config ("ignore", pos);
- } else
- if (if_nametoindex (pos) && !wifi_utils_is_wifi (pos, NULL))
+ } else {
+ int ifindex = nm_platform_link_get_ifindex (pos);
+
+ if (ifindex && nm_platform_link_get_type (ifindex) != NM_LINK_TYPE_WIFI)
/* wired connection */
conn = add_new_connection_config ("wired", pos);
else
/* wireless connection */
conn = add_new_connection_config ("wireless", pos);
+ }
}
data = g_strdup (key_value[1]);
tmp = strip_string (data, '"');
diff --git a/src/settings/plugins/ifnet/tests/Makefile.am b/src/settings/plugins/ifnet/tests/Makefile.am
index 31d35db655..01e57bc246 100644
--- a/src/settings/plugins/ifnet/tests/Makefile.am
+++ b/src/settings/plugins/ifnet/tests/Makefile.am
@@ -12,7 +12,7 @@ AM_CPPFLAGS= \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/config \
-I$(top_srcdir)/src/settings \
- -I$(top_srcdir)/src/wifi \
+ -I$(top_srcdir)/src/platform \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
$(CHECK_CFLAGS) \
$(GLIB_CFLAGS) \