[libvirt] [PATCHv3 1/4] net-dhcp-leases: Implement the public APIs
Eric Blake
eblake at redhat.com
Mon Sep 16 17:36:07 UTC 2013
On 09/15/2013 11:49 PM, Nehal J Wani wrote:
> Introduce 3 new APIs, virNetworkGetDHCPLeases, virNetworkGetDHCPLeasesForMAC
> and virNetworkDHCPLeaseFree.
>
> +
> +typedef struct _virNetworkDHCPLeases virNetworkDHCPLeases;
> +typedef virNetworkDHCPLeases *virNetworkDHCPLeasesPtr;
> +struct _virNetworkDHCPLeases {
> + long long expirytime;
In what unit? Seconds since Epoch?
> +
> +/**
> + * virNetworkGetDHCPLeases:
> + * @network: pointer to network object
> + * @leases: pointer to an array of pointers pointing to the obtained leases
Try to make it more clear that this is an output parameter. Copying
from virConnectListAllDomains, I'd try something like:
@leases: Pointer to a variable to store the array containing details on
obtained leases, or NULL if the list is not requires (just returns
number of leases)
> + * @flags: extra flags, not used yet, so callers should always pass 0
> + *
> + * The API returns lease info for all network interfaces connected to the
> + * given virtual network.
> + *
> + * 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.
I'm not sure if writing virNetworkDHCPLeaseFree() (with the () at the
end) will make cross-referencing any nicer in the generated html docs,
but it can't hurt.
> + *
> + * for (i = 0; i < nleases; i++) {
> + * virNetworkDHCPLeasesPtr lease = leases[i];
> + * printf("Time(epoch): %lu, MAC address: %s, "
> + * "IP address: %s, Hostname: %s, ClientID: %s\n",
> + * leas->expirytime, lease->mac, lease->ipaddr,
> + * lease->hostname, lease->clientid);
If you stick 'virNetworkDHCPLeaseFree(lease);' here,...
> + * }
> + *
> + * if (leases) {
> + * for (i = 0; i < nleases; i++)
> + * virNetworkDHCPLeaseFree(leases[i]);
> + * }
...you can omit this loop entirely.
> + * free(leases);
> + *
> + */
> +int
> +virNetworkGetDHCPLeases(virNetworkPtr network,
> + virNetworkDHCPLeasesPtr **leases,
> + unsigned int flags)
> +/**
> + * virNetworkGetDHCPLeasesForMAC:
> + * @network: pointer to network object
> + * @mac: MAC Address of an interface
Maybe make it clear that this is the stringized form:
@mac: ASCII formatted MAC address of an interface
> + * @leases: pointer to an array of pointers pointing to the obtained leases
Same suggestion as above.
> +virNetworkGetDHCPLeasesForMAC(virNetworkPtr network,
> + const char *mac,
> + virNetworkDHCPLeasesPtr **leases,
> + unsigned int flags)
> +{
> + virConnectPtr conn;
> + virMacAddr addr;
> +
> + VIR_DEBUG("network=%p, mac=%s, leases=%p, flags=%x",
> + network, mac, leases, flags);
> +
> + virResetLastError();
> +
> + virCheckNonNullArgGoto(network, error);
This check is redundant...[1]
> + virCheckNonNullArgGoto(mac, error);
This check...[2]
> +
> + if (leases)
> + *leases = NULL;
[2]...should be moved after this, so that we guarantee to set *leases on
ALL possible errors.
> +
> + if (!VIR_IS_CONNECTED_NETWORK(network)) {
[1]...with this. (Same problem with the other function, too).
> + virLibNetworkError(VIR_ERR_INVALID_NETWORK, __FUNCTION__);
> + virDispatchError(NULL);
> + return -1;
> + }
> +
> + /* Validate the MAC address */
> + if (mac && virMacAddrParse(mac, &addr) < 0) {
You already required non-NULL mac, so 'mac &&' is bogus.
> +++ b/src/libvirt_public.syms
> @@ -634,4 +634,11 @@ LIBVIRT_1.1.1 {
> virDomainSetMemoryStatsPeriod;
> } LIBVIRT_1.1.0;
>
> +LIBVIRT_1.1.3 {
> + global:
> + virNetworkGetDHCPLeases;
> + virNetworkGetDHCPLeasesForMAC;
> + virNetworkDHCPLeaseFree;
Not strictly required, but I like sorting symbols in this listing.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 621 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20130916/a524fd93/attachment-0001.sig>
More information about the libvir-list
mailing list