[libvirt] [PATCH] nodedev: udev: Fix handling of wireless NIC

Jim Meyering jim at meyering.net
Thu May 27 09:05:05 UTC 2010


Cole Robinson wrote:
> Wireless NICs were being ignored because we weren't correctly handling
> device type. Fix this, as well as wireless NIC net subtype.
>
> Signed-off-by: Cole Robinson <crobinso at redhat.com>
> ---
>  src/node_device/node_device_udev.c |   12 +++++++++++-
>  1 files changed, 11 insertions(+), 1 deletions(-)
>
> diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
> index f0485f1..4915d4e 100644
> --- a/src/node_device/node_device_udev.c
> +++ b/src/node_device/node_device_udev.c
> @@ -597,8 +597,16 @@ static int udevProcessNetworkInterface(struct udev_device *device,
>                                         virNodeDeviceDefPtr def)
>  {
>      int ret = -1;
> +    const char *devtype = NULL;
>      union _virNodeDevCapData *data = &def->caps->data;
>
> +    devtype = udev_device_get_devtype(device);

You can combine the declaration and first assignment:

       const char *devtype = udev_device_get_devtype(device);

to avoid a dead store (clang and coverity complain about those)
and eliminate the minor duplication of that variable name.

> +    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 +1082,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'",
> +              devtype, udev_device_get_sysname(device));
>
>      if (devtype != NULL && STREQ(devtype, "usb_device")) {
>          *type = VIR_NODE_DEV_CAP_USB_DEV;
> @@ -1112,7 +1122,7 @@ static int udevGetDeviceType(struct udev_device *device,
>
>      /* It does not appear that network interfaces set the device type
>       * property. */
> -    if (devtype == NULL &&
> +    if ((devtype == NULL || STREQ(devtype, "wlan")) &&
>          udevGetStringProperty(device,
>                                "INTERFACE",
>                                &tmp_string) == PROPERTY_FOUND) {

Otherwise, this looks fine.
ACK.




More information about the libvir-list mailing list