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.

Reply via email to