svn commit: r253827 - head/contrib/tcpdump

Rui Paulo rpaulo at FreeBSD.org
Wed Jul 31 02:13:19 UTC 2013


Author: rpaulo
Date: Wed Jul 31 02:13:18 2013
New Revision: 253827
URL: http://svnweb.freebsd.org/changeset/base/253827

Log:
  When using tcpdump -I -i wlanN and wlanN is not a monitor mode VAP,
  tcpdump will print an error message saying rfmon is not supported.
  Give a concise explanation as to how one might solve this problem by
  creating a monitor mode VAP.

Modified:
  head/contrib/tcpdump/tcpdump.c

Modified: head/contrib/tcpdump/tcpdump.c
==============================================================================
--- head/contrib/tcpdump/tcpdump.c	Wed Jul 31 01:42:59 2013	(r253826)
+++ head/contrib/tcpdump/tcpdump.c	Wed Jul 31 02:13:18 2013	(r253827)
@@ -71,6 +71,8 @@ extern int SIZE_BUF;
 #ifdef __FreeBSD__
 #include <sys/capability.h>
 #include <sys/ioccom.h>
+#include <sys/types.h>
+#include <sys/sysctl.h>
 #include <net/bpf.h>
 #include <fcntl.h>
 #include <libgen.h>
@@ -1307,6 +1309,27 @@ main(int argc, char **argv)
 			         *cp != '\0')
 				error("%s: %s\n(%s)", device,
 				    pcap_statustostr(status), cp);
+#ifdef __FreeBSD__
+			else if (status == PCAP_ERROR_RFMON_NOTSUP &&
+			    strncmp(device, "wlan", 4) == 0) {
+				char parent[8], newdev[8];
+				char sysctl[32];
+				size_t s = sizeof(parent);
+
+				snprintf(sysctl, sizeof(sysctl),
+				    "net.wlan.%d.%%parent", atoi(device + 4));
+				sysctlbyname(sysctl, parent, &s, NULL, 0);
+				strlcpy(newdev, device, sizeof(newdev));
+				/* Suggest a new wlan device. */
+				newdev[strlen(newdev)-1]++;
+				error("%s is not a monitor mode VAP\n"
+				    "To create a new monitor mode VAP use:\n"
+				    "  ifconfig %s create wlandev %s wlanmode "
+				    "monitor\nand use %s as the tcpdump "
+				    "interface", device, newdev, parent,
+				    newdev);
+			}
+#endif
 			else
 				error("%s: %s", device,
 				    pcap_statustostr(status));


More information about the svn-src-head mailing list