From 274cbc8854c9327555f7a67d5661a6c6c7c4c2eb Mon Sep 17 00:00:00 2001 From: brian Date: Fri, 23 Nov 2001 12:39:20 +0000 Subject: Don't adjust_linklocal() when pulling a sockaddr out of an ncpaddr or ncprange structure. Don't write() the netmask for IPv6 sockaddrs to the routing socket if the prefixlen is 128. It seems that messages written to the routing socket with the scopeid set for link local addresses are not understood. Instead, we have to put the scopeid in the 5th and 6th bytes of the address (see adjust_linklocal() in ncpaddr.c). I think this may be a bug in the KAME implementation - it should really understand both forms. --- usr.sbin/ppp/route.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'usr.sbin/ppp/route.c') diff --git a/usr.sbin/ppp/route.c b/usr.sbin/ppp/route.c index f060f42..c4d2a91 100644 --- a/usr.sbin/ppp/route.c +++ b/usr.sbin/ppp/route.c @@ -698,7 +698,7 @@ rt_Set(struct bundle *bundle, int cmd, const struct ncprange *dst, const struct ncpaddr *gw, int bang, int quiet) { struct rtmsg rtmes; - int domask, s, nb, wb, width; + int s, nb, wb, width; char *cp; const char *cmdstr; struct sockaddr_storage sadst, samask, sagw; @@ -757,13 +757,7 @@ rt_Set(struct bundle *bundle, int cmd, const struct ncprange *dst, } } - domask = 1; - if (ncprange_family(dst) == AF_INET) { - ncprange_getwidth(dst, &width); - if (width == 32) - domask = 0; - } - if (domask) { + if (!ncprange_ishost(dst)) { memcpy(cp, &samask, samask.ss_len); cp += samask.ss_len; rtmes.m_rtm.rtm_addrs |= RTA_NETMASK; -- cgit v1.1