No functional change.
Drop ieee80211_add_ess's nwid parameter. Read nwid and length from the ic.
The intention is to make it more obvious what the current implementation
is doing. Our long-term goal should be to pass essid/essid-length/crypto
params in one pass but the current WPA ioctl interface won't allow for this.
nwids are binary data with an explicit length, so treat them as such
instead of treating them like strings.
Index: net80211/ieee80211_ioctl.c
===================================================================
RCS file: /cvs/src/sys/net80211/ieee80211_ioctl.c,v
retrieving revision 1.61
diff -u -p -r1.61 ieee80211_ioctl.c
--- net80211/ieee80211_ioctl.c 11 Jul 2018 20:18:09 -0000 1.61
+++ net80211/ieee80211_ioctl.c 6 Aug 2018 09:23:36 -0000
@@ -466,7 +466,7 @@ ieee80211_ioctl(struct ifnet *ifp, u_lon
ieee80211_disable_wep(ic);
/* save nwid for auto-join */
if (!(join.i_flags & IEEE80211_JOIN_DEL))
- ieee80211_add_ess(ic, ic->ic_des_essid, 0, 0);
+ ieee80211_add_ess(ic, 0, 0);
ieee80211_set_ess(ic, ic->ic_des_essid);
error = ENETRESET;
break;
@@ -493,7 +493,7 @@ ieee80211_ioctl(struct ifnet *ifp, u_lon
break;
error = ieee80211_ioctl_setnwkeys(ic, (void *)data);
if (error == ENETRESET)
- ieee80211_add_ess(ic, ic->ic_des_essid, 0, 1);
+ ieee80211_add_ess(ic, 0, 1);
break;
case SIOCG80211NWKEY:
error = ieee80211_ioctl_getnwkeys(ic, (void *)data);
@@ -503,7 +503,7 @@ ieee80211_ioctl(struct ifnet *ifp, u_lon
break;
error = ieee80211_ioctl_setwpaparms(ic, (void *)data);
if (error == ENETRESET)
- ieee80211_add_ess(ic, ic->ic_des_essid, 1, 0);
+ ieee80211_add_ess(ic, 1, 0);
break;
case SIOCG80211WPAPARMS:
error = ieee80211_ioctl_getwpaparms(ic, (void *)data);
@@ -521,7 +521,7 @@ ieee80211_ioctl(struct ifnet *ifp, u_lon
ic->ic_flags &= ~IEEE80211_F_PSK;
memset(ic->ic_psk, 0, sizeof(ic->ic_psk));
}
- ieee80211_add_ess(ic, ic->ic_des_essid, 1, 0);
+ ieee80211_add_ess(ic, 1, 0);
error = ENETRESET;
break;
case SIOCG80211WPAPSK:
Index: net80211/ieee80211_node.c
===================================================================
RCS file: /cvs/src/sys/net80211/ieee80211_node.c,v
retrieving revision 1.137
diff -u -p -r1.137 ieee80211_node.c
--- net80211/ieee80211_node.c 6 Aug 2018 09:34:17 -0000 1.137
+++ net80211/ieee80211_node.c 6 Aug 2018 09:49:29 -0000
@@ -196,7 +196,7 @@ ieee80211_del_ess(struct ieee80211com *i
}
int
-ieee80211_add_ess(struct ieee80211com *ic, char *nwid, int wpa, int wep)
+ieee80211_add_ess(struct ieee80211com *ic, int wpa, int wep)
{
struct ieee80211_ess *ess;
int i = 0, new = 0, ness = 0;
@@ -206,11 +206,12 @@ ieee80211_add_ess(struct ieee80211com *i
return (0);
/* Don't save an empty nwid */
- if (strnlen(nwid, IEEE80211_NWID_LEN) == 0)
+ if (ic->ic_des_esslen == 0)
return (0);
TAILQ_FOREACH(ess, &ic->ic_ess, ess_next) {
- if (memcmp(ess->essid, nwid, IEEE80211_NWID_LEN) == 0)
+ if (ess->esslen == ic->ic_des_esslen &&
+ memcmp(ess->essid, ic->ic_des_essid, ess->esslen) == 0)
break;
ness++;
}
@@ -229,7 +230,7 @@ ieee80211_add_ess(struct ieee80211com *i
ess = malloc(sizeof(*ess), M_DEVBUF, M_NOWAIT|M_ZERO);
if (ess == NULL)
return (ENOMEM);
- memcpy(ess->essid, nwid, ic->ic_des_esslen);
+ memcpy(ess->essid, ic->ic_des_essid, ic->ic_des_esslen);
ess->esslen = ic->ic_des_esslen;
}
Index: net80211/ieee80211_var.h
===================================================================
RCS file: /cvs/src/sys/net80211/ieee80211_var.h,v
retrieving revision 1.86
diff -u -p -r1.86 ieee80211_var.h
--- net80211/ieee80211_var.h 11 Jul 2018 20:18:09 -0000 1.86
+++ net80211/ieee80211_var.h 6 Aug 2018 09:34:57 -0000
@@ -451,7 +451,7 @@ enum ieee80211_phymode ieee80211_chan2mo
const struct ieee80211_channel *);
void ieee80211_disable_wep(struct ieee80211com *);
void ieee80211_disable_rsn(struct ieee80211com *);
-int ieee80211_add_ess(struct ieee80211com *, char *, int, int);
+int ieee80211_add_ess(struct ieee80211com *, int, int);
void ieee80211_del_ess(struct ieee80211com *, char *, int);
void ieee80211_set_ess(struct ieee80211com *, char *);