diff options
author | Joel <82591719+joelg989@users.noreply.github.com> | 2021-04-29 14:41:13 +0100 |
---|---|---|
committer | Joel <82591719+joelg989@users.noreply.github.com> | 2021-04-29 14:41:13 +0100 |
commit | 919b51f7a0f7640143d15598a64afb2a0218f78a (patch) | |
tree | 892d2bf121a2b847b129acf705e975163eeaf6b4 | |
parent | 6716a4fd84d8d579eabd3df24ce6ccc2ede0ee33 (diff) |
Add check to suppress spurious error generated by noncompiant MS Surface mobile adaptors when attempting to set non-promiscuous mode
-rw-r--r-- | pcap-int.h | 11 | ||||
-rw-r--r-- | pcap-npf.c | 12 |
2 files changed, 19 insertions, 4 deletions
@@ -350,6 +350,17 @@ struct pcap { * BPF code generation flags. */ #define BPF_SPECIAL_VLAN_HANDLING 0x00000001 /* special VLAN handling for Linux */ +/* + * Interface Error Codes + * It is likely that there are other devices which throw spurious errors, at which point + * this will need refactoring to efficiently check against a list, but for now we can just + * check this one value. + */ +#define NPF_SURFACE_MOBILE_NONPROMISC 0xe00000bb +/* Attempting to set non-promiscuous mode on a noncompliant Microsoft Surface Pro + * Mobile Broadband Adapter returns an error that can safely be ignored, as it's + * always in non-promiscuous mode. + */ /* * This is a timeval as stored in a savefile. @@ -1222,10 +1222,14 @@ pcap_activate_npf(pcap_t *p) NDIS_PACKET_TYPE_BROADCAST | NDIS_PACKET_TYPE_MULTICAST) == FALSE) { - pcap_fmt_errmsg_for_win32_err(p->errbuf, - PCAP_ERRBUF_SIZE, GetLastError(), - "failed to set hardware filter to non-promiscuous mode"); - goto bad; + /* suppress spurious error generated by noncompiant MS Surface mobile adaptors */ + if (GetLastError() != NPF_SURFACE_MOBILE_NONPROMISC) + { + pcap_fmt_errmsg_for_win32_err(p->errbuf, + PCAP_ERRBUF_SIZE, GetLastError(), + "failed to set hardware filter to non-promiscuous mode"); + goto bad; + } } } |