aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/ndp
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2015-12-16 10:14:16 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2015-12-16 10:14:16 +0000
commit427c2f4ef0e14f5444c7c8cb7e48d2035755c9de (patch)
tree37753ca0d04540927e3ad47c4a42a40617fe0efa /usr.sbin/ndp
parentadc1aa7a29f88a8d58a0839248d48c69fb9b12c8 (diff)
downloadsrc-427c2f4ef0e14f5444c7c8cb7e48d2035755c9de.tar.gz
src-427c2f4ef0e14f5444c7c8cb7e48d2035755c9de.zip
Provide additional lle data in IPv6 lltable dump used by ndp(8).
Before the change, things like lle state were queried via SIOCGNBRINFO_IN6 by ndp(8) for _each_ lle entry in dump. This ioctl was added in 1999, probably to avoid touching rtsock code. This change maps SIOCGNBRINFO_IN6 data to standard rtsock dump the following way: expire (already) maps to rtm_rmx.rmx_expire isrouter -> rtm_flags & RTF_GATEWAY asked -> rtm_rmx.rmx_pksent state -> rtm_rmx.rmx_state (maps to rmx_weight via define) Reviewed by: ae
Notes
Notes: svn path=/head/; revision=292333
Diffstat (limited to 'usr.sbin/ndp')
-rw-r--r--usr.sbin/ndp/ndp.c78
1 files changed, 36 insertions, 42 deletions
diff --git a/usr.sbin/ndp/ndp.c b/usr.sbin/ndp/ndp.c
index 85cb67c3bdc9..8c498ec7ff64 100644
--- a/usr.sbin/ndp/ndp.c
+++ b/usr.sbin/ndp/ndp.c
@@ -563,8 +563,8 @@ dump(struct sockaddr_in6 *addr, int cflag)
struct sockaddr_in6 *sin;
struct sockaddr_dl *sdl;
extern int h_errno;
- struct in6_nbrinfo *nbi;
struct timeval now;
+ u_long expire;
int addrwidth;
int llwidth;
int ifwidth;
@@ -676,52 +676,46 @@ again:;
llwidth, llwidth, ether_str(sdl), ifwidth, ifwidth, ifname);
/* Print neighbor discovery specific information */
- nbi = getnbrinfo(&sin->sin6_addr, sdl->sdl_index, 1);
- if (nbi) {
- if (nbi->expire > now.tv_sec) {
- printf(" %-9.9s",
- sec2str(nbi->expire - now.tv_sec));
- } else if (nbi->expire == 0)
- printf(" %-9.9s", "permanent");
- else
- printf(" %-9.9s", "expired");
+ expire = rtm->rtm_rmx.rmx_expire;
+ if (expire > now.tv_sec)
+ printf(" %-9.9s", sec2str(expire - now.tv_sec));
+ else if (expire == 0)
+ printf(" %-9.9s", "permanent");
+ else
+ printf(" %-9.9s", "expired");
- switch (nbi->state) {
- case ND6_LLINFO_NOSTATE:
- printf(" N");
- break;
+ switch (rtm->rtm_rmx.rmx_state) {
+ case ND6_LLINFO_NOSTATE:
+ printf(" N");
+ break;
#ifdef ND6_LLINFO_WAITDELETE
- case ND6_LLINFO_WAITDELETE:
- printf(" W");
- break;
+ case ND6_LLINFO_WAITDELETE:
+ printf(" W");
+ break;
#endif
- case ND6_LLINFO_INCOMPLETE:
- printf(" I");
- break;
- case ND6_LLINFO_REACHABLE:
- printf(" R");
- break;
- case ND6_LLINFO_STALE:
- printf(" S");
- break;
- case ND6_LLINFO_DELAY:
- printf(" D");
- break;
- case ND6_LLINFO_PROBE:
- printf(" P");
- break;
- default:
- printf(" ?");
- break;
- }
-
- isrouter = nbi->isrouter;
- prbs = nbi->asked;
- } else {
- warnx("failed to get neighbor information");
- printf(" ");
+ case ND6_LLINFO_INCOMPLETE:
+ printf(" I");
+ break;
+ case ND6_LLINFO_REACHABLE:
+ printf(" R");
+ break;
+ case ND6_LLINFO_STALE:
+ printf(" S");
+ break;
+ case ND6_LLINFO_DELAY:
+ printf(" D");
+ break;
+ case ND6_LLINFO_PROBE:
+ printf(" P");
+ break;
+ default:
+ printf(" ?");
+ break;
}
+ isrouter = rtm->rtm_flags & RTF_GATEWAY;
+ prbs = rtm->rtm_rmx.rmx_pksent;
+
/*
* other flags. R: router, P: proxy, W: ??
*/