net80211: replace internal LE_READ_*/LE_WRITE_* macro with system

le*dec / le*enc functions.

Replace net80211 specific macros with system-wide bytestream
encoding/decoding functions:
- LE_READ_2 ->  le16dec
- LE_READ_4 ->  le32dec
- LE_WRITE_2 -> le16enc
- LE_WRITE_4 -> le32enc

+ drop ieee80211_input.h include, where it was included for these
operations only.

Reviewed by:	adrian
Differential Revision:	https://reviews.freebsd.org/D6030
This commit is contained in:
Andriy Voskoboinyk 2016-04-20 18:29:30 +00:00
parent d4015ddc57
commit 31021a2b4e
18 changed files with 84 additions and 135 deletions

View File

@ -3483,10 +3483,10 @@ ath_update_mcast_hw(struct ath_softc *sc)
/* calculate XOR of eight 6bit values */
dl = LLADDR((struct sockaddr_dl *)
ifma->ifma_addr);
val = LE_READ_4(dl + 0);
val = le32dec(dl + 0);
pos = (val >> 18) ^ (val >> 12) ^ (val >> 6) ^
val;
val = LE_READ_4(dl + 3);
val = le32dec(dl + 3);
pos ^= (val >> 18) ^ (val >> 12) ^ (val >> 6) ^
val;
pos &= 0x3f;

View File

@ -942,11 +942,11 @@ ath_beacon_config(struct ath_softc *sc, struct ieee80211vap *vap)
ATH_UNLOCK(sc);
/* extract tstamp from last beacon and convert to TU */
nexttbtt = TSF_TO_TU(LE_READ_4(ni->ni_tstamp.data + 4),
LE_READ_4(ni->ni_tstamp.data));
nexttbtt = TSF_TO_TU(le32dec(ni->ni_tstamp.data + 4),
le32dec(ni->ni_tstamp.data));
tsf_beacon = ((uint64_t) LE_READ_4(ni->ni_tstamp.data + 4)) << 32;
tsf_beacon |= LE_READ_4(ni->ni_tstamp.data);
tsf_beacon = ((uint64_t) le32dec(ni->ni_tstamp.data + 4)) << 32;
tsf_beacon |= le32dec(ni->ni_tstamp.data);
if (ic->ic_opmode == IEEE80211_M_HOSTAP ||
ic->ic_opmode == IEEE80211_M_MBSS) {

View File

@ -39,15 +39,6 @@
* and into something else.
*/
/* unaligned little endian access */
#define LE_READ_2(p) \
((u_int16_t) \
((((u_int8_t *)(p))[0] ) | (((u_int8_t *)(p))[1] << 8)))
#define LE_READ_4(p) \
((u_int32_t) \
((((u_int8_t *)(p))[0] ) | (((u_int8_t *)(p))[1] << 8) | \
(((u_int8_t *)(p))[2] << 16) | (((u_int8_t *)(p))[3] << 24)))
extern int ath_rxbuf;
extern int ath_txbuf;
extern int ath_txbuf_mgmt;

View File

@ -344,8 +344,8 @@ ath_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m,
uint64_t tsf_beacon_target;
int tsf_intval;
tsf_beacon_old = ((uint64_t) LE_READ_4(ni->ni_tstamp.data + 4)) << 32;
tsf_beacon_old |= LE_READ_4(ni->ni_tstamp.data);
tsf_beacon_old = ((uint64_t) le32dec(ni->ni_tstamp.data + 4)) << 32;
tsf_beacon_old |= le32dec(ni->ni_tstamp.data);
#define TU_TO_TSF(_tu) (((u_int64_t)(_tu)) << 10)
tsf_intval = 1;
@ -378,8 +378,8 @@ ath_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m,
ATH_RSSI_LPF(sc->sc_halstats.ns_avgbrssi, rssi);
tsf_beacon = ((uint64_t) LE_READ_4(ni->ni_tstamp.data + 4)) << 32;
tsf_beacon |= LE_READ_4(ni->ni_tstamp.data);
tsf_beacon = ((uint64_t) le32dec(ni->ni_tstamp.data + 4)) << 32;
tsf_beacon |= le32dec(ni->ni_tstamp.data);
nexttbtt = ath_hal_getnexttbtt(sc->sc_ah);

View File

@ -62,7 +62,6 @@ __FBSDID("$FreeBSD$");
#include <net80211/ieee80211_regdomain.h>
#include <net80211/ieee80211_radiotap.h>
#include <net80211/ieee80211_ratectl.h>
#include <net80211/ieee80211_input.h>
#ifdef IEEE80211_SUPPORT_SUPERG
#include <net80211/ieee80211_superg.h>
#endif
@ -2307,7 +2306,7 @@ otus_set_multi(struct otus_softc *sc)
uint32_t val;
dl = LLADDR((struct sockaddr_dl *) ifma->ifma_addr);
val = LE_READ_4(dl + 4);
val = le32dec(dl + 4);
/* Get address byte 5 */
val = val & 0x0000ff00;
val = val >> 8;

View File

@ -1265,8 +1265,8 @@ rtwn_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
rtwn_write_4(sc, R92C_CR, reg);
/* Set BSSID. */
rtwn_write_4(sc, R92C_BSSID + 0, LE_READ_4(&ni->ni_bssid[0]));
rtwn_write_4(sc, R92C_BSSID + 4, LE_READ_2(&ni->ni_bssid[4]));
rtwn_write_4(sc, R92C_BSSID + 0, le32dec(&ni->ni_bssid[0]));
rtwn_write_4(sc, R92C_BSSID + 4, le16dec(&ni->ni_bssid[4]));
if (ic->ic_curmode == IEEE80211_MODE_11B)
rtwn_write_1(sc, R92C_INIRTS_RATE_SEL, 0);

View File

@ -895,10 +895,6 @@
#define R92C_RAID_11B 6
/* Macros to access unaligned little-endian memory. */
#define LE_READ_2(x) ((x)[0] | (x)[1] << 8)
#define LE_READ_4(x) ((x)[0] | (x)[1] << 8 | (x)[2] << 16 | (x)[3] << 24)
/*
* Macros to access subfields in registers.
*/

View File

@ -66,7 +66,6 @@ __FBSDID("$FreeBSD$");
#include <netinet/ip.h>
#include <net80211/ieee80211_var.h>
#include <net80211/ieee80211_input.h>
#include <net80211/ieee80211_regdomain.h>
#include <net80211/ieee80211_radiotap.h>
#include <net80211/ieee80211_ratectl.h>
@ -2266,20 +2265,20 @@ urtwn_key_set_cb(struct urtwn_softc *sc, union sec_param *data)
/* Write key. */
for (i = 0; i < 4; i++) {
error = urtwn_cam_write(sc, R92C_CAM_KEY(k->wk_keyix, i),
LE_READ_4(&k->wk_key[i * 4]));
le32dec(&k->wk_key[i * 4]));
if (error != 0)
goto fail;
}
/* Write CTL0 last since that will validate the CAM entry. */
error = urtwn_cam_write(sc, R92C_CAM_CTL1(k->wk_keyix),
LE_READ_4(&k->wk_macaddr[2]));
le32dec(&k->wk_macaddr[2]));
if (error != 0)
goto fail;
error = urtwn_cam_write(sc, R92C_CAM_CTL0(k->wk_keyix),
SM(R92C_CAM_ALGO, algo) |
SM(R92C_CAM_KEYID, keyid) |
SM(R92C_CAM_MACLO, LE_READ_2(&k->wk_macaddr[0])) |
SM(R92C_CAM_MACLO, le16dec(&k->wk_macaddr[0])) |
R92C_CAM_VALID);
if (error != 0)
goto fail;
@ -2579,8 +2578,8 @@ urtwn_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
urtwn_set_mode(sc, mode);
/* Set BSSID. */
urtwn_write_4(sc, R92C_BSSID + 0, LE_READ_4(&ni->ni_bssid[0]));
urtwn_write_4(sc, R92C_BSSID + 4, LE_READ_2(&ni->ni_bssid[4]));
urtwn_write_4(sc, R92C_BSSID + 0, le32dec(&ni->ni_bssid[0]));
urtwn_write_4(sc, R92C_BSSID + 4, le16dec(&ni->ni_bssid[4]));
if (ic->ic_curmode == IEEE80211_MODE_11B)
urtwn_write_1(sc, R92C_INIRTS_RATE_SEL, 0);

View File

@ -1165,7 +1165,7 @@ static int
wpa_cipher(const uint8_t *sel, uint8_t *keylen)
{
#define WPA_SEL(x) (((x)<<24)|WPA_OUI)
uint32_t w = LE_READ_4(sel);
uint32_t w = le32dec(sel);
switch (w) {
case WPA_SEL(WPA_CSE_NULL):
@ -1195,7 +1195,7 @@ static int
wpa_keymgmt(const uint8_t *sel)
{
#define WPA_SEL(x) (((x)<<24)|WPA_OUI)
uint32_t w = LE_READ_4(sel);
uint32_t w = le32dec(sel);
switch (w) {
case WPA_SEL(WPA_ASE_8021X_UNSPEC):
@ -1242,7 +1242,7 @@ ieee80211_parse_wpa(struct ieee80211vap *vap, const uint8_t *frm,
}
frm += 6, len -= 4; /* NB: len is payload only */
/* NB: iswpaoui already validated the OUI and type */
w = LE_READ_2(frm);
w = le16dec(frm);
if (w != WPA_VERSION) {
IEEE80211_DISCARD_IE(vap,
IEEE80211_MSG_ELEMID | IEEE80211_MSG_WPA,
@ -1258,7 +1258,7 @@ ieee80211_parse_wpa(struct ieee80211vap *vap, const uint8_t *frm,
frm += 4, len -= 4;
/* unicast ciphers */
n = LE_READ_2(frm);
n = le16dec(frm);
frm += 2, len -= 2;
if (len < n*4+2) {
IEEE80211_DISCARD_IE(vap,
@ -1278,7 +1278,7 @@ ieee80211_parse_wpa(struct ieee80211vap *vap, const uint8_t *frm,
rsn->rsn_ucastcipher = IEEE80211_CIPHER_AES_CCM;
/* key management algorithms */
n = LE_READ_2(frm);
n = le16dec(frm);
frm += 2, len -= 2;
if (len < n*4) {
IEEE80211_DISCARD_IE(vap,
@ -1298,7 +1298,7 @@ ieee80211_parse_wpa(struct ieee80211vap *vap, const uint8_t *frm,
rsn->rsn_keymgmt = WPA_ASE_8021X_PSK;
if (len > 2) /* optional capabilities */
rsn->rsn_caps = LE_READ_2(frm);
rsn->rsn_caps = le16dec(frm);
return 0;
}
@ -1312,7 +1312,7 @@ static int
rsn_cipher(const uint8_t *sel, uint8_t *keylen)
{
#define RSN_SEL(x) (((x)<<24)|RSN_OUI)
uint32_t w = LE_READ_4(sel);
uint32_t w = le32dec(sel);
switch (w) {
case RSN_SEL(RSN_CSE_NULL):
@ -1344,7 +1344,7 @@ static int
rsn_keymgmt(const uint8_t *sel)
{
#define RSN_SEL(x) (((x)<<24)|RSN_OUI)
uint32_t w = LE_READ_4(sel);
uint32_t w = le32dec(sel);
switch (w) {
case RSN_SEL(RSN_ASE_8021X_UNSPEC):
@ -1389,7 +1389,7 @@ ieee80211_parse_rsn(struct ieee80211vap *vap, const uint8_t *frm,
return IEEE80211_REASON_IE_INVALID;
}
frm += 2;
w = LE_READ_2(frm);
w = le16dec(frm);
if (w != RSN_VERSION) {
IEEE80211_DISCARD_IE(vap,
IEEE80211_MSG_ELEMID | IEEE80211_MSG_WPA,
@ -1405,7 +1405,7 @@ ieee80211_parse_rsn(struct ieee80211vap *vap, const uint8_t *frm,
frm += 4, len -= 4;
/* unicast ciphers */
n = LE_READ_2(frm);
n = le16dec(frm);
frm += 2, len -= 2;
if (len < n*4+2) {
IEEE80211_DISCARD_IE(vap,
@ -1425,7 +1425,7 @@ ieee80211_parse_rsn(struct ieee80211vap *vap, const uint8_t *frm,
rsn->rsn_ucastcipher = IEEE80211_CIPHER_AES_CCM;
/* key management algorithms */
n = LE_READ_2(frm);
n = le16dec(frm);
frm += 2, len -= 2;
if (len < n*4) {
IEEE80211_DISCARD_IE(vap,
@ -1446,7 +1446,7 @@ ieee80211_parse_rsn(struct ieee80211vap *vap, const uint8_t *frm,
/* optional RSN capabilities */
if (len > 2)
rsn->rsn_caps = LE_READ_2(frm);
rsn->rsn_caps = le16dec(frm);
/* XXXPMKID */
return 0;

View File

@ -1424,7 +1424,7 @@ ieee80211_parse_htcap(struct ieee80211_node *ni, const uint8_t *ie)
} else
ni->ni_flags &= ~IEEE80211_NODE_HTCOMPAT;
ni->ni_htcap = LE_READ_2(ie +
ni->ni_htcap = le16dec(ie +
__offsetof(struct ieee80211_ie_htcap, hc_cap));
ni->ni_htparam = ie[__offsetof(struct ieee80211_ie_htcap, hc_param)];
}
@ -1437,9 +1437,9 @@ htinfo_parse(struct ieee80211_node *ni,
ni->ni_htctlchan = htinfo->hi_ctrlchannel;
ni->ni_ht2ndchan = SM(htinfo->hi_byte1, IEEE80211_HTINFO_2NDCHAN);
w = LE_READ_2(&htinfo->hi_byte2);
w = le16dec(&htinfo->hi_byte2);
ni->ni_htopmode = SM(w, IEEE80211_HTINFO_OPMODE);
w = LE_READ_2(&htinfo->hi_byte45);
w = le16dec(&htinfo->hi_byte45);
ni->ni_htstbc = SM(w, IEEE80211_HTINFO_BASIC_STBCMCS);
}
@ -1932,9 +1932,9 @@ ht_recv_action_ba_addba_request(struct ieee80211_node *ni,
int tid;
dialogtoken = frm[2];
baparamset = LE_READ_2(frm+3);
batimeout = LE_READ_2(frm+5);
baseqctl = LE_READ_2(frm+7);
baparamset = le16dec(frm+3);
batimeout = le16dec(frm+5);
baseqctl = le16dec(frm+7);
tid = MS(baparamset, IEEE80211_BAPS_TID);
@ -1997,12 +1997,12 @@ ht_recv_action_ba_addba_response(struct ieee80211_node *ni,
int tid, bufsiz;
dialogtoken = frm[2];
code = LE_READ_2(frm+3);
baparamset = LE_READ_2(frm+5);
code = le16dec(frm+3);
baparamset = le16dec(frm+5);
tid = MS(baparamset, IEEE80211_BAPS_TID);
bufsiz = MS(baparamset, IEEE80211_BAPS_BUFSIZ);
policy = MS(baparamset, IEEE80211_BAPS_POLICY);
batimeout = LE_READ_2(frm+7);
batimeout = le16dec(frm+7);
tap = &ni->ni_tx_ampdu[tid];
if ((tap->txa_flags & IEEE80211_AGGR_XCHGPEND) == 0) {
@ -2069,8 +2069,8 @@ ht_recv_action_ba_delba(struct ieee80211_node *ni,
uint16_t baparamset, code;
int tid;
baparamset = LE_READ_2(frm+2);
code = LE_READ_2(frm+4);
baparamset = le16dec(frm+2);
code = le16dec(frm+4);
tid = MS(baparamset, IEEE80211_DELBAPS_TID);

View File

@ -118,18 +118,6 @@ static void hwmp_peerdown(struct ieee80211_node *);
static struct timeval ieee80211_hwmp_preqminint = { 0, 100000 };
static struct timeval ieee80211_hwmp_perrminint = { 0, 100000 };
/* unalligned little endian access */
#define LE_WRITE_2(p, v) do { \
((uint8_t *)(p))[0] = (v) & 0xff; \
((uint8_t *)(p))[1] = ((v) >> 8) & 0xff; \
} while (0)
#define LE_WRITE_4(p, v) do { \
((uint8_t *)(p))[0] = (v) & 0xff; \
((uint8_t *)(p))[1] = ((v) >> 8) & 0xff; \
((uint8_t *)(p))[2] = ((v) >> 16) & 0xff; \
((uint8_t *)(p))[3] = ((v) >> 24) & 0xff; \
} while (0)
/* NB: the Target Address set in a Proactive PREQ is the broadcast address. */
static const uint8_t broadcastaddr[IEEE80211_ADDR_LEN] =
@ -440,18 +428,18 @@ hwmp_recv_action_meshpath(struct ieee80211_node *ni,
preq->preq_flags = *iefrm_t++;
preq->preq_hopcount = *iefrm_t++;
preq->preq_ttl = *iefrm_t++;
preq->preq_id = LE_READ_4(iefrm_t); iefrm_t += 4;
preq->preq_id = le32dec(iefrm_t); iefrm_t += 4;
IEEE80211_ADDR_COPY(preq->preq_origaddr, iefrm_t);
iefrm_t += 6;
preq->preq_origseq = LE_READ_4(iefrm_t); iefrm_t += 4;
preq->preq_origseq = le32dec(iefrm_t); iefrm_t += 4;
/* NB: may have Originator Proxied Address */
if (preq->preq_flags & IEEE80211_MESHPREQ_FLAGS_AE) {
IEEE80211_ADDR_COPY(
preq->preq_orig_ext_addr, iefrm_t);
iefrm_t += 6;
}
preq->preq_lifetime = LE_READ_4(iefrm_t); iefrm_t += 4;
preq->preq_metric = LE_READ_4(iefrm_t); iefrm_t += 4;
preq->preq_lifetime = le32dec(iefrm_t); iefrm_t += 4;
preq->preq_metric = le32dec(iefrm_t); iefrm_t += 4;
preq->preq_tcount = *iefrm_t++;
for (i = 0; i < preq->preq_tcount; i++) {
@ -460,7 +448,7 @@ hwmp_recv_action_meshpath(struct ieee80211_node *ni,
preq->preq_targets[i].target_addr, iefrm_t);
iefrm_t += 6;
preq->preq_targets[i].target_seq =
LE_READ_4(iefrm_t);
le32dec(iefrm_t);
iefrm_t += 4;
}
@ -489,18 +477,18 @@ hwmp_recv_action_meshpath(struct ieee80211_node *ni,
prep->prep_ttl = *iefrm_t++;
IEEE80211_ADDR_COPY(prep->prep_targetaddr, iefrm_t);
iefrm_t += 6;
prep->prep_targetseq = LE_READ_4(iefrm_t); iefrm_t += 4;
prep->prep_targetseq = le32dec(iefrm_t); iefrm_t += 4;
/* NB: May have Target Proxied Address */
if (prep->prep_flags & IEEE80211_MESHPREP_FLAGS_AE) {
IEEE80211_ADDR_COPY(
prep->prep_target_ext_addr, iefrm_t);
iefrm_t += 6;
}
prep->prep_lifetime = LE_READ_4(iefrm_t); iefrm_t += 4;
prep->prep_metric = LE_READ_4(iefrm_t); iefrm_t += 4;
prep->prep_lifetime = le32dec(iefrm_t); iefrm_t += 4;
prep->prep_metric = le32dec(iefrm_t); iefrm_t += 4;
IEEE80211_ADDR_COPY(prep->prep_origaddr, iefrm_t);
iefrm_t += 6;
prep->prep_origseq = LE_READ_4(iefrm_t); iefrm_t += 4;
prep->prep_origseq = le32dec(iefrm_t); iefrm_t += 4;
hwmp_recv_prep(vap, ni, wh, prep);
IEEE80211_FREE(prep, M_80211_MESH_PREP);
@ -533,7 +521,7 @@ hwmp_recv_action_meshpath(struct ieee80211_node *ni,
IEEE80211_ADDR_COPY(
perr->perr_dests[i].dest_addr, iefrm_t);
iefrm_t += 6;
perr->perr_dests[i].dest_seq = LE_READ_4(iefrm_t);
perr->perr_dests[i].dest_seq = le32dec(iefrm_t);
iefrm_t += 4;
/* NB: May have Target Proxied Address */
if (perr->perr_dests[i].dest_flags &
@ -544,7 +532,7 @@ hwmp_recv_action_meshpath(struct ieee80211_node *ni,
iefrm_t += 6;
}
perr->perr_dests[i].dest_rcode =
LE_READ_2(iefrm_t);
le16dec(iefrm_t);
iefrm_t += 2;
}
@ -566,9 +554,9 @@ hwmp_recv_action_meshpath(struct ieee80211_node *ni,
return 1;
}
memcpy(&rann, mrann, sizeof(rann));
rann.rann_seq = LE_READ_4(&mrann->rann_seq);
rann.rann_interval = LE_READ_4(&mrann->rann_interval);
rann.rann_metric = LE_READ_4(&mrann->rann_metric);
rann.rann_seq = le32dec(&mrann->rann_seq);
rann.rann_interval = le32dec(&mrann->rann_interval);
rann.rann_metric = le32dec(&mrann->rann_metric);
hwmp_recv_rann(vap, ni, wh, &rann);
found++;
break;
@ -682,12 +670,11 @@ hwmp_send_action(struct ieee80211vap *vap,
}
#define ADDSHORT(frm, v) do { \
frm[0] = (v) & 0xff; \
frm[1] = (v) >> 8; \
le16enc(frm, v); \
frm += 2; \
} while (0)
#define ADDWORD(frm, v) do { \
LE_WRITE_4(frm, v); \
le32enc(frm, v); \
frm += 4; \
} while (0)
/*

View File

@ -549,7 +549,7 @@ ieee80211_parse_beacon(struct ieee80211_node *ni, struct mbuf *m,
break;
case IEEE80211_ELEMID_FHPARMS:
if (ic->ic_phytype == IEEE80211_T_FH) {
scan->fhdwell = LE_READ_2(&frm[2]);
scan->fhdwell = le16dec(&frm[2]);
scan->chan = IEEE80211_FH_CHAN(frm[4], frm[5]);
scan->fhindex = frm[6];
}

View File

@ -80,70 +80,58 @@ void ieee80211_ssid_mismatch(struct ieee80211vap *, const char *tag,
} while (0)
#endif /* !IEEE80211_DEBUG */
/* unalligned little endian access */
#define LE_READ_2(p) \
((uint16_t) \
((((const uint8_t *)(p))[0] ) | \
(((const uint8_t *)(p))[1] << 8)))
#define LE_READ_4(p) \
((uint32_t) \
((((const uint8_t *)(p))[0] ) | \
(((const uint8_t *)(p))[1] << 8) | \
(((const uint8_t *)(p))[2] << 16) | \
(((const uint8_t *)(p))[3] << 24)))
#include <sys/endian.h> /* For le16toh() / le32dec() */
static __inline int
iswpaoui(const uint8_t *frm)
{
return frm[1] > 3 && LE_READ_4(frm+2) == ((WPA_OUI_TYPE<<24)|WPA_OUI);
return frm[1] > 3 && le32dec(frm+2) == ((WPA_OUI_TYPE<<24)|WPA_OUI);
}
static __inline int
iswmeoui(const uint8_t *frm)
{
return frm[1] > 3 && LE_READ_4(frm+2) == ((WME_OUI_TYPE<<24)|WME_OUI);
return frm[1] > 3 && le32dec(frm+2) == ((WME_OUI_TYPE<<24)|WME_OUI);
}
static __inline int
iswmeparam(const uint8_t *frm)
{
return frm[1] > 5 && LE_READ_4(frm+2) == ((WME_OUI_TYPE<<24)|WME_OUI) &&
return frm[1] > 5 && le32dec(frm+2) == ((WME_OUI_TYPE<<24)|WME_OUI) &&
frm[6] == WME_PARAM_OUI_SUBTYPE;
}
static __inline int
iswmeinfo(const uint8_t *frm)
{
return frm[1] > 5 && LE_READ_4(frm+2) == ((WME_OUI_TYPE<<24)|WME_OUI) &&
return frm[1] > 5 && le32dec(frm+2) == ((WME_OUI_TYPE<<24)|WME_OUI) &&
frm[6] == WME_INFO_OUI_SUBTYPE;
}
static __inline int
isatherosoui(const uint8_t *frm)
{
return frm[1] > 3 && LE_READ_4(frm+2) == ((ATH_OUI_TYPE<<24)|ATH_OUI);
return frm[1] > 3 && le32dec(frm+2) == ((ATH_OUI_TYPE<<24)|ATH_OUI);
}
static __inline int
istdmaoui(const uint8_t *frm)
{
return frm[1] > 3 && LE_READ_4(frm+2) == ((TDMA_OUI_TYPE<<24)|TDMA_OUI);
return frm[1] > 3 && le32dec(frm+2) == ((TDMA_OUI_TYPE<<24)|TDMA_OUI);
}
static __inline int
ishtcapoui(const uint8_t *frm)
{
return frm[1] > 3 && LE_READ_4(frm+2) == ((BCM_OUI_HTCAP<<24)|BCM_OUI);
return frm[1] > 3 && le32dec(frm+2) == ((BCM_OUI_HTCAP<<24)|BCM_OUI);
}
static __inline int
ishtinfooui(const uint8_t *frm)
{
return frm[1] > 3 && LE_READ_4(frm+2) == ((BCM_OUI_HTINFO<<24)|BCM_OUI);
return frm[1] > 3 && le32dec(frm+2) == ((BCM_OUI_HTINFO<<24)|BCM_OUI);
}
#include <sys/endian.h> /* For le16toh() */
/*
* Check the current frame sequence number against the current TID
* state and return whether it's in sequence or should be dropped.

View File

@ -1710,7 +1710,7 @@ mesh_input(struct ieee80211_node *ni, struct mbuf *m,
}
/* XXX: are we sure there is no reallocating after m_pullup? */
seq = LE_READ_4(mc->mc_seq);
seq = le32dec(mc->mc_seq);
if (IEEE80211_IS_MULTICAST(wh->i_addr1))
addr = wh->i_addr3;
else if (ae == IEEE80211_MESH_AE_01)
@ -2135,12 +2135,12 @@ mesh_parse_meshpeering_action(struct ieee80211_node *ni,
mpie = (const struct ieee80211_meshpeer_ie *) frm;
memset(mp, 0, sizeof(*mp));
mp->peer_len = mpie->peer_len;
mp->peer_proto = LE_READ_2(&mpie->peer_proto);
mp->peer_llinkid = LE_READ_2(&mpie->peer_llinkid);
mp->peer_proto = le16dec(&mpie->peer_proto);
mp->peer_llinkid = le16dec(&mpie->peer_llinkid);
switch (subtype) {
case IEEE80211_ACTION_MESHPEERING_CONFIRM:
mp->peer_linkid =
LE_READ_2(&mpie->peer_linkid);
le16dec(&mpie->peer_linkid);
break;
case IEEE80211_ACTION_MESHPEERING_CLOSE:
/* NB: peer link ID is optional */
@ -2148,12 +2148,12 @@ mesh_parse_meshpeering_action(struct ieee80211_node *ni,
(IEEE80211_MPM_BASE_SZ + 2)) {
mp->peer_linkid = 0;
mp->peer_rcode =
LE_READ_2(&mpie->peer_linkid);
le16dec(&mpie->peer_linkid);
} else {
mp->peer_linkid =
LE_READ_2(&mpie->peer_linkid);
le16dec(&mpie->peer_linkid);
mp->peer_rcode =
LE_READ_2(&mpie->peer_rcode);
le16dec(&mpie->peer_rcode);
}
break;
}
@ -2550,8 +2550,8 @@ mesh_parse_meshgate_action(struct ieee80211_node *ni,
ie->gann_hopcount = gannie->gann_hopcount;
ie->gann_ttl = gannie->gann_ttl;
IEEE80211_ADDR_COPY(ie->gann_addr, gannie->gann_addr);
ie->gann_seq = LE_READ_4(&gannie->gann_seq);
ie->gann_interval = LE_READ_2(&gannie->gann_interval);
ie->gann_seq = le32dec(&gannie->gann_seq);
ie->gann_interval = le16dec(&gannie->gann_interval);
break;
}
frm += frm[1] + 2;

View File

@ -77,18 +77,6 @@ __FBSDID("$FreeBSD$");
#define ETHER_HEADER_COPY(dst, src) \
memcpy(dst, src, sizeof(struct ether_header))
/* unalligned little endian access */
#define LE_WRITE_2(p, v) do { \
((uint8_t *)(p))[0] = (v) & 0xff; \
((uint8_t *)(p))[1] = ((v) >> 8) & 0xff; \
} while (0)
#define LE_WRITE_4(p, v) do { \
((uint8_t *)(p))[0] = (v) & 0xff; \
((uint8_t *)(p))[1] = ((v) >> 8) & 0xff; \
((uint8_t *)(p))[2] = ((v) >> 16) & 0xff; \
((uint8_t *)(p))[3] = ((v) >> 24) & 0xff; \
} while (0)
static int ieee80211_fragment(struct ieee80211vap *, struct mbuf *,
u_int hdrsize, u_int ciphdrsize, u_int mtu);
static void ieee80211_tx_mgt_cb(struct ieee80211_node *, void *, int);
@ -1518,7 +1506,7 @@ ieee80211_encap(struct ieee80211vap *vap, struct ieee80211_node *ni,
}
mc->mc_ttl = ms->ms_ttl;
ms->ms_seq++;
LE_WRITE_4(mc->mc_seq, ms->ms_seq);
le32enc(mc->mc_seq, ms->ms_seq);
break;
#endif
case IEEE80211_M_WDS: /* NB: is4addr should always be true */
@ -1843,7 +1831,7 @@ static uint8_t *
ieee80211_add_cfparms(uint8_t *frm, struct ieee80211com *ic)
{
#define ADDSHORT(frm, v) do { \
LE_WRITE_2(frm, v); \
le16enc(frm, v); \
frm += 2; \
} while (0)
*frm++ = IEEE80211_ELEMID_CFPARMS;
@ -1898,7 +1886,7 @@ ieee80211_add_wme_param(uint8_t *frm, struct ieee80211_wme_state *wme)
{
#define SM(_v, _f) (((_v) << _f##_S) & _f)
#define ADDSHORT(frm, v) do { \
LE_WRITE_2(frm, v); \
le16enc(frm, v); \
frm += 2; \
} while (0)
/* NB: this works 'cuz a param has an info at the front */

View File

@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/endian.h>
#include <sys/malloc.h>
#include <sys/module.h>
@ -785,7 +786,7 @@ maxrate(const struct ieee80211_scan_entry *se)
} else
for (i = 31; i >= 0 && isclr(htcap->hc_mcsset, i); i--);
if (i >= 0) {
caps = LE_READ_2(&htcap->hc_cap);
caps = le16dec(&htcap->hc_cap);
if ((caps & IEEE80211_HTCAP_CHWIDTH40) &&
(caps & IEEE80211_HTCAP_SHORTGI40))
rmax = ieee80211_htrates[i].ht40_rate_400ns;

View File

@ -1120,7 +1120,7 @@ ieee80211_parse_wmeparams(struct ieee80211vap *vap, uint8_t *frm,
wmep->wmep_aifsn = MS(frm[0], WME_PARAM_AIFSN);
wmep->wmep_logcwmin = MS(frm[1], WME_PARAM_LOGCWMIN);
wmep->wmep_logcwmax = MS(frm[1], WME_PARAM_LOGCWMAX);
wmep->wmep_txopLimit = LE_READ_2(frm+2);
wmep->wmep_txopLimit = le16dec(frm+2);
frm += 4;
}
wme->wme_wmeChanParams.cap_info = qosinfo;

View File

@ -195,7 +195,7 @@ ieee80211_parse_ath(struct ieee80211_node *ni, uint8_t *ie)
(const struct ieee80211_ath_ie *) ie;
ni->ni_ath_flags = ath->ath_capability;
ni->ni_ath_defkeyix = LE_READ_2(&ath->ath_defkeyix);
ni->ni_ath_defkeyix = le16dec(&ath->ath_defkeyix);
}
int
@ -216,7 +216,7 @@ ieee80211_parse_athparams(struct ieee80211_node *ni, uint8_t *frm,
}
ath = (const struct ieee80211_ath_ie *)frm;
capschanged = (ni->ni_ath_flags != ath->ath_capability);
defkeyix = LE_READ_2(ath->ath_defkeyix);
defkeyix = le16dec(ath->ath_defkeyix);
if (capschanged || defkeyix != ni->ni_ath_defkeyix) {
ni->ni_ath_flags = ath->ath_capability;
ni->ni_ath_defkeyix = defkeyix;