From: Doug Goldstein Date: Sat, 6 Oct 2012 19:20:29 +0000 (-0500) Subject: interface: add udevIfaceIsActive() to udev backend X-Git-Tag: v1.0.0-rc1~149 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ba96d277b0e0c49436649b6f9f235e05a01e6c50;p=thirdparty%2Flibvirt.git interface: add udevIfaceIsActive() to udev backend Add support to check if a specific interface is active by supporting the following API function in the udev based virInterface backend: * virConnectInterfaceIsActive() --- diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c index 75b9f1a6a9..1cb6dfe172 100644 --- a/src/interface/interface_backend_udev.c +++ b/src/interface/interface_backend_udev.c @@ -489,6 +489,35 @@ err: return ret; } +static int +udevIfaceIsActive(virInterfacePtr ifinfo) +{ + struct udev_iface_driver *driverState = ifinfo->conn->interfacePrivateData; + struct udev *udev = udev_ref(driverState->udev); + struct udev_device *dev; + int status; + + dev = udev_device_new_from_subsystem_sysname(udev, "net", + ifinfo->name); + if (!dev) { + virReportError(VIR_ERR_NO_INTERFACE, + _("couldn't find interface named '%s'"), + ifinfo->name); + status = -1; + goto cleanup; + } + + /* Check if it's active or not */ + status = STREQ(udev_device_get_sysattr_value(dev, "operstate"), "up"); + + udev_device_unref(dev); + +cleanup: + udev_unref(udev); + + return status; +} + static virInterfaceDriver udevIfaceDriver = { "udev", .open = udevIfaceOpenInterface, /* 0.10.3 */ @@ -500,6 +529,7 @@ static virInterfaceDriver udevIfaceDriver = { .listAllInterfaces = udevIfaceListAllInterfaces, /* 0.10.3 */ .interfaceLookupByName = udevIfaceLookupByName, /* 0.10.3 */ .interfaceLookupByMACString = udevIfaceLookupByMACString, /* 0.10.3 */ + .interfaceIsActive = udevIfaceIsActive, /* 0.10.3 */ }; int