forked from mirrors/linux
		
	mac80211: mesh: only switch path when new metric is at least 10% better
This helps to reduce frequent path switches when multiple path candidates have the same or very similar path metrics. Signed-off-by: Julan Hsu <julanhsu@google.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
		
							parent
							
								
									67fc05549c
								
							
						
					
					
						commit
						a8d418d9ac
					
				
					 1 changed files with 8 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -447,7 +447,10 @@ static u32 hwmp_route_info_get(struct ieee80211_sub_if_data *sdata,
 | 
			
		|||
			    (mpath->flags & MESH_PATH_SN_VALID)) {
 | 
			
		||||
				if (SN_GT(mpath->sn, orig_sn) ||
 | 
			
		||||
				    (mpath->sn == orig_sn &&
 | 
			
		||||
				     new_metric >= mpath->metric)) {
 | 
			
		||||
				     (rcu_access_pointer(mpath->next_hop) !=
 | 
			
		||||
						      sta ?
 | 
			
		||||
					      mult_frac(new_metric, 10, 9) :
 | 
			
		||||
					      new_metric) >= mpath->metric)) {
 | 
			
		||||
					process = false;
 | 
			
		||||
					fresh_info = false;
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			@ -515,8 +518,10 @@ static u32 hwmp_route_info_get(struct ieee80211_sub_if_data *sdata,
 | 
			
		|||
		if (mpath) {
 | 
			
		||||
			spin_lock_bh(&mpath->state_lock);
 | 
			
		||||
			if ((mpath->flags & MESH_PATH_FIXED) ||
 | 
			
		||||
				((mpath->flags & MESH_PATH_ACTIVE) &&
 | 
			
		||||
					(last_hop_metric > mpath->metric)))
 | 
			
		||||
			    ((mpath->flags & MESH_PATH_ACTIVE) &&
 | 
			
		||||
			     ((rcu_access_pointer(mpath->next_hop) != sta ?
 | 
			
		||||
				       mult_frac(last_hop_metric, 10, 9) :
 | 
			
		||||
				       last_hop_metric) > mpath->metric)))
 | 
			
		||||
				fresh_info = false;
 | 
			
		||||
		} else {
 | 
			
		||||
			mpath = mesh_path_add(sdata, ta);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue