Re: [libvirt] [PATCH] net: merge virNetworkGetDHCPLeases and virNetworkGetDHCPLeasesForMAC

2014-06-29 Thread Daniel Veillard
On Fri, Jun 27, 2014 at 09:45:09AM +0200, Peter Krempa wrote:
> On 06/26/14 17:29, Ján Tomko wrote:
> > On 06/26/2014 04:51 PM, Peter Krempa wrote:
> >> Instead of maintaining two very similar APIs, add the "@mac" parameter
> >> to virNetworkGetDHCPLeases and kill virNetworkGetDHCPLeasesForMAC. Both
> >> of those functions would return data the same way, so making @mac an
> >> optional filter simplifies a lot of stuff.
[...]
> > ACK with the debug message added and virsh functionality fixed.
> > 
> > Jan
> > 
> 
> I've resolved all your comments and pushed this patch.
> 
> Thanks

  Not finished, this now break the libvirt-python build which expects
virNetworkGetDHCPLeasesForMAC to be in the exported set of function,
so a bit of cleanup is needed there, preferably before the release :-)

Daniel

-- 
Daniel Veillard  | Open Source and Standards, Red Hat
veill...@redhat.com  | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | virtualization library  http://libvirt.org/

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [PATCH] net: merge virNetworkGetDHCPLeases and virNetworkGetDHCPLeasesForMAC

2014-06-27 Thread Peter Krempa
On 06/26/14 17:29, Ján Tomko wrote:
> On 06/26/2014 04:51 PM, Peter Krempa wrote:
>> Instead of maintaining two very similar APIs, add the "@mac" parameter
>> to virNetworkGetDHCPLeases and kill virNetworkGetDHCPLeasesForMAC. Both
>> of those functions would return data the same way, so making @mac an
>> optional filter simplifies a lot of stuff.
>> ---
>>  daemon/remote.c  | 69 +-
>>  include/libvirt/libvirt.h.in |  6 +---
>>  src/driver.h |  8 +
>>  src/libvirt.c| 70 
>> ++-
>>  src/libvirt_public.syms  |  1 -
>>  src/network/bridge_driver.c  | 69 +++---
>>  src/remote/remote_driver.c   | 71 
>> ++--
>>  src/remote/remote_protocol.x | 20 ++---
>>  src/remote_protocol-structs  | 15 +-
>>  tools/virsh-network.c|  5 +---
>>  10 files changed, 35 insertions(+), 299 deletions(-)
>>
> 
>> diff --git a/src/libvirt.c b/src/libvirt.c
>> index 566f984..49c9d16 100644
>> --- a/src/libvirt.c
>> +++ b/src/libvirt.c
> 
>> @@ -21110,65 +21117,6 @@ virNetworkGetDHCPLeases(virNetworkPtr network,
>>  return -1;
>>  }
>>
>> -/**
>> - * virNetworkGetDHCPLeasesForMAC:
>> - * @network: Pointer to network object
>> - * @mac: ASCII formatted MAC address of an interface
>> - * @leases: Pointer to a variable to store the array containing details on
>> - *  obtained leases, or NULL if the list is not required (just 
>> returns
>> - *  number of leases).
>> - * @flags: extra flags, not used yet, so callers should always pass 0
>> - *
>> - * The API fetches leases info of the interface which matches with the
>> - * given @mac. There can be multiple leases for a single @mac because this
>> - * API supports DHCPv6 too.
>> - *
>> - * Returns the number of leases found or -1 and sets @leases to NULL in 
>> case of
>> - * error. On success, the array stored into @leases is guaranteed to have an
>> - * extra allocated element set to NULL but not included in the return count,
>> - * to make iteration easier. The caller is responsible for calling
>> - * virNetworkDHCPLeaseFree() on each array element, then calling free() on 
>> @leases.
>> - *
>> - * See virNetworkGetDHCPLeases() for more details on list contents.
>> - */
>> -int
>> -virNetworkGetDHCPLeasesForMAC(virNetworkPtr network,
>> -  const char *mac,
>> -  virNetworkDHCPLeasePtr **leases,
>> -  unsigned int flags)
>> -{
>> -virConnectPtr conn;
>> -
>> -VIR_DEBUG("network=%p, mac=%s, leases=%p, flags=%x",
>> -   network, mac, leases, flags);
> 
> You should add mac to the debug message at the start of the other API.
> 
>> -
>> -virResetLastError();
>> -
>> -if (leases)
>> -*leases = NULL;
>> -
>> -virCheckNonNullArgGoto(mac, error);
>> -
>> -virCheckNetworkReturn(network, -1);
> 
> 
>> --- a/src/remote/remote_driver.c
>> +++ b/src/remote/remote_driver.c
>> @@ -7614,6 +7615,7 @@ remoteNetworkGetDHCPLeases(virNetworkPtr net,
>>  remoteDriverLock(priv);
>>
>>  make_nonnull_network(&args.net, net);
>> +args.mac = mac == NULL ? NULL : (char **) &mac;
> 
> Nit: mac ? (char **) &mac : NULL would be IMO nicer.
> 
>>  args.flags = flags;
>>  args.need_results = !!leases;
>>
> 
>> diff --git a/tools/virsh-network.c b/tools/virsh-network.c
>> index 2d5b9be..e7499fa 100644
>> --- a/tools/virsh-network.c
>> +++ b/tools/virsh-network.c
>> @@ -1348,10 +1348,7 @@ cmdNetworkDHCPLeases(vshControl *ctl, const vshCmd 
>> *cmd)
>>  if (!(network = vshCommandOptNetwork(ctl, cmd, &name)))
>>  return false;
>>
>> -nleases = mac ? virNetworkGetDHCPLeasesForMAC(network, mac, &leases, 
>> flags)
>> -: virNetworkGetDHCPLeases(network, &leases, flags);
>> -
>> -if (nleases < 0) {
>> +if ((nleases = virNetworkGetDHCPLeases(network, mac, &leases, flags) < 
>> 0)) {
> 
> Wrong parenthesising.
> 
> ACK with the debug message added and virsh functionality fixed.
> 
> Jan
> 

I've resolved all your comments and pushed this patch.

Thanks

Peter



signature.asc
Description: OpenPGP digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH] net: merge virNetworkGetDHCPLeases and virNetworkGetDHCPLeasesForMAC

2014-06-26 Thread Ján Tomko
On 06/26/2014 04:51 PM, Peter Krempa wrote:
> Instead of maintaining two very similar APIs, add the "@mac" parameter
> to virNetworkGetDHCPLeases and kill virNetworkGetDHCPLeasesForMAC. Both
> of those functions would return data the same way, so making @mac an
> optional filter simplifies a lot of stuff.
> ---
>  daemon/remote.c  | 69 +-
>  include/libvirt/libvirt.h.in |  6 +---
>  src/driver.h |  8 +
>  src/libvirt.c| 70 ++-
>  src/libvirt_public.syms  |  1 -
>  src/network/bridge_driver.c  | 69 +++---
>  src/remote/remote_driver.c   | 71 
> ++--
>  src/remote/remote_protocol.x | 20 ++---
>  src/remote_protocol-structs  | 15 +-
>  tools/virsh-network.c|  5 +---
>  10 files changed, 35 insertions(+), 299 deletions(-)
> 

> diff --git a/src/libvirt.c b/src/libvirt.c
> index 566f984..49c9d16 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c

> @@ -21110,65 +21117,6 @@ virNetworkGetDHCPLeases(virNetworkPtr network,
>  return -1;
>  }
> 
> -/**
> - * virNetworkGetDHCPLeasesForMAC:
> - * @network: Pointer to network object
> - * @mac: ASCII formatted MAC address of an interface
> - * @leases: Pointer to a variable to store the array containing details on
> - *  obtained leases, or NULL if the list is not required (just 
> returns
> - *  number of leases).
> - * @flags: extra flags, not used yet, so callers should always pass 0
> - *
> - * The API fetches leases info of the interface which matches with the
> - * given @mac. There can be multiple leases for a single @mac because this
> - * API supports DHCPv6 too.
> - *
> - * Returns the number of leases found or -1 and sets @leases to NULL in case 
> of
> - * error. On success, the array stored into @leases is guaranteed to have an
> - * extra allocated element set to NULL but not included in the return count,
> - * to make iteration easier. The caller is responsible for calling
> - * virNetworkDHCPLeaseFree() on each array element, then calling free() on 
> @leases.
> - *
> - * See virNetworkGetDHCPLeases() for more details on list contents.
> - */
> -int
> -virNetworkGetDHCPLeasesForMAC(virNetworkPtr network,
> -  const char *mac,
> -  virNetworkDHCPLeasePtr **leases,
> -  unsigned int flags)
> -{
> -virConnectPtr conn;
> -
> -VIR_DEBUG("network=%p, mac=%s, leases=%p, flags=%x",
> -   network, mac, leases, flags);

You should add mac to the debug message at the start of the other API.

> -
> -virResetLastError();
> -
> -if (leases)
> -*leases = NULL;
> -
> -virCheckNonNullArgGoto(mac, error);
> -
> -virCheckNetworkReturn(network, -1);


> --- a/src/remote/remote_driver.c
> +++ b/src/remote/remote_driver.c
> @@ -7614,6 +7615,7 @@ remoteNetworkGetDHCPLeases(virNetworkPtr net,
>  remoteDriverLock(priv);
> 
>  make_nonnull_network(&args.net, net);
> +args.mac = mac == NULL ? NULL : (char **) &mac;

Nit: mac ? (char **) &mac : NULL would be IMO nicer.

>  args.flags = flags;
>  args.need_results = !!leases;
> 

> diff --git a/tools/virsh-network.c b/tools/virsh-network.c
> index 2d5b9be..e7499fa 100644
> --- a/tools/virsh-network.c
> +++ b/tools/virsh-network.c
> @@ -1348,10 +1348,7 @@ cmdNetworkDHCPLeases(vshControl *ctl, const vshCmd 
> *cmd)
>  if (!(network = vshCommandOptNetwork(ctl, cmd, &name)))
>  return false;
> 
> -nleases = mac ? virNetworkGetDHCPLeasesForMAC(network, mac, &leases, 
> flags)
> -: virNetworkGetDHCPLeases(network, &leases, flags);
> -
> -if (nleases < 0) {
> +if ((nleases = virNetworkGetDHCPLeases(network, mac, &leases, flags) < 
> 0)) {

Wrong parenthesising.

ACK with the debug message added and virsh functionality fixed.

Jan



signature.asc
Description: OpenPGP digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH] net: merge virNetworkGetDHCPLeases and virNetworkGetDHCPLeasesForMAC

2014-06-26 Thread Peter Krempa
Instead of maintaining two very similar APIs, add the "@mac" parameter
to virNetworkGetDHCPLeases and kill virNetworkGetDHCPLeasesForMAC. Both
of those functions would return data the same way, so making @mac an
optional filter simplifies a lot of stuff.
---
 daemon/remote.c  | 69 +-
 include/libvirt/libvirt.h.in |  6 +---
 src/driver.h |  8 +
 src/libvirt.c| 70 ++-
 src/libvirt_public.syms  |  1 -
 src/network/bridge_driver.c  | 69 +++---
 src/remote/remote_driver.c   | 71 ++--
 src/remote/remote_protocol.x | 20 ++---
 src/remote_protocol-structs  | 15 +-
 tools/virsh-network.c|  5 +---
 10 files changed, 35 insertions(+), 299 deletions(-)

diff --git a/daemon/remote.c b/daemon/remote.c
index 9ffc1cb..ea16789 100644
--- a/daemon/remote.c
+++ b/daemon/remote.c
@@ -6292,6 +6292,7 @@ remoteDispatchNetworkGetDHCPLeases(virNetServerPtr server 
ATTRIBUTE_UNUSED,
 goto cleanup;

 if ((nleases = virNetworkGetDHCPLeases(net,
+   args->mac ? *args->mac : NULL,
args->need_results ? &leases : NULL,
args->flags)) < 0)
 goto cleanup;
@@ -6336,74 +6337,6 @@ remoteDispatchNetworkGetDHCPLeases(virNetServerPtr 
server ATTRIBUTE_UNUSED,
 }


-static int
-remoteDispatchNetworkGetDHCPLeasesForMAC(virNetServerPtr server 
ATTRIBUTE_UNUSED,
- virNetServerClientPtr client,
- virNetMessagePtr msg ATTRIBUTE_UNUSED,
- virNetMessageErrorPtr rerr,
- 
remote_network_get_dhcp_leases_for_mac_args *args,
- 
remote_network_get_dhcp_leases_for_mac_ret *ret)
-{
-int rv = -1;
-size_t i;
-struct daemonClientPrivate *priv = 
virNetServerClientGetPrivateData(client);
-virNetworkDHCPLeasePtr *leases = NULL;
-virNetworkPtr net = NULL;
-int nleases = 0;
-
-if (!priv->conn) {
-virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open"));
-goto cleanup;
-}
-
-if (!(net = get_nonnull_network(priv->conn, args->net)))
-goto cleanup;
-
-if ((nleases = virNetworkGetDHCPLeasesForMAC(net, args->mac,
- args->need_results ? &leases 
: NULL,
- args->flags)) < 0)
-goto cleanup;
-
-if (nleases > REMOTE_NETWORK_DHCP_LEASES_MAX) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
-   _("Number of leases is %d, which exceeds max limit: 
%d"),
-   nleases, REMOTE_NETWORK_DHCP_LEASES_MAX);
-return -1;
-}
-
-if (leases && nleases) {
-if (VIR_ALLOC_N(ret->leases.leases_val, nleases) < 0)
-goto cleanup;
-
-ret->leases.leases_len = nleases;
-
-for (i = 0; i < nleases; i++) {
-if (remoteSerializeDHCPLease(ret->leases.leases_val + i, 
leases[i]) < 0)
-goto cleanup;
-}
-
-} else {
-ret->leases.leases_len = 0;
-ret->leases.leases_val = NULL;
-}
-
-ret->ret = nleases;
-
-rv = 0;
-
- cleanup:
-if (rv < 0)
-virNetMessageSaveError(rerr);
-if (leases) {
-for (i = 0; i < nleases; i++)
-virNetworkDHCPLeaseFree(leases[i]);
-VIR_FREE(leases);
-}
-virNetworkFree(net);
-return rv;
-}
-
-
 /*- Helpers. -*/

 /* get_nonnull_domain and get_nonnull_network turn an on-wire
diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
index 594521e..032d6e6 100644
--- a/include/libvirt/libvirt.h.in
+++ b/include/libvirt/libvirt.h.in
@@ -5169,14 +5169,10 @@ struct _virNetworkDHCPLease {
 void virNetworkDHCPLeaseFree(virNetworkDHCPLeasePtr lease);

 int virNetworkGetDHCPLeases(virNetworkPtr network,
+const char *mac,
 virNetworkDHCPLeasePtr **leases,
 unsigned int flags);

-int virNetworkGetDHCPLeasesForMAC(virNetworkPtr network,
-  const char *mac,
-  virNetworkDHCPLeasePtr **leases,
-  unsigned int flags);
-
 /**
  * virConnectNetworkEventGenericCallback:
  * @conn: the connection pointer
diff --git a/src/driver.h b/src/driver.h
index 6e72e92..5018068 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -1184,15 +1184,10 @@ typedef int

 typedef int
 (*virDrvNetworkGetDHCPLeases)(virNetworkPtr network,
+  const char *mac,
   virNetworkDHCPLeasePtr **leases,
   u