diff options
Diffstat (limited to 'include/linux/ieee80211.h')
| -rw-r--r-- | include/linux/ieee80211.h | 32 | 
1 files changed, 31 insertions, 1 deletions
| diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index b118744d3382..a80516fd65c8 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h @@ -19,6 +19,7 @@  #include <linux/types.h>  #include <linux/if_ether.h> +#include <linux/etherdevice.h>  #include <asm/byteorder.h>  #include <asm/unaligned.h> @@ -2464,7 +2465,7 @@ static inline bool _ieee80211_is_robust_mgmt_frame(struct ieee80211_hdr *hdr)   */  static inline bool ieee80211_is_robust_mgmt_frame(struct sk_buff *skb)  { -	if (skb->len < 25) +	if (skb->len < IEEE80211_MIN_ACTION_SIZE)  		return false;  	return _ieee80211_is_robust_mgmt_frame((void *)skb->data);  } @@ -2487,6 +2488,35 @@ static inline bool ieee80211_is_public_action(struct ieee80211_hdr *hdr,  }  /** + * _ieee80211_is_group_privacy_action - check if frame is a group addressed + * privacy action frame + * @hdr: the frame + */ +static inline bool _ieee80211_is_group_privacy_action(struct ieee80211_hdr *hdr) +{ +	struct ieee80211_mgmt *mgmt = (void *)hdr; + +	if (!ieee80211_is_action(hdr->frame_control) || +	    !is_multicast_ether_addr(hdr->addr1)) +		return false; + +	return mgmt->u.action.category == WLAN_CATEGORY_MESH_ACTION || +	       mgmt->u.action.category == WLAN_CATEGORY_MULTIHOP_ACTION; +} + +/** + * ieee80211_is_group_privacy_action - check if frame is a group addressed + * privacy action frame + * @skb: the skb containing the frame, length will be checked + */ +static inline bool ieee80211_is_group_privacy_action(struct sk_buff *skb) +{ +	if (skb->len < IEEE80211_MIN_ACTION_SIZE) +		return false; +	return _ieee80211_is_group_privacy_action((void *)skb->data); +} + +/**   * ieee80211_tu_to_usec - convert time units (TU) to microseconds   * @tu: the TUs   */ |