interface: Introduce netcfInterfaceObjIsActive

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

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 50f5468c96)
This commit is contained in:
Michal Privoznik 2013-12-10 18:56:57 +01:00 committed by Cole Robinson
parent a099cf9dee
commit 045037062f

View File

@ -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);