On 27 Dec 2014, at 15:53, Doychin Bondzhev <doyc...@dsoft-bg.com> wrote:

> This is a copy of my email that I sent earlier to core-libs-dev.
> -----------
> 
> Hi,
> 
> I want to report for a problem that I see when I have more then one IP 
> addresses assigned to same interface.
> 
> Here is an output from ip addr command on my linux box:
> 
> 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
>    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
>    inet 127.0.0.1/8 scope host lo
>    inet6 ::1/128 scope host
>       valid_lft forever preferred_lft forever
> 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP 
> qlen 1000
>    link/ether 08:00:27:fc:25:9f brd ff:ff:ff:ff:ff:ff
>    inet 192.168.1.4/24 brd 192.168.1.255 scope global eth0
>    inet6 fe80::a00:27ff:fefc:259f/64 scope link
>       valid_lft forever preferred_lft forever
> 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP 
> qlen 1000
>    link/ether 08:00:27:b1:42:d0 brd ff:ff:ff:ff:ff:ff
>    inet 192.168.240.1/24 brd 192.168.240.255 scope global eth1
>    inet 192.168.241.1/24 brd 192.168.241.255 scope global eth1
>    inet 192.168.239.1/24 brd 192.168.239.255 scope global eth1
>    inet 10.0.0.1/22 brd 10.0.3.255 scope global eth1
>    inet6 fe80::a00:27ff:feb1:42d0/64 scope link
>       valid_lft forever preferred_lft forever
> 
> And this is the output of a test java program that uses NetworkInterfaces 
> class to display all IP addresses and their corresponding settings:
> 
> eth1:10.0.0.1/24 broadcast:192.168.240.255
> eth1:192.168.239.1/24 broadcast:192.168.240.255
> eth1:192.168.241.1/24 broadcast:192.168.240.255
> eth1:192.168.240.1/24 broadcast:192.168.240.255
> eth0:192.168.1.4/24 broadcast:192.168.1.255
> lo:127.0.0.1/8
> 
> As you can see there are 2 problems visible here:
> 
> 1. On all eth1 lines same broadcast is displayed. The value is the broadcast 
> of the first IP address set on that interface
> 
> 2. All addresses are with prefix length of 24 which is not correct. We have 
> 10.0.0.1/22  in the "ip addr" output.
> 
> So the problem is in NetworkInterfaces native code for Unix.
> 
> For IPv4 addresses that code uses 2 functions (getBordacast and getSubnet and 
> these 2 functions use ioctl with SIOCGIFNETMASK and SIOCGIFBRDADDR. Both of 
> these requests receive as parameter interface name. They are not prepared to 
> work in environments where you can specify more then one IP on the same 
> interface without using virtual interfaces.
> 
> So using virutal interfaces is the only workaround of this problem for the 
> moment.
> 
> I propose another method of reading ip address information for interfaces 
> that will use getifaddrs/freeifaddrs.
> 
> getifaddrs knows how to handle this case properly. It returns all the 
> necessary information in an array of "struct ifaddrs"
> 
> Any toughs on this proposition?

This sounds reasonable. It is an implementation only issue, right? No impact on 
the public NetworkInterface API.

-Chris.


> -- 
> Doychin Bondzhev
> dSoft-Bulgaria Ltd.
> PowerPro - billing & provisioning solution for Service providers
> PowerStor - Warehouse & POS
> http://www.dsoft-bg.com/
> Mobile: +359888243116
> <doychin.vcf>

Reply via email to