]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[3527] Fixed the failing IfaceMgrTest::detectIfaces.
authorMarcin Siodelski <marcin@isc.org>
Thu, 21 Aug 2014 18:54:25 +0000 (20:54 +0200)
committerMarcin Siodelski <marcin@isc.org>
Thu, 21 Aug 2014 18:54:25 +0000 (20:54 +0200)
The updated code uses interface index to match the interface detected by
the test with the interface found by the IfaceMgr. This is to avoid issues
on Linux whereby Netlink-based implementation doesn't return the virtual
interface names, but rather physical interface names.

src/lib/dhcp/tests/iface_mgr_unittest.cc

index 45148b580277bba1613373bdcb95054e99905cba..ac9f6851767ce4b616c1128f09cd2dc12cd608fc 100644 (file)
@@ -2362,7 +2362,20 @@ TEST_F(IfaceMgrTest, detectIfaces) {
     // 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.