diff options
-rw-r--r-- | include/osmocom/bsc/rest_octets.h | 1 | ||||
-rw-r--r-- | src/libbsc/rest_octets.c | 16 | ||||
-rw-r--r-- | src/libbsc/system_information.c | 5 | ||||
-rw-r--r-- | tests/gsm0408/gsm0408_test.ok | 2 |
4 files changed, 22 insertions, 2 deletions
diff --git a/include/osmocom/bsc/rest_octets.h b/include/osmocom/bsc/rest_octets.h index 876e0ab47..ba25b6d06 100644 --- a/include/osmocom/bsc/rest_octets.h +++ b/include/osmocom/bsc/rest_octets.h @@ -9,6 +9,7 @@ struct gsm_bts; /* generate SI1 rest octets */ int rest_octets_si1(uint8_t *data, uint8_t *nch_pos, int is1800_net); int rest_octets_si2quater(uint8_t *data, struct gsm_bts *bts); +int rest_octets_si2ter(uint8_t *data); int rest_octets_si6(uint8_t *data, bool is1800_net); struct gsm48_si_selection_params { diff --git a/src/libbsc/rest_octets.c b/src/libbsc/rest_octets.c index 7c6d7cd92..b8a29bac5 100644 --- a/src/libbsc/rest_octets.c +++ b/src/libbsc/rest_octets.c @@ -461,6 +461,22 @@ static void append_gprs_ind(struct bitvec *bv, bitvec_set_bit(bv, L); } +/* Generate SI2ter Rest Octests 3GPP TS 44.018 Table 10.5.2.33a.1 */ +int rest_octets_si2ter(uint8_t *data) +{ + struct bitvec bv; + + memset(&bv, 0, sizeof(bv)); + bv.data = data; + bv.data_len = 4; + + /* No SI2ter_MP_CHANGE_MARK */ + bitvec_set_bit(&bv, L); + + bitvec_spare_padding(&bv, (bv.data_len * 8) - 1); + + return bv.data_len; +} /* Generate SI3 Rest Octests (Chapter 10.5.2.34 / Table 10.4.72) */ int rest_octets_si3(uint8_t *data, const struct gsm48_si_ro_info *si3) diff --git a/src/libbsc/system_information.c b/src/libbsc/system_information.c index c1b0d49f6..4575454d4 100644 --- a/src/libbsc/system_information.c +++ b/src/libbsc/system_information.c @@ -764,7 +764,10 @@ static int generate_si2ter(enum osmo_sysinfo_type t, struct gsm_bts *bts) if (!n) bts->si_valid &= ~(1 << SYSINFO_TYPE_2ter); - return sizeof(*si2t); + /* SI2ter Rest Octets as per 3GPP TS 44.018 ยง10.5.2.33a */ + rc = rest_octets_si2ter(si2t->rest_octets); + + return sizeof(*si2t) + rc; } /* SI2quater messages are optional - we only generate them when neighbor UARFCNs or EARFCNs are configured */ diff --git a/tests/gsm0408/gsm0408_test.ok b/tests/gsm0408/gsm0408_test.ok index 889f0012b..868cd9bf7 100644 --- a/tests/gsm0408/gsm0408_test.ok +++ b/tests/gsm0408/gsm0408_test.ok @@ -204,7 +204,7 @@ generated valid SI2quater [05/05]: [23] 59 06 07 4a a0 04 86 59 84 26 53 97 65 6 Testing if BA-IND is set as expected in SI2xxx and SI5xxx SI2: 59 06 1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 SI2bis: 59 06 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -SI2ter: 59 06 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +SI2ter: 59 06 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2b 2b 2b 2b SI5: 06 1d 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 SI5bis: 06 05 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 SI5ter: 06 06 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |