2005-12-14 Dan Williams <dcbw@redhat.com>
* include/NetworkManager.h - Update and split 802.11 wireless-specific capabilities from generic device capabilities * src/NetworkManagerDevice.c src/NetworkManagerDevicePrivate.h - (nm_device_wireless_discover_capabilities): Move 802.11 wireless-specific capability checks to NetworkManagerWireless.c - Rename NMDeviceWirelessOptions -> NMDevice80211WirelessOptions - Rename NMDeviceWiredOptions -> NMDevice80211EthernetOptions * src/NetworkManagerWireless.[ch] - (nm_802_11_wireless_discover_capabilities): Check extended 802.11 wireless-specific capabilities of the driver git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@1188 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
18
ChangeLog
18
ChangeLog
@@ -11,6 +11,24 @@
|
||||
support.
|
||||
* src/backends/NetworkManagerSuSE.c: add NIS support, baby.
|
||||
|
||||
2005-12-14 Dan Williams <dcbw@redhat.com>
|
||||
|
||||
* include/NetworkManager.h
|
||||
- Update and split 802.11 wireless-specific capabilities from
|
||||
generic device capabilities
|
||||
|
||||
* src/NetworkManagerDevice.c
|
||||
src/NetworkManagerDevicePrivate.h
|
||||
- (nm_device_wireless_discover_capabilities): Move 802.11
|
||||
wireless-specific capability checks to
|
||||
NetworkManagerWireless.c
|
||||
- Rename NMDeviceWirelessOptions -> NMDevice80211WirelessOptions
|
||||
- Rename NMDeviceWiredOptions -> NMDevice80211EthernetOptions
|
||||
|
||||
* src/NetworkManagerWireless.[ch]
|
||||
- (nm_802_11_wireless_discover_capabilities): Check extended
|
||||
802.11 wireless-specific capabilities of the driver
|
||||
|
||||
2005-12-14 Dan Williams <dcbw@redhat.com>
|
||||
|
||||
* src/nm-ap-security*.[ch]
|
||||
|
@@ -94,15 +94,33 @@ typedef enum NMEncKeyType
|
||||
|
||||
|
||||
/*
|
||||
* Device capability bits
|
||||
* General device capability bits
|
||||
*
|
||||
*/
|
||||
#define NM_DEVICE_CAP_NONE 0x0000
|
||||
#define NM_DEVICE_CAP_NM_SUPPORTED 0x0001
|
||||
#define NM_DEVICE_CAP_CARRIER_DETECT 0x0002
|
||||
#define NM_DEVICE_CAP_WIRELESS_SCAN 0x0004
|
||||
#define NM_DEVICE_CAP_WIRELESS_WPA 0x0008
|
||||
#define NM_DEVICE_CAP_WIRELESS_WPA2 0x0010
|
||||
#define NM_DEVICE_CAP_NONE 0x00000000
|
||||
#define NM_DEVICE_CAP_NM_SUPPORTED 0x00000001
|
||||
#define NM_DEVICE_CAP_CARRIER_DETECT 0x00000002
|
||||
#define NM_DEVICE_CAP_WIRELESS_SCAN 0x00000004
|
||||
|
||||
|
||||
/* 802.11 wireless-specific device capability bits */
|
||||
#define NM_802_11_CAP_NONE 0x00000000
|
||||
#define NM_802_11_CAP_KEY_MGMT_WPA 0x00000001
|
||||
#define NM_802_11_CAP_KEY_MGMT_WPA_PSK 0x00000002
|
||||
#define NM_802_11_CAP_KEY_MGMT_WPA2 0x00000004
|
||||
#define NM_802_11_CAP_KEY_MGMT_WPA2_PSK 0x00000008
|
||||
#define NM_802_11_CAP_KEY_MGMT_RESERVED1 0x00000010
|
||||
#define NM_802_11_CAP_KEY_MGMT_RESERVED2 0x00000020
|
||||
#define NM_802_11_CAP_KEY_MGMT_RESERVED3 0x00000040
|
||||
#define NM_802_11_CAP_KEY_MGMT_RESERVED4 0x00000080
|
||||
#define NM_802_11_CAP_CIPHER_WEP40 0x00000100
|
||||
#define NM_802_11_CAP_CIPHER_WEP104 0x00000200
|
||||
#define NM_802_11_CAP_CIPHER_TKIP 0x00000400
|
||||
#define NM_802_11_CAP_CIPHER_CCMP 0x00000800
|
||||
#define NM_802_11_CAP_CIPHER_RESERVED1 0x00001000
|
||||
#define NM_802_11_CAP_CIPHER_RESERVED2 0x00002000
|
||||
#define NM_802_11_CAP_CIPHER_RESERVED3 0x00004000
|
||||
#define NM_802_11_CAP_CIPHER_RESERVED4 0x00008000
|
||||
|
||||
|
||||
/*
|
||||
|
@@ -334,8 +334,8 @@ void nm_device_copy_allowed_to_dev_list (NMDevice *dev, NMAccessPointList *allow
|
||||
*/
|
||||
static gboolean nm_device_wireless_init (NMDevice *dev)
|
||||
{
|
||||
NMSock *sk;
|
||||
NMDeviceWirelessOptions *opts = &(dev->options.wireless);
|
||||
NMDevice80211WirelessOptions * opts = &(dev->options.wireless);
|
||||
NMSock * sk;
|
||||
|
||||
g_return_val_if_fail (dev != NULL, FALSE);
|
||||
g_return_val_if_fail (nm_device_is_802_11_wireless (dev), FALSE);
|
||||
@@ -359,8 +359,16 @@ static gboolean nm_device_wireless_init (NMDevice *dev)
|
||||
opts->we_version = 0;
|
||||
if ((sk = nm_dev_sock_open (dev, DEV_WIRELESS, __FUNCTION__, NULL)))
|
||||
{
|
||||
iwrange range;
|
||||
if (iw_get_range_info (nm_dev_sock_get_fd (sk), nm_device_get_iface (dev), &range) >= 0)
|
||||
struct iw_range range;
|
||||
struct iwreq wrq;
|
||||
int minlen = ((char *) &range.enc_capa) - (char *) &range + sizeof (range.enc_capa);
|
||||
|
||||
memset (&wrq, 0, sizeof (wrq));
|
||||
strncpy (wrq.ifr_name, nm_device_get_iface (dev), IFNAMSIZ);
|
||||
wrq.u.data.pointer = (caddr_t) ⦥
|
||||
wrq.u.data.length = sizeof (struct iw_range);
|
||||
|
||||
if (ioctl (nm_dev_sock_get_fd (sk), SIOCGIWRANGE, &wrq) >= 0)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -379,6 +387,9 @@ static gboolean nm_device_wireless_init (NMDevice *dev)
|
||||
opts->freqs[i] = iw_freq2float (&(range.freq[i]));
|
||||
|
||||
opts->we_version = range.we_version_compiled;
|
||||
|
||||
/* 802.11 wireless-specific capabilities */
|
||||
opts->capabilities = nm_802_11_wireless_discover_capabilities (dev, &range, wrq.u.data.length);
|
||||
}
|
||||
nm_dev_sock_close (sk);
|
||||
}
|
||||
@@ -653,38 +664,6 @@ static guint32 nm_device_wireless_discover_capabilities (NMDevice *dev)
|
||||
}
|
||||
}
|
||||
|
||||
/* A test wireless device is a pro at WPA and WPA2 */
|
||||
if (dev->test_device)
|
||||
caps |= NM_DEVICE_CAP_WIRELESS_WPA | NM_DEVICE_CAP_WIRELESS_WPA2;
|
||||
else
|
||||
{
|
||||
if ((sk = nm_dev_sock_open (dev, DEV_WIRELESS, __FUNCTION__, NULL)))
|
||||
{
|
||||
struct iw_range range;
|
||||
struct iwreq wrq;
|
||||
|
||||
memset (&wrq, 0, sizeof (wrq));
|
||||
strncpy (wrq.ifr_name, nm_device_get_iface (dev), IFNAMSIZ);
|
||||
wrq.u.data.pointer = (caddr_t) ⦥
|
||||
wrq.u.data.length = sizeof (struct iw_range);
|
||||
|
||||
if (ioctl (nm_dev_sock_get_fd (sk), SIOCGIWRANGE, &wrq) >= 0)
|
||||
{
|
||||
if (range.enc_capa & IW_ENC_CAPA_WPA)
|
||||
caps |= NM_DEVICE_CAP_WIRELESS_WPA;
|
||||
if (range.enc_capa & IW_ENC_CAPA_WPA2)
|
||||
caps |= NM_DEVICE_CAP_WIRELESS_WPA2;
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME: Most drivers do not yet support enc_capa, so we should
|
||||
* try another method here if neither WPA cap was set.
|
||||
*/
|
||||
|
||||
nm_dev_sock_close (sk);
|
||||
}
|
||||
}
|
||||
|
||||
return caps;
|
||||
}
|
||||
|
||||
|
@@ -34,9 +34,9 @@
|
||||
|
||||
|
||||
/* Wireless device specific options */
|
||||
typedef struct NMDeviceWirelessOptions
|
||||
typedef struct NMDevice80211WirelessOptions
|
||||
{
|
||||
char * cur_essid; /* Mainly for test devices */
|
||||
char * cur_essid; /* Only for test devices */
|
||||
gint8 strength;
|
||||
gint8 invalid_strength_counter;
|
||||
iwqual max_qual;
|
||||
@@ -51,20 +51,23 @@ typedef struct NMDeviceWirelessOptions
|
||||
NMAccessPointList * ap_list;
|
||||
guint8 scan_interval; /* seconds */
|
||||
guint32 last_scan;
|
||||
|
||||
/* Static options from driver */
|
||||
guint8 we_version;
|
||||
} NMDeviceWirelessOptions;
|
||||
guint32 capabilities;
|
||||
} NMDevice80211WirelessOptions;
|
||||
|
||||
/* Wired device specific options */
|
||||
typedef struct NMDeviceWiredOptions
|
||||
typedef struct NMDevice80211EthernetOptions
|
||||
{
|
||||
guint32 unused;
|
||||
} NMDeviceWiredOptions;
|
||||
} NMDevice8023EthernetOptions;
|
||||
|
||||
/* General options structure */
|
||||
typedef union NMDeviceOptions
|
||||
{
|
||||
NMDeviceWirelessOptions wireless;
|
||||
NMDeviceWiredOptions wired;
|
||||
NMDevice80211WirelessOptions wireless;
|
||||
NMDevice8023EthernetOptions wired;
|
||||
} NMDeviceOptions;
|
||||
|
||||
|
||||
|
@@ -271,3 +271,50 @@ void nm_wireless_set_scan_interval (NMData *data, NMDevice *dev, NMWirelessScanI
|
||||
g_source_unref (source);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
guint32 nm_802_11_wireless_discover_capabilities (NMDevice *dev, iwrange * range, guint32 data_len)
|
||||
{
|
||||
int minlen;
|
||||
guint32 caps = NM_802_11_CAP_NONE;
|
||||
|
||||
g_return_val_if_fail (dev != NULL, NM_802_11_CAP_NONE);
|
||||
g_return_val_if_fail (range != NULL, NM_802_11_CAP_NONE);
|
||||
|
||||
minlen = ((char *) range->enc_capa) - (char *) range + sizeof (range->enc_capa);
|
||||
|
||||
/* A test wireless device is a pro at everything */
|
||||
if (nm_device_is_test_device (dev))
|
||||
{
|
||||
caps |= NM_802_11_CAP_KEY_MGMT_WPA
|
||||
| NM_802_11_CAP_KEY_MGMT_WPA2
|
||||
| NM_802_11_CAP_KEY_MGMT_WPA_PSK
|
||||
| NM_802_11_CAP_KEY_MGMT_WPA2_PSK
|
||||
| NM_802_11_CAP_CIPHER_WEP40
|
||||
| NM_802_11_CAP_CIPHER_WEP104
|
||||
| NM_802_11_CAP_CIPHER_TKIP
|
||||
| NM_802_11_CAP_CIPHER_CCMP;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* All drivers should support WEP by default */
|
||||
caps |= NM_802_11_CAP_CIPHER_WEP40 | NM_802_11_CAP_CIPHER_WEP104;
|
||||
|
||||
if ((data_len >= minlen) && range->we_version_compiled >= 18)
|
||||
{
|
||||
if (range->enc_capa & IW_ENC_CAPA_WPA)
|
||||
caps |= NM_802_11_CAP_KEY_MGMT_WPA | NM_802_11_CAP_KEY_MGMT_WPA_PSK;
|
||||
if (range->enc_capa & IW_ENC_CAPA_WPA2)
|
||||
caps |= NM_802_11_CAP_KEY_MGMT_WPA2 | NM_802_11_CAP_KEY_MGMT_WPA2_PSK;
|
||||
|
||||
if (range->enc_capa & IW_ENC_CAPA_CIPHER_TKIP)
|
||||
caps |= NM_802_11_CAP_CIPHER_TKIP;
|
||||
if (range->enc_capa & IW_ENC_CAPA_CIPHER_CCMP)
|
||||
caps |= NM_802_11_CAP_CIPHER_CCMP;
|
||||
}
|
||||
}
|
||||
|
||||
return caps;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -37,4 +37,7 @@ int nm_wireless_qual_to_percent (const struct iw_quality *qual,
|
||||
const struct iw_quality *avg_qual);
|
||||
void nm_wireless_set_scan_interval (NMData *data, NMDevice *dev, NMWirelessScanInterval interval);
|
||||
|
||||
guint32 nm_802_11_wireless_discover_capabilities (NMDevice *dev, iwrange * range, guint32 data_len);
|
||||
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user