While a wifi interface is configured to use WEP 'ifconfig scan' will
mistakenly show all WPA APs as WEP ones. Fix below.
This is a small ABI change in struct ieee80211_nodereq.
Index: sys/net80211/ieee80211_ioctl.c
===================================================================
RCS file: /cvs/src/sys/net80211/ieee80211_ioctl.c,v
retrieving revision 1.48
diff -u -p -r1.48 ieee80211_ioctl.c
--- sys/net80211/ieee80211_ioctl.c 19 Jan 2017 01:07:35 -0000 1.48
+++ sys/net80211/ieee80211_ioctl.c 11 Mar 2017 00:44:41 -0000
@@ -107,6 +107,11 @@ ieee80211_node2req(struct ieee80211com *
/* RSN */
nr->nr_rsnciphers = ni->ni_rsnciphers;
nr->nr_rsnakms = 0;
+ nr->nr_rsnprotos = 0;
+ if (ni->ni_rsnprotos & IEEE80211_PROTO_WPA)
+ nr->nr_rsnprotos |= IEEE80211_WPA_PROTO_WPA1;
+ if (ni->ni_rsnprotos & IEEE80211_PROTO_RSN)
+ nr->nr_rsnprotos |= IEEE80211_WPA_PROTO_WPA2;
if (ni->ni_rsnakms & IEEE80211_AKM_8021X)
nr->nr_rsnakms |= IEEE80211_WPA_AKM_8021X;
if (ni->ni_rsnakms & IEEE80211_AKM_PSK)
Index: sys/net80211/ieee80211_ioctl.h
===================================================================
RCS file: /cvs/src/sys/net80211/ieee80211_ioctl.h,v
retrieving revision 1.27
diff -u -p -r1.27 ieee80211_ioctl.h
--- sys/net80211/ieee80211_ioctl.h 15 Aug 2016 22:14:19 -0000 1.27
+++ sys/net80211/ieee80211_ioctl.h 11 Mar 2017 00:33:59 -0000
@@ -328,6 +328,7 @@ struct ieee80211_nodereq {
u_int16_t nr_state; /* node state in the cache */
/* RSN */
+ u_int nr_rsnprotos;
u_int nr_rsnciphers;
u_int nr_rsnakms;
Index: sbin/ifconfig/ifconfig.c
===================================================================
RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v
retrieving revision 1.337
diff -u -p -r1.337 ifconfig.c
--- sbin/ifconfig/ifconfig.c 21 Jan 2017 08:31:44 -0000 1.337
+++ sbin/ifconfig/ifconfig.c 11 Mar 2017 00:45:24 -0000
@@ -2375,9 +2375,9 @@ ieee80211_printnode(struct ieee80211_nod
if (nr->nr_capinfo) {
printb_status(nr->nr_capinfo, IEEE80211_CAPINFO_BITS);
if (nr->nr_capinfo & IEEE80211_CAPINFO_PRIVACY) {
- if (nr->nr_rsnciphers & IEEE80211_WPA_CIPHER_CCMP)
+ if (nr->nr_rsnprotos & IEEE80211_WPA_PROTO_WPA2)
fputs(",wpa2", stdout);
- else if (nr->nr_rsnciphers & IEEE80211_WPA_CIPHER_TKIP)
+ else if (nr->nr_rsnprotos & IEEE80211_WPA_PROTO_WPA1)
fputs(",wpa1", stdout);
else
fputs(",wep", stdout);