1
1

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>
Этот коммит содержится в:
Brian Barrett 2017-09-15 18:41:15 +00:00
родитель a09c090709
Коммит 502f383f4d
2 изменённых файлов: 32 добавлений и 0 удалений

Просмотреть файл

@ -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