wlantest: Add -F option for assuming FCS is included

When using DLT_IEEE802_11 datalink type in a pcap file, wlantest can now
be instructed to assume there is an FCS included in the frame by adding
the new -F command line argument. This will make wlantest validate the
FCS and strip it from the frame before processing.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Jouni Malinen 2013-01-17 12:55:30 +02:00 committed by Jouni Malinen
parent dc013f1e37
commit 2531517600
3 changed files with 21 additions and 2 deletions

View file

@ -380,5 +380,19 @@ void wlantest_process_prism(struct wlantest *wt, const u8 *data, size_t len)
void wlantest_process_80211(struct wlantest *wt, const u8 *data, size_t len) void wlantest_process_80211(struct wlantest *wt, const u8 *data, size_t len)
{ {
wpa_hexdump(MSG_EXCESSIVE, "Process data", data, len); wpa_hexdump(MSG_EXCESSIVE, "Process data", data, len);
if (wt->assume_fcs && len >= 4) {
const u8 *fcspos;
len -= 4;
fcspos = data + len;
if (check_fcs(data, len, fcspos) < 0) {
wpa_printf(MSG_EXCESSIVE, "Drop RX frame with invalid "
"FCS");
wt->fcs_error++;
return;
}
}
rx_frame(wt, data, len); rx_frame(wt, data, len);
} }

View file

@ -25,7 +25,7 @@ static void wlantest_terminate(int sig, void *signal_ctx)
static void usage(void) static void usage(void)
{ {
printf("wlantest [-cddhqq] [-i<ifname>] [-r<pcap file>] " printf("wlantest [-cddhqqF] [-i<ifname>] [-r<pcap file>] "
"[-p<passphrase>]\n" "[-p<passphrase>]\n"
" [-I<wired ifname>] [-R<wired pcap file>] " " [-I<wired ifname>] [-R<wired pcap file>] "
"[-P<RADIUS shared secret>]\n" "[-P<RADIUS shared secret>]\n"
@ -208,7 +208,7 @@ int main(int argc, char *argv[])
wlantest_init(&wt); wlantest_init(&wt);
for (;;) { for (;;) {
c = getopt(argc, argv, "cdf:hi:I:p:P:qr:R:w:W:"); c = getopt(argc, argv, "cdf:Fhi:I:p:P:qr:R:w:W:");
if (c < 0) if (c < 0)
break; break;
switch (c) { switch (c) {
@ -223,6 +223,9 @@ int main(int argc, char *argv[])
if (add_pmk_file(&wt, optarg) < 0) if (add_pmk_file(&wt, optarg) < 0)
return -1; return -1;
break; break;
case 'F':
wt.assume_fcs = 1;
break;
case 'h': case 'h':
usage(); usage();
return 0; return 0;

View file

@ -175,6 +175,8 @@ struct wlantest {
u8 last_hdr[30]; u8 last_hdr[30];
size_t last_len; size_t last_len;
int last_mgmt_valid; int last_mgmt_valid;
unsigned int assume_fcs:1;
}; };
int add_wep(struct wlantest *wt, const char *key); int add_wep(struct wlantest *wt, const char *key);