[libvirt] RFC: Implement virDomainGetIPAddress()

Michal Novotny minovotn at redhat.com
Fri Jul 15 09:20:39 UTC 2011

>> Wait a minute there please. The MAC address should be unique in the
>> system so user should be using just one IP address per one MAC address.
>> Since MAC address should be unique in the system then the IP address
>> assigned to this MAC address should be just one, shouldn't it ?
> You can easily add multiple IP address to an interface (and therefore
> to the same MAC address)
> ip addr add dev eth0
> ip addr add dev eth0

In this case, yes. Like I said, I didn't consider that option nor it
didn't come to my mind at all since I'm not familiar with networking too
much for the cases I never used.

>> Nevertheless I think you know more about networking options than I do so
> Well, I know that there is no strict 1:1 mapping between MAC and IP
> addresses and I want that this fact is consider in the discussion here
> and we don't add a new API that turns out to be too simple/restricted
> in the end. Whether we really want/need to cover this case is a
> different question.

I can see the point and I think it's always good to discuss the
possibilities that arise in the process.

>> when I consider the scenario you wrote me about I don't like the idea of
>> leaving the parsing to the caller and for the scenario of multiple IP
>> addresses in the return value I recommend a new prototype:
>> char **virDomainGetIPAddress(virDomainPtr domain, char *devmac, unsigned int *count, unsigned int flags);
>> where count will be the output parameter with the number of elements in
>> the return value. It should be used like:
>> virDomainPtr domain = ...;
>> char *macaddr = "11:22:33:44:55:66";
>> char **ips = NULL;
>> int count = -1;
>> ips = virDomainGetIPAddress(domain, macaddr, &count, 0);
>> for (i = 0; i < count; i++) {
>>  ... ips[i] ...
>>  ... free(ips[i]) ...
>> }
>> The return value allocation should be done by the function itself and
>> the called should free the result (ips in this case).
> That's a possible way to deal with this, yes.
> And now lets spin this a bit further and consider IPv6 addresses.
> ipv4s = virDomainGetIPAddress(domain, macaddr, &count, VIR_DOMAIN_ADDRESS_IPV4);
> ipv6s = virDomainGetIPAddress(domain, macaddr, &count, VIR_DOMAIN_ADDRESS_IPV6);
> This are the simple cases where the caller explicitly requests only
> one version and knows the version of the returned IP addresses. But
> what about this
> ips = virDomainGetIPAddress(domain, macaddr, &count,

For this the virSocketAddr representation would be better, right.
However my scenario didn't count with the option of definiting




Michal Novotny <minovotn at redhat.com>, RHCE, Red Hat
Virtualization | libvirt-php bindings | php-virt-control.org

More information about the libvir-list mailing list