util: Add link-local check to net interface
Add a check for link-local IPv6 addresses to the net interface to support better computation of network pairings in the weighted reachable component. Signed-off-by: Brian Barrett <bbarrett@amazon.com>
Этот коммит содержится в:
родитель
a09c090709
Коммит
502f383f4d
@ -358,6 +358,30 @@ opal_net_addr_isipv4public(const struct sockaddr *addr)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
opal_net_addr_isipv6linklocal(const struct sockaddr *addr)
|
||||
{
|
||||
struct sockaddr_in6 if_addr;
|
||||
|
||||
switch (addr->sa_family) {
|
||||
#if OPAL_ENABLE_IPV6
|
||||
case AF_INET6:
|
||||
if_addr.sin6_family = AF_INET6;
|
||||
if (1 != inet_pton(AF_INET6, "fe80::0000", &if_addr.sin6_addr)) {
|
||||
return false;
|
||||
}
|
||||
return opal_net_samenetwork(addr, (struct sockaddr*)&if_addr, 64);
|
||||
#endif
|
||||
case AF_INET:
|
||||
return false;
|
||||
default:
|
||||
opal_output (0,
|
||||
"unhandled sa_family %d passed to opal_net_addr_isipv6linklocal\n",
|
||||
addr->sa_family);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
char*
|
||||
opal_net_get_hostname(const struct sockaddr *addr)
|
||||
|
@ -112,6 +112,14 @@ OPAL_DECLSPEC bool opal_net_samenetwork(const struct sockaddr *addr1,
|
||||
*/
|
||||
OPAL_DECLSPEC bool opal_net_addr_isipv4public(const struct sockaddr *addr);
|
||||
|
||||
/**
|
||||
* Is the given address a link-local IPv6 address? Returns false for IPv4
|
||||
* address.
|
||||
*
|
||||
* @param addr address as struct sockaddr
|
||||
* @return true, if \c addr is IPv6 link-local, false otherwise
|
||||
*/
|
||||
OPAL_DECLSPEC bool opal_net_addr_isipv6linklocal(const struct sockaddr *addr);
|
||||
|
||||
/**
|
||||
* Get string version of address
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user