fixeria has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-bts/+/31670 )

Change subject: osmo-bts-{trx,virtual}: clean up bts_model_l1sap_down()
......................................................................

osmo-bts-{trx,virtual}: clean up bts_model_l1sap_down()

Having a common body for PRIM_INFO_{ACTIVATE,DEACTIVATE,MODIFY},
but then branching using if-statements is a bit confusing.

Change-Id: I915c8a541249249e3c0b1f2eda4535e7c52db79f
Related: OS#1572
---
M src/osmo-bts-trx/l1_if.c
M src/osmo-bts-virtual/l1_if.c
2 files changed, 128 insertions(+), 128 deletions(-)

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




diff --git a/src/osmo-bts-trx/l1_if.c b/src/osmo-bts-trx/l1_if.c
index ae4fe70..6e290ee 100644
--- a/src/osmo-bts-trx/l1_if.c
+++ b/src/osmo-bts-trx/l1_if.c
@@ -396,83 +396,80 @@
                /* put data into scheduler's queue */
                return trx_sched_tch_req(trx, l1sap);
        case OSMO_PRIM(PRIM_MPH_INFO, PRIM_OP_REQUEST):
+               if (l1sap->u.info.type == PRIM_INFO_ACT_CIPH)
+                       chan_nr = l1sap->u.info.u.ciph_req.chan_nr;
+               else /* u.act_req used by 
PRIM_INFO_{ACTIVATE,DEACTIVATE,MODIFY} */
+                       chan_nr = l1sap->u.info.u.act_req.chan_nr;
+               lchan = get_lchan_by_chan_nr(trx, chan_nr);
+
                switch (l1sap->u.info.type) {
                case PRIM_INFO_ACT_CIPH:
-                       chan_nr = l1sap->u.info.u.ciph_req.chan_nr;
-                       lchan = get_lchan_by_chan_nr(trx, chan_nr);
                        if (l1sap->u.info.u.ciph_req.uplink)
                                l1if_set_ciphering(lchan, chan_nr, 0);
                        if (l1sap->u.info.u.ciph_req.downlink)
                                l1if_set_ciphering(lchan, chan_nr, 1);
                        break;
                case PRIM_INFO_ACTIVATE:
-               case PRIM_INFO_DEACTIVATE:
+                       if ((chan_nr & 0xE0) == 0x80) {
+                               LOGPLCHAN(lchan, DL1C, LOGL_ERROR, "Cannot 
activate"
+                                         " channel %s\n", 
rsl_chan_nr_str(chan_nr));
+                               break;
+                       }
+
+                       /* attempt to allocate an Error Concealment Unit 
instance, if available */
+                       lchan->ecu_state = osmo_ecu_init(trx, 
lchan2ecu_codec(lchan));
+
+                       /* activate dedicated channel */
+                       trx_sched_set_lchan(lchan, chan_nr, LID_DEDIC, true);
+                       /* activate associated channel */
+                       trx_sched_set_lchan(lchan, chan_nr, LID_SACCH, true);
+                       /* set mode */
+                       trx_sched_set_mode(lchan->ts, chan_nr,
+                                          lchan->rsl_cmode, lchan->tch_mode,
+                                          lchan->tch.amr_mr.num_modes,
+                                          lchan->tch.amr_mr.mode[0].mode,
+                                          lchan->tch.amr_mr.mode[1].mode,
+                                          lchan->tch.amr_mr.mode[2].mode,
+                                          lchan->tch.amr_mr.mode[3].mode,
+                                          amr_get_initial_mode(lchan),
+                                          (lchan->ho.active == 1));
+                       /* set lchan active */
+                       lchan_set_state(lchan, LCHAN_S_ACTIVE);
+                       /* set initial ciphering */
+                       l1if_set_ciphering(lchan, chan_nr, 0);
+                       l1if_set_ciphering(lchan, chan_nr, 1);
+                       if (lchan->encr.alg_id)
+                               lchan->ciph_state = LCHAN_CIPH_RXTX_CONF;
+                       else
+                               lchan->ciph_state = LCHAN_CIPH_NONE;
+
+                       /* confirm */
+                       mph_info_chan_confirm(trx, chan_nr, PRIM_INFO_ACTIVATE, 
0);
+                       break;
                case PRIM_INFO_MODIFY:
-                       chan_nr = l1sap->u.info.u.act_req.chan_nr;
-                       lchan = get_lchan_by_chan_nr(trx, chan_nr);
-                       if (l1sap->u.info.type == PRIM_INFO_ACTIVATE) {
-                               if ((chan_nr & 0xE0) == 0x80) {
-                                       LOGPLCHAN(lchan, DL1C, LOGL_ERROR, 
"Cannot activate"
-                                                 " channel %s\n", 
rsl_chan_nr_str(chan_nr));
-                                       break;
-                               }
-
-                               /* attempt to allocate an Error Concealment 
Unit instance, if available */
-                               lchan->ecu_state = osmo_ecu_init(trx, 
lchan2ecu_codec(lchan));
-
-                               /* activate dedicated channel */
-                               trx_sched_set_lchan(lchan, chan_nr, LID_DEDIC, 
true);
-                               /* activate associated channel */
-                               trx_sched_set_lchan(lchan, chan_nr, LID_SACCH, 
true);
-                               /* set mode */
-                               trx_sched_set_mode(lchan->ts, chan_nr,
-                                       lchan->rsl_cmode, lchan->tch_mode,
-                                       lchan->tch.amr_mr.num_modes,
-                                       lchan->tch.amr_mr.mode[0].mode,
-                                       lchan->tch.amr_mr.mode[1].mode,
-                                       lchan->tch.amr_mr.mode[2].mode,
-                                       lchan->tch.amr_mr.mode[3].mode,
-                                       amr_get_initial_mode(lchan),
-                                       (lchan->ho.active == 1));
-                               /* set lchan active */
-                               lchan_set_state(lchan, LCHAN_S_ACTIVE);
-                               /* set initial ciphering */
-                               l1if_set_ciphering(lchan, chan_nr, 0);
-                               l1if_set_ciphering(lchan, chan_nr, 1);
-                               if (lchan->encr.alg_id)
-                                       lchan->ciph_state = 
LCHAN_CIPH_RXTX_CONF;
-                               else
-                                       lchan->ciph_state = LCHAN_CIPH_NONE;
-
-                               /* confirm */
-                               mph_info_chan_confirm(trx, chan_nr, 
PRIM_INFO_ACTIVATE, 0);
-                               break;
-                       }
-                       if (l1sap->u.info.type == PRIM_INFO_MODIFY) {
-                               /* ECU for possibly new codec */
-                               if (lchan->ecu_state)
-                                       osmo_ecu_destroy(lchan->ecu_state);
-                               lchan->ecu_state = osmo_ecu_init(trx, 
lchan2ecu_codec(lchan));
-                               /* change mode */
-                               trx_sched_set_mode(lchan->ts, chan_nr,
-                                       lchan->rsl_cmode, lchan->tch_mode,
-                                       lchan->tch.amr_mr.num_modes,
-                                       lchan->tch.amr_mr.mode[0].mode,
-                                       lchan->tch.amr_mr.mode[1].mode,
-                                       lchan->tch.amr_mr.mode[2].mode,
-                                       lchan->tch.amr_mr.mode[3].mode,
-                                       amr_get_initial_mode(lchan),
-                                       0);
-                               /* update ciphering params */
-                               l1if_set_ciphering(lchan, chan_nr, 0);
-                               l1if_set_ciphering(lchan, chan_nr, 1);
-                               if (lchan->encr.alg_id)
-                                       lchan->ciph_state = 
LCHAN_CIPH_RXTX_CONF;
-                               else
-                                       lchan->ciph_state = LCHAN_CIPH_NONE;
-                               break;
-                       }
-                       /* here, type == PRIM_INFO_DEACTIVATE */
+                       /* ECU for possibly new codec */
+                       if (lchan->ecu_state)
+                               osmo_ecu_destroy(lchan->ecu_state);
+                       lchan->ecu_state = osmo_ecu_init(trx, 
lchan2ecu_codec(lchan));
+                       /* change mode */
+                       trx_sched_set_mode(lchan->ts, chan_nr,
+                                          lchan->rsl_cmode, lchan->tch_mode,
+                                          lchan->tch.amr_mr.num_modes,
+                                          lchan->tch.amr_mr.mode[0].mode,
+                                          lchan->tch.amr_mr.mode[1].mode,
+                                          lchan->tch.amr_mr.mode[2].mode,
+                                          lchan->tch.amr_mr.mode[3].mode,
+                                          amr_get_initial_mode(lchan),
+                                          0);
+                       /* update ciphering params */
+                       l1if_set_ciphering(lchan, chan_nr, 0);
+                       l1if_set_ciphering(lchan, chan_nr, 1);
+                       if (lchan->encr.alg_id)
+                               lchan->ciph_state = LCHAN_CIPH_RXTX_CONF;
+                       else
+                               lchan->ciph_state = LCHAN_CIPH_NONE;
+                       break;
+               case PRIM_INFO_DEACTIVATE:
                        if ((chan_nr & 0xE0) == 0x80) {
                                LOGPLCHAN(lchan, DL1C, LOGL_ERROR, "Cannot 
deactivate"
                                          " channel %s\n", 
rsl_chan_nr_str(chan_nr));
diff --git a/src/osmo-bts-virtual/l1_if.c b/src/osmo-bts-virtual/l1_if.c
index da25554..e0536d3 100644
--- a/src/osmo-bts-virtual/l1_if.c
+++ b/src/osmo-bts-virtual/l1_if.c
@@ -336,7 +336,6 @@
 {
        struct msgb *msg = l1sap->oph.msg;
        uint8_t chan_nr;
-       uint8_t tn, ss;
        int rc = 0;
        struct gsm_lchan *lchan;

@@ -352,74 +351,65 @@
                /* put data into scheduler's queue */
                return trx_sched_tch_req(trx, l1sap);
        case OSMO_PRIM(PRIM_MPH_INFO, PRIM_OP_REQUEST):
+               if (l1sap->u.info.type == PRIM_INFO_ACT_CIPH)
+                       chan_nr = l1sap->u.info.u.ciph_req.chan_nr;
+               else /* u.act_req used by 
PRIM_INFO_{ACTIVATE,DEACTIVATE,MODIFY} */
+                       chan_nr = l1sap->u.info.u.act_req.chan_nr;
+               lchan = get_lchan_by_chan_nr(trx, chan_nr);
+
                switch (l1sap->u.info.type) {
                case PRIM_INFO_ACT_CIPH:
-                       chan_nr = l1sap->u.info.u.ciph_req.chan_nr;
-                       tn = L1SAP_CHAN2TS(chan_nr);
-                       ss = l1sap_chan2ss(chan_nr);
-                       lchan = &trx->ts[tn].lchan[ss];
                        if (l1sap->u.info.u.ciph_req.uplink)
                                l1if_set_ciphering(lchan, chan_nr, 0);
                        if (l1sap->u.info.u.ciph_req.downlink)
                                l1if_set_ciphering(lchan, chan_nr, 1);
                        break;
                case PRIM_INFO_ACTIVATE:
-               case PRIM_INFO_DEACTIVATE:
-               case PRIM_INFO_MODIFY:
-                       chan_nr = l1sap->u.info.u.act_req.chan_nr;
-                       tn = L1SAP_CHAN2TS(chan_nr);
-                       ss = l1sap_chan2ss(chan_nr);
-                       lchan = &trx->ts[tn].lchan[ss];
-                       /* we receive a channel activation request from the BSC,
-                        * e.g. as a response to a channel req on RACH */
-                       if (l1sap->u.info.type == PRIM_INFO_ACTIVATE) {
-                               if ((chan_nr & 0xE0) == 0x80) {
-                                       LOGPLCHAN(lchan, DL1C, LOGL_ERROR, 
"Cannot activate"
-                                                 " channel %s\n", 
rsl_chan_nr_str(chan_nr));
-                                       break;
-                               }
-                               /* activate dedicated channel */
-                               trx_sched_set_lchan(lchan, chan_nr, LID_DEDIC, 
true);
-                               /* activate associated channel */
-                               trx_sched_set_lchan(lchan, chan_nr, LID_SACCH, 
true);
-                               /* set mode */
-                               trx_sched_set_mode(lchan->ts, chan_nr,
-                                       lchan->rsl_cmode, lchan->tch_mode,
-                                       lchan->tch.amr_mr.num_modes,
-                                       lchan->tch.amr_mr.mode[0].mode,
-                                       lchan->tch.amr_mr.mode[1].mode,
-                                       lchan->tch.amr_mr.mode[2].mode,
-                                       lchan->tch.amr_mr.mode[3].mode,
-                                       amr_get_initial_mode(lchan),
-                                       (lchan->ho.active == 1));
-                               /* set lchan active */
-                               lchan_set_state(lchan, LCHAN_S_ACTIVE);
-                               /* set initial ciphering */
-                               l1if_set_ciphering(lchan, chan_nr, 0);
-                               l1if_set_ciphering(lchan, chan_nr, 1);
-                               if (lchan->encr.alg_id)
-                                       lchan->ciph_state = 
LCHAN_CIPH_RXTX_CONF;
-                               else
-                                       lchan->ciph_state = LCHAN_CIPH_NONE;
+                       if ((chan_nr & 0xE0) == 0x80) {
+                               LOGPLCHAN(lchan, DL1C, LOGL_ERROR, "Cannot 
activate"
+                                         " channel %s\n", 
rsl_chan_nr_str(chan_nr));
+                               break;
+                       }
+                       /* activate dedicated channel */
+                       trx_sched_set_lchan(lchan, chan_nr, LID_DEDIC, true);
+                       /* activate associated channel */
+                       trx_sched_set_lchan(lchan, chan_nr, LID_SACCH, true);
+                       /* set mode */
+                       trx_sched_set_mode(lchan->ts, chan_nr,
+                                          lchan->rsl_cmode, lchan->tch_mode,
+                                          lchan->tch.amr_mr.num_modes,
+                                          lchan->tch.amr_mr.mode[0].mode,
+                                          lchan->tch.amr_mr.mode[1].mode,
+                                          lchan->tch.amr_mr.mode[2].mode,
+                                          lchan->tch.amr_mr.mode[3].mode,
+                                          amr_get_initial_mode(lchan),
+                                          (lchan->ho.active == 1));
+                       /* set lchan active */
+                       lchan_set_state(lchan, LCHAN_S_ACTIVE);
+                       /* set initial ciphering */
+                       l1if_set_ciphering(lchan, chan_nr, 0);
+                       l1if_set_ciphering(lchan, chan_nr, 1);
+                       if (lchan->encr.alg_id)
+                               lchan->ciph_state = LCHAN_CIPH_RXTX_CONF;
+                       else
+                               lchan->ciph_state = LCHAN_CIPH_NONE;

-                               /* confirm */
-                               mph_info_chan_confirm(trx, chan_nr,
-                                       PRIM_INFO_ACTIVATE, 0);
-                               break;
-                       }
-                       if (l1sap->u.info.type == PRIM_INFO_MODIFY) {
-                               /* change mode */
-                               trx_sched_set_mode(lchan->ts, chan_nr,
-                                       lchan->rsl_cmode, lchan->tch_mode,
-                                       lchan->tch.amr_mr.num_modes,
-                                       lchan->tch.amr_mr.mode[0].mode,
-                                       lchan->tch.amr_mr.mode[1].mode,
-                                       lchan->tch.amr_mr.mode[2].mode,
-                                       lchan->tch.amr_mr.mode[3].mode,
-                                       amr_get_initial_mode(lchan),
-                                       0);
-                               break;
-                       }
+                       /* confirm */
+                       mph_info_chan_confirm(trx, chan_nr, PRIM_INFO_ACTIVATE, 
0);
+                       break;
+               case PRIM_INFO_MODIFY:
+                       /* change mode */
+                       trx_sched_set_mode(lchan->ts, chan_nr,
+                                          lchan->rsl_cmode, lchan->tch_mode,
+                                          lchan->tch.amr_mr.num_modes,
+                                          lchan->tch.amr_mr.mode[0].mode,
+                                          lchan->tch.amr_mr.mode[1].mode,
+                                          lchan->tch.amr_mr.mode[2].mode,
+                                          lchan->tch.amr_mr.mode[3].mode,
+                                          amr_get_initial_mode(lchan),
+                                          0);
+                       break;
+               case PRIM_INFO_DEACTIVATE:
                        if ((chan_nr & 0xE0) == 0x80) {
                                LOGPLCHAN(lchan, DL1C, LOGL_ERROR, "Cannot 
deactivate"
                                          " channel %s\n", 
rsl_chan_nr_str(chan_nr));

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

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I915c8a541249249e3c0b1f2eda4535e7c52db79f
Gerrit-Change-Number: 31670
Gerrit-PatchSet: 3
Gerrit-Owner: fixeria <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: neels <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to