[libvirt] [PATCH 2/5] list: Implement RPC calls for virConnectListAllNWFilters
Peter Krempa
pkrempa at redhat.com
Thu Sep 6 14:35:00 UTC 2012
On 09/05/12 08:02, Osier Yang wrote:
> The RPC generator doesn't support returning list of object yet, this patch
> do the work manually.
>
> * daemon/remote.c:
> Implemente the server side handler remoteDispatchConnectListAllNWFilters.
>
> * src/remote/remote_driver.c:
> Add remote driver handler remoteConnectListAllNWFilters.
>
> * src/remote/remote_protocol.x:
> New RPC procedure REMOTE_PROC_CONNECT_LIST_ALL_NWFILTERS and
> structs to represent the args and ret for it.
>
> * src/remote_protocol-structs: Likewise.
> ---
> daemon/remote.c | 54 ++++++++++++++++++++++++++++++++++++
> src/remote/remote_driver.c | 63 ++++++++++++++++++++++++++++++++++++++++++
> src/remote/remote_protocol.x | 13 ++++++++-
> src/remote_protocol-structs | 12 ++++++++
> 4 files changed, 141 insertions(+), 1 deletions(-)
>
> diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
> index b1671ae..2afe5b0 100644
> --- a/src/remote/remote_driver.c
> +++ b/src/remote/remote_driver.c
> @@ -2907,6 +2907,68 @@ done:
> return rv;
> }
>
> +static int
> +remoteConnectListAllNWFilters(virConnectPtr conn,
> + virNWFilterPtr **filters,
> + unsigned int flags)
> +{
> + int rv = -1;
> + int i;
> + virNWFilterPtr *tmp_filters = NULL;
> + remote_connect_list_all_nwfilters_args args;
> + remote_connect_list_all_nwfilters_ret ret;
> +
> + struct private_data *priv = conn->privateData;
> +
> + remoteDriverLock(priv);
> +
> + args.need_results = !!filters;
> + args.flags = flags;
> +
> + memset(&ret, 0, sizeof(ret));
> + if (call(conn,
> + priv,
> + 0,
> + REMOTE_PROC_CONNECT_LIST_ALL_NWFILTERS,
> + (xdrproc_t) xdr_remote_connect_list_all_nwfilters_args,
> + (char *) &args,
> + (xdrproc_t) xdr_remote_connect_list_all_nwfilters_ret,
> + (char *) &ret) == -1)
> + goto done;
> +
> + if (filters) {
> + if (VIR_ALLOC_N(tmp_filters, ret.filters.filters_len + 1) < 0) {
> + virReportOOMError();
> + goto cleanup;
> + }
> +
> + for (i = 0; i < ret.filters.filters_len; i++) {
> + tmp_filters[i] = get_nonnull_nwfilter (conn, ret.filters.filters_val[i]);
Space before function arguments.
> + if (!tmp_filters[i]) {
> + virReportOOMError();
> + goto cleanup;
> + }
> + }
> + *filters = tmp_filters;
> + tmp_filters = NULL;
> + }
> +
> + rv = ret.ret;
> +
> +cleanup:
> + if (tmp_filters) {
> + for (i = 0; i < ret.filters.filters_len; i++)
> + if (tmp_filters[i])
> + virNWFilterFree(tmp_filters[i]);
> + VIR_FREE(tmp_filters);
> + }
> +
> + xdr_free((xdrproc_t) xdr_remote_connect_list_all_nwfilters_ret, (char *) &ret);
> +
> +done:
> + remoteDriverUnlock(priv);
> + return rv;
> +}
>
> /*----------------------------------------------------------------------*/
>
> @@ -6012,6 +6074,7 @@ static virNWFilterDriver nwfilter_driver = {
> .undefine = remoteNWFilterUndefine, /* 0.8.0 */
> .numOfNWFilters = remoteNumOfNWFilters, /* 0.8.0 */
> .listNWFilters = remoteListNWFilters, /* 0.8.0 */
> + .listAllNWFilters = remoteConnectListAllNWFilters, /* 0.10.2 */
> };
>
>
Otherwise looks OK.
Peter
More information about the libvir-list
mailing list