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.
|
support.
|
||||||
* src/backends/NetworkManagerSuSE.c: add NIS support, baby.
|
* 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>
|
2005-12-14 Dan Williams <dcbw@redhat.com>
|
||||||
|
|
||||||
* src/nm-ap-security*.[ch]
|
* 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_NONE 0x00000000
|
||||||
#define NM_DEVICE_CAP_NM_SUPPORTED 0x0001
|
#define NM_DEVICE_CAP_NM_SUPPORTED 0x00000001
|
||||||
#define NM_DEVICE_CAP_CARRIER_DETECT 0x0002
|
#define NM_DEVICE_CAP_CARRIER_DETECT 0x00000002
|
||||||
#define NM_DEVICE_CAP_WIRELESS_SCAN 0x0004
|
#define NM_DEVICE_CAP_WIRELESS_SCAN 0x00000004
|
||||||
#define NM_DEVICE_CAP_WIRELESS_WPA 0x0008
|
|
||||||
#define NM_DEVICE_CAP_WIRELESS_WPA2 0x0010
|
|
||||||
|
/* 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)
|
static gboolean nm_device_wireless_init (NMDevice *dev)
|
||||||
{
|
{
|
||||||
NMSock *sk;
|
NMDevice80211WirelessOptions * opts = &(dev->options.wireless);
|
||||||
NMDeviceWirelessOptions *opts = &(dev->options.wireless);
|
NMSock * sk;
|
||||||
|
|
||||||
g_return_val_if_fail (dev != NULL, FALSE);
|
g_return_val_if_fail (dev != NULL, FALSE);
|
||||||
g_return_val_if_fail (nm_device_is_802_11_wireless (dev), 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;
|
opts->we_version = 0;
|
||||||
if ((sk = nm_dev_sock_open (dev, DEV_WIRELESS, __FUNCTION__, NULL)))
|
if ((sk = nm_dev_sock_open (dev, DEV_WIRELESS, __FUNCTION__, NULL)))
|
||||||
{
|
{
|
||||||
iwrange range;
|
struct iw_range range;
|
||||||
if (iw_get_range_info (nm_dev_sock_get_fd (sk), nm_device_get_iface (dev), &range) >= 0)
|
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;
|
int i;
|
||||||
|
|
||||||
@@ -379,6 +387,9 @@ static gboolean nm_device_wireless_init (NMDevice *dev)
|
|||||||
opts->freqs[i] = iw_freq2float (&(range.freq[i]));
|
opts->freqs[i] = iw_freq2float (&(range.freq[i]));
|
||||||
|
|
||||||
opts->we_version = range.we_version_compiled;
|
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);
|
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;
|
return caps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -34,9 +34,9 @@
|
|||||||
|
|
||||||
|
|
||||||
/* Wireless device specific options */
|
/* 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 strength;
|
||||||
gint8 invalid_strength_counter;
|
gint8 invalid_strength_counter;
|
||||||
iwqual max_qual;
|
iwqual max_qual;
|
||||||
@@ -51,20 +51,23 @@ typedef struct NMDeviceWirelessOptions
|
|||||||
NMAccessPointList * ap_list;
|
NMAccessPointList * ap_list;
|
||||||
guint8 scan_interval; /* seconds */
|
guint8 scan_interval; /* seconds */
|
||||||
guint32 last_scan;
|
guint32 last_scan;
|
||||||
|
|
||||||
|
/* Static options from driver */
|
||||||
guint8 we_version;
|
guint8 we_version;
|
||||||
} NMDeviceWirelessOptions;
|
guint32 capabilities;
|
||||||
|
} NMDevice80211WirelessOptions;
|
||||||
|
|
||||||
/* Wired device specific options */
|
/* Wired device specific options */
|
||||||
typedef struct NMDeviceWiredOptions
|
typedef struct NMDevice80211EthernetOptions
|
||||||
{
|
{
|
||||||
guint32 unused;
|
guint32 unused;
|
||||||
} NMDeviceWiredOptions;
|
} NMDevice8023EthernetOptions;
|
||||||
|
|
||||||
/* General options structure */
|
/* General options structure */
|
||||||
typedef union NMDeviceOptions
|
typedef union NMDeviceOptions
|
||||||
{
|
{
|
||||||
NMDeviceWirelessOptions wireless;
|
NMDevice80211WirelessOptions wireless;
|
||||||
NMDeviceWiredOptions wired;
|
NMDevice8023EthernetOptions wired;
|
||||||
} NMDeviceOptions;
|
} NMDeviceOptions;
|
||||||
|
|
||||||
|
|
||||||
|
@@ -271,3 +271,50 @@ void nm_wireless_set_scan_interval (NMData *data, NMDevice *dev, NMWirelessScanI
|
|||||||
g_source_unref (source);
|
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);
|
const struct iw_quality *avg_qual);
|
||||||
void nm_wireless_set_scan_interval (NMData *data, NMDevice *dev, NMWirelessScanInterval interval);
|
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
|
#endif
|
||||||
|
Reference in New Issue
Block a user