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; }
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); }
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); }