// Go over all interfaces detected by the unit test and see if they
// match with the interfaces detected by IfaceMgr.
for (ifptr = iflist; ifptr != 0; ifptr = ifptr->ifa_next) {
- Iface* i = ifacemgr.getIface(std::string(ifptr->ifa_name));
+ // When more than one IPv4 address is assigned to the particular
+ // physical interface, virtual interfaces may be created for each
+ // additional IPv4 address. For example, when multiple addresses
+ // are assigned to the eth0 interface, additional virtual interfaces
+ // will be eth0:0, eth0:1 etc. This is the case on some Linux
+ // distributions. The getifaddrs will return virtual interfaces,
+ // with single address each, but the Netlink-based implementation
+ // (used by IfaceMgr) will rather hold a list of physical interfaces
+ // with multiple IPv4 addresses assigned. This means that the test
+ // can't use a name of the interface returned by getifaddrs to match
+ // with the interface name held by IfaceMgr. Instead, we use the
+ // index of the interface because the virtual interfaces have the
+ // same indexes as the physical interfaces.
+ Iface* i = ifacemgr.getIface(if_nametoindex(ifptr->ifa_name));
// If the given interface was also detected by the IfaceMgr,
// check that its properties are correct.