summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2008-10-26 00:48:20 +0000
committersam <sam@FreeBSD.org>2008-10-26 00:48:20 +0000
commit8e7745ccc63630c2e78ef7e5119d070d1f50a8f2 (patch)
treec942e4b5b616a67f4838394d9fcb5e198a05d8ca /sys
parent1a02c34468f1d2b73d9595b5d3a6269813d8fca8 (diff)
downloadFreeBSD-src-8e7745ccc63630c2e78ef7e5119d070d1f50a8f2.zip
FreeBSD-src-8e7745ccc63630c2e78ef7e5119d070d1f50a8f2.tar.gz
change ieee80211_send_probereq to supply raw xmit parameters so it can
control how frames are handled by the driver
Diffstat (limited to 'sys')
-rw-r--r--sys/net80211/ieee80211_output.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/sys/net80211/ieee80211_output.c b/sys/net80211/ieee80211_output.c
index f5561de..3b46d0b 100644
--- a/sys/net80211/ieee80211_output.c
+++ b/sys/net80211/ieee80211_output.c
@@ -1688,6 +1688,8 @@ ieee80211_send_probereq(struct ieee80211_node *ni,
{
struct ieee80211vap *vap = ni->ni_vap;
struct ieee80211com *ic = ni->ni_ic;
+ const struct ieee80211_txparam *tp;
+ struct ieee80211_bpf_params params;
struct ieee80211_frame *wh;
const struct ieee80211_rateset *rs;
struct mbuf *m;
@@ -1755,9 +1757,14 @@ ieee80211_send_probereq(struct ieee80211_node *ni,
frm = add_appie(frm, vap->iv_appie_probereq);
m->m_pkthdr.len = m->m_len = frm - mtod(m, uint8_t *);
+ KASSERT(M_LEADINGSPACE(m) >= sizeof(struct ieee80211_frame),
+ ("leading space %zd", M_LEADINGSPACE(m)));
M_PREPEND(m, sizeof(struct ieee80211_frame), M_DONTWAIT);
- if (m == NULL)
+ if (m == NULL) {
+ /* NB: cannot happen */
+ ieee80211_free_node(ni);
return ENOMEM;
+ }
wh = mtod(m, struct ieee80211_frame *);
ieee80211_send_setup(ni, wh,
@@ -1775,7 +1782,17 @@ ieee80211_send_probereq(struct ieee80211_node *ni,
ieee80211_chan2ieee(ic, ic->ic_curchan), ether_sprintf(bssid),
ssidlen, ssid);
- return ic->ic_raw_xmit(ni, m, NULL);
+ memset(&params, 0, sizeof(params));
+ params.ibp_pri = M_WME_GETAC(m);
+ tp = &vap->iv_txparms[ieee80211_chan2mode(ic->ic_curchan)];
+ params.ibp_rate0 = tp->mgmtrate;
+ if (IEEE80211_IS_MULTICAST(da)) {
+ params.ibp_flags |= IEEE80211_BPF_NOACK;
+ params.ibp_try0 = 1;
+ } else
+ params.ibp_try0 = tp->maxretry;
+ params.ibp_power = ni->ni_txpower;
+ return ic->ic_raw_xmit(ni, m, &params);
}
/*
OpenPOWER on IntegriCloud