aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/bsc/rest_octets.h1
-rw-r--r--src/libbsc/rest_octets.c16
-rw-r--r--src/libbsc/system_information.c5
-rw-r--r--tests/gsm0408/gsm0408_test.ok2
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