Search Linux Wireless

Re: [PATCH v2] mac80211: avoid bss color setting in non-he mode

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

 



Hi Praneesh,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on mac80211-next/master]
[also build test ERROR on mac80211/master v5.8-rc4 next-20200707]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use  as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/P-Praneesh/mac80211-avoid-bss-color-setting-in-non-he-mode/20200707-173732
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git master
config: x86_64-allyesconfig (attached as .config)
compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project 02946de3802d3bc65bc9f2eb9b8d4969b5a7add8)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install x86_64 cross compiling tool for clang build
        # apt-get install binutils-x86-64-linux-gnu
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>

All errors (new ones prefixed by >>):

>> net/mac80211/mlme.c:3465:8: error: use of undeclared identifier 'params'
                   if (!params->he_bss_color.disabled)
                        ^
   1 error generated.

vim +/params +3465 net/mac80211/mlme.c

  3250	
  3251	static bool ieee80211_assoc_success(struct ieee80211_sub_if_data *sdata,
  3252					    struct cfg80211_bss *cbss,
  3253					    struct ieee80211_mgmt *mgmt, size_t len,
  3254					    struct ieee802_11_elems *elems)
  3255	{
  3256		struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
  3257		struct ieee80211_local *local = sdata->local;
  3258		struct ieee80211_supported_band *sband;
  3259		struct sta_info *sta;
  3260		u16 capab_info, aid;
  3261		struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf;
  3262		const struct cfg80211_bss_ies *bss_ies = NULL;
  3263		struct ieee80211_mgd_assoc_data *assoc_data = ifmgd->assoc_data;
  3264		bool is_6ghz = cbss->channel->band == NL80211_BAND_6GHZ;
  3265		u32 changed = 0;
  3266		int err;
  3267		bool ret;
  3268	
  3269		/* AssocResp and ReassocResp have identical structure */
  3270	
  3271		aid = le16_to_cpu(mgmt->u.assoc_resp.aid);
  3272		capab_info = le16_to_cpu(mgmt->u.assoc_resp.capab_info);
  3273	
  3274		/*
  3275		 * The 5 MSB of the AID field are reserved
  3276		 * (802.11-2016 9.4.1.8 AID field)
  3277		 */
  3278		aid &= 0x7ff;
  3279	
  3280		ifmgd->broken_ap = false;
  3281	
  3282		if (aid == 0 || aid > IEEE80211_MAX_AID) {
  3283			sdata_info(sdata, "invalid AID value %d (out of range), turn off PS\n",
  3284				   aid);
  3285			aid = 0;
  3286			ifmgd->broken_ap = true;
  3287		}
  3288	
  3289		if (!elems->supp_rates) {
  3290			sdata_info(sdata, "no SuppRates element in AssocResp\n");
  3291			return false;
  3292		}
  3293	
  3294		sdata->vif.bss_conf.aid = aid;
  3295		ifmgd->tdls_chan_switch_prohibited =
  3296			elems->ext_capab && elems->ext_capab_len >= 5 &&
  3297			(elems->ext_capab[4] & WLAN_EXT_CAPA5_TDLS_CH_SW_PROHIBITED);
  3298	
  3299		/*
  3300		 * Some APs are erroneously not including some information in their
  3301		 * (re)association response frames. Try to recover by using the data
  3302		 * from the beacon or probe response. This seems to afflict mobile
  3303		 * 2G/3G/4G wifi routers, reported models include the "Onda PN51T",
  3304		 * "Vodafone PocketWiFi 2", "ZTE MF60" and a similar T-Mobile device.
  3305		 */
  3306		if (!is_6ghz &&
  3307		    ((assoc_data->wmm && !elems->wmm_param) ||
  3308		     (!(ifmgd->flags & IEEE80211_STA_DISABLE_HT) &&
  3309		      (!elems->ht_cap_elem || !elems->ht_operation)) ||
  3310		     (!(ifmgd->flags & IEEE80211_STA_DISABLE_VHT) &&
  3311		      (!elems->vht_cap_elem || !elems->vht_operation)))) {
  3312			const struct cfg80211_bss_ies *ies;
  3313			struct ieee802_11_elems bss_elems;
  3314	
  3315			rcu_read_lock();
  3316			ies = rcu_dereference(cbss->ies);
  3317			if (ies)
  3318				bss_ies = kmemdup(ies, sizeof(*ies) + ies->len,
  3319						  GFP_ATOMIC);
  3320			rcu_read_unlock();
  3321			if (!bss_ies)
  3322				return false;
  3323	
  3324			ieee802_11_parse_elems(bss_ies->data, bss_ies->len,
  3325					       false, &bss_elems,
  3326					       mgmt->bssid,
  3327					       assoc_data->bss->bssid);
  3328			if (assoc_data->wmm &&
  3329			    !elems->wmm_param && bss_elems.wmm_param) {
  3330				elems->wmm_param = bss_elems.wmm_param;
  3331				sdata_info(sdata,
  3332					   "AP bug: WMM param missing from AssocResp\n");
  3333			}
  3334	
  3335			/*
  3336			 * Also check if we requested HT/VHT, otherwise the AP doesn't
  3337			 * have to include the IEs in the (re)association response.
  3338			 */
  3339			if (!elems->ht_cap_elem && bss_elems.ht_cap_elem &&
  3340			    !(ifmgd->flags & IEEE80211_STA_DISABLE_HT)) {
  3341				elems->ht_cap_elem = bss_elems.ht_cap_elem;
  3342				sdata_info(sdata,
  3343					   "AP bug: HT capability missing from AssocResp\n");
  3344			}
  3345			if (!elems->ht_operation && bss_elems.ht_operation &&
  3346			    !(ifmgd->flags & IEEE80211_STA_DISABLE_HT)) {
  3347				elems->ht_operation = bss_elems.ht_operation;
  3348				sdata_info(sdata,
  3349					   "AP bug: HT operation missing from AssocResp\n");
  3350			}
  3351			if (!elems->vht_cap_elem && bss_elems.vht_cap_elem &&
  3352			    !(ifmgd->flags & IEEE80211_STA_DISABLE_VHT)) {
  3353				elems->vht_cap_elem = bss_elems.vht_cap_elem;
  3354				sdata_info(sdata,
  3355					   "AP bug: VHT capa missing from AssocResp\n");
  3356			}
  3357			if (!elems->vht_operation && bss_elems.vht_operation &&
  3358			    !(ifmgd->flags & IEEE80211_STA_DISABLE_VHT)) {
  3359				elems->vht_operation = bss_elems.vht_operation;
  3360				sdata_info(sdata,
  3361					   "AP bug: VHT operation missing from AssocResp\n");
  3362			}
  3363		}
  3364	
  3365		/*
  3366		 * We previously checked these in the beacon/probe response, so
  3367		 * they should be present here. This is just a safety net.
  3368		 */
  3369		if (!is_6ghz && !(ifmgd->flags & IEEE80211_STA_DISABLE_HT) &&
  3370		    (!elems->wmm_param || !elems->ht_cap_elem || !elems->ht_operation)) {
  3371			sdata_info(sdata,
  3372				   "HT AP is missing WMM params or HT capability/operation\n");
  3373			ret = false;
  3374			goto out;
  3375		}
  3376	
  3377		if (!is_6ghz && !(ifmgd->flags & IEEE80211_STA_DISABLE_VHT) &&
  3378		    (!elems->vht_cap_elem || !elems->vht_operation)) {
  3379			sdata_info(sdata,
  3380				   "VHT AP is missing VHT capability/operation\n");
  3381			ret = false;
  3382			goto out;
  3383		}
  3384	
  3385		if (is_6ghz && !(ifmgd->flags & IEEE80211_STA_DISABLE_HE) &&
  3386		    !elems->he_6ghz_capa) {
  3387			sdata_info(sdata,
  3388				   "HE 6 GHz AP is missing HE 6 GHz band capability\n");
  3389			ret = false;
  3390			goto out;
  3391		}
  3392	
  3393		mutex_lock(&sdata->local->sta_mtx);
  3394		/*
  3395		 * station info was already allocated and inserted before
  3396		 * the association and should be available to us
  3397		 */
  3398		sta = sta_info_get(sdata, cbss->bssid);
  3399		if (WARN_ON(!sta)) {
  3400			mutex_unlock(&sdata->local->sta_mtx);
  3401			ret = false;
  3402			goto out;
  3403		}
  3404	
  3405		sband = ieee80211_get_sband(sdata);
  3406		if (!sband) {
  3407			mutex_unlock(&sdata->local->sta_mtx);
  3408			ret = false;
  3409			goto out;
  3410		}
  3411	
  3412		if (!(ifmgd->flags & IEEE80211_STA_DISABLE_HE) &&
  3413		    (!elems->he_cap || !elems->he_operation)) {
  3414			mutex_unlock(&sdata->local->sta_mtx);
  3415			sdata_info(sdata,
  3416				   "HE AP is missing HE capability/operation\n");
  3417			ret = false;
  3418			goto out;
  3419		}
  3420	
  3421		/* Set up internal HT/VHT capabilities */
  3422		if (elems->ht_cap_elem && !(ifmgd->flags & IEEE80211_STA_DISABLE_HT))
  3423			ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband,
  3424							  elems->ht_cap_elem, sta);
  3425	
  3426		if (elems->vht_cap_elem && !(ifmgd->flags & IEEE80211_STA_DISABLE_VHT))
  3427			ieee80211_vht_cap_ie_to_sta_vht_cap(sdata, sband,
  3428							    elems->vht_cap_elem, sta);
  3429	
  3430		if (elems->he_operation && !(ifmgd->flags & IEEE80211_STA_DISABLE_HE) &&
  3431		    elems->he_cap) {
  3432			ieee80211_he_cap_ie_to_sta_he_cap(sdata, sband,
  3433							  elems->he_cap,
  3434							  elems->he_cap_len,
  3435							  elems->he_6ghz_capa,
  3436							  sta);
  3437	
  3438			bss_conf->he_support = sta->sta.he_cap.has_he;
  3439			if (elems->rsnx && elems->rsnx_len &&
  3440			    (elems->rsnx[0] & WLAN_RSNX_CAPA_PROTECTED_TWT) &&
  3441			    wiphy_ext_feature_isset(local->hw.wiphy,
  3442						    NL80211_EXT_FEATURE_PROTECTED_TWT))
  3443				bss_conf->twt_protected = true;
  3444			else
  3445				bss_conf->twt_protected = false;
  3446	
  3447			changed |= ieee80211_recalc_twt_req(sdata, sta, elems);
  3448		} else {
  3449			bss_conf->he_support = false;
  3450			bss_conf->twt_requester = false;
  3451			bss_conf->twt_protected = false;
  3452		}
  3453	
  3454		if (bss_conf->he_support) {
  3455			bss_conf->he_bss_color.color =
  3456				le32_get_bits(elems->he_operation->he_oper_params,
  3457					      IEEE80211_HE_OPERATION_BSS_COLOR_MASK);
  3458			bss_conf->he_bss_color.partial =
  3459				le32_get_bits(elems->he_operation->he_oper_params,
  3460					      IEEE80211_HE_OPERATION_PARTIAL_BSS_COLOR);
  3461			bss_conf->he_bss_color.disabled =
  3462				le32_get_bits(elems->he_operation->he_oper_params,
  3463					      IEEE80211_HE_OPERATION_BSS_COLOR_DISABLED);
  3464	
> 3465			if (!params->he_bss_color.disabled)
  3466				changed |= BSS_CHANGED_HE_BSS_COLOR;
  3467	
  3468			bss_conf->htc_trig_based_pkt_ext =
  3469				le32_get_bits(elems->he_operation->he_oper_params,
  3470				      IEEE80211_HE_OPERATION_DFLT_PE_DURATION_MASK);
  3471			bss_conf->frame_time_rts_th =
  3472				le32_get_bits(elems->he_operation->he_oper_params,
  3473				      IEEE80211_HE_OPERATION_RTS_THRESHOLD_MASK);
  3474	
  3475			bss_conf->multi_sta_back_32bit =
  3476				sta->sta.he_cap.he_cap_elem.mac_cap_info[2] &
  3477				IEEE80211_HE_MAC_CAP2_32BIT_BA_BITMAP;
  3478	
  3479			bss_conf->ack_enabled =
  3480				sta->sta.he_cap.he_cap_elem.mac_cap_info[2] &
  3481				IEEE80211_HE_MAC_CAP2_ACK_EN;
  3482	
  3483			bss_conf->uora_exists = !!elems->uora_element;
  3484			if (elems->uora_element)
  3485				bss_conf->uora_ocw_range = elems->uora_element[0];
  3486	
  3487			ieee80211_he_op_ie_to_bss_conf(&sdata->vif, elems->he_operation);
  3488			ieee80211_he_spr_ie_to_bss_conf(&sdata->vif, elems->he_spr);
  3489			/* TODO: OPEN: what happens if BSS color disable is set? */
  3490		}
  3491	
  3492		if (cbss->transmitted_bss) {
  3493			bss_conf->nontransmitted = true;
  3494			ether_addr_copy(bss_conf->transmitter_bssid,
  3495					cbss->transmitted_bss->bssid);
  3496			bss_conf->bssid_indicator = cbss->max_bssid_indicator;
  3497			bss_conf->bssid_index = cbss->bssid_index;
  3498		}
  3499	
  3500		/*
  3501		 * Some APs, e.g. Netgear WNDR3700, report invalid HT operation data
  3502		 * in their association response, so ignore that data for our own
  3503		 * configuration. If it changed since the last beacon, we'll get the
  3504		 * next beacon and update then.
  3505		 */
  3506	
  3507		/*
  3508		 * If an operating mode notification IE is present, override the
  3509		 * NSS calculation (that would be done in rate_control_rate_init())
  3510		 * and use the # of streams from that element.
  3511		 */
  3512		if (elems->opmode_notif &&
  3513		    !(*elems->opmode_notif & IEEE80211_OPMODE_NOTIF_RX_NSS_TYPE_BF)) {
  3514			u8 nss;
  3515	
  3516			nss = *elems->opmode_notif & IEEE80211_OPMODE_NOTIF_RX_NSS_MASK;
  3517			nss >>= IEEE80211_OPMODE_NOTIF_RX_NSS_SHIFT;
  3518			nss += 1;
  3519			sta->sta.rx_nss = nss;
  3520		}
  3521	
  3522		rate_control_rate_init(sta);
  3523	
  3524		if (ifmgd->flags & IEEE80211_STA_MFP_ENABLED) {
  3525			set_sta_flag(sta, WLAN_STA_MFP);
  3526			sta->sta.mfp = true;
  3527		} else {
  3528			sta->sta.mfp = false;
  3529		}
  3530	
  3531		sta->sta.wme = elems->wmm_param && local->hw.queues >= IEEE80211_NUM_ACS;
  3532	
  3533		err = sta_info_move_state(sta, IEEE80211_STA_ASSOC);
  3534		if (!err && !(ifmgd->flags & IEEE80211_STA_CONTROL_PORT))
  3535			err = sta_info_move_state(sta, IEEE80211_STA_AUTHORIZED);
  3536		if (err) {
  3537			sdata_info(sdata,
  3538				   "failed to move station %pM to desired state\n",
  3539				   sta->sta.addr);
  3540			WARN_ON(__sta_info_destroy(sta));
  3541			mutex_unlock(&sdata->local->sta_mtx);
  3542			ret = false;
  3543			goto out;
  3544		}
  3545	
  3546		mutex_unlock(&sdata->local->sta_mtx);
  3547	
  3548		/*
  3549		 * Always handle WMM once after association regardless
  3550		 * of the first value the AP uses. Setting -1 here has
  3551		 * that effect because the AP values is an unsigned
  3552		 * 4-bit value.
  3553		 */
  3554		ifmgd->wmm_last_param_set = -1;
  3555		ifmgd->mu_edca_last_param_set = -1;
  3556	
  3557		if (ifmgd->flags & IEEE80211_STA_DISABLE_WMM) {
  3558			ieee80211_set_wmm_default(sdata, false, false);
  3559		} else if (!ieee80211_sta_wmm_params(local, sdata, elems->wmm_param,
  3560						     elems->wmm_param_len,
  3561						     elems->mu_edca_param_set)) {
  3562			/* still enable QoS since we might have HT/VHT */
  3563			ieee80211_set_wmm_default(sdata, false, true);
  3564			/* set the disable-WMM flag in this case to disable
  3565			 * tracking WMM parameter changes in the beacon if
  3566			 * the parameters weren't actually valid. Doing so
  3567			 * avoids changing parameters very strangely when
  3568			 * the AP is going back and forth between valid and
  3569			 * invalid parameters.
  3570			 */
  3571			ifmgd->flags |= IEEE80211_STA_DISABLE_WMM;
  3572		}
  3573		changed |= BSS_CHANGED_QOS;
  3574	
  3575		if (elems->max_idle_period_ie) {
  3576			bss_conf->max_idle_period =
  3577				le16_to_cpu(elems->max_idle_period_ie->max_idle_period);
  3578			bss_conf->protected_keep_alive =
  3579				!!(elems->max_idle_period_ie->idle_options &
  3580				   WLAN_IDLE_OPTIONS_PROTECTED_KEEP_ALIVE);
  3581			changed |= BSS_CHANGED_KEEP_ALIVE;
  3582		} else {
  3583			bss_conf->max_idle_period = 0;
  3584			bss_conf->protected_keep_alive = false;
  3585		}
  3586	
  3587		/* set assoc capability (AID was already set earlier),
  3588		 * ieee80211_set_associated() will tell the driver */
  3589		bss_conf->assoc_capability = capab_info;
  3590		ieee80211_set_associated(sdata, cbss, changed);
  3591	
  3592		/*
  3593		 * If we're using 4-addr mode, let the AP know that we're
  3594		 * doing so, so that it can create the STA VLAN on its side
  3595		 */
  3596		if (ifmgd->use_4addr)
  3597			ieee80211_send_4addr_nullfunc(local, sdata);
  3598	
  3599		/*
  3600		 * Start timer to probe the connection to the AP now.
  3601		 * Also start the timer that will detect beacon loss.
  3602		 */
  3603		ieee80211_sta_rx_notify(sdata, (struct ieee80211_hdr *)mgmt);
  3604		ieee80211_sta_reset_beacon_monitor(sdata);
  3605	
  3606		ret = true;
  3607	 out:
  3608		kfree(bss_ies);
  3609		return ret;
  3610	}
  3611	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux