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

Commit d3aaec8a authored by Javier Cardona's avatar Javier Cardona Committed by John W. Linville
Browse files

mac80211: Drop MESH_PLINK category and use new ANA-approved MESH_ACTION



Note: This breaks compatibility with previous mesh protocol instances.

Signed-off-by: default avatarJavier Cardona <javier@cozybit.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 0778a6a3
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -1261,9 +1261,8 @@ enum ieee80211_category {
	WLAN_CATEGORY_MULTIHOP_ACTION = 14,
	WLAN_CATEGORY_SELF_PROTECTED = 15,
	WLAN_CATEGORY_WMM = 17,
	/* TODO: remove MESH_PLINK and MESH_PATH_SEL after */
	/*       mesh is updated to current 802.11s draft  */
	WLAN_CATEGORY_MESH_PLINK = 30,
	/* TODO: remove MESH_PATH_SEL after mesh is updated
	 * to current 802.11s draft  */
	WLAN_CATEGORY_MESH_PATH_SEL = 32,
	WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
	WLAN_CATEGORY_VENDOR_SPECIFIC = 127,
+1 −1
Original line number Diff line number Diff line
@@ -600,7 +600,7 @@ static void ieee80211_mesh_rx_mgmt_action(struct ieee80211_sub_if_data *sdata,
					  struct ieee80211_rx_status *rx_status)
{
	switch (mgmt->u.action.category) {
	case WLAN_CATEGORY_MESH_PLINK:
	case WLAN_CATEGORY_MESH_ACTION:
		mesh_rx_plink_frame(sdata, mgmt, len, rx_status);
		break;
	case WLAN_CATEGORY_MESH_PATH_SEL:
+1 −1
Original line number Diff line number Diff line
@@ -182,7 +182,7 @@ static int mesh_plink_frame_tx(struct ieee80211_sub_if_data *sdata,
	memcpy(mgmt->da, da, ETH_ALEN);
	memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN);
	/* BSSID is left zeroed, wildcard value */
	mgmt->u.action.category = WLAN_CATEGORY_MESH_PLINK;
	mgmt->u.action.category = WLAN_CATEGORY_MESH_ACTION;
	mgmt->u.action.u.plink_action.action_code = action;

	if (action == PLINK_CLOSE)
+5 −2
Original line number Diff line number Diff line
@@ -495,8 +495,11 @@ ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx)
			return RX_DROP_MONITOR;

		if (ieee80211_is_action(hdr->frame_control)) {
			u8 category;
			mgmt = (struct ieee80211_mgmt *)hdr;
			if (mgmt->u.action.category != WLAN_CATEGORY_MESH_PLINK)
			category = mgmt->u.action.category;
			if (category != WLAN_CATEGORY_MESH_ACTION &&
				category != WLAN_CATEGORY_SELF_PROTECTED)
				return RX_DROP_MONITOR;
			return RX_CONTINUE;
		}
@@ -2205,7 +2208,7 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
			goto handled;
		}
		break;
	case WLAN_CATEGORY_MESH_PLINK:
	case WLAN_CATEGORY_MESH_ACTION:
		if (!ieee80211_vif_is_mesh(&sdata->vif))
			break;
		goto queue;