aboutsummaryrefslogtreecommitdiffstats
path: root/src/tbf.cpp
diff options
context:
space:
mode:
authoraravind sirsikar <arvind.sirsikar@radisys.com>2016-12-30 11:05:00 +0530
committeraravind sirsikar <arvind.sirsikar@radisys.com>2016-12-30 11:05:00 +0530
commitfcf2af400a83cfa80dc203aad0438b74fce25d91 (patch)
treeb128bfd82017ed61f04eb3ee8204a4a6cb259c5f /src/tbf.cpp
parentf595a4eadb340b225f2308fd1c33b8760958f365 (diff)
Handle packet access reject during packet resource request
When Packet resource request is received, PCU will generate the packet access reject if no resources are present. The encoding is done based on section 7.1.3.2.1 and 8.1.2.5 of 44.060 version 7.27.0 Release 7. This patch also includes the test case to validate the generated packet access reject message. This patch is integration tested on Osmo-trx setup with Ettus B210 board and LG F70 MS with some simulation code changes in Osmo-pcu. Change-Id: I05ff25124b58905586caa0c0c37023d69724f121
Diffstat (limited to 'src/tbf.cpp')
-rw-r--r--src/tbf.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/tbf.cpp b/src/tbf.cpp
index c4ff1b6..cbb7e30 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -1155,6 +1155,10 @@ struct msgb *gprs_rlcmac_tbf::create_packet_access_reject()
bitvec_free(packet_access_rej);
ul_ass_state = GPRS_RLCMAC_UL_ASS_NONE;
+ /* Start Tmr only if it is UL TBF */
+ if (direction == GPRS_RLCMAC_UL_TBF)
+ tbf_timer_start(this, 0, Treject_pacch);
+
return msg;
}
@@ -1384,3 +1388,37 @@ bool gprs_rlcmac_tbf::is_control_ts(uint8_t ts) const
{
return ts == control_ts;
}
+
+struct gprs_rlcmac_ul_tbf *handle_tbf_reject(struct gprs_rlcmac_bts *bts,
+ GprsMs *ms, uint32_t tlli, uint8_t trx_no, uint8_t ts)
+{
+ struct gprs_rlcmac_ul_tbf *ul_tbf = NULL;
+ struct gprs_rlcmac_trx *trx = &bts->trx[trx_no];
+
+ ul_tbf = talloc(tall_pcu_ctx, struct gprs_rlcmac_ul_tbf);
+ if (!ul_tbf)
+ return ul_tbf;
+
+ talloc_set_destructor(ul_tbf, ul_tbf_dtor);
+ new (ul_tbf) gprs_rlcmac_ul_tbf(bts->bts);
+ if (!ms)
+ ms = bts->bts->ms_alloc(0, 0);
+
+ ms->set_tlli(tlli);
+
+ llist_add(&ul_tbf->list(), &bts->bts->ul_tbfs());
+ ul_tbf->bts->tbf_ul_created();
+ ul_tbf->set_state(GPRS_RLCMAC_ASSIGN);
+ ul_tbf->state_flags |= (1 << GPRS_RLCMAC_FLAG_PACCH);
+
+ ul_tbf->set_ms(ms);
+ ul_tbf->update_ms(tlli, GPRS_RLCMAC_UL_TBF);
+ ul_tbf->ul_ass_state = GPRS_RLCMAC_UL_ASS_SEND_ASS_REJ;
+ ul_tbf->control_ts = ts;
+ ul_tbf->trx = trx;
+ ul_tbf->m_ctrs = rate_ctr_group_alloc(ul_tbf, &tbf_ctrg_desc, 0);
+ ul_tbf->m_ul_egprs_ctrs = rate_ctr_group_alloc(ul_tbf, &tbf_ul_egprs_ctrg_desc, 0);
+ ul_tbf->m_ul_gprs_ctrs = rate_ctr_group_alloc(ul_tbf, &tbf_ul_gprs_ctrg_desc, 0);
+
+ return ul_tbf;
+}