mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/net80211/ieee80211_scan_sta.c
 | |
| +++ b/net80211/ieee80211_scan_sta.c
 | |
| @@ -201,8 +201,10 @@ sta_flush_table(struct sta_table *st)
 | |
|  }
 | |
|  
 | |
|  static void
 | |
| -saveie(u_int8_t **iep, const u_int8_t *ie)
 | |
| +saveie(u_int8_t **iep, const u_int8_t *ie, int preserve)
 | |
|  {
 | |
| +	if (preserve && *iep)
 | |
| +		return;
 | |
|  	if (ie == NULL)
 | |
|  		*iep = NULL;
 | |
|  	else
 | |
| @@ -304,10 +306,10 @@ found:
 | |
|  		    (const struct ieee80211_tim_ie *) sp->tim;
 | |
|  		ise->se_dtimperiod = tim->tim_period;
 | |
|  	}
 | |
| -	saveie(&ise->se_wme_ie, sp->wme);
 | |
| -	saveie(&ise->se_wpa_ie, sp->wpa);
 | |
| -	saveie(&ise->se_rsn_ie, sp->rsn);
 | |
| -	saveie(&ise->se_ath_ie, sp->ath);
 | |
| +	saveie(&ise->se_wme_ie, sp->wme, 0);
 | |
| +	saveie(&ise->se_wpa_ie, sp->wpa, !sp->isprobe);
 | |
| +	saveie(&ise->se_rsn_ie, sp->rsn, !sp->isprobe);
 | |
| +	saveie(&ise->se_ath_ie, sp->ath, 0);
 | |
|  
 | |
|  	/* clear failure count after STA_FAIL_AGE passes */
 | |
|  	if (se->se_fails && (jiffies - se->se_lastfail) > STA_FAILS_AGE*HZ) {
 | |
| --- a/net80211/ieee80211_input.c
 | |
| +++ b/net80211/ieee80211_input.c
 | |
| @@ -3106,6 +3106,7 @@ ieee80211_recv_mgmt(struct ieee80211vap 
 | |
|  		 */
 | |
|  		IEEE80211_VERIFY_LENGTH(efrm - frm, 12);
 | |
|  		memset(&scan, 0, sizeof(scan));
 | |
| +		scan.isprobe = (subtype == IEEE80211_FC0_SUBTYPE_PROBE_RESP) && IEEE80211_ADDR_EQ(wh->i_addr2, vap->iv_myaddr);
 | |
|  		scan.tstamp  = frm;
 | |
|  		frm += 8;
 | |
|  		scan.bintval = le16toh(*(__le16 *)frm);
 | |
| --- a/net80211/ieee80211_scan.h
 | |
| +++ b/net80211/ieee80211_scan.h
 | |
| @@ -133,6 +133,7 @@ struct ieee80211_scanparams {
 | |
|  	u_int8_t erp;
 | |
|  	u_int16_t bintval;
 | |
|  	u_int8_t timoff;
 | |
| +	u_int8_t isprobe;
 | |
|  	u_int8_t *tim;
 | |
|  	u_int8_t *tstamp;
 | |
|  	u_int8_t *country;
 |