gsm0808: Introduce gsm0808_old_bss_to_new_bss_info_att_tlvdef

Introduce TLV attribute definition for "Old BSS to New BSS Information"
container.

Related: SYS#5337
Change-Id: I0e55e947b6fef6dad0cf1a6c16b781bef4cc76c5
diff --git a/TODO-RELEASE b/TODO-RELEASE
index 53401ec..ed04a14 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -8,4 +8,4 @@
 # If any interfaces have been removed or changed since the last public release: c:r:0.
 #library	what			description / commit summary line
 libosmovty	_LAST_OSMOVTY_NODE 	Raise _LAST_OSMOVTY_NODE by introducing some RESERVED*_NODE
-libosmogsm      gsm0808_old_bss_to_new_bss_info ABI break (struct changes size)
+libosmogsm      gsm0808_old_bss_to_new_bss_info ABI break (struct changes size), gsm0808_old_bss_to_new_bss_info_att_tlvdef symbol added
diff --git a/include/osmocom/gsm/gsm0808.h b/include/osmocom/gsm/gsm0808.h
index ecb9827..dc3610f 100644
--- a/include/osmocom/gsm/gsm0808.h
+++ b/include/osmocom/gsm/gsm0808.h
@@ -311,6 +311,7 @@
 void gsm0808_prepend_dtap_header(struct msgb *msg, uint8_t link_id);
 
 const struct tlv_definition *gsm0808_att_tlvdef(void);
+extern const struct tlv_definition gsm0808_old_bss_to_new_bss_info_att_tlvdef;
 
 /*! Parse BSSAP TLV structure using \ref tlv_parse */
 #define osmo_bssap_tlv_parse(dec, buf, len) tlv_parse(dec, gsm0808_att_tlvdef(), buf, len, 0, 0)
diff --git a/src/gsm/gsm0808.c b/src/gsm/gsm0808.c
index 578c7fa..3a39fd1 100644
--- a/src/gsm/gsm0808.c
+++ b/src/gsm/gsm0808.c
@@ -1576,6 +1576,32 @@
 	return &bss_att_tlvdef;
 }
 
+/* As per 3GPP TS 48.008 version 16.0.0 Release 16 § 3.2.2.58 Old BSS to New BSS Information  */
+const struct tlv_definition gsm0808_old_bss_to_new_bss_info_att_tlvdef = {
+	.def = {
+		[GSM0808_FE_IE_EXTRA_INFORMATION] 			= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_CURRENT_CHANNEL_TYPE_2]			= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_TARGET_CELL_RADIO_INFORMATION] 		= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_GPRS_SUSPEND_INFORMATION] 		= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_MULTIRATE_CONFIGURATION_INFORMATION] 	= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_DUAL_TRANSFER_MODE_INFORMATION] 		= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_INTER_RAT_HANDOVER_INFO] 		= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_CDMA2000_CAPABILITY_INFORMATION] 	= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_DOWNLINK_CELL_LOAD_INFORMATION] 		= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_UPLINK_CELL_LOAD_INFORMATION] 		= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_CELL_LOAD_INFORMATION_GROUP] 		= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_CELL_LOAD_INFORMATION] 			= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_PS_INDICATION] 				= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_DTM_HANDOVER_COMMAND_INDICATION] 	= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_D_RNTI] 					= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_IRAT_MEASUREMENT_CONFIGURATION] 		= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_SOURCE_CELL_ID] 				= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_IRAT_MEASUREMENT_CONFIGURATION_EXTENDED_E_ARFCNS] = { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_VGCS_TALKER_MODE] 			= { TLV_TYPE_TLV },
+		[GSM0808_FE_IE_LAST_USED_EUTRAN_PLMN_ID] 		= { TLV_TYPE_FIXED, 3 },
+	},
+};
+
 const struct value_string gsm0406_dlci_sapi_names[] = {
 	{ DLCI_SAPI_RR_MM_CC,	"RR/MM/CC" },
 	{ DLCI_SAPI_SMS,	"SMS" },
diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map
index 56a57b8..3fd01db 100644
--- a/src/gsm/libosmogsm.map
+++ b/src/gsm/libosmogsm.map
@@ -154,6 +154,7 @@
 gsm0503_mcs9;
 
 gsm0808_att_tlvdef;
+gsm0808_old_bss_to_new_bss_info_att_tlvdef;
 gsm0808_bssap_name;
 gsm0808_bssmap_name;
 gsm0808_cause_name;