[PATCH] wireless networking: move frame inline functions to generic header
These inlines are generally useful, not just with mac80211. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Michael Wu <flamingice@sourmilk.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
75a5f0ccfd
commit
f97df02e23
2 changed files with 61 additions and 60 deletions
|
@ -16,6 +16,7 @@
|
||||||
#define IEEE80211_H
|
#define IEEE80211_H
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
#include <asm/byteorder.h>
|
||||||
|
|
||||||
#define FCS_LEN 4
|
#define FCS_LEN 4
|
||||||
|
|
||||||
|
@ -350,4 +351,64 @@ enum ieee80211_eid {
|
||||||
|
|
||||||
#define WLAN_MAX_KEY_LEN 32
|
#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 */
|
#endif /* IEEE80211_H */
|
||||||
|
|
|
@ -1399,64 +1399,4 @@ void ieee80211_wake_queues(struct ieee80211_hw *hw);
|
||||||
*/
|
*/
|
||||||
void ieee80211_scan_completed(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 */
|
#endif /* MAC80211_H */
|
||||||
|
|
Loading…
Reference in a new issue