jolly has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/33599 )
Change subject: ASCI: Add support for Group/Broadcast channel activation ......................................................................
ASCI: Add support for Group/Broadcast channel activation
"struct lchan_activate_info" is expanded to support flags for VGCS and VBS. These are used to send the correct Channel Mode to the BTS.
"enum lchan_activate_for" is expanded to indicate and activation of VGCS/VBS calls.
Change-Id: Ic0c0597d149d0758d6766937d99660fa02e0e139 Related: OS#4852 --- M include/osmocom/bsc/lchan.h M src/osmo-bsc/abis_rsl.c M src/osmo-bsc/gsm_data.c 3 files changed, 40 insertions(+), 5 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/99/33599/1
diff --git a/include/osmocom/bsc/lchan.h b/include/osmocom/bsc/lchan.h index 135a067..f46a3fd 100644 --- a/include/osmocom/bsc/lchan.h +++ b/include/osmocom/bsc/lchan.h @@ -101,6 +101,7 @@ ACTIVATE_FOR_MS_CHANNEL_REQUEST, ACTIVATE_FOR_ASSIGNMENT, ACTIVATE_FOR_HANDOVER, + ACTIVATE_FOR_VGCS_CHANNEL, ACTIVATE_FOR_VTY, ACTIVATE_FOR_MODE_MODIFY_RTP, }; @@ -140,6 +141,8 @@
bool vamos;
+ bool vgcs, vbs; + /* A copy of bts->imm_ass_time at the time where Channel Activation was requested. A change in the VTY * configuration has immediate effect on the value, so make sure we don't get mixed up when it gets changed * while a channel activation is in progress. */ diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c index 8abb675..f3ab8d6 100644 --- a/src/osmo-bsc/abis_rsl.c +++ b/src/osmo-bsc/abis_rsl.c @@ -405,7 +405,7 @@ static int channel_mode_from_lchan(struct rsl_ie_chan_mode *cm, struct gsm_lchan *lchan, const struct channel_mode_and_rate *ch_mode_rate, - bool vamos) + bool vamos, bool vgcs, bool vbs) { int rc; memset(cm, 0, sizeof(*cm)); @@ -429,10 +429,24 @@ cm->chan_rt = RSL_CMOD_CRT_SDCCH; break; case GSM_LCHAN_TCH_F: - cm->chan_rt = vamos ? RSL_CMOD_CRT_OSMO_TCH_VAMOS_Bm : RSL_CMOD_CRT_TCH_Bm; + if (vamos) + cm->chan_rt = RSL_CMOD_CRT_OSMO_TCH_VAMOS_Bm; + else if (vgcs) + cm->chan_rt = RSL_CMOD_CRT_TCH_GROUP_Bm; + else if (vbs) + cm->chan_rt = RSL_CMOD_CRT_TCH_BCAST_Bm; + else + cm->chan_rt = RSL_CMOD_CRT_TCH_Bm; break; case GSM_LCHAN_TCH_H: - cm->chan_rt = vamos ? RSL_CMOD_CRT_OSMO_TCH_VAMOS_Lm : RSL_CMOD_CRT_TCH_Lm; + if (vamos) + cm->chan_rt = RSL_CMOD_CRT_OSMO_TCH_VAMOS_Lm; + else if (vgcs) + cm->chan_rt = RSL_CMOD_CRT_TCH_GROUP_Lm; + else if (vbs) + cm->chan_rt = RSL_CMOD_CRT_TCH_BCAST_Lm; + else + cm->chan_rt = RSL_CMOD_CRT_TCH_Lm; break; case GSM_LCHAN_NONE: case GSM_LCHAN_UNKNOWN: @@ -574,7 +588,8 @@ /* PDCH activation is a job for rsl_tx_dyn_ts_pdch_act_deact(); */ OSMO_ASSERT(act_type != RSL_ACT_OSMO_PDCH);
- rc = channel_mode_from_lchan(&cm, lchan, &lchan->activate.ch_mode_rate, lchan->activate.info.vamos); + rc = channel_mode_from_lchan(&cm, lchan, &lchan->activate.ch_mode_rate, lchan->activate.info.vamos, + lchan->activate.info.vgcs, lchan->activate.info.vbs); if (rc < 0) { LOGP(DRSL, LOGL_ERROR, "%s Cannot find channel mode from lchan type\n", @@ -711,7 +726,7 @@ if (chan_nr < 0) return chan_nr;
- rc = channel_mode_from_lchan(&cm, lchan, &lchan->modify.ch_mode_rate, lchan->modify.info.vamos); + rc = channel_mode_from_lchan(&cm, lchan, &lchan->modify.ch_mode_rate, lchan->modify.info.vamos, false, false); if (rc < 0) return rc;
diff --git a/src/osmo-bsc/gsm_data.c b/src/osmo-bsc/gsm_data.c index 012149a..9a32e07 100644 --- a/src/osmo-bsc/gsm_data.c +++ b/src/osmo-bsc/gsm_data.c @@ -940,6 +940,7 @@ OSMO_VALUE_STRING(ACTIVATE_FOR_MS_CHANNEL_REQUEST), OSMO_VALUE_STRING(ACTIVATE_FOR_ASSIGNMENT), OSMO_VALUE_STRING(ACTIVATE_FOR_HANDOVER), + OSMO_VALUE_STRING(ACTIVATE_FOR_VGCS_CHANNEL), OSMO_VALUE_STRING(ACTIVATE_FOR_VTY), {} };