Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-1-5]: src/usr.sbin/ndp Pullup 1.11 [itojun]:
details: https://anonhg.NetBSD.org/src/rev/3f892468208c
branches: netbsd-1-5
changeset: 489820:3f892468208c
user: tv <tv%NetBSD.org@localhost>
date: Tue Oct 17 20:30:42 2000 +0000
description:
Pullup 1.11 [itojun]:
nuke link-locals correctly on -c. sync with kame
diffstat:
usr.sbin/ndp/ndp.c | 57 +++++++++++++++++++++++++++++------------------------
1 files changed, 31 insertions(+), 26 deletions(-)
diffs (161 lines):
diff -r 894f4bea91f4 -r 3f892468208c usr.sbin/ndp/ndp.c
--- a/usr.sbin/ndp/ndp.c Tue Oct 17 20:15:21 2000 +0000
+++ b/usr.sbin/ndp/ndp.c Tue Oct 17 20:30:42 2000 +0000
@@ -1,5 +1,5 @@
-/* $NetBSD: ndp.c,v 1.8.4.1 2000/06/21 08:23:11 itojun Exp $ */
-/* $KAME: ndp.c,v 1.40 2000/06/20 21:50:17 itojun Exp $ */
+/* $NetBSD: ndp.c,v 1.8.4.2 2000/10/17 20:30:42 tv Exp $ */
+/* $KAME: ndp.c,v 1.48 2000/10/09 22:08:21 itojun Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
@@ -84,6 +84,7 @@
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <sys/time.h>
+#include <sys/queue.h>
#include <net/if.h>
#if defined(__FreeBSD__) && __FreeBSD__ >= 3
@@ -126,7 +127,7 @@
#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len))
static int pid;
-static int fflag;
+static int cflag;
static int nflag;
static int tflag;
static int32_t thiszone; /* time difference with gmt */
@@ -172,7 +173,7 @@
char **argv;
{
int ch;
- int aflag = 0, cflag = 0, dflag = 0, sflag = 0, Hflag = 0,
+ int aflag = 0, dflag = 0, sflag = 0, Hflag = 0,
pflag = 0, rflag = 0, Pflag = 0, Rflag = 0;
pid = getpid();
@@ -183,7 +184,6 @@
aflag = 1;
break;
case 'c':
- fflag = 1;
cflag = 1;
break;
case 'd':
@@ -528,10 +528,18 @@
return (1);
}
if (rtmsg(RTM_DELETE) == 0) {
- getnameinfo((struct sockaddr *)sin,
- sin->sin6_len, host_buf,
- sizeof(host_buf), NULL, 0,
- NI_WITHSCOPEID | (nflag ? NI_NUMERICHOST : 0));
+ struct sockaddr_in6 s6 = *sin; /* XXX: for safety */
+
+#ifdef __KAME__
+ if (IN6_IS_ADDR_LINKLOCAL(&s6.sin6_addr)) {
+ s6.sin6_scope_id = ntohs(*(u_int16_t *)&s6.sin6_addr.s6_addr[2]);
+ *(u_int16_t *)&s6.sin6_addr.s6_addr[2] = 0;
+ }
+#endif
+ getnameinfo((struct sockaddr *)&s6,
+ s6.sin6_len, host_buf,
+ sizeof(host_buf), NULL, 0,
+ NI_WITHSCOPEID | (nflag ? NI_NUMERICHOST : 0));
printf("%s (%s) deleted\n", host, host_buf);
}
@@ -558,7 +566,7 @@
char flgbuf[8];
/* Print header */
- if (!tflag)
+ if (!tflag && !cflag)
printf("%-31.31s %-17.17s %6.6s %-9.9s %2s %4s %4s\n",
"Neighbor", "Linklayer Address", "Netif", "Expire",
"St", "Flgs", "Prbs");
@@ -593,24 +601,23 @@
found_entry = 1;
} else if (IN6_IS_ADDR_MULTICAST(&sin->sin6_addr))
continue;
- if (fflag == 1) {
- delete((char *)inet_ntop(AF_INET6, &sin->sin6_addr,
- ntop_buf, sizeof(ntop_buf)));
- continue;
- }
-
if (IN6_IS_ADDR_LINKLOCAL(&sin->sin6_addr) ||
IN6_IS_ADDR_MC_LINKLOCAL(&sin->sin6_addr)) {
/* XXX: should scope id be filled in the kernel? */
if (sin->sin6_scope_id == 0)
sin->sin6_scope_id = sdl->sdl_index;
-
- /* XXX: KAME specific hack; removed the embedded id */
+#ifdef __KAME__
+ /* KAME specific hack; removed the embedded id */
*(u_int16_t *)&sin->sin6_addr.s6_addr[2] = 0;
+#endif
}
getnameinfo((struct sockaddr *)sin, sin->sin6_len, host_buf,
sizeof(host_buf), NULL, 0,
NI_WITHSCOPEID | (nflag ? NI_NUMERICHOST : 0));
+ if (cflag == 1) {
+ delete(host_buf);
+ continue;
+ }
gettimeofday(&time, 0);
if (tflag)
ts_print(&time);
@@ -632,8 +639,7 @@
if (nbi->expire > time.tv_sec) {
printf(" %-9.9s",
sec2str(nbi->expire - time.tv_sec));
- }
- else if (nbi->expire == 0)
+ } else if (nbi->expire == 0)
printf(" %-9.9s", "permanent");
else
printf(" %-9.9s", "expired");
@@ -642,9 +648,11 @@
case ND6_LLINFO_NOSTATE:
printf(" N");
break;
+#ifdef ND6_LLINFO_WAITDELETE
case ND6_LLINFO_WAITDELETE:
printf(" W");
break;
+#endif
case ND6_LLINFO_INCOMPLETE:
printf(" I");
break;
@@ -667,8 +675,7 @@
isrouter = nbi->isrouter;
prbs = nbi->asked;
- }
- else {
+ } else {
warnx("failed to get neighbor information");
printf(" ");
}
@@ -744,8 +751,7 @@
cp = (u_char *)LLADDR(sdl);
sprintf(ebuf, "%x:%x:%x:%x:%x:%x",
cp[0], cp[1], cp[2], cp[3], cp[4], cp[5]);
- }
- else {
+ } else {
sprintf(ebuf, "(incomplete)");
}
@@ -1071,8 +1077,7 @@
default:
printf(" (unreachable)\n");
}
- }
- else
+ } else
printf(" (no neighbor state)\n");
}
if (PR.advrtrs > DRLSTSIZ)
Home |
Main Index |
Thread Index |
Old Index