rlc: Do not raise_v_q in receive_bsn
Currently gprs_rlc_ul_window::receive_bsn calls raise_v_q and returns the number of RLC data blocks that can be taken from the queue. This does not fit the EGPRS feature to put 2 independant data blocks in a single RLC block. This commit removes raise_v_q from receive_bsn, hence it must be called explicitely to get the number of processable data blocks. Sponsored-by: On-Waves ehf
This commit is contained in:
parent
6167925147
commit
d87e1d6ab7
|
@ -220,10 +220,9 @@ uint16_t gprs_rlc_ul_window::raise_v_q()
|
|||
return count;
|
||||
}
|
||||
|
||||
uint16_t gprs_rlc_ul_window::receive_bsn(const uint16_t bsn)
|
||||
void gprs_rlc_ul_window::receive_bsn(const uint16_t bsn)
|
||||
{
|
||||
m_v_n.mark_received(bsn);
|
||||
raise_v_r(bsn);
|
||||
|
||||
return raise_v_q();
|
||||
}
|
||||
|
|
|
@ -202,7 +202,7 @@ struct gprs_rlc_ul_window {
|
|||
|
||||
void raise_v_q(int);
|
||||
|
||||
uint16_t receive_bsn(const uint16_t bsn);
|
||||
void receive_bsn(const uint16_t bsn);
|
||||
|
||||
uint16_t m_v_r; /* receive state */
|
||||
uint16_t m_v_q; /* receive window state */
|
||||
|
|
|
@ -332,7 +332,8 @@ int gprs_rlcmac_ul_tbf::rcv_data_block_acknowledged_gprs(const uint8_t *data,
|
|||
* the window is empty.*/
|
||||
const uint16_t v_q_beg = m_window.v_q();
|
||||
|
||||
const uint16_t count = m_window.receive_bsn(rh->bsn);
|
||||
m_window.receive_bsn(rh->bsn);
|
||||
const uint16_t count = m_window.raise_v_q();
|
||||
|
||||
/* Retrieve LLC frames from blocks that are ready */
|
||||
for (uint16_t i = 0; i < count; ++i) {
|
||||
|
|
|
@ -218,7 +218,8 @@ static void test_rlc_dl_ul_basic()
|
|||
|
||||
/* simulate to have received 0, 1 and 5 */
|
||||
OSMO_ASSERT(ul_win.is_in_window(0));
|
||||
count = ul_win.receive_bsn(0);
|
||||
ul_win.receive_bsn(0);
|
||||
count = ul_win.raise_v_q();
|
||||
OSMO_ASSERT(ul_win.m_v_n.is_received(0));
|
||||
OSMO_ASSERT(ul_win.v_q() == 1);
|
||||
OSMO_ASSERT(ul_win.v_r() == 1);
|
||||
|
@ -234,7 +235,8 @@ static void test_rlc_dl_ul_basic()
|
|||
OSMO_ASSERT_STR_EQ(win_rbb, rbb);
|
||||
|
||||
OSMO_ASSERT(ul_win.is_in_window(1));
|
||||
count = ul_win.receive_bsn(1);
|
||||
ul_win.receive_bsn(1);
|
||||
count = ul_win.raise_v_q();
|
||||
OSMO_ASSERT(ul_win.m_v_n.is_received(0));
|
||||
OSMO_ASSERT(ul_win.v_q() == 2);
|
||||
OSMO_ASSERT(ul_win.v_r() == 2);
|
||||
|
@ -250,7 +252,8 @@ static void test_rlc_dl_ul_basic()
|
|||
OSMO_ASSERT_STR_EQ(win_rbb, rbb);
|
||||
|
||||
OSMO_ASSERT(ul_win.is_in_window(5));
|
||||
count = ul_win.receive_bsn(5);
|
||||
ul_win.receive_bsn(5);
|
||||
count = ul_win.raise_v_q();
|
||||
OSMO_ASSERT(ul_win.m_v_n.is_received(0));
|
||||
OSMO_ASSERT(ul_win.v_q() == 2);
|
||||
OSMO_ASSERT(ul_win.v_r() == 6);
|
||||
|
@ -268,7 +271,8 @@ static void test_rlc_dl_ul_basic()
|
|||
OSMO_ASSERT(ul_win.is_in_window(65));
|
||||
OSMO_ASSERT(ul_win.is_in_window(2));
|
||||
OSMO_ASSERT(ul_win.m_v_n.is_received(5));
|
||||
count = ul_win.receive_bsn(65);
|
||||
ul_win.receive_bsn(65);
|
||||
count = ul_win.raise_v_q();
|
||||
OSMO_ASSERT(count == 0);
|
||||
OSMO_ASSERT(ul_win.m_v_n.is_received(5));
|
||||
OSMO_ASSERT(ul_win.v_q() == 2);
|
||||
|
@ -285,25 +289,29 @@ static void test_rlc_dl_ul_basic()
|
|||
|
||||
OSMO_ASSERT(ul_win.is_in_window(2));
|
||||
OSMO_ASSERT(!ul_win.is_in_window(66));
|
||||
count = ul_win.receive_bsn(2);
|
||||
ul_win.receive_bsn(2);
|
||||
count = ul_win.raise_v_q();
|
||||
OSMO_ASSERT(count == 1);
|
||||
OSMO_ASSERT(ul_win.v_q() == 3);
|
||||
OSMO_ASSERT(ul_win.v_r() == 66);
|
||||
|
||||
OSMO_ASSERT(ul_win.is_in_window(66));
|
||||
count = ul_win.receive_bsn(66);
|
||||
ul_win.receive_bsn(66);
|
||||
count = ul_win.raise_v_q();
|
||||
OSMO_ASSERT(count == 0);
|
||||
OSMO_ASSERT(ul_win.v_q() == 3);
|
||||
OSMO_ASSERT(ul_win.v_r() == 67);
|
||||
|
||||
for (int i = 3; i <= 67; ++i) {
|
||||
ul_win.receive_bsn(i);
|
||||
ul_win.raise_v_q();
|
||||
}
|
||||
|
||||
OSMO_ASSERT(ul_win.v_q() == 68);
|
||||
OSMO_ASSERT(ul_win.v_r() == 68);
|
||||
|
||||
count = ul_win.receive_bsn(68);
|
||||
ul_win.receive_bsn(68);
|
||||
count = ul_win.raise_v_q();
|
||||
OSMO_ASSERT(ul_win.v_q() == 69);
|
||||
OSMO_ASSERT(ul_win.v_r() == 69);
|
||||
OSMO_ASSERT(count == 1);
|
||||
|
@ -311,7 +319,8 @@ static void test_rlc_dl_ul_basic()
|
|||
/* now test the wrapping */
|
||||
OSMO_ASSERT(ul_win.is_in_window(4));
|
||||
OSMO_ASSERT(!ul_win.is_in_window(5));
|
||||
count = ul_win.receive_bsn(4);
|
||||
ul_win.receive_bsn(4);
|
||||
count = ul_win.raise_v_q();
|
||||
OSMO_ASSERT(count == 0);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue