Inspired by stsp's recent ieee80211_add_ess commit.
Refactor ieee80211_del_ess():
nwids are binary data with an explicit length, so treat them as such
instead of treating them like strings with a fixed len of
IEEE80211_NWID_LEN.
This recycles the ``all'' parameter and calls it len. If len == 0 it
means delete all elements. If we want this particular bikeshed banana
shaped I can pass in an additional parameter like this:
ieee80211_del_ess(struct ieee80211com *ic, u_int8_t *nwid, int len, int
all)
Comments, OK?
set_ess and match_ess are next...
diff --git ieee80211_ioctl.c ieee80211_ioctl.c
index fd0b1116bba..8155ca6a943 100644
--- ieee80211_ioctl.c
+++ ieee80211_ioctl.c
@@ -459,7 +459,7 @@ ieee80211_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
break;
}
if (join.i_flags & IEEE80211_JOIN_DEL)
- ieee80211_del_ess(ic, join.i_nwid, join.i_len ? 0 : 1);
+ ieee80211_del_ess(ic, join.i_nwid, join.i_len);
memset(ic->ic_des_essid, 0, IEEE80211_NWID_LEN);
ic->ic_des_esslen = join.i_len;
memcpy(ic->ic_des_essid, join.i_nwid, join.i_len);
diff --git ieee80211_node.c ieee80211_node.c
index 3a821b235a2..528ac3a7fb0 100644
--- ieee80211_node.c
+++ ieee80211_node.c
@@ -178,17 +178,17 @@ ieee80211_print_ess_list(struct ieee80211com *ic)
}
void
-ieee80211_del_ess(struct ieee80211com *ic, char *nwid, int all)
+ieee80211_del_ess(struct ieee80211com *ic, u_int8_t *nwid, int len)
{
struct ieee80211_ess *ess, *next;
TAILQ_FOREACH_SAFE(ess, &ic->ic_ess, ess_next, next) {
- if (all == 1 || (memcmp(ess->essid, nwid,
- IEEE80211_NWID_LEN) == 0)) {
+ if (len == 0 || (ess->esslen == len &&
+ memcmp(ess->essid, nwid, len) == 0)) {
TAILQ_REMOVE(&ic->ic_ess, ess, ess_next);
explicit_bzero(ess, sizeof(*ess));
free(ess, M_DEVBUF, sizeof(*ess));
- if (all != 1)
+ if (len != 0)
return;
}
}
@@ -543,7 +543,7 @@ ieee80211_node_detach(struct ifnet *ifp)
(*ic->ic_node_free)(ic, ic->ic_bss);
ic->ic_bss = NULL;
}
- ieee80211_del_ess(ic, NULL, 1);
+ ieee80211_del_ess(ic, NULL, 0);
ieee80211_free_allnodes(ic, 1);
#ifndef IEEE80211_STA_ONLY
free(ic->ic_aid_bitmap, M_DEVBUF,
diff --git ieee80211_var.h ieee80211_var.h
index 406b1601106..47408f4b6da 100644
--- ieee80211_var.h
+++ ieee80211_var.h
@@ -452,7 +452,7 @@ enum ieee80211_phymode ieee80211_chan2mode(struct
ieee80211com *,
void ieee80211_disable_wep(struct ieee80211com *);
void ieee80211_disable_rsn(struct ieee80211com *);
int ieee80211_add_ess(struct ieee80211com *, int, int);
-void ieee80211_del_ess(struct ieee80211com *, char *, int);
+void ieee80211_del_ess(struct ieee80211com *, u_int8_t *, int);
void ieee80211_set_ess(struct ieee80211com *, char *);
extern int ieee80211_cache_size;
--
I'm not entirely sure you are real.