laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-bsc/+/39752?usp=email )
Change subject: E1 BTS: direct MGW to 8k subslots for TCH/H ......................................................................
E1 BTS: direct MGW to 8k subslots for TCH/H
If the design of an E1 BTS allocates a 16 kbit/s subslot on Abis for each GSM timeslot, then if that GSM ts is configured to operate as two TCH/H lchans instead of a single TCH/F lchan, that BTS has to use the 8 kbit/s TRAU frame format of GSM 08.61 and not the 16 kbit/s format for each TCH/H lchan. Nokia E1 BTS and their associated BSC and TCSM (TRAU) equipment are known to use this arrangement; the present author does not know of any GSM BSS vendor who used the 16 kbit/s format of GSM 08.61 - it might be a paper-only spec.
Prior to the present change OsmoBSC always selected a 16k subslot endpoint at the MGW, thus precluding possibility of working TCH/H on otherwise supported E1 BTS. Change it to select 8k subslot endpoints when operating on TCH/H lchans.
It may seem that this change breaks support for those E1 BTS that do use 16 kbit/s TRAU frame format for TCH/H, whatever they may be - but in reality, said support was already broken. Prior to the present change OsmoBSC would smoosh both TCH/H lchans of a given GSM ts onto the same MGW endpoint - which cannot work because they are two different lchans carrying unrelated traffic.
Change-Id: If6141a55434ce08f8fdd1c69b6fc9a97d6c726a7 --- M src/osmo-bsc/bsc_subscr_conn_fsm.c 1 file changed, 8 insertions(+), 3 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, but someone else must approve pespin: Looks good to me, approved
diff --git a/src/osmo-bsc/bsc_subscr_conn_fsm.c b/src/osmo-bsc/bsc_subscr_conn_fsm.c index f1f48bc..a2a1eb7 100644 --- a/src/osmo-bsc/bsc_subscr_conn_fsm.c +++ b/src/osmo-bsc/bsc_subscr_conn_fsm.c @@ -746,15 +746,20 @@ /* use dynamic RTPBRIDGE endpoint allocation in MGW */ epname = mgcp_client_rtpbridge_wildcard(mgcp_client); else { - uint8_t i460_bit_offs; + uint8_t i460_bit_offs, i460_rate = 16; if (for_lchan->ts->e1_link.e1_ts_ss == E1_SUBSLOT_FULL) i460_bit_offs = 0; else i460_bit_offs = for_lchan->ts->e1_link.e1_ts_ss * 2;
+ if (for_lchan->type == GSM_LCHAN_TCH_H) { + i460_rate = 8; + i460_bit_offs += for_lchan->nr; + } + epname = mgcp_client_e1_epname(conn, mgcp_client, for_lchan->ts->e1_link.e1_nr, - for_lchan->ts->e1_link.e1_ts, 16, - i460_bit_offs); + for_lchan->ts->e1_link.e1_ts, + i460_rate, i460_bit_offs); }
conn->user_plane.mgw_endpoint =