IPv6 scoped addr format is changed as recent KAME change.
KAME scoped addr format is changed recently. before: addr@scope now: scope%addr Because the end of IPv6 numeric addr is tend to be truncated in `netstat -rn ` output, so placing scope part at starting of addr will be convenient. Approved by: jkh Obtained from: KAME project
This commit is contained in:
parent
a683a7dd4f
commit
0db018f059
@ -707,7 +707,7 @@ explore_numeric_scope(pai, hostname, servname, res)
|
||||
switch (pai->ai_family) {
|
||||
#ifdef INET6
|
||||
case AF_INET6:
|
||||
scope = if_nametoindex(cp);
|
||||
scope = if_nametoindex(hostname2);
|
||||
if (scope == 0) {
|
||||
error = EAI_SYSTEM;
|
||||
goto free;
|
||||
@ -716,7 +716,7 @@ explore_numeric_scope(pai, hostname, servname, res)
|
||||
#endif
|
||||
}
|
||||
|
||||
error = explore_numeric(pai, hostname2, servname, res);
|
||||
error = explore_numeric(pai, cp, servname, res);
|
||||
if (error == 0) {
|
||||
for (cur = *res; cur; cur = cur->ai_next) {
|
||||
#ifdef INET6
|
||||
|
@ -189,14 +189,24 @@ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags)
|
||||
unsigned int ifindex =
|
||||
((struct sockaddr_in6 *)sa)->sin6_scope_id;
|
||||
char ifname[IF_NAMESIZE * 2 /* for safety */];
|
||||
int scopelen, numaddrlen;
|
||||
|
||||
if ((if_indextoname(ifindex, ifname)) == NULL)
|
||||
return ENI_SYSTEM;
|
||||
if (strlen(host) + 1 /* SCOPE_DELIMITER */
|
||||
+ strlen(ifname) > hostlen)
|
||||
scopelen = strlen(ifname);
|
||||
numaddrlen = strlen(host);
|
||||
if (numaddrlen + 1 /* SCOPE_DELIMITER */
|
||||
+ scopelen > hostlen)
|
||||
return ENI_MEMORY;
|
||||
*ep = SCOPE_DELIMITER;
|
||||
strcpy(ep + 1, ifname);
|
||||
/*
|
||||
* Shift the host string to allocate
|
||||
* space for the scope ID part.
|
||||
*/
|
||||
memmove(host + scopelen + 1, host, numaddrlen);
|
||||
/* copy the scope ID and the delimiter */
|
||||
memcpy(host, ifname, scopelen);
|
||||
host[scopelen] = SCOPE_DELIMITER;
|
||||
host[scopelen + 1 + numaddrlen] = '\0';
|
||||
}
|
||||
}
|
||||
#endif /* INET6 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user