Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys inet: Add SIOCGNBRINFO to retrieve neighbor state about ...
details: https://anonhg.NetBSD.org/src/rev/06b2fb14c627
branches: trunk
changeset: 954821:06b2fb14c627
user: roy <roy%NetBSD.org@localhost>
date: Fri Sep 11 15:22:12 2020 +0000
description:
inet: Add SIOCGNBRINFO to retrieve neighbor state about an address
diffstat:
sys/netinet/in.c | 22 ++++++++++++++++++++--
sys/netinet/in_var.h | 10 +++++++++-
sys/sys/sockio.h | 4 +++-
3 files changed, 32 insertions(+), 4 deletions(-)
diffs (83 lines):
diff -r 7cbecc002fda -r 06b2fb14c627 sys/netinet/in.c
--- a/sys/netinet/in.c Fri Sep 11 15:21:48 2020 +0000
+++ b/sys/netinet/in.c Fri Sep 11 15:22:12 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: in.c,v 1.239 2020/09/11 15:19:31 roy Exp $ */
+/* $NetBSD: in.c,v 1.240 2020/09/11 15:22:12 roy Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -91,7 +91,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.239 2020/09/11 15:19:31 roy Exp $");
+__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.240 2020/09/11 15:22:12 roy Exp $");
#include "arp.h"
@@ -424,6 +424,24 @@
if (ifp == NULL)
return EINVAL;
return ifaddrpref_ioctl(so, cmd, data, ifp);
+#if NARP > 0
+ case SIOCGNBRINFO:
+ {
+ struct in_nbrinfo *nbi = (struct in_nbrinfo *)data;
+ struct llentry *ln;
+ struct in_addr nb_addr = nbi->addr; /* make local for safety */
+
+ ln = arplookup(ifp, &nb_addr, NULL, 0);
+ if (ln == NULL)
+ return EINVAL;
+ nbi->state = ln->ln_state;
+ nbi->asked = ln->ln_asked;
+ nbi->expire = ln->ln_expire ?
+ time_mono_to_wall(ln->ln_expire) : 0;
+ LLE_RUNLOCK(ln);
+ return 0;
+ }
+#endif
}
bound = curlwp_bind();
diff -r 7cbecc002fda -r 06b2fb14c627 sys/netinet/in_var.h
--- a/sys/netinet/in_var.h Fri Sep 11 15:21:48 2020 +0000
+++ b/sys/netinet/in_var.h Fri Sep 11 15:22:12 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: in_var.h,v 1.97 2018/11/29 09:51:20 ozaki-r Exp $ */
+/* $NetBSD: in_var.h,v 1.98 2020/09/11 15:22:12 roy Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -115,6 +115,14 @@
#endif
};
+struct in_nbrinfo {
+ char ifname[IFNAMSIZ]; /* if name, e.g. "en0" */
+ struct in_addr addr; /* IPv4 address of the neighbor */
+ long asked; /* number of queries already sent for this addr */
+ int state; /* reachability state */
+ int expire; /* lifetime for NDP state transition */
+};
+
#ifdef _KERNEL
static __inline void
ia4_acquire(struct in_ifaddr *ia, struct psref *psref)
diff -r 7cbecc002fda -r 06b2fb14c627 sys/sys/sockio.h
--- a/sys/sys/sockio.h Fri Sep 11 15:21:48 2020 +0000
+++ b/sys/sys/sockio.h Fri Sep 11 15:22:12 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: sockio.h,v 1.38 2019/07/04 02:44:25 ozaki-r Exp $ */
+/* $NetBSD: sockio.h,v 1.39 2020/09/11 15:22:12 roy Exp $ */
/*-
* Copyright (c) 1982, 1986, 1990, 1993, 1994
@@ -153,4 +153,6 @@
#define SIOCSETPFSYNC _IOW('i', 247, struct ifreq)
#define SIOCGETPFSYNC _IOWR('i', 248, struct ifreq)
+#define SIOCGNBRINFO _IOWR('i', 249, struct in_nbrinfo) /* get IA ND info */
+
#endif /* !_SYS_SOCKIO_H_ */
Home |
Main Index |
Thread Index |
Old Index