From 23a195311a1adb8d314c2dc5f8372b2b76fbea2b Mon Sep 17 00:00:00 2001 From: Bastian Bloessl Date: Mon, 22 Aug 2016 15:31:47 +0200 Subject: [PATCH] fix buffer size allocation --- lib/decode_mac.cc | 15 ++++++++------- lib/mac.cc | 2 +- lib/utils.h | 7 ++++--- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/decode_mac.cc b/lib/decode_mac.cc index 448378e..f82332c 100644 --- a/lib/decode_mac.cc +++ b/lib/decode_mac.cc @@ -75,7 +75,7 @@ int general_work (int noutput_items, gr_vector_int& ninput_items, frame_param frame = frame_param(ofdm, len_data); // check for maximum frame size - if(frame.n_sym <= MAX_SYM && frame.psdu_size <= MAX_FRAME_SIZE) { + if(frame.n_sym <= MAX_SYM && frame.psdu_size <= MAX_PSDU_SIZE) { d_ofdm = ofdm; d_frame = frame; copied = 0; @@ -107,6 +107,7 @@ int general_work (int noutput_items, gr_vector_int& ninput_items, } consume(0, i); + return 0; } @@ -170,7 +171,7 @@ void deinterleave() { void descramble (uint8_t *decoded_bits) { int state = 0; - std::memset(out_bytes, 0, d_frame.n_data_bits/8 + 1); + std::memset(out_bytes, 0, d_frame.psdu_size+2); for(int i = 0; i < 7; i++) { if(decoded_bits[i]) { @@ -182,7 +183,7 @@ void descramble (uint8_t *decoded_bits) { int feedback; int bit; - for(int i = 7; i < d_frame.n_data_bits; i++) { + for(int i = 7; i < d_frame.psdu_size*8+16; i++) { feedback = ((!!(state & 64))) ^ (!!(state & 8)); bit = feedback ^ (decoded_bits[i] & 0x1); out_bytes[i/8] |= bit << (i%8); @@ -193,15 +194,15 @@ void descramble (uint8_t *decoded_bits) { void print_output() { dout << std::endl; - dout << "psdu size" << d_frame.n_data_bits / 8 << std::endl; - for(int i = 0; i < d_frame.psdu_size+2; i++) { + dout << "psdu size" << d_frame.psdu_size << std::endl; + for(int i = 2; i < d_frame.psdu_size+2; i++) { dout << std::setfill('0') << std::setw(2) << std::hex << ((unsigned int)out_bytes[i] & 0xFF) << std::dec << " "; if(i % 16 == 15) { dout << std::endl; } } dout << std::endl; - for(int i = 0; i < d_frame.n_data_bits / 8; i++) { + for(int i = 2; i < d_frame.psdu_size+2; i++) { if((out_bytes[i] > 31) && (out_bytes[i] < 127)) { dout << ((char) out_bytes[i]); } else { @@ -223,7 +224,7 @@ private: uint8_t d_rx_symbols[48 * MAX_SYM]; uint8_t d_rx_bits[MAX_ENCODED_BITS]; uint8_t d_deinterleaved_bits[MAX_ENCODED_BITS]; - uint8_t out_bytes[MAX_FRAME_SIZE]; + uint8_t out_bytes[MAX_PSDU_SIZE + 2]; // 2 for signal field int copied; bool d_frame_complete; diff --git a/lib/mac.cc b/lib/mac.cc index 4cea55a..2942de4 100644 --- a/lib/mac.cc +++ b/lib/mac.cc @@ -102,7 +102,7 @@ void app_in (pmt::pmt_t msg) { return; } - if(msg_len >= MAX_FRAME_SIZE - 32) { + if(msg_len > MAX_PAYLOAD_SIZE) { throw std::invalid_argument("Frame too large (> 1500)"); } diff --git a/lib/utils.h b/lib/utils.h index 2818d85..421946a 100644 --- a/lib/utils.h +++ b/lib/utils.h @@ -23,9 +23,10 @@ #include #include -#define MAX_FRAME_SIZE (1500 + 28 + 4) -#define MAX_SYM (((16 + 8 * MAX_FRAME_SIZE + 6) / 24) + 1) -#define MAX_ENCODED_BITS ((16 + 8 * MAX_FRAME_SIZE + 6) * 2 + 288) +#define MAX_PAYLOAD_SIZE 1500 +#define MAX_PSDU_SIZE (MAX_PAYLOAD_SIZE + 28) // MAC, CRC +#define MAX_SYM (((16 + 8 * MAX_PSDU_SIZE + 6) / 24) + 1) +#define MAX_ENCODED_BITS ((16 + 8 * MAX_PSDU_SIZE + 6) * 2 + 288) #define dout d_debug && std::cout