Adding Johill and Michael as they are maintainers of mac80211 and they
need to review this. Please add them on further mac80211 patches.

Note to driver authors: zd1211rw, rt2x00 drivers and adm8211 will need
to set mactime if they want IBSS merge to work as this functionality
would be added with this. I believe all other drivers set it, but
didn't do a thorough grep.

On Jan 18, 2008 7:52 AM, Bruno Randolf <[EMAIL PROTECTED]> wrote:

> +
> +       /* check if we need to merge IBSS */
> +       if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS && beacon &&
> +           !local->sta_sw_scanning && !local->sta_hw_scanning &&
> +           mgmt->u.beacon.capab_info & WLAN_CAPABILITY_IBSS &&
> +           memcmp(elems.ssid, sdata->u.sta.ssid, sdata->u.sta.ssid_len) == 
> 0) {
> +#ifdef CONFIG_MAC80211_IBSS_DEBUG
> +               static unsigned long last_tsf_debug;
> +#endif
> +               if (rx_status->flag & RX_FLAG_TSFT)
> +                       mactime = rx_status->mactime;
> +               else {
> +                       mactime = -1LLU;
> +                       printk(KERN_WARNING "%s: IBSS mode needs mactime for "
> +                               "beacons\n", dev->name);

Does this merit a WARN_ON() ? This essentially will prevent IBSS
merges for drivers that haven't set mactime yet.

> diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
> index 6cc1e7e..5617e17 100644
> --- a/net/mac80211/rx.c
> +++ b/net/mac80211/rx.c
> @@ -1609,7 +1609,10 @@ static int prepare_for_handlers(struct 
> ieee80211_sub_if_data *sdata,
>         case IEEE80211_IF_TYPE_IBSS:
>                 if (!bssid)
>                         return 0;
> -               if (!ieee80211_bssid_match(bssid, sdata->u.sta.bssid)) {
> +               if ((rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_MGMT &&
> +                   (rx->fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_BEACON)

Since we are letting all beacons through how about adding a check for
ssid on ieee80211_rx_bss_info()?

(memcmp(elems.ssid, sdata->u.sta.ssid, sdata->u.sta.ssid_len) == 0)

Just not sure exactly we'd check for it yet.

> +                       return 1;
> +               else if (!ieee80211_bssid_match(bssid, sdata->u.sta.bssid)) {
>                         if (!(rx->flags & IEEE80211_TXRXD_RXIN_SCAN))
>                                 return 0;
>                         rx->flags &= ~IEEE80211_TXRXD_RXRA_MATCH;
>
>

  Luis
_______________________________________________
ath5k-devel mailing list
[email protected]
https://lists.ath5k.org/mailman/listinfo/ath5k-devel

Reply via email to