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:
Yoshinobu Inoue 2000-02-09 00:38:06 +00:00
parent a683a7dd4f
commit 0db018f059
2 changed files with 16 additions and 6 deletions

View File

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

View File

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