aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--library/Osmocom_Gb_Types.ttcn768
1 files changed, 383 insertions, 385 deletions
diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn
index 8d48cb10..2c82437e 100644
--- a/library/Osmocom_Gb_Types.ttcn
+++ b/library/Osmocom_Gb_Types.ttcn
@@ -929,41 +929,41 @@ octetstring sdu) := {
return ret;
}
-template (value) Tag ts_BSSGP_IE_Tag(OCT1 tag) := {
- iEI := '1E'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := 1
- },
- unstructured_Value := tag
-}
-
-template (present) Tag tr_BSSGP_IE_Tag(template (present) OCT1 tag) := {
- iEI := '1E'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := 1
- },
- unstructured_Value := tag
-}
-
-template (value) RA_Cap_UPD_CAUSE ts_BSSGP_IE_RACU_Cause(template (value) OCT1 cause) := {
- iEI := '1A'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := 1
- },
- rA_CAP_UPD_Cause_value := cause
-}
-
-template (present) RA_Cap_UPD_CAUSE tr_BSSGP_IE_RACU_Cause(template (present) OCT1 cause) := {
- iEI := '1A'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := 1
- },
- rA_CAP_UPD_Cause_value := cause
-}
+ template (value) Tag ts_BSSGP_IE_Tag(OCT1 tag) := {
+ iEI := '1E'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := 1
+ },
+ unstructured_Value := tag
+ }
+
+ template (present) Tag tr_BSSGP_IE_Tag(template (present) OCT1 tag) := {
+ iEI := '1E'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := 1
+ },
+ unstructured_Value := tag
+ }
+
+ template (value) RA_Cap_UPD_CAUSE ts_BSSGP_IE_RACU_Cause(template (value) OCT1 cause) := {
+ iEI := '1A'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := 1
+ },
+ rA_CAP_UPD_Cause_value := cause
+ }
+
+ template (present) RA_Cap_UPD_CAUSE tr_BSSGP_IE_RACU_Cause(template (present) OCT1 cause) := {
+ iEI := '1A'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := 1
+ },
+ rA_CAP_UPD_Cause_value := cause
+ }
template PDU_BSSGP ts_BVC_RESET(BssgpCause cause, BssgpBvci bvci,
@@ -1683,362 +1683,360 @@ template (present) RA_Cap_UPD_CAUSE tr_BSSGP_IE_RACU_Cause(template (present) OC
}
}
-/* 10.2.3 */
-template (value) PDU_BSSGP ts_BSSGP_RA_CAP(GprsTlli tlli,
- template (omit) MSRadioAccessCapabilityV_BSSGP racap := omit) := {
- pDU_BSSGP_RA_CAPABILITY := {
- bssgpPduType := '02'O,
- tLLI := ts_BSSGP_TLLI(tlli),
- mS_Radio_Access_Capability := ts_BSSGP_IE_MSRAcap_omit(racap)
- }
-}
-template (present) PDU_BSSGP tr_BSSGP_RA_CAP(template (present) GprsTlli tlli,
- template MSRadioAccessCapabilityV_BSSGP racap) := {
- pDU_BSSGP_RA_CAPABILITY := {
- bssgpPduType := '02'O,
- tLLI := ts_BSSGP_TLLI(tlli),
- mS_Radio_Access_Capability := tr_BSSGP_IE_MSRAcap(racap)
- }
-}
-
-
-/* 10.3.3 */
-template (value) PDU_BSSGP ts_BSSGP_RA_CAP_UPD(GprsTlli tlli, OCT1 tag) := {
- pDU_BSSGP_RA_CAPABILITY_UPDATE := {
- bssgpPduType := '08'O,
- tLLI := ts_BSSGP_TLLI(tlli),
- tag := ts_BSSGP_IE_Tag(tag)
- }
-}
-template (present) PDU_BSSGP tr_BSSGP_RA_CAP_UPD(template (present) GprsTlli tlli,
- template OCT1 tag) := {
- pDU_BSSGP_RA_CAPABILITY_UPDATE := {
- bssgpPduType := '08'O,
- tLLI := ts_BSSGP_TLLI(tlli),
- tag := tr_BSSGP_IE_Tag(tag)
- }
-}
-
-
-/* 10.3.4 */
-template (value) PDU_BSSGP
-ts_BSSGP_RA_CAP_UPD_ACK(GprsTlli tlli, OCT1 tag, template (value) OCT1 cause,
- template (omit) MSRadioAccessCapabilityV_BSSGP racap := omit) := {
- pDU_BSSGP_RA_CAPABILITY_UPDATE_ACK := {
- bssgpPduType := '09'O,
- tLLI := ts_BSSGP_TLLI(tlli),
- tag := ts_BSSGP_IE_Tag(tag),
- iMSI := omit,
- rA_Cap_UPDATE_CAUSE := ts_BSSGP_IE_RACU_Cause(cause),
- mS_Radio_Access_Capability := ts_BSSGP_IE_MSRAcap_omit(racap)
- }
-}
-template (present) PDU_BSSGP
-tr_BSSGP_RA_CAP_UPD_ACK(template (present) GprsTlli tlli, template OCT1 tag, template (present) OCT1 cause,
- template MSRadioAccessCapabilityV_BSSGP racap := omit) := {
- pDU_BSSGP_RA_CAPABILITY_UPDATE_ACK := {
- bssgpPduType := '09'O,
- tLLI := ts_BSSGP_TLLI(tlli),
- tag := tr_BSSGP_IE_Tag(tag),
- iMSI := omit,
- rA_Cap_UPDATE_CAUSE := tr_BSSGP_IE_RACU_Cause(cause),
- mS_Radio_Access_Capability := tr_BSSGP_IE_MSRAcap(racap)
- }
-}
-
-type enumerated BssgpRadioCause {
- BSSGP_RADIO_CAUSE_CONTACT_LOST ('00'H),
- BSSGP_RADIO_CAUSE_LINK_QUAL_INSUFF ('01'H),
- BSSGP_RADIO_CAUSE_CELL_RESEL_ORDERED ('02'H),
- BSSGP_RADIO_CAUSE_CELL_RESEL_PREPARE ('03'H),
- BSSGP_RADIO_CAUSE_CELL_RESEL_FAILURE ('04'H)
-} with { variant "FIELDLENGTH(8)" };
-
-
-function ts_BSSGP_RADIO_CAUSE(template (omit) BssgpRadioCause cause) return template (omit) Radio_Cause {
- var template (omit) Radio_Cause ret;
- if (istemplatekind(cause, "omit")) {
- ret := omit;
- } else {
+ /* 10.2.3 */
+ template (value) PDU_BSSGP ts_BSSGP_RA_CAP(GprsTlli tlli,
+ template (omit) MSRadioAccessCapabilityV_BSSGP racap := omit) := {
+ pDU_BSSGP_RA_CAPABILITY := {
+ bssgpPduType := '02'O,
+ tLLI := ts_BSSGP_TLLI(tlli),
+ mS_Radio_Access_Capability := ts_BSSGP_IE_MSRAcap_omit(racap)
+ }
+ }
+ template (present) PDU_BSSGP tr_BSSGP_RA_CAP(template (present) GprsTlli tlli,
+ template MSRadioAccessCapabilityV_BSSGP racap) := {
+ pDU_BSSGP_RA_CAPABILITY := {
+ bssgpPduType := '02'O,
+ tLLI := ts_BSSGP_TLLI(tlli),
+ mS_Radio_Access_Capability := tr_BSSGP_IE_MSRAcap(racap)
+ }
+ }
+
+
+ /* 10.3.3 */
+ template (value) PDU_BSSGP ts_BSSGP_RA_CAP_UPD(GprsTlli tlli, OCT1 tag) := {
+ pDU_BSSGP_RA_CAPABILITY_UPDATE := {
+ bssgpPduType := '08'O,
+ tLLI := ts_BSSGP_TLLI(tlli),
+ tag := ts_BSSGP_IE_Tag(tag)
+ }
+ }
+ template (present) PDU_BSSGP tr_BSSGP_RA_CAP_UPD(template (present) GprsTlli tlli,
+ template OCT1 tag) := {
+ pDU_BSSGP_RA_CAPABILITY_UPDATE := {
+ bssgpPduType := '08'O,
+ tLLI := ts_BSSGP_TLLI(tlli),
+ tag := tr_BSSGP_IE_Tag(tag)
+ }
+ }
+
+
+ /* 10.3.4 */
+ template (value) PDU_BSSGP
+ ts_BSSGP_RA_CAP_UPD_ACK(GprsTlli tlli, OCT1 tag, template (value) OCT1 cause,
+ template (omit) MSRadioAccessCapabilityV_BSSGP racap := omit) := {
+ pDU_BSSGP_RA_CAPABILITY_UPDATE_ACK := {
+ bssgpPduType := '09'O,
+ tLLI := ts_BSSGP_TLLI(tlli),
+ tag := ts_BSSGP_IE_Tag(tag),
+ iMSI := omit,
+ rA_Cap_UPDATE_CAUSE := ts_BSSGP_IE_RACU_Cause(cause),
+ mS_Radio_Access_Capability := ts_BSSGP_IE_MSRAcap_omit(racap)
+ }
+ }
+ template (present) PDU_BSSGP
+ tr_BSSGP_RA_CAP_UPD_ACK(template (present) GprsTlli tlli, template OCT1 tag, template (present) OCT1 cause,
+ template MSRadioAccessCapabilityV_BSSGP racap := omit) := {
+ pDU_BSSGP_RA_CAPABILITY_UPDATE_ACK := {
+ bssgpPduType := '09'O,
+ tLLI := ts_BSSGP_TLLI(tlli),
+ tag := tr_BSSGP_IE_Tag(tag),
+ iMSI := omit,
+ rA_Cap_UPDATE_CAUSE := tr_BSSGP_IE_RACU_Cause(cause),
+ mS_Radio_Access_Capability := tr_BSSGP_IE_MSRAcap(racap)
+ }
+ }
+
+ type enumerated BssgpRadioCause {
+ BSSGP_RADIO_CAUSE_CONTACT_LOST ('00'H),
+ BSSGP_RADIO_CAUSE_LINK_QUAL_INSUFF ('01'H),
+ BSSGP_RADIO_CAUSE_CELL_RESEL_ORDERED ('02'H),
+ BSSGP_RADIO_CAUSE_CELL_RESEL_PREPARE ('03'H),
+ BSSGP_RADIO_CAUSE_CELL_RESEL_FAILURE ('04'H)
+ } with { variant "FIELDLENGTH(8)" };
+
+
+ function ts_BSSGP_RADIO_CAUSE(template (omit) BssgpRadioCause cause) return template (omit) Radio_Cause {
+ var template (omit) Radio_Cause ret;
+ if (istemplatekind(cause, "omit")) {
+ ret := omit;
+ } else {
+ ret.iEI := '19'O;
+ ret.ext := '1'B;
+ ret.lengthIndicator := { length1 := 1 };
+ ret.radio_Cause_Value := int2oct(enum2int(valueof(cause)), 1);
+ }
+ return ret;
+ }
+ function tr_BSSGP_RADIO_CAUSE(template BssgpRadioCause cause) return template (present) Radio_Cause {
+ var template Radio_Cause ret;
ret.iEI := '19'O;
ret.ext := '1'B;
ret.lengthIndicator := { length1 := 1 };
- ret.radio_Cause_Value := int2oct(enum2int(valueof(cause)), 1);
- }
- return ret;
-}
-function tr_BSSGP_RADIO_CAUSE(template BssgpRadioCause cause) return template (present) Radio_Cause {
- var template Radio_Cause ret;
- ret.iEI := '19'O;
- ret.ext := '1'B;
- ret.lengthIndicator := { length1 := 1 };
- if (isvalue(cause)) {
- ret.radio_Cause_Value := int2oct(enum2int(valueof(cause)), 1);
- } else {
- ret.radio_Cause_Value := ?
- }
- return ret;
-}
-
-/* 10.3.5 */
-template (value) PDU_BSSGP
-ts_BSSGP_RADIO_STATUS(GprsTlli tlli, template (value) BssgpRadioCause cause) := {
- pDU_BSSGP_RADIO_STATUS := {
- bssgpPduType := '0a'O,
- tLLI := ts_BSSGP_TLLI(tlli),
- tMSI := omit,
- iMSI := omit,
- radio_Cause := ts_BSSGP_RADIO_CAUSE(cause)
- }
-}
-template (present) PDU_BSSGP
-tr_BSSGP_RADIO_STATUS(template (present) GprsTlli tlli, template (present) BssgpRadioCause cause) := {
- pDU_BSSGP_RADIO_STATUS := {
- bssgpPduType := '0a'O,
- tLLI := ts_BSSGP_TLLI(tlli),
- tMSI := omit,
- iMSI := omit,
- radio_Cause := tr_BSSGP_RADIO_CAUSE(cause)
- }
-}
-
-
-
-/* PDU permitted on PTP BVC only (TS 48.018 Section 5.4.1) */
-template (present) PDU_BSSGP tr_BSSGP_PERMITTED_PTP_ONLY := (
- {pDU_BSSGP_DL_UNITDATA := ?},
- {pDU_BSSGP_UL_UNITDATA := ?},
- {pDU_BSSGP_RA_CAPABILITY := ?},
- {pDU_BSSGP_RA_CAPABILITY_UPDATE := ?},
- {pDU_BSSGP_RA_CAPABILITY_UPDATE_ACK := ?},
- {pDU_BSSGP_RADIO_STATUS := ?},
- {pDU_BSSGP_FLOW_CONTROL_BVC := ?},
- {pDU_BSSGP_FLOW_CONTROL_BVC_ACK := ?},
- {pDU_BSSGP_FLOW_CONTROL_MS := ?},
- {pDU_BSSGP_FLOW_CONTROL_MS_ACK := ?},
- {pDU_BSSGP_FLOW_CONTROL_PFC := ?},
- {pDU_BSSGP_FLOW_CONTROL_PFC_ACK := ?},
- {pDU_BSSGP_DOWNLOAD_BSS_PFC := ?},
- {pDU_BSSGP_CREATE_BSS_PFC := ?},
- {pDU_BSSGP_CREATE_BSS_PFC_ACK := ?},
- {pDU_BSSGP_CREATE_BSS_PFC_NACK := ?},
- {pDU_BSSGP_MODIFY_BSS_PFC := ?},
- {pDU_BSSGP_MODIFY_BSS_PFC_ACK := ?},
- {pDU_BSSGP_DELETE_BSS_PFC := ?},
- {pDU_BSSGP_DELETE_BSS_PFC_ACK := ?},
- {pDU_BSSGP_DELETE_BSS_PFC_REQ := ?},
- {pDU_BSSGP_PS_HANDOVER_REQUIRED := ?},
- {pDU_BSSGP_PS_HANDOVER_REQUIRED_ACK := ?},
- {pDU_BSSGP_PS_HANDOVER_REQUIRED_NACK := ?},
- {pDU_BSSGP_PS_HANDOVER_REQUEST := ?},
- {pDU_BSSGP_PS_HANDOVER_REQUEST_ACK := ?},
- {pDU_BSSGP_PS_HANDOVER_REQUEST_NACK := ?},
- {pDU_BSSGP_PS_HANDOVER_COMPLETE := ?},
- {pDU_BSSGP_PS_HANDOVER_COMPLETE_ACK := ?},
- {pDU_BSSGP_PS_HANDOVER_CANCEL := ?}
-);
-
-template (present) PDU_BSSGP tr_BSSGP_PERMITTED_PTP := (
- tr_BSSGP_PERMITTED_PTP_ONLY,
- {pDU_BSSGP_PAGING_PS := ?},
- {pDU_BSSGP_PAGING_CS := ?},
- {pDU_BSSGP_STATUS := ?}
-);
-
-/* PDU permitted on Signaling BVC only (TS 48.018 Section 5.4.1) */
-template (present) PDU_BSSGP tr_BSSGP_PERMITTED_SIGN_ONLY := (
- {pDU_BSSGP_SUSPEND := ?},
- {pDU_BSSGP_SUSPEND_ACK := ?},
- {pDU_BSSGP_SUSPEND_NACK := ?},
- {pDU_BSSGP_RESUME := ?},
- {pDU_BSSGP_RESUME_ACK := ?},
- {pDU_BSSGP_RESUME_NACK := ?},
- {pDU_BSSGP_FLUSH_LL := ?},
- {pDU_BSSGP_FLUSH_LL_ACK := ?},
- {pDU_BSSGP_LLC_DISCARDED := ?},
- {pDU_BSSGP_BVC_BLOCK := ?},
- {pDU_BSSGP_BVC_BLOCK_ACK := ?},
- {pDU_BSSGP_BVC_UNBLOCK := ?},
- {pDU_BSSGP_BVC_UNBLOCK_ACK := ?},
- {pDU_BSSGP_BVC_RESET := ?},
- {pDU_BSSGP_BVC_RESET_ACK := ?},
- {pDU_BSSGP_SGSN_INVOKE_TRACE := ?},
- {pDU_BSSGP_PERFORM_LOCATION_REQUEST := ?},
- {pDU_BSSGP_PERFORM_LOCATION_RESPONSE := ?},
- {pDU_BSSGP_PERFORM_LOCATION_ABORT := ?},
- {pDU_BSSGP_POSITION_COMMAND := ?},
- {pDU_BSSGP_POSITION_RESPONSE := ?},
- {pDU_BSSGP_RAN_INFORMATION := ?},
- {pDU_BSSGP_RAN_INFORMATION_REQUEST := ?},
- {pDU_BSSGP_RAN_INFORMATION_ACK := ?},
- {pDU_BSSGP_RAN_INFORMATION_ERROR := ?},
- {pDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR := ?},
- {pDU_BSSGP_MBMS_SESSION_START_REQUEST := ?},
- {pDU_BSSGP_MBMS_SESSION_START_RESPONSE := ?},
- {pDU_BSSGP_MBMS_SESSION_STOP_REQUEST := ?},
- {pDU_BSSGP_MBMS_STOP_RESPONSE := ?},
- {pDU_BSSGP_SESSION_UPDATE_REQUEST := ?},
- {pDU_BSSGP_SESSION_UPDATE_RESPONSE := ?}
-);
-
-template (present) PDU_BSSGP tr_BSSGP_PERMITTED_SIGN := (
- tr_BSSGP_PERMITTED_SIGN_ONLY,
- {pDU_BSSGP_PAGING_PS := ?},
- {pDU_BSSGP_PAGING_CS := ?},
- {pDU_BSSGP_SUSPEND := ?},
- {pDU_BSSGP_STATUS := ?}
-);
-
-/* PDU permitted on PTM BVC only (TS 48.018 Section 5.4.1) */
-template (present) PDU_BSSGP tr_BSSGP_PERMITTED_PTM_ONLY := (
- {pDU_BSSGP_DL_MBMS_UNITDATA := ?},
- {pDU_BSSGP_UL_MBMS_UNITDATA := ?}
-);
-
-template (present) PDU_BSSGP tr_BSSGP_PERMITTED_PTM := (
- tr_BSSGP_PERMITTED_PTM_ONLY,
- {pDU_BSSGP_STATUS := ?}
-);
-
-
-/* Template for any PTP BVCI IE */
-template (present) BVCI tr_BSSGP_IE_PtpBvci := {
- iEI := '04'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := 2
- },
- unstructured_value := complement ('0000'O, '0001'O)
-}
-
-/* message on signaling PTP but containing a ptp BVC */
-/*
-template PDU_BSSGP tr_BSSGP_SIG_FOR_PTP(template Bvci bvci) := (
- {pDU_BSSGP_FLUSH_LL:{?,?,tr_BSSGP_IE_PtpBvci, *, *}},
- {pDU_BSSGP_FLUSH_LL_ACK:{?,?,?,tr_BSSGP_IE_PtpBvci, ?, *}},
- {pDU_BSSGP_LLC_DISCARDED:{?,?,?,tr_BSSGP_IE_PtpBvci, ?, *}},
- {pDU_BSSGP_BVC_BLOCK:{?,tr_BSSGP_IE_PtpBvci, ?}},
- {pDU_BSSGP_BVC_BLOCK_ACK:{?,tr_BSSGP_IE_PtpBvci}},
- {pDU_BSSGP_BVC_UNBLOCK:{?,tr_BSSGP_IE_PtpBvci}},
- {pDU_BSSGP_BVC_UNBLOCK_ACK:{?,tr_BSSGP_IE_PtpBvci}},
- {pDU_BSSGP_BVC_RESET:{?,tr_BSSGP_IE_PtpBvci,?,*,*,*}},
- {pDU_BSSGP_BVC_RESET_ACK:{?,tr_BSSGP_IE_PtpBvci,*,*,*}},
- {pDU_BSSGP_STATUS:{?,?,tr_BSSGP_IE_PtpBvci,*}},
- {pDU_BSSGP_PERFORM_LOCATION_REQUEST:{?,?,?,*,tr_BSSGP_IE_PtpBvci,?,?,?,*,*,*,*,*,*,*,*,*}},
- {pDU_BSSGP_PERFORM_LOCATION_RESPONSE:{?,?,tr_BSSGP_IE_PtpBvci,*,*,*,*,*,*}},
- {pDU_BSSGP_PERFORM_LOCATION_ABORT:{?,?,tr_BSSGP_IE_PtpBvci,?}},
- {pDU_BSSGP_POSITION_COMMAND:{
-);
-*/
-
-/* extract the BVCI IE of given PDU + return it */
-function f_BSSGP_BVCI_IE_get(PDU_BSSGP pdu) return template (omit) BVCI {
- select (pdu) {
- case (PDU_BSSGP:{pDU_BSSGP_FLUSH_LL:=?}) {
- return pdu.pDU_BSSGP_FLUSH_LL.bVCI_old;
- }
- case (PDU_BSSGP:{pDU_BSSGP_FLUSH_LL_ACK:=?}) {
- return pdu.pDU_BSSGP_FLUSH_LL_ACK.bVCI_new;
- }
- case (PDU_BSSGP:{pDU_BSSGP_LLC_DISCARDED:=?}) {
- return pdu.pDU_BSSGP_LLC_DISCARDED.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_BVC_BLOCK:=?}) {
- return pdu.pDU_BSSGP_BVC_BLOCK.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_BVC_BLOCK_ACK:=?}) {
- return pdu.pDU_BSSGP_BVC_BLOCK_ACK.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_BVC_UNBLOCK:=?}) {
- return pdu.pDU_BSSGP_BVC_UNBLOCK.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_BVC_UNBLOCK_ACK:=?}) {
- return pdu.pDU_BSSGP_BVC_UNBLOCK_ACK.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_BVC_RESET:=?}) {
- return pdu.pDU_BSSGP_BVC_RESET.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_BVC_RESET_ACK:=?}) {
- return pdu.pDU_BSSGP_BVC_RESET_ACK.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_STATUS:=?}) {
- return pdu.pDU_BSSGP_STATUS.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_PERFORM_LOCATION_REQUEST:=?}) {
- return pdu.pDU_BSSGP_PERFORM_LOCATION_REQUEST.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_PERFORM_LOCATION_RESPONSE:=?}) {
- return pdu.pDU_BSSGP_PERFORM_LOCATION_RESPONSE.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_PERFORM_LOCATION_ABORT:=?}) {
- return pdu.pDU_BSSGP_PERFORM_LOCATION_ABORT.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_POSITION_COMMAND:=?}) {
- return pdu.pDU_BSSGP_POSITION_COMMAND.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_POSITION_RESPONSE:=?}) {
- return pdu.pDU_BSSGP_POSITION_RESPONSE.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_PAGING_PS:={?,?,*,{bVCI:=?},*,*,?,*,*}}) {
- return pdu.pDU_BSSGP_PAGING_PS.paging_Field4.bVCI;
- }
- case (PDU_BSSGP:{pDU_BSSGP_PAGING_CS:={?,?,?,{bVCI:=?},*,*,*,*,*}}) {
- return pdu.pDU_BSSGP_PAGING_CS.paging_Field4.bVCI;
- }
- case else {
- return omit;
- }
- }
-}
-
-/* extract the BVCI IE of given PDU + convert it to integer value */
-function f_BSSGP_BVCI_get(PDU_BSSGP pdu) return template (omit) BssgpBvci {
- var template (omit) BVCI bvci_raw := f_BSSGP_BVCI_IE_get(pdu);
- if (istemplatekind(bvci_raw, "omit")) {
- return omit;
- }
- return oct2int(valueof(bvci_raw.unstructured_value));
-}
-
-/* 3GPP TS 23.003 2.6 */
-type enumerated TlliType {
- TLLI_LOCAL,
- TLLI_FOREIGN,
- TLLI_RANDOM,
- TLLI_AUXILIARY,
- TLLI_RESERVED,
- TLLI_G_RNTI,
- TLLI_RAND_G_RNTI
-}
-
-/* 3GPP TS 23.003 2.6 */
-function f_gprs_tlli_type(OCT4 tlli) return TlliType {
- var bitstring tllib := oct2bit(tlli);
- if (substr(tllib, 0, 2) == '11'B) {
- return TLLI_LOCAL;
- } else if (substr(tllib, 0, 2) == '10'B) {
- return TLLI_FOREIGN;
- } else if (substr(tllib, 0, 5) == '01111'B) {
- return TLLI_RANDOM;
- } else if (substr(tllib, 0, 4) == '0110'B) {
- return TLLI_RESERVED;
- } else if (substr(tllib, 0, 3) == '010'B) {
- return TLLI_RESERVED;
- } else if (substr(tllib, 0, 4) == '0000'B) {
- return TLLI_G_RNTI;
- } else if (substr(tllib, 0, 4) == '0001'B) {
- return TLLI_RAND_G_RNTI;
- } else {
- setverdict(fail, "Unknonw TLLI Type ", tllib);
- mtc.stop;
+ if (isvalue(cause)) {
+ ret.radio_Cause_Value := int2oct(enum2int(valueof(cause)), 1);
+ } else {
+ ret.radio_Cause_Value := ?
+ }
+ return ret;
}
-}
-function f_gprs_tlli_random() return OCT4 {
- var OCT4 tlli := f_rnd_octstring(4);
- return tlli or4b 'c0000000'O;
-}
+ /* 10.3.5 */
+ template (value) PDU_BSSGP
+ ts_BSSGP_RADIO_STATUS(GprsTlli tlli, template (value) BssgpRadioCause cause) := {
+ pDU_BSSGP_RADIO_STATUS := {
+ bssgpPduType := '0a'O,
+ tLLI := ts_BSSGP_TLLI(tlli),
+ tMSI := omit,
+ iMSI := omit,
+ radio_Cause := ts_BSSGP_RADIO_CAUSE(cause)
+ }
+ }
+ template (present) PDU_BSSGP
+ tr_BSSGP_RADIO_STATUS(template (present) GprsTlli tlli, template (present) BssgpRadioCause cause) := {
+ pDU_BSSGP_RADIO_STATUS := {
+ bssgpPduType := '0a'O,
+ tLLI := ts_BSSGP_TLLI(tlli),
+ tMSI := omit,
+ iMSI := omit,
+ radio_Cause := tr_BSSGP_RADIO_CAUSE(cause)
+ }
+ }
+
+
+
+ /* PDU permitted on PTP BVC only (TS 48.018 Section 5.4.1) */
+ template (present) PDU_BSSGP tr_BSSGP_PERMITTED_PTP_ONLY := (
+ {pDU_BSSGP_DL_UNITDATA := ?},
+ {pDU_BSSGP_UL_UNITDATA := ?},
+ {pDU_BSSGP_RA_CAPABILITY := ?},
+ {pDU_BSSGP_RA_CAPABILITY_UPDATE := ?},
+ {pDU_BSSGP_RA_CAPABILITY_UPDATE_ACK := ?},
+ {pDU_BSSGP_RADIO_STATUS := ?},
+ {pDU_BSSGP_FLOW_CONTROL_BVC := ?},
+ {pDU_BSSGP_FLOW_CONTROL_BVC_ACK := ?},
+ {pDU_BSSGP_FLOW_CONTROL_MS := ?},
+ {pDU_BSSGP_FLOW_CONTROL_MS_ACK := ?},
+ {pDU_BSSGP_FLOW_CONTROL_PFC := ?},
+ {pDU_BSSGP_FLOW_CONTROL_PFC_ACK := ?},
+ {pDU_BSSGP_DOWNLOAD_BSS_PFC := ?},
+ {pDU_BSSGP_CREATE_BSS_PFC := ?},
+ {pDU_BSSGP_CREATE_BSS_PFC_ACK := ?},
+ {pDU_BSSGP_CREATE_BSS_PFC_NACK := ?},
+ {pDU_BSSGP_MODIFY_BSS_PFC := ?},
+ {pDU_BSSGP_MODIFY_BSS_PFC_ACK := ?},
+ {pDU_BSSGP_DELETE_BSS_PFC := ?},
+ {pDU_BSSGP_DELETE_BSS_PFC_ACK := ?},
+ {pDU_BSSGP_DELETE_BSS_PFC_REQ := ?},
+ {pDU_BSSGP_PS_HANDOVER_REQUIRED := ?},
+ {pDU_BSSGP_PS_HANDOVER_REQUIRED_ACK := ?},
+ {pDU_BSSGP_PS_HANDOVER_REQUIRED_NACK := ?},
+ {pDU_BSSGP_PS_HANDOVER_REQUEST := ?},
+ {pDU_BSSGP_PS_HANDOVER_REQUEST_ACK := ?},
+ {pDU_BSSGP_PS_HANDOVER_REQUEST_NACK := ?},
+ {pDU_BSSGP_PS_HANDOVER_COMPLETE := ?},
+ {pDU_BSSGP_PS_HANDOVER_COMPLETE_ACK := ?},
+ {pDU_BSSGP_PS_HANDOVER_CANCEL := ?}
+ );
+
+ template (present) PDU_BSSGP tr_BSSGP_PERMITTED_PTP := (
+ tr_BSSGP_PERMITTED_PTP_ONLY,
+ {pDU_BSSGP_PAGING_PS := ?},
+ {pDU_BSSGP_PAGING_CS := ?},
+ {pDU_BSSGP_STATUS := ?}
+ );
+
+ /* PDU permitted on Signaling BVC only (TS 48.018 Section 5.4.1) */
+ template (present) PDU_BSSGP tr_BSSGP_PERMITTED_SIGN_ONLY := (
+ {pDU_BSSGP_SUSPEND := ?},
+ {pDU_BSSGP_SUSPEND_ACK := ?},
+ {pDU_BSSGP_SUSPEND_NACK := ?},
+ {pDU_BSSGP_RESUME := ?},
+ {pDU_BSSGP_RESUME_ACK := ?},
+ {pDU_BSSGP_RESUME_NACK := ?},
+ {pDU_BSSGP_FLUSH_LL := ?},
+ {pDU_BSSGP_FLUSH_LL_ACK := ?},
+ {pDU_BSSGP_LLC_DISCARDED := ?},
+ {pDU_BSSGP_BVC_BLOCK := ?},
+ {pDU_BSSGP_BVC_BLOCK_ACK := ?},
+ {pDU_BSSGP_BVC_UNBLOCK := ?},
+ {pDU_BSSGP_BVC_UNBLOCK_ACK := ?},
+ {pDU_BSSGP_BVC_RESET := ?},
+ {pDU_BSSGP_BVC_RESET_ACK := ?},
+ {pDU_BSSGP_SGSN_INVOKE_TRACE := ?},
+ {pDU_BSSGP_PERFORM_LOCATION_REQUEST := ?},
+ {pDU_BSSGP_PERFORM_LOCATION_RESPONSE := ?},
+ {pDU_BSSGP_PERFORM_LOCATION_ABORT := ?},
+ {pDU_BSSGP_POSITION_COMMAND := ?},
+ {pDU_BSSGP_POSITION_RESPONSE := ?},
+ {pDU_BSSGP_RAN_INFORMATION := ?},
+ {pDU_BSSGP_RAN_INFORMATION_REQUEST := ?},
+ {pDU_BSSGP_RAN_INFORMATION_ACK := ?},
+ {pDU_BSSGP_RAN_INFORMATION_ERROR := ?},
+ {pDU_BSSGP_RAN_INFORMATION_APPLICATION_ERROR := ?},
+ {pDU_BSSGP_MBMS_SESSION_START_REQUEST := ?},
+ {pDU_BSSGP_MBMS_SESSION_START_RESPONSE := ?},
+ {pDU_BSSGP_MBMS_SESSION_STOP_REQUEST := ?},
+ {pDU_BSSGP_MBMS_STOP_RESPONSE := ?},
+ {pDU_BSSGP_SESSION_UPDATE_REQUEST := ?},
+ {pDU_BSSGP_SESSION_UPDATE_RESPONSE := ?}
+ );
+
+ template (present) PDU_BSSGP tr_BSSGP_PERMITTED_SIGN := (
+ tr_BSSGP_PERMITTED_SIGN_ONLY,
+ {pDU_BSSGP_PAGING_PS := ?},
+ {pDU_BSSGP_PAGING_CS := ?},
+ {pDU_BSSGP_SUSPEND := ?},
+ {pDU_BSSGP_STATUS := ?}
+ );
+
+ /* PDU permitted on PTM BVC only (TS 48.018 Section 5.4.1) */
+ template (present) PDU_BSSGP tr_BSSGP_PERMITTED_PTM_ONLY := (
+ {pDU_BSSGP_DL_MBMS_UNITDATA := ?},
+ {pDU_BSSGP_UL_MBMS_UNITDATA := ?}
+ );
+
+ template (present) PDU_BSSGP tr_BSSGP_PERMITTED_PTM := (
+ tr_BSSGP_PERMITTED_PTM_ONLY,
+ {pDU_BSSGP_STATUS := ?}
+ );
+
+
+ /* Template for any PTP BVCI IE */
+ template (present) BVCI tr_BSSGP_IE_PtpBvci := {
+ iEI := '04'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := 2
+ },
+ unstructured_value := complement ('0000'O, '0001'O)
+ }
+
+ /* message on signaling PTP but containing a ptp BVC */
+ /*
+ template PDU_BSSGP tr_BSSGP_SIG_FOR_PTP(template Bvci bvci) := (
+ {pDU_BSSGP_FLUSH_LL:{?,?,tr_BSSGP_IE_PtpBvci, *, *}},
+ {pDU_BSSGP_FLUSH_LL_ACK:{?,?,?,tr_BSSGP_IE_PtpBvci, ?, *}},
+ {pDU_BSSGP_LLC_DISCARDED:{?,?,?,tr_BSSGP_IE_PtpBvci, ?, *}},
+ {pDU_BSSGP_BVC_BLOCK:{?,tr_BSSGP_IE_PtpBvci, ?}},
+ {pDU_BSSGP_BVC_BLOCK_ACK:{?,tr_BSSGP_IE_PtpBvci}},
+ {pDU_BSSGP_BVC_UNBLOCK:{?,tr_BSSGP_IE_PtpBvci}},
+ {pDU_BSSGP_BVC_UNBLOCK_ACK:{?,tr_BSSGP_IE_PtpBvci}},
+ {pDU_BSSGP_BVC_RESET:{?,tr_BSSGP_IE_PtpBvci,?,*,*,*}},
+ {pDU_BSSGP_BVC_RESET_ACK:{?,tr_BSSGP_IE_PtpBvci,*,*,*}},
+ {pDU_BSSGP_STATUS:{?,?,tr_BSSGP_IE_PtpBvci,*}},
+ {pDU_BSSGP_PERFORM_LOCATION_REQUEST:{?,?,?,*,tr_BSSGP_IE_PtpBvci,?,?,?,*,*,*,*,*,*,*,*,*}},
+ {pDU_BSSGP_PERFORM_LOCATION_RESPONSE:{?,?,tr_BSSGP_IE_PtpBvci,*,*,*,*,*,*}},
+ {pDU_BSSGP_PERFORM_LOCATION_ABORT:{?,?,tr_BSSGP_IE_PtpBvci,?}},
+ {pDU_BSSGP_POSITION_COMMAND:{
+ );
+ */
+
+ /* extract the BVCI IE of given PDU + return it */
+ function f_BSSGP_BVCI_IE_get(PDU_BSSGP pdu) return template (omit) BVCI {
+ select (pdu) {
+ case (PDU_BSSGP:{pDU_BSSGP_FLUSH_LL:=?}) {
+ return pdu.pDU_BSSGP_FLUSH_LL.bVCI_old;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_FLUSH_LL_ACK:=?}) {
+ return pdu.pDU_BSSGP_FLUSH_LL_ACK.bVCI_new;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_LLC_DISCARDED:=?}) {
+ return pdu.pDU_BSSGP_LLC_DISCARDED.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_BVC_BLOCK:=?}) {
+ return pdu.pDU_BSSGP_BVC_BLOCK.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_BVC_BLOCK_ACK:=?}) {
+ return pdu.pDU_BSSGP_BVC_BLOCK_ACK.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_BVC_UNBLOCK:=?}) {
+ return pdu.pDU_BSSGP_BVC_UNBLOCK.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_BVC_UNBLOCK_ACK:=?}) {
+ return pdu.pDU_BSSGP_BVC_UNBLOCK_ACK.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_BVC_RESET:=?}) {
+ return pdu.pDU_BSSGP_BVC_RESET.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_BVC_RESET_ACK:=?}) {
+ return pdu.pDU_BSSGP_BVC_RESET_ACK.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_STATUS:=?}) {
+ return pdu.pDU_BSSGP_STATUS.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_PERFORM_LOCATION_REQUEST:=?}) {
+ return pdu.pDU_BSSGP_PERFORM_LOCATION_REQUEST.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_PERFORM_LOCATION_RESPONSE:=?}) {
+ return pdu.pDU_BSSGP_PERFORM_LOCATION_RESPONSE.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_PERFORM_LOCATION_ABORT:=?}) {
+ return pdu.pDU_BSSGP_PERFORM_LOCATION_ABORT.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_POSITION_COMMAND:=?}) {
+ return pdu.pDU_BSSGP_POSITION_COMMAND.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_POSITION_RESPONSE:=?}) {
+ return pdu.pDU_BSSGP_POSITION_RESPONSE.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_PAGING_PS:={?,?,*,{bVCI:=?},*,*,?,*,*}}) {
+ return pdu.pDU_BSSGP_PAGING_PS.paging_Field4.bVCI;
+ }
+ case (PDU_BSSGP:{pDU_BSSGP_PAGING_CS:={?,?,?,{bVCI:=?},*,*,*,*,*}}) {
+ return pdu.pDU_BSSGP_PAGING_CS.paging_Field4.bVCI;
+ }
+ case else {
+ return omit;
+ }
+ }
+ }
+ /* extract the BVCI IE of given PDU + convert it to integer value */
+ function f_BSSGP_BVCI_get(PDU_BSSGP pdu) return template (omit) BssgpBvci {
+ var template (omit) BVCI bvci_raw := f_BSSGP_BVCI_IE_get(pdu);
+ if (istemplatekind(bvci_raw, "omit")) {
+ return omit;
+ }
+ return oct2int(valueof(bvci_raw.unstructured_value));
+ }
+
+ /* 3GPP TS 23.003 2.6 */
+ type enumerated TlliType {
+ TLLI_LOCAL,
+ TLLI_FOREIGN,
+ TLLI_RANDOM,
+ TLLI_AUXILIARY,
+ TLLI_RESERVED,
+ TLLI_G_RNTI,
+ TLLI_RAND_G_RNTI
+ }
+
+ /* 3GPP TS 23.003 2.6 */
+ function f_gprs_tlli_type(OCT4 tlli) return TlliType {
+ var bitstring tllib := oct2bit(tlli);
+ if (substr(tllib, 0, 2) == '11'B) {
+ return TLLI_LOCAL;
+ } else if (substr(tllib, 0, 2) == '10'B) {
+ return TLLI_FOREIGN;
+ } else if (substr(tllib, 0, 5) == '01111'B) {
+ return TLLI_RANDOM;
+ } else if (substr(tllib, 0, 4) == '0110'B) {
+ return TLLI_RESERVED;
+ } else if (substr(tllib, 0, 3) == '010'B) {
+ return TLLI_RESERVED;
+ } else if (substr(tllib, 0, 4) == '0000'B) {
+ return TLLI_G_RNTI;
+ } else if (substr(tllib, 0, 4) == '0001'B) {
+ return TLLI_RAND_G_RNTI;
+ } else {
+ setverdict(fail, "Unknonw TLLI Type ", tllib);
+ mtc.stop;
+ }
+ }
+ function f_gprs_tlli_random() return OCT4 {
+ var OCT4 tlli := f_rnd_octstring(4);
+ return tlli or4b 'c0000000'O;
+ }
} with { encode "RAW" };