提交 50f5468c 编写于 作者: M Michal Privoznik

interface: Introduce netcfInterfaceObjIsActive

This function barely wraps ncf_if_status() and error handling code.
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
上级 f7fee15a
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册