[libvirt-php] libvirt_domain_interface_addresses() only returns only on IP address for NICs with multiple IPs

Michal Privoznik mprivozn at redhat.com
Thu Apr 16 10:34:58 UTC 2020


On 4/16/20 9:08 AM, Fernando Casas Schössow wrote:
> Forgot to add the output of the equivalent virsh command for the same VM:
> 
> Name MAC address Protocol Address
> ------------------------------------------------------------------------------- 
> 
> lo 00:00:00:00:00:00 ipv4 127.0.0.1/8
> lo 00:00:00:00:00:00 ipv6 ::1/128
> eth0 52:54:00:12:b9:22 ipv4 192.168.7.31/26
> eth0 52:54:00:12:b9:22 ipv6 fe80::5054:ff:fe12:b922/64
> eth1 52:54:00:8e:b0:35 ipv4 192.168.1.34/24
> eth1 52:54:00:8e:b0:35 ipv6 fe80::5054:ff:fe8e:b035/64
> 
> 
> Thanks,
> 
> Fernando
> 
> On jue, abr 16, 2020 at 12:58 AM, Fernando Casas Schössow 
> <casasfernando at outlook.com> wrote:
>> Hi,
>>
>> While using the function libvirt_domain_interface_addresses() with 
>> qemu guest agent as the source, for interfaces with more than one IP 
>> address, the function will only return one IP.
>>
>> Example code:
>>
>> $netdetails = libvirt_domain_interface_addresses($vmres, 2);
>> foreach ($netdetails as $nic) {
>>     print_r($nic);
>> }
>>
>>
>> Example output:
>>
>> Array
>> (
>>    [name] => eth0
>>    [hwaddr] => 52:54:00:12:b9:22
>>    [naddrs] => 2
>>    [addrs] => Array
>>        (
>>            [addr] => fe80::5054:ff:fe12:b922
>>            [prefix] => 64
>>            [type] => 1
>>        )

Ah, this is another clear bug in PHP bindings. The problem is we use 
associative array for 'addrs'. As you can see, 'naddrs' is 2, so the API 
returned 2 IP addresses (IPv4 and IPv6 ones). So we've constructed an 
associative array for IPv4 and set $nic['addrs'] to it. Then we did the 
same for IPv6. This is obviously wrong. Let me see if I can fix it.

Michal




More information about the libvir-list mailing list