From 045037062f99c234dfee0df5c3d4b3e790609501 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Tue, 10 Dec 2013 18:56:57 +0100 Subject: [PATCH] interface: Introduce netcfInterfaceObjIsActive This function barely wraps ncf_if_status() and error handling code. Signed-off-by: Michal Privoznik (cherry picked from commit 50f5468c960f4fe491399d5a495426e6cb6b41f1) --- src/interface/interface_backend_netcf.c | 57 ++++++++++++++----------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/src/interface/interface_backend_netcf.c b/src/interface/interface_backend_netcf.c index fac059defb..ecf9ddd9bf 100644 --- a/src/interface/interface_backend_netcf.c +++ b/src/interface/interface_backend_netcf.c @@ -241,6 +241,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, @@ -542,7 +568,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; @@ -614,15 +640,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; @@ -639,10 +658,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; @@ -1013,9 +1030,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); @@ -1025,24 +1042,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); -- GitLab