please ignore
On Mon, Aug 06, 2018 at 04:22:28PM +0200, Florian Obser wrote:
>
> Refactor ieee80211_match_ess() and ieee80211_set_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.
>
> To avoid two searches in a row ieee80211_set_ess() accepts a struct
> ieee80211_ess which ieee80211_match_ess() just found for us. That way
> we also avoid passing in a length parameter.
> ieee80211_ioctl() needs to do it's own search though.
> Do it only in the add path since we already know that we won't find
> the node if we are deleting the nwid.
>
> OK?
>
> diff --git ieee80211_ioctl.c ieee80211_ioctl.c
> index 8155ca6a943..d4215ad6f9e 100644
> --- ieee80211_ioctl.c
> +++ ieee80211_ioctl.c
> @@ -467,9 +467,17 @@ ieee80211_ioctl(struct ifnet *ifp, u_long cmd, caddr_t
> data)
> ieee80211_disable_rsn(ic);
> ieee80211_disable_wep(ic);
> /* save nwid for auto-join */
> - if (!(join.i_flags & IEEE80211_JOIN_DEL))
> + if (!(join.i_flags & IEEE80211_JOIN_DEL)) {
> ieee80211_add_ess(ic, 0, 0);
> - ieee80211_set_ess(ic, ic->ic_des_essid);
> + TAILQ_FOREACH(ess, &ic->ic_ess, ess_next) {
> + if (ess->esslen == ic->ic_des_esslen &&
> + memcmp(ess->essid, ic->ic_des_essid,
> + ess->esslen) == 0) {
> + ieee80211_set_ess(ic, ess);
> + break;
> + }
> + }
> + }
> error = ENETRESET;
> break;
> case SIOCG80211JOIN:
> diff --git ieee80211_node.c ieee80211_node.c
> index 528ac3a7fb0..98b6f0394d5 100644
> --- ieee80211_node.c
> +++ ieee80211_node.c
> @@ -360,7 +360,7 @@ ieee80211_match_ess(struct ieee80211com *ic)
> if (LINK_STATE_IS_UP(ifp->if_link_state) &&
> ess->esslen == ic->ic_des_esslen &&
> (memcmp(ic->ic_des_essid, ess->essid,
> - IEEE80211_NWID_LEN) == 0)) {
> + ic->ic_des_esslen) == 0)) {
> if (ifp->if_flags & IFF_DEBUG) {
> printf(" %s: staying on ",
> ifp->if_xname);
> @@ -373,8 +373,8 @@ ieee80211_match_ess(struct ieee80211com *ic)
>
> TAILQ_FOREACH(ess, &ic->ic_ess, ess_next) {
> RBT_FOREACH(ni, ieee80211_tree, &ic->ic_tree) {
> - if (memcmp(ess->essid, ni->ni_essid,
> - IEEE80211_NWID_LEN) != 0 ||
> + if (ess->esslen != ni->ni_esslen || memcmp(ess->essid,
> + ni->ni_essid, ni->ni_esslen) != 0 ||
> ni->ni_fails != 0)
> continue;
>
> @@ -402,25 +402,17 @@ ieee80211_match_ess(struct ieee80211com *ic)
>
> if (seless && !(seless->esslen == ic->ic_des_esslen &&
> (memcmp(ic->ic_des_essid, seless->essid,
> - IEEE80211_NWID_LEN) == 0))) {
> - ieee80211_set_ess(ic, seless->essid);
> + ic->ic_des_esslen) == 0))) {
> + ieee80211_set_ess(ic, seless);
> return (1);
> }
>
> return (0);
> }
> void
> -ieee80211_set_ess(struct ieee80211com *ic, char *nwid)
> +ieee80211_set_ess(struct ieee80211com *ic, struct ieee80211_ess *ess)
> {
> - struct ieee80211_ess *ess;
> -
> - TAILQ_FOREACH(ess, &ic->ic_ess, ess_next) {
> - if (memcmp(ess->essid, nwid, IEEE80211_NWID_LEN) == 0)
> - break;
> - }
> -
> - if (ess == NULL)
> - return;
> + KASSERT(ess != NULL);
>
> memset(ic->ic_des_essid, 0, IEEE80211_NWID_LEN);
> ic->ic_des_esslen = ess->esslen;
> diff --git ieee80211_var.h ieee80211_var.h
> index 47408f4b6da..deb0e226e4d 100644
> --- ieee80211_var.h
> +++ ieee80211_var.h
> @@ -453,7 +453,7 @@ 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 *, u_int8_t *, int);
> -void ieee80211_set_ess(struct ieee80211com *, char *);
> +void ieee80211_set_ess(struct ieee80211com *, struct ieee80211_ess *);
>
> extern int ieee80211_cache_size;
>
>
> --
> I'm not entirely sure you are real.
>
--
I'm not entirely sure you are real.