diff --git a/test/gtest/common/test_helpers.cc b/test/gtest/common/test_helpers.cc index a035770568d..18ee8f7025c 100644 --- a/test/gtest/common/test_helpers.cc +++ b/test/gtest/common/test_helpers.cc @@ -438,6 +438,24 @@ bool is_inet_addr(const struct sockaddr* ifa_addr) { (ifa_addr->sa_family == AF_INET6); } +static bool netif_has_sysfs_file(const char *ifa_name, const char *file_name) +{ + char path[PATH_MAX]; + ucs_snprintf_safe(path, sizeof(path), "/sys/class/net/%s/%s", ifa_name, + file_name); + + struct stat st; + return stat(path, &st) >= 0; +} + +bool is_interface_usable(struct ifaddrs *ifa) +{ + return ucs_netif_flags_is_active(ifa->ifa_flags) && + ucs::is_inet_addr(ifa->ifa_addr) && + !netif_has_sysfs_file(ifa->ifa_name, "bridge") && + !netif_has_sysfs_file(ifa->ifa_name, "brport"); +} + static std::vector read_dir(const std::string& path) { std::vector result; diff --git a/test/gtest/common/test_helpers.h b/test/gtest/common/test_helpers.h index 086fca3e429..573b173a58d 100644 --- a/test/gtest/common/test_helpers.h +++ b/test/gtest/common/test_helpers.h @@ -30,6 +30,7 @@ #include #include #include +#include #ifndef UINT16_MAX @@ -304,11 +305,17 @@ void safe_usleep(double usec); /** - * Check if the given interface has an IPv4 or an IPv6 address. + * Check if the given network interface has an IPv4 or an IPv6 address. */ bool is_inet_addr(const struct sockaddr* ifa_addr); +/** + * Check if the given network interface should be used for testing. + */ +bool is_interface_usable(struct ifaddrs *ifa); + + /** * Check if the given network device is supported by rdmacm. */ diff --git a/test/gtest/ucp/test_ucp_sockaddr.cc b/test/gtest/ucp/test_ucp_sockaddr.cc index 4e7669e4345..2f5d446e6fb 100644 --- a/test/gtest/ucp/test_ucp_sockaddr.cc +++ b/test/gtest/ucp/test_ucp_sockaddr.cc @@ -10,7 +10,6 @@ #include #include -#include #include #include @@ -183,21 +182,16 @@ class test_ucp_sockaddr : public ucp_test { ASSERT_EQ(ret, 0); for (struct ifaddrs *ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) { - if (ucs_netif_flags_is_active(ifa->ifa_flags) && - ucs::is_inet_addr(ifa->ifa_addr)) - { - if (is_skip_interface(ifa)) { - continue; - } - - saddrs.push_back(ucs::sock_addr_storage()); - status = ucs_sockaddr_sizeof(ifa->ifa_addr, &size); - ASSERT_UCS_OK(status); - saddrs.back().set_sock_addr(*ifa->ifa_addr, size, - ucs::is_rdmacm_netdev( - ifa->ifa_name)); - saddrs.back().set_port(0); /* listen on any port then update */ + if (is_skip_interface(ifa) || !ucs::is_interface_usable(ifa)) { + continue; } + + saddrs.push_back(ucs::sock_addr_storage()); + status = ucs_sockaddr_sizeof(ifa->ifa_addr, &size); + ASSERT_UCS_OK(status); + saddrs.back().set_sock_addr(*ifa->ifa_addr, size, + ucs::is_rdmacm_netdev(ifa->ifa_name)); + saddrs.back().set_port(0); /* listen on any port then update */ } freeifaddrs(ifaddrs); diff --git a/test/gtest/uct/test_md.cc b/test/gtest/uct/test_md.cc index 2519fe98e50..3bdc2dcb37e 100644 --- a/test/gtest/uct/test_md.cc +++ b/test/gtest/uct/test_md.cc @@ -625,17 +625,17 @@ UCS_TEST_P(test_md, sockaddr_accessibility) { ASSERT_TRUE(getifaddrs(&ifaddr) != -1); /* go through a linked list of available interfaces */ for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { - if (ucs::is_inet_addr(ifa->ifa_addr) && - ucs_netif_flags_is_active(ifa->ifa_flags)) { - sock_addr.addr = ifa->ifa_addr; - - UCS_TEST_MESSAGE << "Testing " << ifa->ifa_name << " with " - << ucs::sockaddr_to_str(ifa->ifa_addr); - ASSERT_FALSE(uct_md_is_sockaddr_accessible(md(), &sock_addr, - UCT_SOCKADDR_ACC_LOCAL)); - ASSERT_FALSE(uct_md_is_sockaddr_accessible(md(), &sock_addr, - UCT_SOCKADDR_ACC_REMOTE)); + if (!ucs::is_interface_usable(ifa)) { + continue; } + + sock_addr.addr = ifa->ifa_addr; + UCS_TEST_MESSAGE << "Testing " << ifa->ifa_name << " with " + << ucs::sockaddr_to_str(ifa->ifa_addr); + ASSERT_FALSE(uct_md_is_sockaddr_accessible(md(), &sock_addr, + UCT_SOCKADDR_ACC_LOCAL)); + ASSERT_FALSE(uct_md_is_sockaddr_accessible(md(), &sock_addr, + UCT_SOCKADDR_ACC_REMOTE)); } freeifaddrs(ifaddr); } diff --git a/test/gtest/uct/uct_test.cc b/test/gtest/uct/uct_test.cc index b3229dba3d0..067543bf635 100644 --- a/test/gtest/uct/uct_test.cc +++ b/test/gtest/uct/uct_test.cc @@ -15,7 +15,6 @@ #ifdef HAVE_MALLOC_H #include #endif -#include std::string resource::name() const { @@ -292,8 +291,7 @@ void uct_test::set_interface_rscs(uct_component_h cmpt, const char *cmpt_name, } bool uct_test::is_interface_usable(struct ifaddrs *ifa, const char *name) { - if (!(ucs_netif_flags_is_active(ifa->ifa_flags)) || - !(ucs::is_inet_addr(ifa->ifa_addr))) { + if (!ucs::is_interface_usable(ifa)) { return false; }