[libvirt] RFC: Implement virDomainGetIPAddress()

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


[snip]
>> 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 192.168.0.17 dev eth0
> ip addr add 192.168.0.42 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,
> VIR_DOMAIN_ADDRESS_IPV4 | VIR_DOMAIN_ADDRESS_IPV6);

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

VIR_DOMAIN_ADDRESS_IPV4 | VIR_DOMAIN_ADDRESS_IPV6

together.

Michal

-- 
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