summaryrefslogtreecommitdiffstats
path: root/sys/net80211/ieee80211_input.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/net80211/ieee80211_input.c')
-rw-r--r--sys/net80211/ieee80211_input.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/sys/net80211/ieee80211_input.c b/sys/net80211/ieee80211_input.c
index b757ae6..0b95520 100644
--- a/sys/net80211/ieee80211_input.c
+++ b/sys/net80211/ieee80211_input.c
@@ -86,10 +86,21 @@ int
ieee80211_input_mimo(struct ieee80211_node *ni, struct mbuf *m,
struct ieee80211_rx_stats *rx)
{
+ struct ieee80211_rx_stats rxs;
+
+ if (rx) {
+ memcpy(&rxs, rx, sizeof(*rx));
+ } else {
+ /* try to read from mbuf */
+ bzero(&rxs, sizeof(rxs));
+ ieee80211_get_rx_params(m, &rxs);
+ }
+
/* XXX should assert IEEE80211_R_NF and IEEE80211_R_RSSI are set */
- ieee80211_process_mimo(ni, rx);
+ ieee80211_process_mimo(ni, &rxs);
+
//return ieee80211_input(ni, m, rx->rssi, rx->nf);
- return ni->ni_vap->iv_input(ni, m, rx, rx->rssi, rx->nf);
+ return ni->ni_vap->iv_input(ni, m, &rxs, rxs.rssi, rxs.nf);
}
int
@@ -107,11 +118,20 @@ int
ieee80211_input_mimo_all(struct ieee80211com *ic, struct mbuf *m,
struct ieee80211_rx_stats *rx)
{
+ struct ieee80211_rx_stats rxs;
struct ieee80211vap *vap;
int type = -1;
m->m_flags |= M_BCAST; /* NB: mark for bpf tap'ing */
+ if (rx) {
+ memcpy(&rxs, rx, sizeof(*rx));
+ } else {
+ /* try to read from mbuf */
+ bzero(&rxs, sizeof(rxs));
+ ieee80211_get_rx_params(m, &rxs);
+ }
+
/* XXX locking */
TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) {
struct ieee80211_node *ni;
@@ -143,7 +163,7 @@ ieee80211_input_mimo_all(struct ieee80211com *ic, struct mbuf *m,
m = NULL;
}
ni = ieee80211_ref_node(vap->iv_bss);
- type = ieee80211_input_mimo(ni, mcopy, rx);
+ type = ieee80211_input_mimo(ni, mcopy, &rxs);
ieee80211_free_node(ni);
}
if (m != NULL) /* no vaps, reclaim mbuf */
OpenPOWER on IntegriCloud