PERFORCE change 66073 for review
Sam Leffler
sam at FreeBSD.org
Mon Nov 29 16:54:22 PST 2004
http://perforce.freebsd.org/chv.cgi?CH=66073
Change 66073 by sam at sam_ebb on 2004/11/30 00:54:17
o revert handling of probe request frames in station mode
o improve power save debug msgs
o remove new vs. existing in open auth debug msg
Affected files ...
.. //depot/projects/wifi/sys/net80211/ieee80211_input.c#20 edit
Differences ...
==== //depot/projects/wifi/sys/net80211/ieee80211_input.c#20 (text+ko) ====
@@ -838,7 +838,6 @@
struct ieee80211_node *ni, int rssi, u_int32_t rstamp, u_int16_t seq,
u_int16_t status)
{
- int allocbs;
switch (ic->ic_opmode) {
case IEEE80211_M_IBSS:
@@ -866,17 +865,14 @@
ni = ieee80211_dup_bss(ic->ic_sta, wh->i_addr2);
if (ni == NULL)
return;
- allocbs = 1;
- } else
- allocbs = 0;
+ }
ni->ni_rssi = rssi;
ni->ni_rstamp = rstamp;
IEEE80211_SEND_MGMT(ic, ni,
IEEE80211_FC0_SUBTYPE_AUTH, seq + 1);
IEEE80211_DPRINTF(ic, IEEE80211_MSG_DEBUG | IEEE80211_MSG_AUTH,
- "station %s %s authenticated (open)\n",
- ether_sprintf(ni->ni_macaddr),
- (allocbs ? "newly" : "already"));
+ "station %s authenticated (open)\n",
+ ether_sprintf(ni->ni_macaddr));
break;
case IEEE80211_M_STA:
@@ -1919,8 +1915,11 @@
break;
}
- case IEEE80211_FC0_SUBTYPE_PROBE_REQ:
- if (ic->ic_state != IEEE80211_S_RUN) {
+ case IEEE80211_FC0_SUBTYPE_PROBE_REQ: {
+ u_int8_t rate;
+
+ if (ic->ic_opmode == IEEE80211_M_STA ||
+ ic->ic_state != IEEE80211_S_RUN) {
ic->ic_stats.is_rx_mgtdiscard++;
return;
}
@@ -1955,59 +1954,43 @@
IEEE80211_VERIFY_ELEMENT(ssid, IEEE80211_NWID_LEN);
IEEE80211_VERIFY_SSID(ic->ic_bss, ssid, "probe");
- allocbs = 0;
- switch (ic->ic_opmode) {
- case IEEE80211_M_IBSS:
- case IEEE80211_M_AHDEMO:
- /*
- * XXX Cannot tell if the sender is operating
- * in ibss mode. But we need a new node to
- * send the response so blindly add them to the
- * neighbor table.
- */
- if (ni == ic->ic_bss) {
+ if (ni == ic->ic_bss) {
+ if (ic->ic_opmode == IEEE80211_M_IBSS) {
+ /*
+ * XXX Cannot tell if the sender is operating
+ * in ibss mode. But we need a new node to
+ * send the response so blindly add them to the
+ * neighbor table.
+ */
ni = ieee80211_fakeup_adhoc_node(ic->ic_sta,
wh->i_addr2);
- if (ni == NULL)
- return;
- allocbs = 1;
- }
- break;
- case IEEE80211_M_HOSTAP:
- if (ni == ic->ic_bss) {
+ } else
ni = ieee80211_dup_bss(ic->ic_sta, wh->i_addr2);
- if (ni == NULL)
- return;
- allocbs = 1;
- }
- break;
- default: /* silence compiler */
- break;
- }
+ if (ni == NULL)
+ return;
+ allocbs = 1;
+ } else
+ allocbs = 0;
IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC,
- "%s: %sprobe req from %s\n", __func__,
- allocbs ? "new" : "", ether_sprintf(wh->i_addr2));
+ "%s: probe req from %s\n", __func__,
+ ether_sprintf(wh->i_addr2));
ni->ni_rssi = rssi;
ni->ni_rstamp = rstamp;
- if (ic->ic_opmode != IEEE80211_M_STA) {
- u_int8_t rate;
- /*
- * Calculate rate set for response.
- */
- rate = ieee80211_setup_rates(ic, ni, rates, xrates,
- IEEE80211_F_DOSORT | IEEE80211_F_DOFRATE
- | IEEE80211_F_DONEGO | IEEE80211_F_DODEL);
- if (rate & IEEE80211_RATE_BASIC) {
- IEEE80211_DPRINTF(ic, IEEE80211_MSG_XRATE,
- "[%s] received rate set invalid\n",
- ether_sprintf(wh->i_addr2));
- if (allocbs) /* reclaim immediately */
- ieee80211_free_node(ni);
- }
+ rate = ieee80211_setup_rates(ic, ni, rates, xrates,
+ IEEE80211_F_DOSORT | IEEE80211_F_DOFRATE
+ | IEEE80211_F_DONEGO | IEEE80211_F_DODEL);
+ if (rate & IEEE80211_RATE_BASIC) {
+ IEEE80211_DPRINTF(ic, IEEE80211_MSG_XRATE,
+ "[%s] received rate set invalid\n",
+ ether_sprintf(wh->i_addr2));
+ if (allocbs) /* reclaim immediately */
+ ieee80211_free_node(ni);
+ } else {
+ IEEE80211_SEND_MGMT(ic, ni,
+ IEEE80211_FC0_SUBTYPE_PROBE_RESP, 0);
}
- IEEE80211_SEND_MGMT(ic, ni,
- IEEE80211_FC0_SUBTYPE_PROBE_RESP, 0);
break;
+ }
case IEEE80211_FC0_SUBTYPE_AUTH: {
u_int16_t algo, seq, status;
@@ -2590,14 +2573,18 @@
* in the packet dispatched to the station; otherwise
* turn off the TIM bit.
*/
- IEEE80211_DPRINTF(ic, IEEE80211_MSG_POWER,
- "[%s] got ps-poll, send packet, %u still queued\n",
- ether_sprintf(ni->ni_macaddr), qlen);
if (qlen != 0) {
+ IEEE80211_DPRINTF(ic, IEEE80211_MSG_POWER,
+ "[%s] got ps-poll, send packet, %u still queued\n",
+ ether_sprintf(ni->ni_macaddr), qlen);
wh = mtod(m, struct ieee80211_frame_min *);
wh->i_fc[1] |= IEEE80211_FC1_MORE_DATA;
- } else
+ } else {
+ IEEE80211_DPRINTF(ic, IEEE80211_MSG_POWER,
+ "[%s] got ps-poll, send packet, queue empty\n",
+ ether_sprintf(ni->ni_macaddr));
ic->ic_set_tim(ic, ni, 0);
+ }
m->m_flags |= M_PWR_SAV; /* bypass PS handling */
IF_ENQUEUE(&ic->ic_ifp->if_snd, m);
}
More information about the p4-projects
mailing list