
On 03/05/2015 07:45 AM, Daniel P. Berrange wrote:
On Mon, Jan 26, 2015 at 12:08:46AM +0530, Nehal J Wani wrote:
Define helper function virDomainInterfaceFree, which allows the upper layer application to free the domain interface object conveniently.
The API is going to provide multiple methods by flags, e.g. * Query guest agent * Parse DHCP lease file
+++ b/include/libvirt/libvirt-domain.h @@ -3682,5 +3682,32 @@ typedef struct _virTypedParameter virMemoryParameter; */ typedef virMemoryParameter *virMemoryParameterPtr;
+typedef enum { + VIR_DOMAIN_INTERFACE_ADDRESSES_LEASE = (1 << 0), /* Parse DHCP lease file */ + VIR_DOMAIN_INTERFACE_ADDRESSES_AGENT = (1 << 1), /* Query qemu guest agent */ +} virDomainInterfaceAddressesFlags;
This feels like it should not be named 'Flags', because it seems like you can never request multiple modes at once.
I can't help but have a nagging feeling this ambiguos return data means our API design is wrong. Instead of having a bitwise OR of flags to select the data source, should we perhaps use a straight enum, so the application always specifies exactly which data source to use ?
eg an API that is
enum { VIR_DOMAIN_INTERFACE_ADDRESSES_SOURCE_LEASES, VIR_DOMAIN_INTERFACE_ADDRESSES_SOURCE_AGENT, VIR_DOMAIN_INTERFACE_ADDRESSES_SOURCE_SNOOP, };
Yep - that's exactly my concern, and the right solution (that is, _LEASES is 0, _AGENT is 1, _SNOOP is 2, and for now we have a _LAST at 3 that can later bump to 4 if we add another method).
virDomainInterfaceAddresses(virDomainPtr dom, int source, virDomainInterfacePtr **ifaces, unsigned int flags);
so the caller always knows how to interpret the returned data for mac addr andname. Leave the flags field unused, for future help if needed.
Yes, that sounds like the right direction. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org