[libvirt] [PATCH 1/2] interface: Introduce netcfInterfaceObjIsActive
Laine Stump
laine at laine.org
Mon Dec 16 14:59:30 UTC 2013
On 12/11/2013 11:16 AM, Michal Privoznik wrote:
> This function barely wraps ncf_if_status() and error handling code.
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
> 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 c4e18c4..2e681ec 100644
> --- a/src/interface/interface_backend_netcf.c
> +++ b/src/interface/interface_backend_netcf.c
> @@ -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);
This looks fine other than the extra red/unref of the driver state
object that Dan already mentioned. ACK with that removed.
More information about the libvir-list
mailing list