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.

Reply via email to