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
This commit is contained in:
kib 2019-09-17 18:49:13 +00:00 committed by Ken Brown
parent c4754fcac5
commit 1add2aab39
2 changed files with 14 additions and 2 deletions

View File

@ -29,7 +29,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* @(#)if.h 8.1 (Berkeley) 6/10/93 * @(#)if.h 8.1 (Berkeley) 6/10/93
* $FreeBSD: head/sys/net/if.h 340968 2018-11-26 13:42:18Z markj $ * $FreeBSD: head/sys/net/if.h 352458 2019-09-17 18:49:13Z kib $
*/ */
#ifndef _NET_IF_H_ #ifndef _NET_IF_H_
@ -585,6 +585,16 @@ struct ifrsshash {
#define IFNET_PCP_NONE 0xff /* PCP disabled */ #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 */ #endif /* __BSD_VISIBLE */
#ifndef _KERNEL #ifndef _KERNEL

View File

@ -29,7 +29,7 @@
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* @(#)sockio.h 8.1 (Berkeley) 3/28/94 * @(#)sockio.h 8.1 (Berkeley) 3/28/94
* $FreeBSD: head/sys/sys/sockio.h 331622 2018-03-27 15:29:32Z kib $ * $FreeBSD: head/sys/sys/sockio.h 352458 2019-09-17 18:49:13Z kib $
*/ */
#ifndef _SYS_SOCKIO_H_ #ifndef _SYS_SOCKIO_H_
@ -143,4 +143,6 @@
#define SIOCGLANPCP _IOWR('i', 152, struct ifreq) /* Get (V)LAN PCP */ #define SIOCGLANPCP _IOWR('i', 152, struct ifreq) /* Get (V)LAN PCP */
#define SIOCSLANPCP _IOW('i', 153, struct ifreq) /* Set (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_ */ #endif /* !_SYS_SOCKIO_H_ */