Beispiel #1
0
void ieee80211_sta_create_ibss()
{
	int i;
	#if IEEE80211_IBSS_DEBUG
	printf("IBSS: Creating default Ad-hoc network...\n");
	#endif
	
	_ieee80211_sta_update_info();
	
	uint16_t capability; 
			
	#if IEEE80211_IBSS_DEBUG
	printf("IBSS: Network name is 'Disney'. \n");
	printf("BSSID: ");
	for(i=0; i<ETH_ALEN; i++)
		printf("%02x:",ibss_info->ibss_bssid[i]);
	printf("\r\n");
	#endif
		
	/* Privacy capabilities */
	capability = WLAN_CAPABILITY_IBSS | WLAN_CAPABILITY_PRIVACY ;
	
	/* Join this IBSS */
	__ieee80211_sta_join_ibss(1, capability, 0);
	
	/* The IBSS is now initialized */
	ibss_info->is_initialized = true;
	
	/* Update indicator flag that IBSS is joined */
	ieee80211_is_ibss_joined_flag = true;
}
Beispiel #2
0
static void ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,
				    struct ieee80211_bss *bss)
{
	struct cfg80211_bss *cbss =
		container_of((void *)bss, struct cfg80211_bss, priv);
	struct ieee80211_supported_band *sband;
	u32 basic_rates;
	int i, j;
	u16 beacon_int = cbss->beacon_interval;

	lockdep_assert_held(&sdata->u.ibss.mtx);

	if (beacon_int < 10)
		beacon_int = 10;

	sband = sdata->local->hw.wiphy->bands[cbss->channel->band];

	basic_rates = 0;

	for (i = 0; i < bss->supp_rates_len; i++) {
		int rate = (bss->supp_rates[i] & 0x7f) * 5;
		bool is_basic = !!(bss->supp_rates[i] & 0x80);

		for (j = 0; j < sband->n_bitrates; j++) {
			if (sband->bitrates[j].bitrate == rate) {
				if (is_basic)
					basic_rates |= BIT(j);
				break;
			}
		}
	}

	__ieee80211_sta_join_ibss(sdata, cbss->bssid,
				  beacon_int,
				  cbss->channel,
				  basic_rates,
				  cbss->capability,
				  cbss->tsf);
}
Beispiel #3
0
void ieee80211_sta_join_ibss(U16 _beacon_interval, U16 _atim_window, U8* _name) 
{
	int i;
	#if IEEE80211_IBSS_DEBUG_DEEP
	printf("IBSS: Joining default Ad-hoc network...\n");
	#endif
	
	_ieee80211_sta_update_info();
	
	uint16_t capability; 
	
	/* Privacy capabilities */
	capability = WLAN_CAPABILITY_IBSS | WLAN_CAPABILITY_PRIVACY ;
	
	/* Override & Accept the received beacon interval */
	unique_vif->bss_conf.beacon_int = _beacon_interval; 
	/* Override & Accept the received ATIM window */
	unique_vif->bss_conf.atim_window = _atim_window;
	/* Override & Accept the received network name */
	memcpy(ibss_info->ibss_name, _name , ETH_ALEN);	
	
	/* Join this IBSS */
	__ieee80211_sta_join_ibss(1, capability, 0);
	
	/* The IBSS is now initialized */
	ibss_info->is_initialized = true;
	
	/* Update indicator flag that IBSS is joined */
	ieee80211_is_ibss_joined_flag = true;
	
	/* We could let the IBSS_SETUP_PROCESS event timer
	 * to simply expire, and update the status of the 
	 * IBSS, however, we prefer to force it to stop 
	 * waiting and update the state now.
	 */
	process_post(&ibss_setup_process, PROCESS_EVENT_CONTINUE, NULL);
}