58 lines
2.5 KiB
Diff
58 lines
2.5 KiB
Diff
|
From ecb72e6699f4f8525115e0b42f81121a1cf8eefa Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||
|
Date: Tue, 15 Sep 2020 14:59:58 +0200
|
||
|
Subject: [PATCH 2/2] mpl: do not require non-loopback networking
|
||
|
|
||
|
getaddrinfo(3) says:
|
||
|
If hints.ai_flags includes the AI_ADDRCONFIG flag, then IPv4
|
||
|
addresses are returned in the list pointed to by res only if the
|
||
|
local system has at least one IPv4 address configured, and IPv6
|
||
|
addresses are returned only if the local system has at least one
|
||
|
IPv6 address configured. The loopback address is not considered for
|
||
|
this case as valid as a configured address.
|
||
|
|
||
|
This means that MPL_get_sockaddr() will fail to resolve the local host
|
||
|
(either as "localhost" or by the actual hostname) on a system that has
|
||
|
no non-loopback networking. This break exection of mpirun e.g. in a
|
||
|
container for tests and such.
|
||
|
|
||
|
From https://bugzilla.redhat.com/show_bug.cgi?id=1839007:
|
||
|
|
||
|
<mock-chroot> sh-5.0# hostname
|
||
|
68da8e7c62a2404bb4bf75c9ce643e06
|
||
|
<mock-chroot> sh-5.0# module load mpi/mpich-x86_64
|
||
|
<mock-chroot> sh-5.0# mpirun ./a.out
|
||
|
Fatal error in PMPI_Init: Other MPI error, error stack:
|
||
|
MPIR_Init_thread(586)..............:
|
||
|
MPID_Init(224).....................: channel initialization failed
|
||
|
MPIDI_CH3_Init(105)................:
|
||
|
MPID_nem_init(324).................:
|
||
|
MPID_nem_tcp_init(175).............:
|
||
|
MPID_nem_tcp_get_business_card(404):
|
||
|
MPID_nem_tcp_init(375).............: gethostbyname failed, 68da8e7c62a2404bb4bf75c9ce643e06 (errno 0)
|
||
|
|
||
|
<mock-chroot> sh-5.0# ip a
|
||
|
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
|
||
|
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
|
||
|
inet 127.0.0.1/8 scope host lo
|
||
|
valid_lft forever preferred_lft forever
|
||
|
inet6 ::1/128 scope host
|
||
|
valid_lft forever preferred_lft forever
|
||
|
---
|
||
|
src/mpl/src/sock/mpl_sockaddr.c | 2 +-
|
||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/src/mpl/src/sock/mpl_sockaddr.c b/src/mpl/src/sock/mpl_sockaddr.c
|
||
|
index 9334cc4fb2..c0e991c68d 100644
|
||
|
--- a/src/mpl/src/sock/mpl_sockaddr.c
|
||
|
+++ b/src/mpl/src/sock/mpl_sockaddr.c
|
||
|
@@ -98,7 +98,7 @@ int MPL_get_sockaddr(const char *s_hostname, MPL_sockaddr_t * p_addr)
|
||
|
ai_hint.ai_family = af_type;
|
||
|
ai_hint.ai_socktype = SOCK_STREAM;
|
||
|
ai_hint.ai_protocol = IPPROTO_TCP;
|
||
|
- ai_hint.ai_flags = AI_ADDRCONFIG | AI_V4MAPPED;
|
||
|
+ ai_hint.ai_flags = AI_V4MAPPED;
|
||
|
ret = getaddrinfo(s_hostname, NULL, &ai_hint, &ai_list);
|
||
|
if (ret) {
|
||
|
return ret;
|