mirror of
https://github.com/sheumann/telnetd.git
synced 2024-11-29 16:50:58 +00:00
Switch Advanced Sockets API for IPv6 from RFC2292 to RFC3542
(aka RFC2292bis). Though I believe this commit doesn't break backward compatibility againt existing binaries, it breaks backward compatibility of API. Now, the applications which use Advanced Sockets API such as telnet, ping6, mld6query and traceroute6 use RFC3542 API. Obtained from: KAME git-svn-id: http://svn0.us-east.freebsd.org/base/head/contrib/telnet@121472 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
This commit is contained in:
parent
425407c55a
commit
97005ca0b5
@ -2846,7 +2846,7 @@ sourceroute(struct addrinfo *ai, char *arg, char **cpp, int *lenp, int *protop,
|
|||||||
struct sockaddr_in *_sin;
|
struct sockaddr_in *_sin;
|
||||||
#ifdef INET6
|
#ifdef INET6
|
||||||
struct sockaddr_in6 *sin6;
|
struct sockaddr_in6 *sin6;
|
||||||
struct cmsghdr *cmsg;
|
struct ip6_rthdr *rth;
|
||||||
#endif
|
#endif
|
||||||
struct addrinfo hints, *res;
|
struct addrinfo hints, *res;
|
||||||
int error;
|
int error;
|
||||||
@ -2889,11 +2889,13 @@ sourceroute(struct addrinfo *ai, char *arg, char **cpp, int *lenp, int *protop,
|
|||||||
|
|
||||||
#ifdef INET6
|
#ifdef INET6
|
||||||
if (ai->ai_family == AF_INET6) {
|
if (ai->ai_family == AF_INET6) {
|
||||||
cmsg = inet6_rthdr_init(*cpp, IPV6_RTHDR_TYPE_0);
|
if ((rth = inet6_rth_init((void *)*cpp, sizeof(buf),
|
||||||
|
IPV6_RTHDR_TYPE_0, 0)) == NULL)
|
||||||
|
return -1;
|
||||||
if (*cp != '@')
|
if (*cp != '@')
|
||||||
return -1;
|
return -1;
|
||||||
*protop = IPPROTO_IPV6;
|
*protop = IPPROTO_IPV6;
|
||||||
*optp = IPV6_PKTOPTIONS;
|
*optp = IPV6_RTHDR;
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
@ -2965,8 +2967,8 @@ sourceroute(struct addrinfo *ai, char *arg, char **cpp, int *lenp, int *protop,
|
|||||||
#ifdef INET6
|
#ifdef INET6
|
||||||
if (res->ai_family == AF_INET6) {
|
if (res->ai_family == AF_INET6) {
|
||||||
sin6 = (struct sockaddr_in6 *)res->ai_addr;
|
sin6 = (struct sockaddr_in6 *)res->ai_addr;
|
||||||
inet6_rthdr_add(cmsg, &sin6->sin6_addr,
|
if (inet6_rth_add((void *)rth, &sin6->sin6_addr) == -1)
|
||||||
IPV6_RTHDR_LOOSE);
|
return(0);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
@ -2981,23 +2983,14 @@ sourceroute(struct addrinfo *ai, char *arg, char **cpp, int *lenp, int *protop,
|
|||||||
/*
|
/*
|
||||||
* Check to make sure there is space for next address
|
* Check to make sure there is space for next address
|
||||||
*/
|
*/
|
||||||
#ifdef INET6
|
|
||||||
if (res->ai_family == AF_INET6) {
|
|
||||||
if (((char *)CMSG_DATA(cmsg) +
|
|
||||||
sizeof(struct ip6_rthdr) +
|
|
||||||
((inet6_rthdr_segments(cmsg) + 1) *
|
|
||||||
sizeof(struct in6_addr))) > ep)
|
|
||||||
return -1;
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
if (lsrp + 4 > ep)
|
if (lsrp + 4 > ep)
|
||||||
return -1;
|
return -1;
|
||||||
freeaddrinfo(res);
|
freeaddrinfo(res);
|
||||||
}
|
}
|
||||||
#ifdef INET6
|
#ifdef INET6
|
||||||
if (res->ai_family == AF_INET6) {
|
if (res->ai_family == AF_INET6) {
|
||||||
inet6_rthdr_lasthop(cmsg, IPV6_RTHDR_LOOSE);
|
rth->ip6r_len = rth->ip6r_segleft * 2;
|
||||||
*lenp = cmsg->cmsg_len;
|
*lenp = (rth->ip6r_len + 1) << 3;
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user