aboutsummaryrefslogtreecommitdiffstats
path: root/src/tbf.cpp
diff options
context:
space:
mode:
authoraravind sirsikar <arvind.sirsikar@radisys.com>2017-01-24 12:36:08 +0530
committerHarald Welte <laforge@gnumonks.org>2017-01-24 13:11:51 +0000
commite9a138e11111f509f988807bbdc5ca8cce2b3d3d (patch)
tree5c957d735e22ffad0cdc65e842b39a9e6c61ad6f /src/tbf.cpp
parent1d8744ce967f038e4bede584845b8326d9f66c2a (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.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/tbf.cpp b/src/tbf.cpp
index 33d94a85..0d28c5c1 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -1174,6 +1174,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;
}
@@ -1403,3 +1407,39 @@ 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;
+}