svn commit: r344969 - in stable: 11/sys/dev/malo 11/sys/dev/mwl 11/sys/dev/usb/wlan 11/sys/net80211 12/sys/dev/malo 12/sys/dev/mwl 12/sys/dev/usb/wlan 12/sys/net80211
Andriy Voskoboinyk
avos at FreeBSD.org
Sat Mar 9 12:54:14 UTC 2019
Author: avos
Date: Sat Mar 9 12:54:10 2019
New Revision: 344969
URL: https://svnweb.freebsd.org/changeset/base/344969
Log:
MFC r343990:
net80211: hide casts for 'i_seq' field offset calculation inside
ieee80211_getqos() and reuse it in various places.
Modified:
stable/11/sys/dev/malo/if_malo.c
stable/11/sys/dev/mwl/if_mwl.c
stable/11/sys/dev/usb/wlan/if_run.c
stable/11/sys/net80211/ieee80211_adhoc.c
stable/11/sys/net80211/ieee80211_hostap.c
stable/11/sys/net80211/ieee80211_ht.c
stable/11/sys/net80211/ieee80211_mesh.c
stable/11/sys/net80211/ieee80211_output.c
stable/11/sys/net80211/ieee80211_proto.h
stable/11/sys/net80211/ieee80211_sta.c
stable/11/sys/net80211/ieee80211_wds.c
Directory Properties:
stable/11/ (props changed)
Changes in other areas also in this revision:
Modified:
stable/12/sys/dev/malo/if_malo.c
stable/12/sys/dev/mwl/if_mwl.c
stable/12/sys/dev/usb/wlan/if_run.c
stable/12/sys/net80211/ieee80211_adhoc.c
stable/12/sys/net80211/ieee80211_hostap.c
stable/12/sys/net80211/ieee80211_ht.c
stable/12/sys/net80211/ieee80211_mesh.c
stable/12/sys/net80211/ieee80211_output.c
stable/12/sys/net80211/ieee80211_proto.h
stable/12/sys/net80211/ieee80211_sta.c
stable/12/sys/net80211/ieee80211_wds.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/11/sys/dev/malo/if_malo.c
==============================================================================
--- stable/11/sys/dev/malo/if_malo.c Sat Mar 9 12:44:05 2019 (r344968)
+++ stable/11/sys/dev/malo/if_malo.c Sat Mar 9 12:54:10 2019 (r344969)
@@ -1049,13 +1049,9 @@ malo_tx_start(struct malo_softc *sc, struct ieee80211_
copyhdrlen = hdrlen = ieee80211_anyhdrsize(wh);
pktlen = m0->m_pkthdr.len;
if (IEEE80211_QOS_HAS_SEQ(wh)) {
- if (IEEE80211_IS_DSTODS(wh)) {
- qos = *(uint16_t *)
- (((struct ieee80211_qosframe_addr4 *) wh)->i_qos);
+ qos = *(uint16_t *)ieee80211_getqos(wh);
+ if (IEEE80211_IS_DSTODS(wh))
copyhdrlen -= sizeof(qos);
- } else
- qos = *(uint16_t *)
- (((struct ieee80211_qosframe *) wh)->i_qos);
} else
qos = 0;
@@ -1950,7 +1946,6 @@ malo_rx_proc(void *arg, int npending)
struct malo_rxdesc *ds;
struct mbuf *m, *mnew;
struct ieee80211_qosframe *wh;
- struct ieee80211_qosframe_addr4 *wh4;
struct ieee80211_node *ni;
int off, len, hdrlen, pktlen, rssi, ntodo;
uint8_t *data, status;
@@ -2060,15 +2055,8 @@ malo_rx_proc(void *arg, int npending)
/* NB: don't need to do this sometimes but ... */
/* XXX special case so we can memcpy after m_devget? */
ovbcopy(data + sizeof(uint16_t), wh, hdrlen);
- if (IEEE80211_QOS_HAS_SEQ(wh)) {
- if (IEEE80211_IS_DSTODS(wh)) {
- wh4 = mtod(m,
- struct ieee80211_qosframe_addr4*);
- *(uint16_t *)wh4->i_qos = ds->qosctrl;
- } else {
- *(uint16_t *)wh->i_qos = ds->qosctrl;
- }
- }
+ if (IEEE80211_QOS_HAS_SEQ(wh))
+ *(uint16_t *)ieee80211_getqos(wh) = ds->qosctrl;
if (ieee80211_radiotap_active(ic)) {
sc->malo_rx_th.wr_flags = 0;
sc->malo_rx_th.wr_rate = ds->rate;
Modified: stable/11/sys/dev/mwl/if_mwl.c
==============================================================================
--- stable/11/sys/dev/mwl/if_mwl.c Sat Mar 9 12:44:05 2019 (r344968)
+++ stable/11/sys/dev/mwl/if_mwl.c Sat Mar 9 12:54:10 2019 (r344969)
@@ -2612,7 +2612,6 @@ mwl_rx_proc(void *arg, int npending)
struct mwl_rxdesc *ds;
struct mbuf *m;
struct ieee80211_qosframe *wh;
- struct ieee80211_qosframe_addr4 *wh4;
struct ieee80211_node *ni;
struct mwl_node *mn;
int off, len, hdrlen, pktlen, rssi, ntodo;
@@ -2759,15 +2758,8 @@ mwl_rx_proc(void *arg, int npending)
/* NB: don't need to do this sometimes but ... */
/* XXX special case so we can memcpy after m_devget? */
ovbcopy(data + sizeof(uint16_t), wh, hdrlen);
- if (IEEE80211_QOS_HAS_SEQ(wh)) {
- if (IEEE80211_IS_DSTODS(wh)) {
- wh4 = mtod(m,
- struct ieee80211_qosframe_addr4*);
- *(uint16_t *)wh4->i_qos = ds->QosCtrl;
- } else {
- *(uint16_t *)wh->i_qos = ds->QosCtrl;
- }
- }
+ if (IEEE80211_QOS_HAS_SEQ(wh))
+ *(uint16_t *)ieee80211_getqos(wh) = ds->QosCtrl;
/*
* The f/w strips WEP header but doesn't clear
* the WEP bit; mark the packet with M_WEP so
@@ -3094,13 +3086,9 @@ mwl_tx_start(struct mwl_softc *sc, struct ieee80211_no
copyhdrlen = hdrlen;
pktlen = m0->m_pkthdr.len;
if (IEEE80211_QOS_HAS_SEQ(wh)) {
- if (IEEE80211_IS_DSTODS(wh)) {
- qos = *(uint16_t *)
- (((struct ieee80211_qosframe_addr4 *) wh)->i_qos);
+ qos = *(uint16_t *)ieee80211_getqos(wh);
+ if (IEEE80211_IS_DSTODS(wh))
copyhdrlen -= sizeof(qos);
- } else
- qos = *(uint16_t *)
- (((struct ieee80211_qosframe *) wh)->i_qos);
} else
qos = 0;
Modified: stable/11/sys/dev/usb/wlan/if_run.c
==============================================================================
--- stable/11/sys/dev/usb/wlan/if_run.c Sat Mar 9 12:44:05 2019 (r344968)
+++ stable/11/sys/dev/usb/wlan/if_run.c Sat Mar 9 12:54:10 2019 (r344969)
@@ -3292,11 +3292,7 @@ run_tx(struct run_softc *sc, struct mbuf *m, struct ie
if ((hasqos = IEEE80211_QOS_HAS_SEQ(wh))) {
uint8_t *frm;
- if(IEEE80211_HAS_ADDR4(wh))
- frm = ((struct ieee80211_qosframe_addr4 *)wh)->i_qos;
- else
- frm =((struct ieee80211_qosframe *)wh)->i_qos;
-
+ frm = ieee80211_getqos(wh);
qos = le16toh(*(const uint16_t *)frm);
tid = qos & IEEE80211_QOS_TID;
qid = TID_TO_WME_AC(tid);
Modified: stable/11/sys/net80211/ieee80211_adhoc.c
==============================================================================
--- stable/11/sys/net80211/ieee80211_adhoc.c Sat Mar 9 12:44:05 2019 (r344968)
+++ stable/11/sys/net80211/ieee80211_adhoc.c Sat Mar 9 12:54:10 2019 (r344969)
@@ -492,11 +492,9 @@ adhoc_input(struct ieee80211_node *ni, struct mbuf *m,
/*
* Save QoS bits for use below--before we strip the header.
*/
- if (subtype == IEEE80211_FC0_SUBTYPE_QOS) {
- qos = (dir == IEEE80211_FC1_DIR_DSTODS) ?
- ((struct ieee80211_qosframe_addr4 *)wh)->i_qos[0] :
- ((struct ieee80211_qosframe *)wh)->i_qos[0];
- } else
+ if (subtype == IEEE80211_FC0_SUBTYPE_QOS)
+ qos = ieee80211_getqos(wh)[0];
+ else
qos = 0;
/*
Modified: stable/11/sys/net80211/ieee80211_hostap.c
==============================================================================
--- stable/11/sys/net80211/ieee80211_hostap.c Sat Mar 9 12:44:05 2019 (r344968)
+++ stable/11/sys/net80211/ieee80211_hostap.c Sat Mar 9 12:54:10 2019 (r344969)
@@ -693,11 +693,9 @@ hostap_input(struct ieee80211_node *ni, struct mbuf *m
/*
* Save QoS bits for use below--before we strip the header.
*/
- if (subtype == IEEE80211_FC0_SUBTYPE_QOS) {
- qos = (dir == IEEE80211_FC1_DIR_DSTODS) ?
- ((struct ieee80211_qosframe_addr4 *)wh)->i_qos[0] :
- ((struct ieee80211_qosframe *)wh)->i_qos[0];
- } else
+ if (subtype == IEEE80211_FC0_SUBTYPE_QOS)
+ qos = ieee80211_getqos(wh)[0];
+ else
qos = 0;
/*
Modified: stable/11/sys/net80211/ieee80211_ht.c
==============================================================================
--- stable/11/sys/net80211/ieee80211_ht.c Sat Mar 9 12:44:05 2019 (r344968)
+++ stable/11/sys/net80211/ieee80211_ht.c Sat Mar 9 12:54:10 2019 (r344969)
@@ -803,10 +803,7 @@ ieee80211_ampdu_reorder(struct ieee80211_node *ni, str
*/
return PROCESS;
}
- if (IEEE80211_IS_DSTODS(wh))
- tid = ((struct ieee80211_qosframe_addr4 *)wh)->i_qos[0];
- else
- tid = wh->i_qos[0];
+ tid = ieee80211_getqos(wh)[0];
tid &= IEEE80211_QOS_TID;
rap = &ni->ni_rx_ampdu[tid];
if ((rap->rxa_flags & IEEE80211_AGGR_XCHGPEND) == 0) {
Modified: stable/11/sys/net80211/ieee80211_mesh.c
==============================================================================
--- stable/11/sys/net80211/ieee80211_mesh.c Sat Mar 9 12:44:05 2019 (r344968)
+++ stable/11/sys/net80211/ieee80211_mesh.c Sat Mar 9 12:54:10 2019 (r344969)
@@ -1653,12 +1653,7 @@ mesh_input(struct ieee80211_node *ni, struct mbuf *m,
* in the Mesh Control field and a 3 address qos frame
* is used.
*/
- if (IEEE80211_IS_DSTODS(wh))
- *(uint16_t *)qos = *(uint16_t *)
- ((struct ieee80211_qosframe_addr4 *)wh)->i_qos;
- else
- *(uint16_t *)qos = *(uint16_t *)
- ((struct ieee80211_qosframe *)wh)->i_qos;
+ *(uint16_t *)qos = *(uint16_t *)ieee80211_getqos(wh);
/*
* NB: The mesh STA sets the Mesh Control Present
Modified: stable/11/sys/net80211/ieee80211_output.c
==============================================================================
--- stable/11/sys/net80211/ieee80211_output.c Sat Mar 9 12:44:05 2019 (r344968)
+++ stable/11/sys/net80211/ieee80211_output.c Sat Mar 9 12:54:10 2019 (r344969)
@@ -1695,14 +1695,8 @@ ieee80211_fragment(struct ieee80211vap *vap, struct mb
whf = mtod(m, struct ieee80211_frame *);
memcpy(whf, wh, hdrsize);
#ifdef IEEE80211_SUPPORT_MESH
- if (vap->iv_opmode == IEEE80211_M_MBSS) {
- if (IEEE80211_IS_DSTODS(wh))
- ((struct ieee80211_qosframe_addr4 *)
- whf)->i_qos[1] &= ~IEEE80211_QOS_MC;
- else
- ((struct ieee80211_qosframe *)
- whf)->i_qos[1] &= ~IEEE80211_QOS_MC;
- }
+ if (vap->iv_opmode == IEEE80211_M_MBSS)
+ ieee80211_getqos(wh)[1] &= ~IEEE80211_QOS_MC;
#endif
*(uint16_t *)&whf->i_seq[0] |= htole16(
(fragno & IEEE80211_SEQ_FRAG_MASK) <<
Modified: stable/11/sys/net80211/ieee80211_proto.h
==============================================================================
--- stable/11/sys/net80211/ieee80211_proto.h Sat Mar 9 12:44:05 2019 (r344968)
+++ stable/11/sys/net80211/ieee80211_proto.h Sat Mar 9 12:54:10 2019 (r344969)
@@ -295,6 +295,22 @@ void ieee80211_wme_updateparams(struct ieee80211vap *)
void ieee80211_wme_updateparams_locked(struct ieee80211vap *);
/*
+ * Return pointer to the QoS field from a Qos frame.
+ */
+static __inline uint8_t *
+ieee80211_getqos(void *data)
+{
+ struct ieee80211_frame *wh = data;
+
+ KASSERT(IEEE80211_QOS_HAS_SEQ(wh), ("QoS field is absent!"));
+
+ if (IEEE80211_IS_DSTODS(wh))
+ return (((struct ieee80211_qosframe_addr4 *)wh)->i_qos);
+ else
+ return (((struct ieee80211_qosframe *)wh)->i_qos);
+}
+
+/*
* Return the WME TID from a QoS frame. If no TID
* is present return the index for the "non-QoS" entry.
*/
Modified: stable/11/sys/net80211/ieee80211_sta.c
==============================================================================
--- stable/11/sys/net80211/ieee80211_sta.c Sat Mar 9 12:44:05 2019 (r344968)
+++ stable/11/sys/net80211/ieee80211_sta.c Sat Mar 9 12:54:10 2019 (r344969)
@@ -758,11 +758,9 @@ sta_input(struct ieee80211_node *ni, struct mbuf *m,
/*
* Save QoS bits for use below--before we strip the header.
*/
- if (subtype == IEEE80211_FC0_SUBTYPE_QOS) {
- qos = (dir == IEEE80211_FC1_DIR_DSTODS) ?
- ((struct ieee80211_qosframe_addr4 *)wh)->i_qos[0] :
- ((struct ieee80211_qosframe *)wh)->i_qos[0];
- } else
+ if (subtype == IEEE80211_FC0_SUBTYPE_QOS)
+ qos = ieee80211_getqos(wh)[0];
+ else
qos = 0;
/*
Modified: stable/11/sys/net80211/ieee80211_wds.c
==============================================================================
--- stable/11/sys/net80211/ieee80211_wds.c Sat Mar 9 12:44:05 2019 (r344968)
+++ stable/11/sys/net80211/ieee80211_wds.c Sat Mar 9 12:54:10 2019 (r344969)
@@ -571,11 +571,9 @@ wds_input(struct ieee80211_node *ni, struct mbuf *m,
/*
* Save QoS bits for use below--before we strip the header.
*/
- if (subtype == IEEE80211_FC0_SUBTYPE_QOS) {
- qos = (dir == IEEE80211_FC1_DIR_DSTODS) ?
- ((struct ieee80211_qosframe_addr4 *)wh)->i_qos[0] :
- ((struct ieee80211_qosframe *)wh)->i_qos[0];
- } else
+ if (subtype == IEEE80211_FC0_SUBTYPE_QOS)
+ qos = ieee80211_getqos(wh)[0];
+ else
qos = 0;
/*
More information about the svn-src-stable-11
mailing list