Revert "RSL: receive and send multiple SI2q messages"
This reverts commit 340cff51f4
.
osmo-gsm-tester detected a regression due to this commit, when running
osmo-bts-trx. The modems timed out when waiting for them to register with the
osmo-bts-trx network. osmo-bts-sysmo is apparently not affected. No further
details on the failure cause are known yet. The failure is shown for example by
http://jenkins.osmocom.org/jenkins/view/osmo-gsm-tester/job/osmo-gsm-tester_run/868/
Change-Id: I15bca30ddc09a7a3044096626016f6130d07636c
This commit is contained in:
parent
1ba0cfe9c0
commit
61f9158eaf
|
@ -264,7 +264,7 @@ static int rsl_rx_bcch_info(struct gsm_bts_trx *trx, struct msgb *msg)
|
|||
{
|
||||
struct gsm_bts *bts = trx->bts;
|
||||
struct tlv_parsed tp;
|
||||
uint8_t rsl_si, count;
|
||||
uint8_t rsl_si, si2q_index, si2q_count;
|
||||
enum osmo_sysinfo_type osmo_si;
|
||||
struct gsm48_system_information_type_2quater *si2q;
|
||||
struct bitvec bv;
|
||||
|
@ -292,43 +292,36 @@ static int rsl_rx_bcch_info(struct gsm_bts_trx *trx, struct msgb *msg)
|
|||
len = sizeof(sysinfo_buf_t);
|
||||
}
|
||||
bts->si_valid |= (1 << osmo_si);
|
||||
memset(bts->si_buf[osmo_si], 0x2b, sizeof(sysinfo_buf_t));
|
||||
memcpy(bts->si_buf[osmo_si],
|
||||
TLVP_VAL(&tp, RSL_IE_FULL_BCCH_INFO), len);
|
||||
LOGP(DRSL, LOGL_INFO, " Rx RSL BCCH INFO (SI%s, %u bytes)\n",
|
||||
get_value_string(osmo_sitype_strs, osmo_si), len);
|
||||
|
||||
switch (osmo_si) {
|
||||
case SYSINFO_TYPE_2quater:
|
||||
si2q = (struct gsm48_system_information_type_2quater *) TLVP_VAL(&tp, RSL_IE_FULL_BCCH_INFO);
|
||||
if (SYSINFO_TYPE_3 == osmo_si && trx->nr == 0 &&
|
||||
num_agch(trx, "RSL") != 1) {
|
||||
lchan_deactivate(&trx->bts->c0->ts[0].lchan[CCCH_LCHAN]);
|
||||
/* will be reactivated by sapi_deactivate_cb() */
|
||||
trx->bts->c0->ts[0].lchan[CCCH_LCHAN].rel_act_kind =
|
||||
LCHAN_REL_ACT_REACT;
|
||||
}
|
||||
|
||||
if (SYSINFO_TYPE_2quater == osmo_si) {
|
||||
si2q = (struct gsm48_system_information_type_2quater *)
|
||||
bts->si_buf[SYSINFO_TYPE_2quater];
|
||||
bv.data = si2q->rest_octets;
|
||||
bv.data_len = GSM_MACBLOCK_LEN;
|
||||
bv.data_len = 20;
|
||||
bv.cur_bit = 3;
|
||||
bts->si2q_index = (uint8_t) bitvec_get_uint(&bv, 4);
|
||||
|
||||
count = (uint8_t) bitvec_get_uint(&bv, 4);
|
||||
if (bts->si2q_count && bts->si2q_count != count) {
|
||||
LOGP(DRSL, LOGL_ERROR, " Rx RSL SI2quater count changed while receiving: %u -> %d\n",
|
||||
bts->si2q_count, count);
|
||||
return rsl_tx_error_report(trx, RSL_ERR_IE_CONTENT);
|
||||
si2q_index = (uint8_t) bitvec_get_uint(&bv, 4);
|
||||
si2q_count = (uint8_t) bitvec_get_uint(&bv, 4);
|
||||
if (si2q_index || si2q_count) {
|
||||
LOGP(DRSL, LOGL_ERROR,
|
||||
" Rx RSL SI2quater witn unsupported "
|
||||
"index %u, count %u\n",
|
||||
si2q_index, si2q_count);
|
||||
return rsl_tx_error_report(trx,
|
||||
RSL_ERR_IE_CONTENT);
|
||||
}
|
||||
|
||||
bts->si2q_count = count;
|
||||
if (bts->si2q_index > bts->si2q_count) {
|
||||
LOGP(DRSL, LOGL_ERROR, " Rx RSL SI2quater witn index %u > count %u\n",
|
||||
bts->si2q_index, bts->si2q_count);
|
||||
return rsl_tx_error_report(trx, RSL_ERR_IE_CONTENT);
|
||||
}
|
||||
|
||||
memset(GSM_BTS_SI2Q(bts, bts->si2q_index), GSM_MACBLOCK_PADDING, sizeof(sysinfo_buf_t));
|
||||
memcpy(GSM_BTS_SI2Q(bts, bts->si2q_index), TLVP_VAL(&tp, RSL_IE_FULL_BCCH_INFO), len);
|
||||
break;
|
||||
case SYSINFO_TYPE_3:
|
||||
if (trx->nr == 0 && num_agch(trx, "RSL") != 1) {
|
||||
lchan_deactivate(&trx->bts->c0->ts[0].lchan[CCCH_LCHAN]);
|
||||
/* will be reactivated by sapi_deactivate_cb() */
|
||||
trx->bts->c0->ts[0].lchan[CCCH_LCHAN].rel_act_kind = LCHAN_REL_ACT_REACT;
|
||||
} /* intentional fall-through to copy SI3 data */
|
||||
default:
|
||||
memset(bts->si_buf[osmo_si], GSM_MACBLOCK_PADDING, sizeof(sysinfo_buf_t));
|
||||
memcpy(bts->si_buf[osmo_si], TLVP_VAL(&tp, RSL_IE_FULL_BCCH_INFO), len);
|
||||
LOGP(DRSL, LOGL_INFO, " Rx RSL BCCH INFO (SI%s, %u bytes)\n",
|
||||
get_value_string(osmo_sitype_strs, osmo_si), len);
|
||||
}
|
||||
} else if (TLVP_PRESENT(&tp, RSL_IE_L3_INFO)) {
|
||||
uint16_t len = TLVP_LEN(&tp, RSL_IE_L3_INFO);
|
||||
|
|
|
@ -25,16 +25,6 @@
|
|||
#include <osmo-bts/logging.h>
|
||||
#include <osmo-bts/gsm_data.h>
|
||||
|
||||
/* properly increment SI2q index and return SI2q data for scheduling */
|
||||
static inline uint8_t *get_si2q_inc_index(struct gsm_bts *bts)
|
||||
{
|
||||
uint8_t i = bts->si2q_index;
|
||||
/* si2q_count is the max si2q_index value, not the number of messages */
|
||||
bts->si2q_index = (bts->si2q_index + 1) % (bts->si2q_count + 1);
|
||||
|
||||
return (uint8_t *)GSM_BTS_SI2Q(bts, i);
|
||||
}
|
||||
|
||||
/* Apply the rules from 05.02 6.3.1.3 Mapping of BCCH Data */
|
||||
uint8_t *bts_sysinfo_get(struct gsm_bts *bts, const struct gsm_time *g_time)
|
||||
{
|
||||
|
@ -109,10 +99,6 @@ uint8_t *bts_sysinfo_get(struct gsm_bts *bts, const struct gsm_time *g_time)
|
|||
else {
|
||||
/* increment static counter by one, modulo count */
|
||||
btsb->si.tc4_ctr = (btsb->si.tc4_ctr + 1) % tc4_cnt;
|
||||
|
||||
if (tc4_sub[btsb->si.tc4_ctr] == SYSINFO_TYPE_2quater)
|
||||
return get_si2q_inc_index(bts);
|
||||
|
||||
return GSM_BTS_SI(bts, tc4_sub[btsb->si.tc4_ctr]);
|
||||
}
|
||||
case 5:
|
||||
|
@ -128,7 +114,7 @@ uint8_t *bts_sysinfo_get(struct gsm_bts *bts, const struct gsm_time *g_time)
|
|||
|
||||
else if (GSM_BTS_HAS_SI(bts, SYSINFO_TYPE_2quater) &&
|
||||
!GSM_BTS_HAS_SI(bts, SYSINFO_TYPE_2bis) && !GSM_BTS_HAS_SI(bts, SYSINFO_TYPE_2ter))
|
||||
return get_si2q_inc_index(bts);
|
||||
return GSM_BTS_SI(bts, SYSINFO_TYPE_2quater);
|
||||
break;
|
||||
case 6:
|
||||
return GSM_BTS_SI(bts, SYSINFO_TYPE_3);
|
||||
|
|
Loading…
Reference in New Issue