diff options
author | Max <msuraev@sysmocom.de> | 2017-06-26 11:07:38 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2017-06-26 18:56:08 +0200 |
commit | e711185809c8d195a65dcfa373994bc39188f1b6 (patch) | |
tree | 2bf7360dfd4a422b4de41b9f9737e11384ca3abc /src/common/sysinfo.c | |
parent | d0846651a3c2120a661212d07106584267f66475 (diff) |
RSL: receive and send multiple SI2q messagespespin/osmo-gsm-tester
* change BCCH Info handler to explicitly support multiple SI2quater
messages sent from BSC
* change SI scheduler to send SI2q in round-robin way
That's resubmission of 340cff51f49f6e798cb5fb6d1b9febdd09902906 and
186c6bac0758b6f94aa101e151664b0dea5d8975 with memory initialization
order change to fix the issue detected by osmo-gsm-tester - see OS#2338.
Change-Id: Ib595733cde108387bc7ee76b1b11ada6a235f13c
Related: OS#1660, OS#2338
Diffstat (limited to 'src/common/sysinfo.c')
-rw-r--r-- | src/common/sysinfo.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/common/sysinfo.c b/src/common/sysinfo.c index 7a536274..9276c7bb 100644 --- a/src/common/sysinfo.c +++ b/src/common/sysinfo.c @@ -25,6 +25,16 @@ #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) { @@ -99,6 +109,10 @@ 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: @@ -114,7 +128,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 GSM_BTS_SI(bts, SYSINFO_TYPE_2quater); + return get_si2q_inc_index(bts); break; case 6: return GSM_BTS_SI(bts, SYSINFO_TYPE_3); |