diff --git a/lib/wireshark_connector_impl.cc b/lib/wireshark_connector_impl.cc index 54f7a7e..ef6888c 100644 --- a/lib/wireshark_connector_impl.cc +++ b/lib/wireshark_connector_impl.cc @@ -57,13 +57,21 @@ wireshark_connector_impl::handle_pdu(pmt::pmt_t pdu) { struct timeval t; gettimeofday(&t, NULL); - std::size_t len = pmt::blob_length(pmt::cdr(pdu)); const char *buf = reinterpret_cast(pmt::blob_data(pmt::cdr(pdu))); + std::size_t len = pmt::blob_length(pmt::cdr(pdu)); std::size_t offset = 0; switch(d_link) { case WIFI: { + + // if crc is included ignore last 4 bytes + pmt::pmt_t dict = pmt::car(pdu); + pmt::pmt_t crc_inc = pmt::dict_ref(dict, pmt::mp("crc_included"), pmt::PMT_NIL); + if(pmt::is_bool(crc_inc) && pmt::is_true(crc_inc)) { + len -= 4; + } + // pcap header d_msg = reinterpret_cast(std::malloc( len + sizeof(radiotap_hdr) + sizeof(pcap_hdr))); @@ -77,7 +85,6 @@ wireshark_connector_impl::handle_pdu(pmt::pmt_t pdu) { // check if rate is attached uint8_t rate = 12; - pmt::pmt_t dict = pmt::car(pdu); pmt::pmt_t encoding = pmt::dict_ref(dict, pmt::mp("encoding"), pmt::PMT_NIL); if(pmt::is_uint64(encoding)) { rate = encoding_to_rate(pmt::to_uint64(encoding));