67 lines
2.5 KiB
Diff
67 lines
2.5 KiB
Diff
commit 07f6c3a95f1caca368c8723b5b0a25ae2faa1ffe
|
|
Author: David Allan <dallan@redhat.com>
|
|
Date: Thu May 27 10:44:02 2010 -0400
|
|
|
|
v2 of Cole's wlan support
|
|
|
|
* Incorporated Jim's feedback (v1 & v2)
|
|
|
|
* Moved case of DEVTYPE == "wlan" up as it's definitive that we have a network interface.
|
|
|
|
* Made comment more detailed about the wired case to explain better
|
|
how it differentiates between wired network interfaces and USB
|
|
devices.
|
|
|
|
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
|
|
index f0485f1..c437861 100644
|
|
--- a/src/node_device/node_device_udev.c
|
|
+++ b/src/node_device/node_device_udev.c
|
|
@@ -597,8 +597,15 @@ static int udevProcessNetworkInterface(struct udev_device *device,
|
|
virNodeDeviceDefPtr def)
|
|
{
|
|
int ret = -1;
|
|
+ const char *devtype = udev_device_get_devtype(device);
|
|
union _virNodeDevCapData *data = &def->caps->data;
|
|
|
|
+ if (devtype && STREQ(devtype, "wlan")) {
|
|
+ data->net.subtype = VIR_NODE_DEV_CAP_NET_80211;
|
|
+ } else {
|
|
+ data->net.subtype = VIR_NODE_DEV_CAP_NET_80203;
|
|
+ }
|
|
+
|
|
if (udevGetStringProperty(device,
|
|
"INTERFACE",
|
|
&data->net.ifname) == PROPERTY_ERROR) {
|
|
@@ -1074,6 +1081,8 @@ static int udevGetDeviceType(struct udev_device *device,
|
|
int ret = 0;
|
|
|
|
devtype = udev_device_get_devtype(device);
|
|
+ VIR_DEBUG("Found device type '%s' for device '%s'",
|
|
+ NULLSTR(devtype), udev_device_get_sysname(device));
|
|
|
|
if (devtype != NULL && STREQ(devtype, "usb_device")) {
|
|
*type = VIR_NODE_DEV_CAP_USB_DEV;
|
|
@@ -1105,13 +1114,20 @@ static int udevGetDeviceType(struct udev_device *device,
|
|
goto out;
|
|
}
|
|
|
|
+ if (devtype != NULL && STREQ(devtype, "wlan")) {
|
|
+ *type = VIR_NODE_DEV_CAP_NET;
|
|
+ goto out;
|
|
+ }
|
|
+
|
|
if (udevGetUintProperty(device, "PCI_CLASS", &tmp, 16) == PROPERTY_FOUND) {
|
|
*type = VIR_NODE_DEV_CAP_PCI_DEV;
|
|
goto out;
|
|
}
|
|
|
|
- /* It does not appear that network interfaces set the device type
|
|
- * property. */
|
|
+ /* It does not appear that wired network interfaces set the
|
|
+ * DEVTYPE property. USB devices also have an INTERFACE property,
|
|
+ * but they do set DEVTYPE, so if devtype is NULL and the
|
|
+ * INTERFACE property exists, we have a network device. */
|
|
if (devtype == NULL &&
|
|
udevGetStringProperty(device,
|
|
"INTERFACE",
|