Osmocom_Gb_Types: Fix indentation
Change-Id: I4ca156b53dfe9daa190d52a7de46be56cf74099a
This commit is contained in:
parent
1771886371
commit
20eb49266f
|
@ -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,361 +1683,361 @@ 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 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 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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue