@@ -1942,7 +1942,8 @@ void ofi_free_list_of_addr(struct slist *addr_list)
1942
1942
}
1943
1943
1944
1944
static inline
1945
- void ofi_insert_loopback_addr (const struct fi_provider * prov , struct slist * addr_list )
1945
+ void ofi_insert_loopback_addr (const struct fi_provider * prov ,
1946
+ struct slist * addr_list , int mtu )
1946
1947
{
1947
1948
struct ofi_addr_list_entry * addr_entry ;
1948
1949
@@ -1953,6 +1954,7 @@ void ofi_insert_loopback_addr(const struct fi_provider *prov, struct slist *addr
1953
1954
addr_entry -> comm_caps = FI_LOCAL_COMM ;
1954
1955
addr_entry -> ipaddr .sin .sin_family = AF_INET ;
1955
1956
addr_entry -> ipaddr .sin .sin_addr .s_addr = htonl (INADDR_LOOPBACK );
1957
+ addr_entry -> mtu = mtu ;
1956
1958
ofi_straddr_log (prov , FI_LOG_INFO , FI_LOG_CORE ,
1957
1959
"available addr: " , & addr_entry -> ipaddr );
1958
1960
@@ -1968,6 +1970,7 @@ void ofi_insert_loopback_addr(const struct fi_provider *prov, struct slist *addr
1968
1970
addr_entry -> comm_caps = FI_LOCAL_COMM ;
1969
1971
addr_entry -> ipaddr .sin6 .sin6_family = AF_INET6 ;
1970
1972
addr_entry -> ipaddr .sin6 .sin6_addr = in6addr_loopback ;
1973
+ addr_entry -> mtu = mtu ;
1971
1974
ofi_straddr_log (prov , FI_LOG_INFO , FI_LOG_CORE ,
1972
1975
"available addr: " , & addr_entry -> ipaddr );
1973
1976
@@ -2062,7 +2065,7 @@ void ofi_set_netmask_str(char *netstr, size_t len, struct ifaddrs *ifa)
2062
2065
void ofi_get_list_of_addr (const struct fi_provider * prov , const char * env_name ,
2063
2066
struct slist * addr_list )
2064
2067
{
2065
- int ret ;
2068
+ int ret , mtu = -1 ;
2066
2069
char * iface = NULL ;
2067
2070
struct ofi_addr_list_entry * addr_entry ;
2068
2071
struct ifaddrs * ifaddrs , * ifa ;
@@ -2089,10 +2092,13 @@ void ofi_get_list_of_addr(const struct fi_provider *prov, const char *env_name,
2089
2092
if (ifa -> ifa_addr == NULL ||
2090
2093
!(ifa -> ifa_flags & IFF_UP ) ||
2091
2094
!(ifa -> ifa_flags & IFF_RUNNING ) ||
2092
- (ifa -> ifa_flags & IFF_LOOPBACK ) ||
2093
2095
((ifa -> ifa_addr -> sa_family != AF_INET ) &&
2094
2096
(ifa -> ifa_addr -> sa_family != AF_INET6 )))
2095
2097
continue ;
2098
+ if (ifa -> ifa_flags & IFF_LOOPBACK ) {
2099
+ mtu = ofi_ifaddr_get_mtu (ifa );
2100
+ continue ;
2101
+ }
2096
2102
if (iface && strncmp (iface , ifa -> ifa_name , strlen (iface ) + 1 )) {
2097
2103
FI_DBG (prov , FI_LOG_CORE ,
2098
2104
"Skip (%s) interface\n" , ifa -> ifa_name );
@@ -2122,9 +2128,11 @@ void ofi_get_list_of_addr(const struct fi_provider *prov, const char *env_name,
2122
2128
}
2123
2129
2124
2130
addr_entry -> speed = ofi_ifaddr_get_speed (ifa );
2131
+ addr_entry -> mtu = ofi_ifaddr_get_mtu (ifa );
2125
2132
FI_INFO (prov , FI_LOG_CORE , "Available addr: %s, "
2126
- "iface name: %s, speed: %zu\n" ,
2127
- addr_entry -> ipstr , ifa -> ifa_name , addr_entry -> speed );
2133
+ "iface name: %s, speed: %zu, mtu: %d\n" ,
2134
+ addr_entry -> ipstr , ifa -> ifa_name , addr_entry -> speed ,
2135
+ addr_entry -> mtu );
2128
2136
2129
2137
slist_insert_before_first_match (addr_list , ofi_compare_addr_entry ,
2130
2138
& addr_entry -> entry );
@@ -2136,7 +2144,7 @@ void ofi_get_list_of_addr(const struct fi_provider *prov, const char *env_name,
2136
2144
/* Always add loopback address at the end */
2137
2145
if (!iface || !strncmp (iface , "lo" , strlen (iface ) + 1 ) ||
2138
2146
!strncmp (iface , "loopback" , strlen (iface ) + 1 ))
2139
- ofi_insert_loopback_addr (prov , addr_list );
2147
+ ofi_insert_loopback_addr (prov , addr_list , mtu );
2140
2148
}
2141
2149
2142
2150
#elif defined HAVE_MIB_IPADDRTABLE
@@ -2182,7 +2190,7 @@ void ofi_get_list_of_addr(const struct fi_provider *prov, const char *env_name,
2182
2190
}
2183
2191
2184
2192
/* Always add loopback address at the end */
2185
- ofi_insert_loopback_addr (prov , addr_list );
2193
+ ofi_insert_loopback_addr (prov , addr_list , -1 );
2186
2194
2187
2195
out :
2188
2196
if (iptbl != & _iptbl )
@@ -2194,7 +2202,7 @@ void ofi_get_list_of_addr(const struct fi_provider *prov, const char *env_name,
2194
2202
void ofi_get_list_of_addr (const struct fi_provider * prov , const char * env_name ,
2195
2203
struct slist * addr_list )
2196
2204
{
2197
- ofi_insert_loopback_addr (prov , addr_list );
2205
+ ofi_insert_loopback_addr (prov , addr_list , -1 );
2198
2206
}
2199
2207
#endif
2200
2208
0 commit comments