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:
parent
dc013f1e37
commit
2531517600
3 changed files with 21 additions and 2 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue