diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2016-06-08 15:27:40 +0200 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2016-10-18 14:48:36 +0200 |
commit | 4ea452689d545c455cf9c3ade87a3e2c86bf7771 (patch) | |
tree | 28bddf1294b0c1ad5a913eaf36d52379a4e1bb31 /src | |
parent | e4727a3591c4c4d769d890806b159ade9af3f6aa (diff) |
Revert "tbf: Add state WAIT_ASSIGN"
This reverts commit f1a7b8fc6651f92a8b7f3f27b7ca05d07f4e44e0.
Conflicts:
tests/tbf/TbfTest.err
The commit broke GPRS service at least for osmo-bts-sysmo on a SysmoBTS 1002
with current master of osmo-bts (ef30f50d5d6d5f863fc147d05ccdceb89284934e).
The error observed is the following log output (was viewing both osmo-bts-sysmo
and osmo-pcu logs interleaved):
<0002> tbf.cpp:874 TBF(TFI=0 TLLI=0x00000000 DIR=UL STATE=WAIT ASSIGN) T3169 timeout during transsmission
<0002> tbf.cpp:893 - Assignment was on CCCH
<0002> tbf.cpp:899 - No uplink data received yet
<0007> l1sap.c:904 RACH for packet access
<0001> pcu_l1_if.cpp:311 RACH request received: sapi=1 qta=0, ra=121, fn=13653
[repeat]
When removing this single commit from current osmo-pcu master, GPRS service
works well on SysmoBTS, with current osmo-bts master.
The TbfTest.err expected output needed adjustment after the revert.
Disclaimer: I am not aware of adverse effects this commit may have. I have no
idea what the WAIT_ASSIGN state is used for -- further review is required.
Change-Id: I1532f8e93194368cdc1e3846f82afa6d68cd5fbd
Diffstat (limited to 'src')
-rw-r--r-- | src/bts.cpp | 9 | ||||
-rw-r--r-- | src/tbf.cpp | 13 | ||||
-rw-r--r-- | src/tbf.h | 10 |
3 files changed, 9 insertions, 23 deletions
diff --git a/src/bts.cpp b/src/bts.cpp index 73ec1f7..35da307 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -558,11 +558,8 @@ int BTS::rcv_rach(uint16_t ra, uint32_t Fn, int16_t qta, uint8_t is_11bit, m_bts.trx[trx_no].arfcn, ts_no, tsc, usf, 0, sb_fn, m_bts.alpha, m_bts.gamma, -1, burst_type, sb); - if (plen >= 0) { + if (plen >= 0) pcu_l1if_tx_agch(immediate_assignment, plen); - if (tbf) - tbf->set_state(GPRS_RLCMAC_WAIT_ASSIGN); - } bitvec_free(immediate_assignment); @@ -687,10 +684,8 @@ void BTS::snd_dl_ass(gprs_rlcmac_tbf *tbf, uint8_t poll, const char *imsi) (tbf->pdch[ts]->last_rts_fn + 21216) % 2715648, tbf->ta(), tbf->trx->arfcn, ts, tbf->tsc(), 7, poll, tbf->poll_fn, m_bts.alpha, m_bts.gamma, -1); - if (plen >= 0) { + if (plen >= 0) pcu_l1if_tx_pch(immediate_assignment, plen, imsi); - tbf->set_state(GPRS_RLCMAC_WAIT_ASSIGN); - } bitvec_free(immediate_assignment); } diff --git a/src/tbf.cpp b/src/tbf.cpp index 48d89b9..0ac8ace 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -408,7 +408,6 @@ int tbf_assign_control_ts(struct gprs_rlcmac_tbf *tbf) const char *gprs_rlcmac_tbf::tbf_state_name[] = { "NULL", "ASSIGN", - "WAIT ASSIGN", "FLOW", "FINISHED", "WAIT RELEASE", @@ -827,12 +826,6 @@ void gprs_rlcmac_tbf::handle_timeout() if ((state_flags & (1 << GPRS_RLCMAC_FLAG_PACCH))) { if (state_is(GPRS_RLCMAC_ASSIGN)) { LOGP(DRLCMAC, LOGL_NOTICE, "%s releasing due to " - "PACCH assignment timeout (not yet sent).\n", - tbf_name(this)); - tbf_free(this); - return; - } else if (state_is(GPRS_RLCMAC_WAIT_ASSIGN)) { - LOGP(DRLCMAC, LOGL_NOTICE, "%s releasing due to " "PACCH assignment timeout.\n", tbf_name(this)); tbf_free(this); return; @@ -843,7 +836,7 @@ void gprs_rlcmac_tbf::handle_timeout() if ((state_flags & (1 << GPRS_RLCMAC_FLAG_CCCH))) { gprs_rlcmac_dl_tbf *dl_tbf = as_dl_tbf(this); dl_tbf->m_wait_confirm = 0; - if (dl_tbf->state_is(GPRS_RLCMAC_WAIT_ASSIGN)) { + if (dl_tbf->state_is(GPRS_RLCMAC_ASSIGN)) { tbf_assign_control_ts(dl_tbf); if (!dl_tbf->upgrade_to_multislot) { @@ -1004,8 +997,6 @@ struct msgb *gprs_rlcmac_tbf::create_dl_ass(uint32_t fn, uint8_t ts) if (poll_ass_dl) { set_polling(new_poll_fn, ts); - if (new_dl_tbf->state_is(GPRS_RLCMAC_ASSIGN)) - new_dl_tbf->set_state(GPRS_RLCMAC_WAIT_ASSIGN); dl_ass_state = GPRS_RLCMAC_DL_ASS_WAIT_ACK; LOGP(DRLCMACDL, LOGL_INFO, "%s Scheduled DL Assignment polling on FN=%d, TS=%d\n", @@ -1078,8 +1069,6 @@ struct msgb *gprs_rlcmac_tbf::create_ul_ass(uint32_t fn, uint8_t ts) set_polling(new_poll_fn, ts); ul_ass_state = GPRS_RLCMAC_UL_ASS_WAIT_ACK; - if (new_tbf->state_is(GPRS_RLCMAC_ASSIGN)) - new_tbf->set_state(GPRS_RLCMAC_WAIT_ASSIGN); LOGP(DRLCMACDL, LOGL_INFO, "%s Scheduled UL Assignment polling on FN=%d, TS=%d\n", name(), poll_fn, poll_ts); @@ -43,8 +43,7 @@ class GprsMs; enum gprs_rlcmac_tbf_state { GPRS_RLCMAC_NULL = 0, /* new created TBF */ - GPRS_RLCMAC_ASSIGN, /* wait for DL transmission */ - GPRS_RLCMAC_WAIT_ASSIGN,/* wait for confirmation */ + GPRS_RLCMAC_ASSIGN, /* wait for downlink assignment */ GPRS_RLCMAC_FLOW, /* RLC/MAC flow, resource needed */ GPRS_RLCMAC_FINISHED, /* flow finished, wait for release */ GPRS_RLCMAC_WAIT_RELEASE,/* wait for release or restart of DL TBF */ @@ -233,7 +232,7 @@ protected: gprs_llc_queue *llc_queue(); const gprs_llc_queue *llc_queue() const; - static const char *tbf_state_name[7]; + static const char *tbf_state_name[6]; class GprsMs *m_ms; @@ -318,7 +317,10 @@ inline bool gprs_rlcmac_tbf::is_tfi_assigned() const { /* The TBF is established or has been assigned by a IMM.ASS for * download */ - return state > GPRS_RLCMAC_ASSIGN; + return state > GPRS_RLCMAC_ASSIGN || + (direction == GPRS_RLCMAC_DL_TBF && + state == GPRS_RLCMAC_ASSIGN && + (state_flags & (1 << GPRS_RLCMAC_FLAG_CCCH))); } inline uint8_t gprs_rlcmac_tbf::tfi() const |