diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn index 8d48cb10f..2c82437eb 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 (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 (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 (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 (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) + /* 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) + 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) + /* 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) + 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) + /* 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) + 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)" }; + 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 { + 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); + if (isvalue(cause)) { + ret.radio_Cause_Value := int2oct(enum2int(valueof(cause)), 1); + } else { + ret.radio_Cause_Value := ? + } + return ret; } - 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; + /* 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) } } -} - -/* 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; + 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) + } } - 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; + + /* 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) } -} -function f_gprs_tlli_random() return OCT4 { - var OCT4 tlli := f_rnd_octstring(4); - return tlli or4b 'c0000000'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" };