PERFORCE change 67098 for review
Sam Leffler
sam at FreeBSD.org
Tue Dec 14 15:33:41 PST 2004
http://perforce.freebsd.org/chv.cgi?CH=67098
Change 67098 by sam at sam_ebb on 2004/12/14 23:33:10
o teach ieee80211_dump_pkt about QoS and TKIP/CCM-encrypted
frames
o also handle h/w padding--this requires changing the calling
covention to pass in struct ieee80211com
Update drivers that ieee80211_dump_pkt to match.
Affected files ...
.. //depot/projects/wifi/sys/dev/ath/if_ath.c#42 edit
.. //depot/projects/wifi/sys/dev/wi/if_wi.c#8 edit
.. //depot/projects/wifi/sys/net80211/ieee80211_proto.c#18 edit
.. //depot/projects/wifi/sys/net80211/ieee80211_proto.h#11 edit
Differences ...
==== //depot/projects/wifi/sys/dev/ath/if_ath.c#42 (text+ko) ====
@@ -2679,7 +2679,7 @@
}
if (IFF_DUMPPKTS(sc, ATH_DEBUG_RECV)) {
- ieee80211_dump_pkt(mtod(m, caddr_t), len,
+ ieee80211_dump_pkt(ic, mtod(m, caddr_t), len,
sc->sc_hwmap[ds->ds_rxstat.rs_rate],
ds->ds_rxstat.rs_rssi);
}
@@ -3219,7 +3219,7 @@
ctsrate = 0;
if (IFF_DUMPPKTS(sc, ATH_DEBUG_XMIT))
- ieee80211_dump_pkt(mtod(m0, caddr_t), m0->m_len,
+ ieee80211_dump_pkt(ic, mtod(m0, caddr_t), m0->m_len,
sc->sc_hwmap[txrate], -1);
if (ic->ic_rawbpf)
==== //depot/projects/wifi/sys/dev/wi/if_wi.c#8 (text+ko) ====
@@ -148,7 +148,8 @@
static int wi_scan_ap(struct wi_softc *, u_int16_t, u_int16_t);
static void wi_scan_result(struct wi_softc *, int, int);
-static void wi_dump_pkt(struct wi_frame *, struct ieee80211_node *, int rssi);
+static void wi_dump_pkt(struct ieee80211com *,
+ struct wi_frame *, struct ieee80211_node *, int rssi);
static int wi_get_debug(struct wi_softc *, struct wi_req *);
static int wi_set_debug(struct wi_softc *, struct wi_req *);
@@ -982,7 +983,7 @@
m_adj(m0, sizeof(struct ieee80211_frame));
frmhdr.wi_dat_len = htole16(m0->m_pkthdr.len);
if (IFF_DUMPPKTS(ifp))
- wi_dump_pkt(&frmhdr, NULL, -1);
+ wi_dump_pkt(ic, &frmhdr, NULL, -1);
fid = sc->sc_txd[cur].d_fid;
off = sizeof(frmhdr);
error = wi_write_bap(sc, fid, 0, &frmhdr, sizeof(frmhdr)) != 0
@@ -1439,7 +1440,7 @@
}
if (IFF_DUMPPKTS(ifp))
- wi_dump_pkt(&frmhdr, NULL, frmhdr.wi_rx_signal);
+ wi_dump_pkt(ic, &frmhdr, NULL, frmhdr.wi_rx_signal);
/*
* Drop undecryptable or packets with receive errors here
@@ -2836,9 +2837,10 @@
}
static void
-wi_dump_pkt(struct wi_frame *wh, struct ieee80211_node *ni, int rssi)
+wi_dump_pkt(struct ieee80211com *ic,
+ struct wi_frame *wh, struct ieee80211_node *ni, int rssi)
{
- ieee80211_dump_pkt((u_int8_t *) &wh->wi_whdr, sizeof(wh->wi_whdr),
+ ieee80211_dump_pkt(ic, (u_int8_t *) &wh->wi_whdr, sizeof(wh->wi_whdr),
ni ? ni->ni_rates.rs_rates[ni->ni_txrate] & IEEE80211_RATE_VAL : -1, rssi);
printf(" status 0x%x rx_tstamp1 %u rx_tstamp0 0x%u rx_silence %u\n",
le16toh(wh->wi_status), le16toh(wh->wi_rx_tstamp1),
==== //depot/projects/wifi/sys/net80211/ieee80211_proto.c#18 (text+ko) ====
@@ -258,7 +258,8 @@
}
void
-ieee80211_dump_pkt(const u_int8_t *buf, int len, int rate, int rssi)
+ieee80211_dump_pkt(struct ieee80211com *ic,
+ const u_int8_t *buf, int len, int rate, int rssi)
{
const struct ieee80211_frame *wh;
int i;
@@ -300,12 +301,22 @@
printf(" type#%d", wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK);
break;
}
+ if (wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_QOS) {
+ const struct ieee80211_qosframe *qwh =
+ (const struct ieee80211_qosframe *)buf;
+ printf(" QoS [TID %u%s]", qwh->i_qos[0] & IEEE80211_QOS_TID,
+ qwh->i_qos[0] & IEEE80211_QOS_ACKPOLICY ? " ACM" : "");
+ }
if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
- int i;
- printf(" WEP [IV");
- for (i = 0; i < IEEE80211_WEP_IVLEN; i++)
- printf(" %.02x", buf[sizeof(*wh)+i]);
- printf(" KID %u]", buf[sizeof(*wh)+i] >> 6);
+ int off;
+
+ off = ieee80211_anyhdrspace(ic, wh);
+ printf(" WEP [IV %.02x %.02x %.02x",
+ buf[off+0], buf[off+1], buf[off+2]);
+ if (buf[off+IEEE80211_WEP_IVLEN] & IEEE80211_WEP_EXTIV)
+ printf(" %.02x %.02x %.02x",
+ buf[off+4], buf[off+5], buf[off+6]);
+ printf(" KID %u]", buf[off+IEEE80211_WEP_IVLEN] >> 6);
}
if (rate >= 0)
printf(" %dM", rate / 2);
==== //depot/projects/wifi/sys/net80211/ieee80211_proto.h#11 (text+ko) ====
@@ -207,7 +207,8 @@
#define ieee80211_new_state(_ic, _nstate, _arg) \
(((_ic)->ic_newstate)((_ic), (_nstate), (_arg)))
extern void ieee80211_print_essid(const u_int8_t *, int);
-extern void ieee80211_dump_pkt(const u_int8_t *, int, int, int);
+extern void ieee80211_dump_pkt(struct ieee80211com *,
+ const u_int8_t *, int, int, int);
extern const char *ieee80211_state_name[IEEE80211_S_MAX];
extern const char *ieee80211_wme_acnames[];
More information about the p4-projects
mailing list