aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2019-09-17 18:49:13 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2019-09-17 18:49:13 +0000
commit247cf5664e1ad88d96568eb3f2101d383a539c08 (patch)
treed3232f9545e5fcd65e2e73c194b54ee0749aac0d
parent6fd583583bdded9f34da7a41e976d64ce32f1c1f (diff)
downloadsrc-247cf5664e1ad88d96568eb3f2101d383a539c08.tar.gz
src-247cf5664e1ad88d96568eb3f2101d383a539c08.zip
Add SIOCGIFDOWNREASON.
The ioctl(2) is intended to provide more details about the cause of the down for the link. Eventually we might define a comprehensive list of codes for the situations. But interface also allows the driver to provide free-form null-terminated ASCII string to provide arbitrary non-formalized information. Sample implementation exists for mlx5(4), where the string is fetched from firmware controlling the port. Reviewed by: hselasky, rrs Sponsored by: Mellanox Technologies MFC after: 1 week Differential revision: https://reviews.freebsd.org/D21527
Notes
Notes: svn path=/head/; revision=352458
-rw-r--r--sys/net/if.c1
-rw-r--r--sys/net/if.h10
-rw-r--r--sys/sys/sockio.h2
3 files changed, 13 insertions, 0 deletions
diff --git a/sys/net/if.c b/sys/net/if.c
index cfd0c2065888..8de83b2d7bc5 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -2891,6 +2891,7 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td)
case SIOCGIFGENERIC:
case SIOCGIFRSSKEY:
case SIOCGIFRSSHASH:
+ case SIOCGIFDOWNREASON:
if (ifp->if_ioctl == NULL)
return (EOPNOTSUPP);
error = (*ifp->if_ioctl)(ifp, cmd, data);
diff --git a/sys/net/if.h b/sys/net/if.h
index add4df55a3d9..fbcc06863bd4 100644
--- a/sys/net/if.h
+++ b/sys/net/if.h
@@ -585,6 +585,16 @@ struct ifrsshash {
#define IFNET_PCP_NONE 0xff /* PCP disabled */
+#define IFDR_MSG_SIZE 64
+#define IFDR_REASON_MSG 1
+#define IFDR_REASON_VENDOR 2
+struct ifdownreason {
+ char ifdr_name[IFNAMSIZ];
+ uint32_t ifdr_reason;
+ uint32_t ifdr_vendor;
+ char ifdr_msg[IFDR_MSG_SIZE];
+};
+
#endif /* __BSD_VISIBLE */
#ifdef _KERNEL
diff --git a/sys/sys/sockio.h b/sys/sys/sockio.h
index 89901bd40b44..447e2c884028 100644
--- a/sys/sys/sockio.h
+++ b/sys/sys/sockio.h
@@ -143,4 +143,6 @@
#define SIOCGLANPCP _IOWR('i', 152, struct ifreq) /* Get (V)LAN PCP */
#define SIOCSLANPCP _IOW('i', 153, struct ifreq) /* Set (V)LAN PCP */
+#define SIOCGIFDOWNREASON _IOWR('i', 154, struct ifdownreason)
+
#endif /* !_SYS_SOCKIO_H_ */