interface: Introduce netcfInterfaceObjIsActive

This function barely wraps ncf_if_status() and error handling code.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Michal Privoznik 2013-12-10 18:56:57 +01:00
parent f7fee15ae8
commit 50f5468c96

View File

@ -238,6 +238,32 @@ static struct netcf_if *interfaceDriverGetNetcfIF(struct netcf *ncf, virInterfac
return iface;
}
static int
netcfInterfaceObjIsActive(struct netcf_if *iface,
bool *active)
{
int ret = -1;
unsigned int flags = 0;
virObjectRef(driverState);
if (ncf_if_status(iface, &flags) < 0) {
const char *errmsg, *details;
int errcode = ncf_error(driverState->netcf, &errmsg, &details);
virReportError(netcf_to_vir_err(errcode),
_("failed to get status of interface %s: %s%s%s"),
ncf_if_name(iface), errmsg, details ? " - " : "",
details ? details : "");
goto cleanup;
}
*active = flags & NETCF_IFACE_ACTIVE;
ret = 0;
cleanup:
virObjectUnref(driverState);
return ret;
}
static virDrvOpenStatus
netcfInterfaceOpen(virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
@ -539,7 +565,7 @@ netcfConnectListAllInterfaces(virConnectPtr conn,
struct netcf_if *iface = NULL;
virInterfacePtr *tmp_iface_objs = NULL;
virInterfacePtr iface_obj = NULL;
unsigned int status;
bool active;
int niface_objs = 0;
int ret = -1;
char **names = NULL;
@ -611,15 +637,8 @@ netcfConnectListAllInterfaces(virConnectPtr conn,
}
}
if (ncf_if_status(iface, &status) < 0) {
const char *errmsg, *details;
int errcode = ncf_error(driver->netcf, &errmsg, &details);
virReportError(netcf_to_vir_err(errcode),
_("failed to get status of interface %s: %s%s%s"),
names[i], errmsg, details ? " - " : "",
details ? details : "");
if (netcfInterfaceObjIsActive(iface, &active) < 0)
goto cleanup;
}
if (!(def = netcfGetMinimalDefForDevice(iface)))
goto cleanup;
@ -636,10 +655,8 @@ netcfConnectListAllInterfaces(virConnectPtr conn,
* except active|inactive are supported.
*/
if (MATCH(VIR_CONNECT_LIST_INTERFACES_FILTERS_ACTIVE) &&
!((MATCH(VIR_CONNECT_LIST_INTERFACES_ACTIVE) &&
(status & NETCF_IFACE_ACTIVE)) ||
(MATCH(VIR_CONNECT_LIST_INTERFACES_INACTIVE) &&
(status & NETCF_IFACE_INACTIVE)))) {
!((MATCH(VIR_CONNECT_LIST_INTERFACES_ACTIVE) && active) ||
(MATCH(VIR_CONNECT_LIST_INTERFACES_INACTIVE) && !active))) {
ncf_if_free(iface);
iface = NULL;
continue;
@ -1010,9 +1027,9 @@ static int netcfInterfaceIsActive(virInterfacePtr ifinfo)
{
virNetcfDriverStatePtr driver = ifinfo->conn->interfacePrivateData;
struct netcf_if *iface = NULL;
unsigned int flags = 0;
virInterfaceDefPtr def = NULL;
int ret = -1;
bool active;
virObjectLock(driver);
@ -1022,24 +1039,16 @@ static int netcfInterfaceIsActive(virInterfacePtr ifinfo)
goto cleanup;
}
if (!(def = netcfGetMinimalDefForDevice(iface)))
goto cleanup;
if (virInterfaceIsActiveEnsureACL(ifinfo->conn, def) < 0)
goto cleanup;
if (ncf_if_status(iface, &flags) < 0) {
const char *errmsg, *details;
int errcode = ncf_error(driver->netcf, &errmsg, &details);
virReportError(netcf_to_vir_err(errcode),
_("failed to get status of interface %s: %s%s%s"),
ifinfo->name, errmsg, details ? " - " : "",
details ? details : "");
if (netcfInterfaceObjIsActive(iface, &active) < 0)
goto cleanup;
}
ret = flags & NETCF_IFACE_ACTIVE ? 1 : 0;
ret = active ? 1 : 0;
cleanup:
ncf_if_free(iface);