Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 540bbcb9 authored by Julan Hsu's avatar Julan Hsu Committed by Johannes Berg
Browse files

nl80211/mac80211: mesh: add mesh path change count to mpath info



Expose path change count to destination in mpath info

Signed-off-by: default avatarJulan Hsu <julanhsu@google.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent cc241636
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -1439,7 +1439,8 @@ enum mpath_info_flags {
	MPATH_INFO_DISCOVERY_TIMEOUT	= BIT(4),
	MPATH_INFO_DISCOVERY_RETRIES	= BIT(5),
	MPATH_INFO_FLAGS		= BIT(6),
	MPATH_INFO_HOP_COUNT		= BIT(7)
	MPATH_INFO_HOP_COUNT		= BIT(7),
	MPATH_INFO_PATH_CHANGE		= BIT(8),
};

/**
@@ -1460,6 +1461,7 @@ enum mpath_info_flags {
 *	changes, i.e. when a station is added or removed, so that
 *	userspace can tell whether it got a consistent snapshot.
 * @hop_count: hops to destination
 * @path_change_count: total number of path changes to destination
 */
struct mpath_info {
	u32 filled;
@@ -1471,6 +1473,7 @@ struct mpath_info {
	u8 discovery_retries;
	u8 flags;
	u8 hop_count;
	u32 path_change_count;

	int generation;
};
+3 −1
Original line number Diff line number Diff line
@@ -3288,8 +3288,9 @@ enum nl80211_mpath_flags {
 * @NL80211_MPATH_INFO_DISCOVERY_TIMEOUT: total path discovery timeout, in msec
 * @NL80211_MPATH_INFO_DISCOVERY_RETRIES: mesh path discovery retries
 * @NL80211_MPATH_INFO_HOP_COUNT: hop count to destination
 * @NL80211_MPATH_INFO_PATH_CHANGE: total number of path changes to destination
 * @NL80211_MPATH_INFO_MAX: highest mesh path information attribute number
 *	currently defind
 *	currently defined
 * @__NL80211_MPATH_INFO_AFTER_LAST: internal use
 */
enum nl80211_mpath_info {
@@ -3302,6 +3303,7 @@ enum nl80211_mpath_info {
	NL80211_MPATH_INFO_DISCOVERY_TIMEOUT,
	NL80211_MPATH_INFO_DISCOVERY_RETRIES,
	NL80211_MPATH_INFO_HOP_COUNT,
	NL80211_MPATH_INFO_PATH_CHANGE,

	/* keep last */
	__NL80211_MPATH_INFO_AFTER_LAST,
+3 −1
Original line number Diff line number Diff line
@@ -1746,7 +1746,8 @@ static void mpath_set_pinfo(struct mesh_path *mpath, u8 *next_hop,
			MPATH_INFO_DISCOVERY_TIMEOUT |
			MPATH_INFO_DISCOVERY_RETRIES |
			MPATH_INFO_FLAGS |
			MPATH_INFO_HOP_COUNT;
			MPATH_INFO_HOP_COUNT |
			MPATH_INFO_PATH_CHANGE;

	pinfo->frame_qlen = mpath->frame_queue.qlen;
	pinfo->sn = mpath->sn;
@@ -1767,6 +1768,7 @@ static void mpath_set_pinfo(struct mesh_path *mpath, u8 *next_hop,
	if (mpath->flags & MESH_PATH_RESOLVED)
		pinfo->flags |= NL80211_MPATH_FLAG_RESOLVED;
	pinfo->hop_count = mpath->hop_count;
	pinfo->path_change_count = mpath->path_change_count;
}

static int ieee80211_get_mpath(struct wiphy *wiphy, struct net_device *dev,
+2 −0
Original line number Diff line number Diff line
@@ -94,6 +94,7 @@ enum mesh_deferred_task_flags {
 * @last_preq_to_root: Timestamp of last PREQ sent to root
 * @is_root: the destination station of this path is a root node
 * @is_gate: the destination station of this path is a mesh gate
 * @path_change_count: the number of path changes to destination
 *
 *
 * The dst address is unique in the mesh path table. Since the mesh_path is
@@ -124,6 +125,7 @@ struct mesh_path {
	unsigned long last_preq_to_root;
	bool is_root;
	bool is_gate;
	u32 path_change_count;
};

/**
+4 −0
Original line number Diff line number Diff line
@@ -479,6 +479,8 @@ static u32 hwmp_route_info_get(struct ieee80211_sub_if_data *sdata,
		}

		if (fresh_info) {
			if (rcu_access_pointer(mpath->next_hop) != sta)
				mpath->path_change_count++;
			mesh_path_assign_nexthop(mpath, sta);
			mpath->flags |= MESH_PATH_SN_VALID;
			mpath->metric = new_metric;
@@ -523,6 +525,8 @@ static u32 hwmp_route_info_get(struct ieee80211_sub_if_data *sdata,
		}

		if (fresh_info) {
			if (rcu_access_pointer(mpath->next_hop) != sta)
				mpath->path_change_count++;
			mesh_path_assign_nexthop(mpath, sta);
			mpath->metric = last_hop_metric;
			mpath->exp_time = time_after(mpath->exp_time, exp_time)
Loading