Skip to contentSkip to conversation

mac80211: mesh - don't special case routing to transmitter

PATCH New Alexis Green 1 participant 1 message Jun 17, 2015 mac80211

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mac80211: mesh - don't special case routing to transmitter

From: Jesse Jones <[email protected]>

Updating the path to the transmitter of a path message is optional according to section 13.10.8.4 of the standard. Doing so can lead to better performance since we can adjust the route to the transmitter based on the freshest possible information. However it can also cause routing loops with more than four or five nodes. Trading off routing correctness for a marginal performance improvement seems like a bad idea so this patch removes that feature.

---

net/mac80211/mesh_hwmp.c +1 -36
index be63534..5042f48
@@ -369,7 +369,7 @@ static u32 hwmp_route_info_get(struct ieee80211_sub_if_data *sdata,
 	struct mesh_path *mpath;
 	struct sta_info *sta;
 	bool fresh_info;
-	const u8 *orig_addr, *ta;
+	const u8 *orig_addr;
 	u32 orig_sn, orig_metric;
 	unsigned long orig_lifetime, exp_time;
 	u32 last_hop_metric, new_metric;
@@ -480,41 +480,6 @@ static u32 hwmp_route_info_get(struct ieee80211_sub_if_data *sdata,
 			spin_unlock_bh(&mpath->state_lock);
 	}
 
-	/* Update and check transmitter routing info */
-	ta = mgmt->sa;
-	if (ether_addr_equal(orig_addr, ta))
-		fresh_info = false;
-	else {
-		fresh_info = true;
-
-		mpath = mesh_path_lookup(sdata, ta);
-		if (mpath) {
-			spin_lock_bh(&mpath->state_lock);
-			if ((mpath->flags & MESH_PATH_FIXED) ||
-				((mpath->flags & MESH_PATH_ACTIVE) &&
-					(last_hop_metric > mpath->metric)))
-				fresh_info = false;
-		} else {
-			mpath = mesh_path_add(sdata, ta);
-			if (IS_ERR(mpath)) {
-				rcu_read_unlock();
-				return 0;
-			}
-			spin_lock_bh(&mpath->state_lock);
-		}
-
-		if (fresh_info) {
-			mesh_path_assign_nexthop(mpath, sta);
-			mpath->metric = last_hop_metric;
-			mpath->exp_time = time_after(mpath->exp_time, exp_time)
-					  ?  mpath->exp_time : exp_time;
-			mesh_path_activate(mpath);
-			spin_unlock_bh(&mpath->state_lock);
-			mesh_path_tx_pending(mpath);
-		} else
-			spin_unlock_bh(&mpath->state_lock);
-	}
-
 	rcu_read_unlock();
 
 	return process ? new_metric : 0;