Add SI10 support

Add data structures and checks for System information Type 10.

Related: OS#5783
Change-Id: I3a5da543f083f31e873c67b5ec1b5a439187d8f3
diff --git a/include/osmocom/gsm/protocol/gsm_04_08.h b/include/osmocom/gsm/protocol/gsm_04_08.h
index ff9eb64..e494b58 100644
--- a/include/osmocom/gsm/protocol/gsm_04_08.h
+++ b/include/osmocom/gsm/protocol/gsm_04_08.h
@@ -1134,6 +1134,20 @@
 #endif
 } __attribute__ ((packed));
 
+/* Section 9.1.50 System Information type 10 (ASCI) */
+struct gsm48_system_information_type_10 {
+#if OSMO_IS_LITTLE_ENDIAN
+	uint8_t rr_short_pd:1,	/* < RR short PD : bit > See 3GPP TS 24.007 §11.3.2 */
+		msg_type:5,	/* < message type : bit(5) > See 3GPP TS 44.018 Table 10.4.2 */
+		l2_header:2;	/* < short layer 2 header : bit(2) > See 3GPP TS 44.006 §6.4a */
+	uint8_t rest_octets[0];	/* < SI10 Rest Octets : bit(160) > See 3GPP TS 44.018 §10.5.2.44 */
+#elif OSMO_IS_BIG_ENDIAN
+/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianess.py) */
+	uint8_t l2_header:2, msg_type:5, rr_short_pd:1;
+	uint8_t rest_octets[0];
+#endif
+} __attribute__ ((packed));
+
 /* Section 9.1.43a System Information type 13 */
 struct gsm48_system_information_type_13 {
 	struct gsm48_system_information_type_header header;
diff --git a/src/gsm/sysinfo.c b/src/gsm/sysinfo.c
index b615871..40e2652 100644
--- a/src/gsm/sysinfo.c
+++ b/src/gsm/sysinfo.c
@@ -46,7 +46,7 @@
 /* bs11 forgot the l2 len, 0-6 rest octets */
 osmo_static_assert(sizeof(struct gsm48_system_information_type_5) == 18, _si5_size);
 osmo_static_assert(sizeof(struct gsm48_system_information_type_6) == 11, _si6_size);
-
+osmo_static_assert(sizeof(struct gsm48_system_information_type_10) == 1, _si10_size);
 osmo_static_assert(sizeof(struct gsm48_system_information_type_13) == 3, _si13_size);
 
 static const uint8_t sitype2rsl[_MAX_SYSINFO_TYPE] = {