svn commit: r364011 - in head: sbin/ifconfig share/man/man4 sys/net80211

Bjoern A. Zeeb bz at FreeBSD.org
Fri Aug 7 12:24:24 UTC 2020


Author: bz
Date: Fri Aug  7 12:24:23 2020
New Revision: 364011
URL: https://svnweb.freebsd.org/changeset/base/364011

Log:
  net80211/ifconfig: print hardware device name for wlan interfaces
  
  Add IEEE80211_IOC_IC_NAME to query the ic_name field and in ifconfig
  to print the parent interface again. This functionality was lost
  around r287197. It helps in case of multiple wlan interfaces and
  multiple underlying hardware devices to keep track which wlan
  interface belongs to which physical device.
  
  Sponsored by:	Rubicon Communications, LLC (d/b/a "Netgate")
  Reviewed by:	adrian, Idwer Vollering
  MFC after:	2 weeks
  Differential Revision:	https://reviews.freebsd.org/D25832

Modified:
  head/sbin/ifconfig/ifieee80211.c
  head/share/man/man4/net80211.4
  head/sys/net80211/ieee80211_ioctl.c
  head/sys/net80211/ieee80211_ioctl.h

Modified: head/sbin/ifconfig/ifieee80211.c
==============================================================================
--- head/sbin/ifconfig/ifieee80211.c	Fri Aug  7 12:19:21 2020	(r364010)
+++ head/sbin/ifconfig/ifieee80211.c	Fri Aug  7 12:24:23 2020	(r364011)
@@ -4779,6 +4779,23 @@ getid(int s, int ix, void *data, size_t len, int *plen
 	return 0;
 }
 
+static int
+getdevicename(int s, void *data, size_t len, int *plen)
+{
+	struct ieee80211req ireq;
+
+	(void) memset(&ireq, 0, sizeof(ireq));
+	(void) strlcpy(ireq.i_name, name, sizeof(ireq.i_name));
+	ireq.i_type = IEEE80211_IOC_IC_NAME;
+	ireq.i_val = -1;
+	ireq.i_data = data;
+	ireq.i_len = len;
+	if (ioctl(s, SIOCG80211, &ireq) < 0)
+		return (-1);
+	*plen = ireq.i_len;
+	return (0);
+}
+
 static void
 ieee80211_status(int s)
 {
@@ -5501,6 +5518,12 @@ end:
 			LINE_CHECK("hwmpmaxhops %u", val);
 		}
 	}
+
+	LINE_BREAK();
+
+	if (getdevicename(s, data, sizeof(data), &len) < 0)
+		return;
+	LINE_CHECK("parent interface: %s", data);
 
 	LINE_BREAK();
 }

Modified: head/share/man/man4/net80211.4
==============================================================================
--- head/share/man/man4/net80211.4	Fri Aug  7 12:19:21 2020	(r364010)
+++ head/share/man/man4/net80211.4	Fri Aug  7 12:24:23 2020	(r364011)
@@ -28,7 +28,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd July 10, 2009
+.Dd August 7, 2020
 .Dt NET80211 4
 .Os
 .Sh NAME
@@ -393,6 +393,16 @@ Valid values are:
 and
 .Dv IEEE80211_HWMP_ROOTMODE_RANN
 (send broadcast Root Announcement (RANN) frames).
+.It Dv IEEE80211_IOC_IC_NAME
+Return the underlying hardware
+.Xr device 9
+name in the buffer pointed to by
+.Va i_data
+and the name length including terminating NUL character in
+.Va i_len .
+If the buffer length is too small to hold the full name
+.Er EINVAL
+will be returned.
 .It Dv IEEE80211_IOC_INACTIVITY
 Return whether or not the system handles inactivity processing in
 .Va i_val .

Modified: head/sys/net80211/ieee80211_ioctl.c
==============================================================================
--- head/sys/net80211/ieee80211_ioctl.c	Fri Aug  7 12:19:21 2020	(r364010)
+++ head/sys/net80211/ieee80211_ioctl.c	Fri Aug  7 12:24:23 2020	(r364011)
@@ -785,6 +785,13 @@ ieee80211_ioctl_get80211(struct ieee80211vap *vap, u_l
 	int error = 0;
 
 	switch (ireq->i_type) {
+	case IEEE80211_IOC_IC_NAME:
+		len = strlen(ic->ic_name) + 1;
+		if (len > ireq->i_len)
+			return (EINVAL);
+		ireq->i_len = len;
+		error = copyout(ic->ic_name, ireq->i_data, ireq->i_len);
+		break;
 	case IEEE80211_IOC_SSID:
 		switch (vap->iv_state) {
 		case IEEE80211_S_INIT:

Modified: head/sys/net80211/ieee80211_ioctl.h
==============================================================================
--- head/sys/net80211/ieee80211_ioctl.h	Fri Aug  7 12:19:21 2020	(r364010)
+++ head/sys/net80211/ieee80211_ioctl.h	Fri Aug  7 12:24:23 2020	(r364011)
@@ -743,6 +743,9 @@ struct ieee80211req {
 #define	IEEE80211_IOC_QUIET_OFFSET	207	/* Quiet Offset */
 #define	IEEE80211_IOC_QUIET_DUR		208	/* Quiet Duration */
 #define	IEEE80211_IOC_QUIET_COUNT	209	/* Quiet Count */
+
+#define	IEEE80211_IOC_IC_NAME		210	/* HW device name. */
+
 /*
  * Parameters for controlling a scan requested with
  * IEEE80211_IOC_SCAN_REQ.


More information about the svn-src-head mailing list