BSSMAP_Templates: Add VBS/VGCS related templates

As we want to test VBS/VGCS related aspects of BSC and/or MSC soon, we
will need related templates to construct and match related messages and
IEs.

This requires titan.ProtocolModules.BSSMAP updated for modern-day
VGCS/VBS related message definitions as I submitted in
https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.BSSMAP_v11.2.0/-/merge_requests/3

Change-Id: I949f731de794b22292b01d0ddf9a75a9e7e7e71d
diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn
index 02aad9f..c564cfd 100644
--- a/library/BSSMAP_Templates.ttcn
+++ b/library/BSSMAP_Templates.ttcn
@@ -2,7 +2,7 @@
 
 /* BSSMAP Templates, building on top of BSSAP_Types from Ericsson.
  *
- * (C) 2017-2019 by Harald Welte <laforge@gnumonks.org>
+ * (C) 2017-2023 by Harald Welte <laforge@gnumonks.org>
  * contributions by sysmocom - s.f.m.c. GmbH
  * All rights reserved.
  *
@@ -396,13 +396,13 @@
 }
 
 
-template BSSMAP_IE_Layer3Information ts_BSSMAP_IE_L3Info(octetstring l3info) := {
+template (value) BSSMAP_IE_Layer3Information ts_BSSMAP_IE_L3Info(template (value) octetstring l3info) := {
 	elementIdentifier := '17'O,
 	lengthIndicator := 0,
 	layer3info := l3info
 }
 
-template BSSMAP_IE_Layer3Information tr_BSSMAP_IE_L3Info(template octetstring l3info) := {
+template (present) BSSMAP_IE_Layer3Information tr_BSSMAP_IE_L3Info(template (present) octetstring l3info) := {
 	elementIdentifier := '17'O,
 	lengthIndicator := ?,
 	layer3info := l3info
@@ -653,6 +653,32 @@
 	codecElements := valueof(elem)
 }
 
+function ts_BSSMAP_IE_CallIdentifier(template (omit) OCT4 cid) return template (omit) BSSMAP_IE_CallIdentifier {
+	if (istemplatekind(cid, "omit")) {
+		return omit;
+	} else {
+		var template (present) BSSMAP_IE_CallIdentifier ie := {
+			elementIdentifier := '7F'O,
+			callIdentifierInfo := cid
+		}
+		return ie;
+	}
+}
+function tr_BSSMAP_IE_CallIdentifier(template OCT4 cid) return template BSSMAP_IE_CallIdentifier {
+	if (istemplatekind(cid, "*")) {
+		return *;
+	} else if (istemplatekind(cid, "omit")) {
+		return omit;
+	} else {
+		var template BSSMAP_IE_CallIdentifier ie := {
+			elementIdentifier := '7F'O,
+			callIdentifierInfo := cid
+		}
+		return ie;
+	}
+}
+
+
 template (present) BSSMAP_IE_Osmo_OsmuxCID tr_OsmuxCID(template (present) INT1 cid := ?) := {
 	elementIdentifier := 'F1'O,
 	osmuxCID := cid
@@ -1962,6 +1988,688 @@
 	rTC := '00'B /* Response Time is not specified */
 }
 
+
+/* 3.2.2.55 */
+template (value) BSSMAP_IE_GroupCallReference
+ts_BSSMAP_IE_GroupCallRef(template (value) GroupCallRef group_call_ref) :={
+	elementIdentifier := '37'O,
+	lengthIndicator := 0, // overwritten
+	descrGroupbroadcastCallRef := group_call_ref
+}
+template (present) BSSMAP_IE_GroupCallReference
+tr_BSSMAP_IE_GroupCallRef(template (present) GroupCallRef group_call_ref) :={
+	elementIdentifier := '37'O,
+	lengthIndicator := 0, // overwritten
+	descrGroupbroadcastCallRef := group_call_ref
+}
+
+/* 3.2.2.88 */
+template (value) BSSMAP_IE_VGCS_FeatureFlags
+ts_BSSMAP_IE_VGCS_FeatureFlags(BIT1 tp_ind, BIT2 as_ind, BIT1 bss_res, BIT1 tcp) := {
+	elementIdentifier := '69'O,
+	lengthIndicator := 0, // overwritten
+	TP_Ind := tp_ind,
+	AS_Ind := as_ind,
+	BSS_Res := bss_res,
+	tCP := tcp,
+	spare := '000'B
+};
+template (present) BSSMAP_IE_VGCS_FeatureFlags
+tr_BSSMAP_IE_VGCS_FeatureFlags(BIT1 tp_ind, BIT2 as_ind, BIT1 bss_res, BIT1 tcp) := {
+	elementIdentifier := '69'O,
+	lengthIndicator := ?,
+	TP_Ind := tp_ind,
+	AS_Ind := as_ind,
+	BSS_Res := bss_res,
+	tCP := tcp,
+	spare := ?
+};
+
+/* 3.2.2.98 */
+template (value) BSSMAP_IE_ApplicationData
+ts_BSSMAP_IE_ApplicationData(template (value) OCT9 adi) := {
+	elementIdentifier := '78'O,
+	lengthIndicator := 0, // overwritten
+	applicationDataInfo := adi
+};
+template (present) BSSMAP_IE_ApplicationData
+tr_BSSMAP_IE_ApplicationData(template (present) OCT9 adi) := {
+	elementIdentifier := '78'O,
+	lengthIndicator := ?,
+	applicationDataInfo := adi
+};
+
+/* 3.2.2.99 */
+template (value) BSSMAP_IE_DataIdentity
+ts_BSSMAP_IE_DataIdentity(template (value) DataIdentity data_id) := {
+	elementIdentifier := '79'O,
+	lengthIndicator := 0, // overwritten
+	dataIdentityInfo := data_id
+};
+template (present) BSSMAP_IE_DataIdentity
+tr_BSSMAP_IE_DataIdentity(template (present) DataIdentity data_id) := {
+	elementIdentifier := '79'O,
+	lengthIndicator := ?,
+	dataIdentityInfo := data_id
+};
+
+/* 3.2.2.52 */
+template (value) BSSMAP_IE_AssignmentRequirement
+ts_BSSMAP_IE_AssRequirement(template (value) OCT1 ass_rqm) := {
+	elementIdentifier := '33'O,
+	assignmentRequirement := ass_rqm
+}
+template (present) BSSMAP_IE_AssignmentRequirement
+tr_BSSMAP_IE_AssRequirement(template (present) OCT1 ass_rqm) := {
+	elementIdentifier := '33'O,
+	assignmentRequirement := ass_rqm
+}
+
+/* 3.2.2.89 */
+function ts_BSSMAP_IE_TalkerPriority(template (omit) BIT2 prio)
+return template (omit) BSSMAP_IE_TalkerPriority {
+	if (istemplatekind(prio, "omit")) {
+		return omit;
+	} else {
+		var template (present) BSSMAP_IE_TalkerPriority tp := {
+			elementIdentifier := '6A'O,
+			priority := prio,
+			spare := '000000'B
+		};
+		return tp;
+	}
+}
+function tr_BSSMAP_IE_TalkerPriority(template BIT2 prio)
+return template BSSMAP_IE_TalkerPriority {
+	if (istemplatekind(prio, "omit")) {
+		return omit;
+	} else if (istemplatekind(prio, "*")) {
+		return *;
+	} else {
+		var template BSSMAP_IE_TalkerPriority tp := {
+			elementIdentifier := '6A'O,
+			priority := prio,
+			spare := ?
+		}
+		return tp;
+	}
+}
+
+/* 3.2.2.90 */
+template (value) BSSMAP_IE_EmergencySetIndication
+ts_BSSMAP_IE_EmergencySetIndication := {
+	elementIdentifier := '6B'O
+}
+template (present) BSSMAP_IE_EmergencySetIndication
+tr_BSSMAP_IE_EmergencySetIndication := {
+	elementIdentifier := '6B'O
+}
+
+
+
+
+/* Section 3.2.1.50 */
+template (value) PDU_BSSAP
+ts_BSSMAP_VGCS_VBS_Setup(template (value) GroupCallRef group_call_ref,
+			 template (omit) BSSMAP_IE_VGCS_FeatureFlags feature_flags := omit)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSSetup := {
+				messageType := '04'O,
+				groupCallReference := ts_BSSMAP_IE_GroupCallRef(group_call_ref),
+				priority := omit,
+				vGCS_FeatureFlags := feature_flags
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_VGCS_VBS_Setup(template (present) GroupCallRef group_call_ref,
+			 template BSSMAP_IE_VGCS_FeatureFlags feature_flags := *)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSSetup := {
+				messageType := '04'O,
+				groupCallReference := tr_BSSMAP_IE_GroupCallRef(group_call_ref),
+				priority := *,
+				vGCS_FeatureFlags := feature_flags
+			}
+		}
+	}
+}
+
+/* Section 3.2.1.51 */
+template (value) PDU_BSSAP
+ts_BSSMAP_VGCS_VBS_SetupAck(template (omit) BSSMAP_IE_VGCS_FeatureFlags feature_flags := omit)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSSetupAck := {
+				messageType := '05'O,
+				vGCS_FeatureFlags := feature_flags
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_VGCS_VBS_SetupAck(template BSSMAP_IE_VGCS_FeatureFlags feature_flags := *)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSSetupAck := {
+				messageType := '05'O,
+				vGCS_FeatureFlags := feature_flags
+			}
+		}
+	}
+}
+
+/* Section 3.2.1.52 */
+template (value) PDU_BSSAP
+ts_BSSMAP_VGCS_VBS_SetupRefuse(BssmapCause cause)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSSetupRefuse := {
+				messageType := '06'O,
+				cause := ts_BSSMAP_IE_Cause(cause)
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_VGCS_VBS_SetupRefuse(template (present) myBSSMAP_Cause cause := ?)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSSetupRefuse := {
+				messageType := '06'O,
+				cause := tr_BSSMAP_IE_Cause(cause)
+			}
+		}
+	}
+}
+
+/* Section 3.2.1.53 */
+template (value) PDU_BSSAP
+ts_BSSMAP_VGCS_VBS_AssignmentReq(template (value) BSSMAP_IE_ChannelType ch_type,
+				 template (value) OCT1 ass_requirement,
+				 template (value) BSSMAP_IE_CellIdentifier cell_id,
+				 template (value) GroupCallRef group_call_ref,
+				 template (omit) BSSMAP_IE_CircuitIdentityCode cic := omit,
+				 template (omit) BSSMAP_IE_AoIP_TransportLayerAddress aoip := omit,
+				 template (omit) OCT4 call_id := omit)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSAssignmentRequest := {
+				messageType := '07'O,	/* overwritten */
+				channelType := ch_type,
+				assignmentRequirement := ts_BSSMAP_IE_AssRequirement(ass_requirement),
+				cellIdentifier := cell_id,
+				groupCallReference := ts_BSSMAP_IE_GroupCallRef(group_call_ref),
+				priority := omit,
+				circuitIdentityCode := cic,
+				downLinkDTX_Flag := omit,
+				encryptionInformation := omit,
+				vSTK_RAND := omit,
+				vSTK := omit,
+				cellIdentifierListSegment := omit,
+				aoIPTransportLayer := aoip,
+				callIdentifier := ts_BSSMAP_IE_CallIdentifier(call_id),
+				codecList := omit
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_VGCS_VBS_AssignmentReq(template (present) BSSMAP_IE_ChannelType ch_type,
+				 template (present) OCT1 ass_requirement,
+				 template (present) BSSMAP_IE_CellIdentifier cell_id,
+				 template (present) GroupCallRef group_call_ref,
+				 template BSSMAP_IE_CircuitIdentityCode cic := *,
+				 template BSSMAP_IE_AoIP_TransportLayerAddress aoip := ?,
+				 template OCT4 call_id := ?)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSAssignmentRequest := {
+				messageType := '07'O,	/* overwritten */
+				channelType := ch_type,
+				assignmentRequirement := tr_BSSMAP_IE_AssRequirement(ass_requirement),
+				cellIdentifier := cell_id,
+				groupCallReference := tr_BSSMAP_IE_GroupCallRef(group_call_ref),
+				priority := omit,
+				circuitIdentityCode := cic,
+				downLinkDTX_Flag := omit,
+				encryptionInformation := omit,
+				vSTK_RAND := omit,
+				vSTK := omit,
+				cellIdentifierListSegment := omit,
+				aoIPTransportLayer := aoip,
+				callIdentifier := tr_BSSMAP_IE_CallIdentifier(call_id),
+				codecList := omit
+			}
+		}
+	}
+}
+
+/* Section 3.2.1.54 */
+template (value) PDU_BSSAP
+ts_BSSMAP_VGCS_VBS_AssignmentRes(template (value) BSSMAP_IE_ChannelType ch_type,
+				 template (value) BSSMAP_IE_CellIdentifier cell_id,
+				 template (omit) BSSMAP_IE_ChosenChannel chosen_ch := omit,
+				 template (omit) BSSMAP_IE_CircuitIdentityCode cic := omit,
+				 template (omit) BSSMAP_IE_AoIP_TransportLayerAddress aoip := omit,
+				 template (omit) BSSMAP_IE_SpeechCodec speech_codec := omit,
+				 template (omit) OCT4 call_id := omit)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSAssignmentResult := {
+				messageType := '1C'O,	/* overwritten */
+				channelType := ch_type,
+				cellIdentifier := cell_id,
+				chosenChannel := chosen_ch,
+				circuitIdentityCode := cic,
+				circuitPool := omit,
+				aoIPTransportLayer := aoip,
+				speechCodec := speech_codec,
+				callIdentifier := ts_BSSMAP_IE_CallIdentifier(call_id)
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_VGCS_VBS_AssignmentRes(template (present) BSSMAP_IE_ChannelType ch_type,
+				 template (present) BSSMAP_IE_CellIdentifier cell_id,
+				 template BSSMAP_IE_ChosenChannel chosen_ch := *,
+				 template BSSMAP_IE_CircuitIdentityCode cic := omit,
+				 template BSSMAP_IE_AoIP_TransportLayerAddress aoip := ?,
+				 template BSSMAP_IE_SpeechCodec speech_codec := ?,
+				 template OCT4 call_id := ?)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSAssignmentResult := {
+				messageType := '1C'O,	/* overwritten */
+				channelType := ch_type,
+				cellIdentifier := cell_id,
+				chosenChannel := chosen_ch,
+				circuitIdentityCode := cic,
+				circuitPool := *,
+				aoIPTransportLayer := aoip,
+				speechCodec := speech_codec,
+				callIdentifier := tr_BSSMAP_IE_CallIdentifier(call_id)
+			}
+		}
+	}
+}
+
+/* Section 3.2.1.55 */
+template (value) PDU_BSSAP
+ts_BSSMAP_VGCS_VBS_AssignmentFail(BssmapCause cause)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSAssignmentFailure := {
+				messageType := '1D'O,	/* overwritten */
+				cause := ts_BSSMAP_IE_Cause(cause),
+				/* we only implement AoIP for now... */
+				circuitPool := omit,
+				circuitPoolList := omit
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_VGCS_VBS_AssignmentFail(template (present) myBSSMAP_Cause cause := ?)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSAssignmentFailure := {
+				messageType := '1D'O,	/* overwritten */
+				cause := tr_BSSMAP_IE_Cause(cause),
+				/* we only implement AoIP for now... */
+				circuitPool := omit,
+				circuitPoolList := omit
+			}
+		}
+	}
+}
+
+/* Section 3.2.1.56 */
+template (value) PDU_BSSAP
+ts_BSSMAP_VGCS_VBS_QueuingInd
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSQueuingIndication := {
+				messageType := '1E'O
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_VGCS_VBS_QueuingInd
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			vGCS_VBSQueuingIndication := {
+				messageType := '1E'O
+			}
+		}
+	}
+}
+
+/* Section 3.2.1.57 */
+template (value) PDU_BSSAP
+ts_BSSMAP_UplinkReq_L3(template (value) BIT2 priority,
+		       template (omit) BSSMAP_IE_CellIdentifier cell_id,
+		       template (value) octetstring l3_info)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkRequest := {
+				messageType := '1F'O,
+				talkerPriority := ts_BSSMAP_IE_TalkerPriority(priority),
+				cellIdentifier := cell_id,
+				layer3Information := ts_BSSMAP_IE_L3Info(l3_info),
+				mobileIdentity := omit
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_UplinkReq_L3(template (present) BIT2 priority,
+		       template BSSMAP_IE_CellIdentifier cell_id,
+		       template (present) octetstring l3_info)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkRequest := {
+				messageType := '1F'O,
+				talkerPriority := tr_BSSMAP_IE_TalkerPriority(priority),
+				cellIdentifier := cell_id,
+				layer3Information := tr_BSSMAP_IE_L3Info(l3_info),
+				mobileIdentity := omit
+			}
+		}
+	}
+}
+template (value) PDU_BSSAP
+ts_BSSMAP_UplinkReq_MI(template (omit) BIT2 priority,
+		       template (omit) BSSMAP_IE_CellIdentifier cell_id,
+		       template (value) BSSMAP_IE_MobileIdentity mobile_id)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkRequest := {
+				messageType := '1F'O,
+				talkerPriority := ts_BSSMAP_IE_TalkerPriority(priority),
+				cellIdentifier := cell_id,
+				layer3Information := omit,
+				mobileIdentity := mobile_id
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_UplinkReq_MI(template BIT2 priority,
+		       template (omit) BSSMAP_IE_CellIdentifier cell_id,
+		       template (present) BSSMAP_IE_MobileIdentity mobile_id)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkRequest := {
+				messageType := '1F'O,
+				talkerPriority := tr_BSSMAP_IE_TalkerPriority(priority),
+				cellIdentifier := cell_id,
+				layer3Information := omit,
+				mobileIdentity := mobile_id
+			}
+		}
+	}
+}
+
+/* 3.2.1.58 */
+template (value) PDU_BSSAP
+ts_BSSMAP_UplinkReqAck(template (omit) BIT2 priority,
+			template (omit) BSSMAP_IE_EmergencySetIndication ems := omit,
+			template (omit) BSSMAP_IE_TalkerIdentity talker_id := omit)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkRequestAck := {
+				messageType := '27'O,
+				talkerPriority := ts_BSSMAP_IE_TalkerPriority(priority),
+				emergencySetIndication := ems,
+				talkerIdentity := talker_id
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_UplinkReqAck(template BIT2 priority,
+			template BSSMAP_IE_EmergencySetIndication ems := *,
+			template BSSMAP_IE_TalkerIdentity talker_id := *)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkRequestAck := {
+				messageType := '27'O,
+				talkerPriority := tr_BSSMAP_IE_TalkerPriority(priority),
+				emergencySetIndication := ems,
+				talkerIdentity := talker_id
+			}
+		}
+	}
+}
+
+/* 3.2.1.59 */
+template (value) PDU_BSSAP
+ts_BSSMAP_UplinkReqConf(template (value) BSSMAP_IE_CellIdentifier cell_id,
+			template (omit) BSSMAP_IE_TalkerIdentity talker_id := omit,
+			template (value) octetstring l3_info)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkRequestConfirmation := {
+				messageType := '49'O,
+				cellIdentifier := cell_id,
+				talkerIdentity := talker_id,
+				layer3Information := ts_BSSMAP_IE_L3Info(l3_info)
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_UplinkReqConf(template (present) BSSMAP_IE_CellIdentifier cell_id,
+			template BSSMAP_IE_TalkerIdentity talker_id := *,
+			template (present) octetstring l3_info)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkRequestConfirmation := {
+				messageType := '49'O,
+				cellIdentifier := cell_id,
+				talkerIdentity := talker_id,
+				layer3Information := tr_BSSMAP_IE_L3Info(l3_info)
+			}
+		}
+	}
+}
+
+
+/* 3.2.1.60 */
+template (value) PDU_BSSAP
+ts_BSSMAP_UplinkRelInd(BssmapCause cause, template (omit) BIT2 prio)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkReleaseIndication := {
+				messageType := '4A'O,
+				cause := ts_BSSMAP_IE_Cause(cause),
+				talkerPriority := ts_BSSMAP_IE_TalkerPriority(prio)
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_UplinkRelInd(template (present) myBSSMAP_Cause cause, template BIT2 prio)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkReleaseIndication := {
+				messageType := '4A'O,
+				cause := tr_BSSMAP_IE_Cause(cause),
+				talkerPriority := tr_BSSMAP_IE_TalkerPriority(prio)
+			}
+		}
+	}
+}
+
+
+/* 3.2.1.61 */
+template (value) PDU_BSSAP
+ts_BSSMAP_UplinkRejCmd(BssmapCause cause,
+			template (omit) BIT2 cur_talker_prio := omit,
+			template (omit) BIT2 rej_talker_prio := omit,
+			template (omit) BSSMAP_IE_TalkerIdentity talker_id := omit)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkRejectCommand := {
+				messageType := '4B'O,
+				cause := ts_BSSMAP_IE_Cause(cause),
+				currentTalkerPriority := ts_BSSMAP_IE_TalkerPriority(cur_talker_prio),
+				rejectedTalkerPriority := ts_BSSMAP_IE_TalkerPriority(rej_talker_prio),
+				talkerIdentity := talker_id
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_UplinkRejCmd(template (present) myBSSMAP_Cause cause,
+			template BIT2 cur_talker_prio := *,
+			template BIT2 rej_talker_prio := *,
+			template BSSMAP_IE_TalkerIdentity talker_id := *)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkRejectCommand := {
+				messageType := '4B'O,
+				cause := tr_BSSMAP_IE_Cause(cause),
+				currentTalkerPriority := tr_BSSMAP_IE_TalkerPriority(cur_talker_prio),
+				rejectedTalkerPriority := tr_BSSMAP_IE_TalkerPriority(rej_talker_prio),
+				talkerIdentity := talker_id
+			}
+		}
+	}
+}
+
+
+/* 3.2.1.62 */
+template (value) PDU_BSSAP
+ts_BSSMAP_UplinkRelCmd(BssmapCause cause)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkReleaseCommand := {
+				messageType := '4C'O,
+				cause := ts_BSSMAP_IE_Cause(cause)
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_UplinkRelCmd(template (present) myBSSMAP_Cause cause)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkReleaseCommand := {
+				messageType := '4C'O,
+				cause := tr_BSSMAP_IE_Cause(cause)
+			}
+		}
+	}
+}
+
+
+/* 3.2.1.63 */
+template (value) PDU_BSSAP
+ts_BSSMAP_UplinkSeizedCmd(BssmapCause cause,
+			  template (omit) BIT2 talker_prio := omit,
+			  template (omit) BSSMAP_IE_EmergencySetIndication emerg := omit,
+			  template (omit) BSSMAP_IE_TalkerIdentity talker_id := omit)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkSeizedCommand := {
+				messageType := '4D'O,
+				cause := ts_BSSMAP_IE_Cause(cause),
+				talkerPriority := ts_BSSMAP_IE_TalkerPriority(talker_prio),
+				emergencySetIndication := emerg,
+				talkerIdentity := talker_id
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_UplinkSeizedCmd(template (present) myBSSMAP_Cause cause,
+			  template BIT2 talker_prio := *,
+			  template BSSMAP_IE_EmergencySetIndication emerg := *,
+			  template BSSMAP_IE_TalkerIdentity talker_id := *)
+modifies tr_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			uplinkSeizedCommand := {
+				messageType := '4D'O,
+				cause := tr_BSSMAP_IE_Cause(cause),
+				talkerPriority := tr_BSSMAP_IE_TalkerPriority(talker_prio),
+				emergencySetIndication := emerg,
+				talkerIdentity := talker_id
+			}
+		}
+	}
+}
+
+
+
+/* Section 3.2.1.82 */
+template (value) PDU_BSSAP
+ts_BSSMAP_NotificationData(template (value) OCT9 app_data, template (value) DataIdentity data_identity)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			notificationData := {
+				messageType := '62'O,
+				applicationData := ts_BSSMAP_IE_ApplicationData(app_data),
+				dataIdentity := ts_BSSMAP_IE_DataIdentity(data_identity),
+				mSISDN := omit
+			}
+		}
+	}
+}
+template (present) PDU_BSSAP
+tr_BSSMAP_NotificationData(template (present) OCT9 app_data, template (present) DataIdentity data_identity)
+modifies ts_BSSAP_BSSMAP := {
+	pdu := {
+		bssmap := {
+			notificationData := {
+				messageType := '62'O,
+				applicationData := tr_BSSMAP_IE_ApplicationData(app_data),
+				dataIdentity := tr_BSSMAP_IE_DataIdentity(data_identity),
+				mSISDN := ?
+			}
+		}
+	}
+}
+
+
+
 template (value) PDU_BSSAP
 ts_BSSMAP_Perform_Location_Request(template (omit) BSSMAP_IE_IMSI imsi,
 				   template (omit) BSSMAP_IE_CellIdentifier cellIdentifier := omit,