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

Commit f97df02e authored by Johannes Berg's avatar Johannes Berg Committed by David S. Miller
Browse files

[PATCH] wireless networking: move frame inline functions to generic header



These inlines are generally useful, not just with mac80211.

Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarMichael Wu <flamingice@sourmilk.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 75a5f0cc
Loading
Loading
Loading
Loading
+61 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#define IEEE80211_H

#include <linux/types.h>
#include <asm/byteorder.h>

#define FCS_LEN 4

@@ -350,4 +351,64 @@ enum ieee80211_eid {

#define WLAN_MAX_KEY_LEN		32

/**
 * ieee80211_get_SA - get pointer to SA
 *
 * Given an 802.11 frame, this function returns the offset
 * to the source address (SA). It does not verify that the
 * header is long enough to contain the address, and the
 * header must be long enough to contain the frame control
 * field.
 *
 * @hdr: the frame
 */
static inline u8 *ieee80211_get_SA(struct ieee80211_hdr *hdr)
{
	u8 *raw = (u8 *) hdr;
	u8 tofrom = (*(raw+1)) & 3; /* get the TODS and FROMDS bits */

	switch (tofrom) {
		case 2:
			return hdr->addr3;
		case 3:
			return hdr->addr4;
	}
	return hdr->addr2;
}

/**
 * ieee80211_get_DA - get pointer to DA
 *
 * Given an 802.11 frame, this function returns the offset
 * to the destination address (DA). It does not verify that
 * the header is long enough to contain the address, and the
 * header must be long enough to contain the frame control
 * field.
 *
 * @hdr: the frame
 */
static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr)
{
	u8 *raw = (u8 *) hdr;
	u8 to_ds = (*(raw+1)) & 1; /* get the TODS bit */

	if (to_ds)
		return hdr->addr3;
	return hdr->addr1;
}

/**
 * ieee80211_get_morefrag - determine whether the MOREFRAGS bit is set
 *
 * This function determines whether the "more fragments" bit is set
 * in the frame.
 *
 * @hdr: the frame
 */
static inline int ieee80211_get_morefrag(struct ieee80211_hdr *hdr)
{
	return (le16_to_cpu(hdr->frame_control) &
		IEEE80211_FCTL_MOREFRAGS) != 0;
}

#endif /* IEEE80211_H */
+0 −60
Original line number Diff line number Diff line
@@ -1399,64 +1399,4 @@ void ieee80211_wake_queues(struct ieee80211_hw *hw);
 */
void ieee80211_scan_completed(struct ieee80211_hw *hw);

/**
 * ieee80211_get_SA - get pointer to SA
 *
 * Given an 802.11 frame, this function returns the offset
 * to the source address (SA). It does not verify that the
 * header is long enough to contain the address, and the
 * header must be long enough to contain the frame control
 * field.
 *
 * @hdr: the frame
 */
static inline u8 *ieee80211_get_SA(struct ieee80211_hdr *hdr)
{
	u8 *raw = (u8 *) hdr;
	u8 tofrom = (*(raw+1)) & 3; /* get the TODS and FROMDS bits */

	switch (tofrom) {
		case 2:
			return hdr->addr3;
		case 3:
			return hdr->addr4;
	}
	return hdr->addr2;
}

/**
 * ieee80211_get_DA - get pointer to DA
 *
 * Given an 802.11 frame, this function returns the offset
 * to the destination address (DA). It does not verify that
 * the header is long enough to contain the address, and the
 * header must be long enough to contain the frame control
 * field.
 *
 * @hdr: the frame
 */
static inline u8 *ieee80211_get_DA(struct ieee80211_hdr *hdr)
{
	u8 *raw = (u8 *) hdr;
	u8 to_ds = (*(raw+1)) & 1; /* get the TODS bit */

	if (to_ds)
		return hdr->addr3;
	return hdr->addr1;
}

/**
 * ieee80211_get_morefrag - determine whether the MOREFRAGS bit is set
 *
 * This function determines whether the "more fragments" bit is set
 * in the frame.
 *
 * @hdr: the frame
 */
static inline int ieee80211_get_morefrag(struct ieee80211_hdr *hdr)
{
	return (le16_to_cpu(hdr->frame_control) &
		IEEE80211_FCTL_MOREFRAGS) != 0;
}

#endif /* MAC80211_H */