mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/net80211/ieee80211_beacon.c
 | |
| +++ b/net80211/ieee80211_beacon.c
 | |
| @@ -542,10 +542,10 @@ ieee80211_beacon_update(struct ieee80211
 | |
|  			vap->iv_flags &= ~IEEE80211_F_XRUPDATE;
 | |
|  		}
 | |
|  #endif
 | |
| -		if ((ic->ic_flags_ext & IEEE80211_FEXT_ERPUPDATE) && 
 | |
| +		if ((vap->iv_flags_ext & IEEE80211_FEXT_ERPUPDATE) &&
 | |
|  				(bo->bo_erp != NULL)) {
 | |
|  			(void)ieee80211_add_erp(bo->bo_erp, ic);
 | |
| -			ic->ic_flags_ext &= ~IEEE80211_FEXT_ERPUPDATE;
 | |
| +			vap->iv_flags_ext &= ~IEEE80211_FEXT_ERPUPDATE;
 | |
|  		}
 | |
|  	}
 | |
|  	/* if it is a mode change beacon for dynamic turbo case */
 | |
| --- a/net80211/ieee80211_input.c
 | |
| +++ b/net80211/ieee80211_input.c
 | |
| @@ -3431,9 +3431,12 @@ ieee80211_recv_mgmt(struct ieee80211vap
 | |
|  			/* Assume no ERP IE == 11b AP */
 | |
|  			if ((!has_erp || (has_erp && (scan.erp & IEEE80211_ERP_NON_ERP_PRESENT))) &&
 | |
|  				!(ic->ic_flags & IEEE80211_F_USEPROT)) {
 | |
| +				struct ieee80211vap *tmpvap;
 | |
|  
 | |
|  				ic->ic_flags |= IEEE80211_F_USEPROT;
 | |
| -				ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
 | |
| +				TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) {
 | |
| +					tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
 | |
| +				}
 | |
|  			}
 | |
|  		}
 | |
|  
 | |
| --- a/net80211/ieee80211_node.c
 | |
| +++ b/net80211/ieee80211_node.c
 | |
| @@ -2025,8 +2025,12 @@ ieee80211_node_join_11g(struct ieee80211
 | |
|  		}
 | |
|  
 | |
|  		/* Update ERP element if this is first non ERP station */
 | |
| -		if (ic->ic_nonerpsta == 1)
 | |
| -			ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
 | |
| +		if (ic->ic_nonerpsta == 1) {
 | |
| +			struct ieee80211vap *tmpvap;
 | |
| +			TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) {
 | |
| +				tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
 | |
| +			}
 | |
| +		}
 | |
|  	} else
 | |
|  		ni->ni_flags |= IEEE80211_NODE_ERP;
 | |
|  }
 | |
| @@ -2229,6 +2233,8 @@ ieee80211_node_leave_11g(struct ieee8021
 | |
|  		IEEE80211_NOTE(vap, IEEE80211_MSG_ASSOC, ni,
 | |
|  			"non-ERP station leaves, count now %d", ic->ic_nonerpsta);
 | |
|  		if (ic->ic_nonerpsta == 0) {
 | |
| +			struct ieee80211vap *tmpvap;
 | |
| +
 | |
|  			IEEE80211_DPRINTF(vap, IEEE80211_MSG_ASSOC,
 | |
|  				"%s: disable use of protection\n", __func__);
 | |
|  			ic->ic_flags &= ~IEEE80211_F_USEPROT;
 | |
| @@ -2240,7 +2246,9 @@ ieee80211_node_leave_11g(struct ieee8021
 | |
|  				ic->ic_flags |= IEEE80211_F_SHPREAMBLE;
 | |
|  				ic->ic_flags &= ~IEEE80211_F_USEBARKER;
 | |
|  			}
 | |
| -			ic->ic_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
 | |
| +			TAILQ_FOREACH(tmpvap, &ic->ic_vaps, iv_next) {
 | |
| +				tmpvap->iv_flags_ext |= IEEE80211_FEXT_ERPUPDATE;
 | |
| +			}
 | |
|  		}
 | |
|  	}
 | |
|  }
 |