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:
parent
d4015ddc57
commit
31021a2b4e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=298359
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
/*
|
||||
|
@ -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];
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user