Search Linux Wireless

Re: mac80211 ad-hoc problems

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> Oh, I misread the code. I thought it was only looking for a 
> user-specified BSSID (but I had not specified one). Actually it is 
> checking that we aren't attempting to join the same network that we are 
> already on.
> 
> The problem that was preventing me from getting connectivity was 
> channel. It was only accepting IBSSes on local->hw.conf.channel, so I 
> was required to do "iwconfig wlan0 channel X" first.

Heh. I might have done that, yeah.

> Is this by design, or is automatic channel selection a desirable 
> feature? see attached patch, which seems to be working

Seems we should do automatic selection, the patch looks ok to me.

I wonder though, if we decide to create a new IBSS, which channel will
we choose?

> Daniel
> plain text document attachment (ibss-channel.txt)
> [PATCH] mac80211: automatic IBSS channel selection
> 
> When joining an ad-hoc network, the user is currently required to specify
> the channel. The network will not be joined otherwise, unless it happens
> to be sitting on the currently active channel.
> 
> This patch implements automatic channel selection when the user has not
> locked the interface onto a specific channel.
> 
> Signed-off-by: Daniel Drake <dsd@xxxxxxxxxx>

Acked-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx>

> 
> Index: linux-2.6.26-rc8/net/mac80211/mlme.c
> ===================================================================
> --- linux-2.6.26-rc8.orig/net/mac80211/mlme.c
> +++ linux-2.6.26-rc8/net/mac80211/mlme.c
> @@ -3582,6 +3582,7 @@ static int ieee80211_sta_find_ibss(struc
>  	int found = 0;
>  	u8 bssid[ETH_ALEN];
>  	int active_ibss;
> +	int search_freq;
>  	DECLARE_MAC_BUF(mac);
>  	DECLARE_MAC_BUF(mac2);
>  
> @@ -3614,11 +3615,21 @@ static int ieee80211_sta_find_ibss(struc
>  	printk(KERN_DEBUG "   sta_find_ibss: selected %s current "
>  	       "%s\n", print_mac(mac, bssid), print_mac(mac2, ifsta->bssid));
>  #endif /* CONFIG_MAC80211_IBSS_DEBUG */
> -	if (found && memcmp(ifsta->bssid, bssid, ETH_ALEN) != 0 &&
> -	    (bss = ieee80211_rx_bss_get(dev, bssid,
> -					local->hw.conf.channel->center_freq,
> -					ifsta->ssid, ifsta->ssid_len))) {
> +
> +	if (found && memcmp(ifsta->bssid, bssid, ETH_ALEN) != 0) {
>  		int ret;
> +		int search_freq;
> +
> +		if (ifsta->flags & IEEE80211_STA_AUTO_CHANNEL_SEL)
> +			search_freq = bss->freq;
> +		else
> +			search_freq = local->hw.conf.channel->center_freq;
> +
> +		bss = ieee80211_rx_bss_get(dev, bssid, search_freq,
> +					   ifsta->ssid, ifsta->ssid_len);
> +		if (!bss)
> +			goto dont_join;
> +
>  		printk(KERN_DEBUG "%s: Selected IBSS BSSID %s"
>  		       " based on configured SSID\n",
>  		       dev->name, print_mac(mac, bssid));
> @@ -3626,6 +3637,8 @@ static int ieee80211_sta_find_ibss(struc
>  		ieee80211_rx_bss_put(dev, bss);
>  		return ret;
>  	}
> +
> +dont_join:
>  #ifdef CONFIG_MAC80211_IBSS_DEBUG
>  	printk(KERN_DEBUG "   did not try to join ibss\n");
>  #endif /* CONFIG_MAC80211_IBSS_DEBUG */

Attachment: signature.asc
Description: This is a digitally signed message part


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux