pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-pcu/+/30572 )

Change subject: Refactor code rejecting UL-TBF upon rx of PktResourceReq
......................................................................

Refactor code rejecting UL-TBF upon rx of PktResourceReq

* Make it similar to the already existing TBF allocation procedures
* Pass pdch pointer instead of trx and ts numbers

Change-Id: I04b3b65942732cc652adeaa507529b849292ff61
---
M src/gprs_ms.c
M src/gprs_ms.h
M src/pdch.cpp
M src/tbf_ul.cpp
M src/tbf_ul.h
M tests/tbf/TbfTest.cpp
6 files changed, 27 insertions(+), 12 deletions(-)

Approvals:
  laforge: Looks good to me, but someone else must approve
  fixeria: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/gprs_ms.c b/src/gprs_ms.c
index c9eaf97..073dd4a 100644
--- a/src/gprs_ms.c
+++ b/src/gprs_ms.c
@@ -1160,6 +1160,22 @@
        return ul_tbf;
 }

+/* Create a temporary dummy TBF to Tx a ImmAssReject if allocating a new one 
during
+ * packet resource Request failed. This is similar as ul_tbf_alloc() but 
without
+ * calling tbf->setup() (in charge of TFI/USF allocation), and reusing 
resources
+ * from Packet Resource Request we received. See TS 44.060 sec 7.1.3.2.1  */
+struct gprs_rlcmac_ul_tbf *ms_new_ul_tbf_rejected_pacch(struct GprsMs *ms, 
struct gprs_rlcmac_pdch *pdch)
+{
+       struct gprs_rlcmac_ul_tbf *ul_tbf;
+       ul_tbf = ul_tbf_alloc_rejected(ms->bts, ms, pdch);
+       if (!ul_tbf)
+               return NULL;
+       osmo_fsm_inst_dispatch(tbf_state_fi(ul_tbf_as_tbf(ul_tbf)), 
TBF_EV_ASSIGN_ADD_PACCH, NULL);
+       osmo_fsm_inst_dispatch(tbf_ul_ass_fi(ul_tbf_as_tbf(ul_tbf)), 
TBF_UL_ASS_EV_SCHED_ASS_REJ, NULL);
+
+       return ul_tbf;
+}
+
 /* A new DL-TBF is allocated and assigned through PACCH using "tbf".
  * "tbf" may be either a UL-TBF or a DL-TBF.
  * Note: This should be called only when MS is reachable, see 
ms_is_reachable_for_dl_ass().
diff --git a/src/gprs_ms.h b/src/gprs_ms.h
index 716ad74..92292e3 100644
--- a/src/gprs_ms.h
+++ b/src/gprs_ms.h
@@ -151,6 +151,7 @@

 struct gprs_rlcmac_ul_tbf *ms_new_ul_tbf_assigned_pacch(struct GprsMs *ms, 
int8_t use_trx);
 struct gprs_rlcmac_ul_tbf *ms_new_ul_tbf_assigned_agch(struct GprsMs *ms);
+struct gprs_rlcmac_ul_tbf *ms_new_ul_tbf_rejected_pacch(struct GprsMs *ms, 
struct gprs_rlcmac_pdch *pdch);
 int ms_new_dl_tbf_assigned_on_pacch(struct GprsMs *ms, struct gprs_rlcmac_tbf 
*tbf);
 int ms_new_dl_tbf_assigned_on_pch(struct GprsMs *ms);
 int ms_append_llc_dl_data(struct GprsMs *ms, uint16_t pdu_delay_csec, const 
uint8_t *data, uint16_t len);
diff --git a/src/pdch.cpp b/src/pdch.cpp
index 75afc88..5a683ff 100644
--- a/src/pdch.cpp
+++ b/src/pdch.cpp
@@ -825,7 +825,7 @@

        new_ul_tbf = ms_new_ul_tbf_assigned_pacch(ms, trx_no());
        if (!new_ul_tbf) {
-               handle_tbf_reject(bts, ms, trx_no(), ts_no);
+               ms_new_ul_tbf_rejected_pacch(ms, this);
                goto return_unref;
        }

diff --git a/src/tbf_ul.cpp b/src/tbf_ul.cpp
index 8333a2f..b04c511 100644
--- a/src/tbf_ul.cpp
+++ b/src/tbf_ul.cpp
@@ -151,11 +151,11 @@
  * packet resource Request failed. This is similar as tbf_alloc_ul() but 
without
  * calling tbf->setup() (in charge of TFI/USF allocation), and reusing 
resources
  * from Packet Resource Request we received. See TS 44.060 sec 7.1.3.2.1  */
-struct gprs_rlcmac_ul_tbf *handle_tbf_reject(struct gprs_rlcmac_bts *bts,
-                       GprsMs *ms, uint8_t trx_no, uint8_t ts)
+struct gprs_rlcmac_ul_tbf *ul_tbf_alloc_rejected(struct gprs_rlcmac_bts *bts, 
struct GprsMs *ms,
+                                                struct gprs_rlcmac_pdch *pdch)
 {
        struct gprs_rlcmac_ul_tbf *ul_tbf = NULL;
-       struct gprs_rlcmac_trx *trx = &bts->trx[trx_no];
+       struct gprs_rlcmac_trx *trx = pdch->trx;
        OSMO_ASSERT(ms);

        ul_tbf = talloc(tall_pcu_ctx, struct gprs_rlcmac_ul_tbf);
@@ -166,7 +166,7 @@

        ul_tbf->trx = trx;
        /* The only one TS is the common, control TS */
-       ms_set_first_common_ts(ms, ts);
+       ms_set_first_common_ts(ms, pdch->ts_no);
        tbf_assign_control_ts(ul_tbf);
        ul_tbf->m_ctrs = rate_ctr_group_alloc(ul_tbf, &tbf_ctrg_desc, 
next_tbf_ctr_group_id++);
        ul_tbf->m_ul_egprs_ctrs = rate_ctr_group_alloc(ul_tbf,
@@ -176,17 +176,15 @@
                                                      &tbf_ul_gprs_ctrg_desc,
                                                      ul_tbf->m_ctrs->idx);
        if (!ul_tbf->m_ctrs || !ul_tbf->m_ul_egprs_ctrs || 
!ul_tbf->m_ul_gprs_ctrs) {
-               LOGPTBF(ul_tbf, LOGL_ERROR, "Cound not allocate TBF UL rate 
counters\n");
+               LOGPTBF(ul_tbf, LOGL_ERROR, "Could not allocate TBF UL rate 
counters\n");
                talloc_free(ul_tbf);
                return NULL;
        }
        tbf_update_state_fsm_name(ul_tbf);

        ms_attach_tbf(ms, ul_tbf);
-       llist_add(tbf_trx_list((struct gprs_rlcmac_tbf *)ul_tbf), 
&trx->ul_tbfs);
+       llist_add(tbf_trx_list(ul_tbf), &trx->ul_tbfs);
        bts_do_rate_ctr_inc(ul_tbf->bts, CTR_TBF_UL_ALLOCATED);
-       osmo_fsm_inst_dispatch(ul_tbf->state_fi, TBF_EV_ASSIGN_ADD_PACCH, NULL);
-       osmo_fsm_inst_dispatch(ul_tbf->ul_ass_fsm.fi, 
TBF_UL_ASS_EV_SCHED_ASS_REJ, NULL);

        return ul_tbf;
 }
diff --git a/src/tbf_ul.h b/src/tbf_ul.h
index c5c55f7..aa54c8f 100644
--- a/src/tbf_ul.h
+++ b/src/tbf_ul.h
@@ -123,8 +123,6 @@
        return m_window.ws();
 }

-struct gprs_rlcmac_ul_tbf *handle_tbf_reject(struct gprs_rlcmac_bts *bts,
-       GprsMs *ms, uint8_t trx_no, uint8_t ts_no);

 #else /* ifdef __cplusplus */
 struct gprs_rlcmac_ul_tbf;
@@ -135,6 +133,8 @@
 extern "C" {
 #endif
 struct gprs_rlcmac_ul_tbf *ul_tbf_alloc(struct gprs_rlcmac_bts *bts, struct 
GprsMs *ms, int8_t use_trx, bool single_slot);
+struct gprs_rlcmac_ul_tbf *ul_tbf_alloc_rejected(struct gprs_rlcmac_bts *bts, 
struct GprsMs *ms,
+                                                struct gprs_rlcmac_pdch *pdch);
 void update_tbf_ta(struct gprs_rlcmac_ul_tbf *tbf, int8_t ta_delta);
 void set_tbf_ta(struct gprs_rlcmac_ul_tbf *tbf, uint8_t ta);
 struct gprs_rlcmac_ul_tbf *tbf_as_ul_tbf(struct gprs_rlcmac_tbf *tbf);
diff --git a/tests/tbf/TbfTest.cpp b/tests/tbf/TbfTest.cpp
index 314d2d9..80dfc2f 100644
--- a/tests/tbf/TbfTest.cpp
+++ b/tests/tbf/TbfTest.cpp
@@ -3240,7 +3240,7 @@

        ms = bts_alloc_ms(bts, 0, 0);
        ms_set_tlli(ms, tlli);
-       ul_tbf = handle_tbf_reject(bts, ms, trx_no, ts_no);
+       ul_tbf = ms_new_ul_tbf_rejected_pacch(ms, 
&bts->trx[trx_no].pdch[ts_no]);

        OSMO_ASSERT(ul_tbf != 0);


--
To view, visit https://gerrit.osmocom.org/c/osmo-pcu/+/30572
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-pcu
Gerrit-Branch: master
Gerrit-Change-Id: I04b3b65942732cc652adeaa507529b849292ff61
Gerrit-Change-Number: 30572
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to