jolly has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/41093?usp=email )
Change subject: Add optonal e-RAB lists to HANDOVER messages ......................................................................
Add optonal e-RAB lists to HANDOVER messages
These lists are required to test release of e-RABs during handover prparation and indication of failed e-RABS during handover resource allocation.
New templates for the new lists and list items are added.
Related: SYS#7309 Change-Id: I78d2fa8e72bb672674727a01d5c5a9aaf31cab7b --- M library/s1ap/S1AP_Templates.ttcn 1 file changed, 251 insertions(+), 96 deletions(-)
Approvals: Jenkins Builder: Verified fixeria: Looks good to me, approved pespin: Looks good to me, but someone else must approve
diff --git a/library/s1ap/S1AP_Templates.ttcn b/library/s1ap/S1AP_Templates.ttcn index 3f9b1f8..34b1cb0 100644 --- a/library/s1ap/S1AP_Templates.ttcn +++ b/library/s1ap/S1AP_Templates.ttcn @@ -2516,41 +2516,126 @@ }
/* 9.1.5.2 HANDOVER COMMAND */ +private function +f_ts_S1AP_HandoverCmd(template (value) MME_UE_S1AP_ID mme_id, + template (value) ENB_UE_S1AP_ID enb_id, + template (value) HandoverType ho_type, + template (value) E_RABSubjecttoDataForwardingList rab_forward_items, + template (value) octetstring container, + template (omit) E_RABList rab_release_items := omit) +return template (value) HandoverCommand +{ + var template (value) HandoverCommand cmd := { + protocolIEs := { + { + id := S1AP_Constants.id_MME_UE_S1AP_ID, + criticality := reject, + value_ := { MME_UE_S1AP_ID := mme_id } + }, { + id := S1AP_Constants.id_eNB_UE_S1AP_ID, + criticality := reject, + value_ := { ENB_UE_S1AP_ID := enb_id } + }, { + id := S1AP_Constants.id_HandoverType, + criticality := reject, + value_ := { HandoverType := ho_type } + }, { + id := S1AP_Constants.id_E_RABSubjecttoDataForwardingList, + criticality := ignore, + value_ := { E_RABSubjecttoDataForwardingList := rab_forward_items } + } + } + }; + + var integer idx := lengthof(cmd.protocolIEs); + if (isvalue(rab_release_items)) { + cmd.protocolIEs[idx] := { + id := S1AP_Constants.id_E_RABtoReleaseListHOCmd, + criticality := ignore, + value_ := { E_RABList := rab_release_items } + }; + idx := idx + 1; + } + + cmd.protocolIEs[idx] := { + id := S1AP_Constants.id_Target_ToSource_TransparentContainer, + criticality := reject, + value_ := { Target_ToSource_TransparentContainer := container } + }; + idx := idx + 1; + + return cmd; +} +private function +f_tr_S1AP_HandoverCmd(template (present) MME_UE_S1AP_ID mme_id, + template (present) ENB_UE_S1AP_ID enb_id, + template (present) HandoverType ho_type, + template (present) E_RABSubjecttoDataForwardingList rab_forward_items, + template (present) octetstring container, + template E_RABList rab_release_items := *) +return template HandoverCommand +{ + var template HandoverCommand cmd := { + protocolIEs := { + { + id := S1AP_Constants.id_MME_UE_S1AP_ID, + criticality := reject, + value_ := { MME_UE_S1AP_ID := mme_id } + }, { + id := S1AP_Constants.id_eNB_UE_S1AP_ID, + criticality := reject, + value_ := { ENB_UE_S1AP_ID := enb_id } + }, { + id := S1AP_Constants.id_HandoverType, + criticality := reject, + value_ := { HandoverType := ho_type } + }, { + id := S1AP_Constants.id_E_RABSubjecttoDataForwardingList, + criticality := ignore, + value_ := { E_RABSubjecttoDataForwardingList := rab_forward_items } + } + } + }; + + var integer idx := lengthof(cmd.protocolIEs); + if (ispresent(rab_release_items)) { + cmd.protocolIEs[idx] := { + id := S1AP_Constants.id_E_RABtoReleaseListHOCmd, + criticality := ignore, + value_ := { E_RABList := rab_release_items } + }; + idx := idx + 1; + } else if (istemplatekind(rab_release_items, "*")) { + cmd.protocolIEs[idx] := *; + idx := idx + 1; + } + + cmd.protocolIEs[idx] := { + id := S1AP_Constants.id_Target_ToSource_TransparentContainer, + criticality := reject, + value_ := { Target_ToSource_TransparentContainer := container } + }; + idx := idx + 1; + + /* ignore the remaining IEs */ + cmd.protocolIEs[idx] := *; + + return cmd; +} + template (value) S1AP_PDU ts_S1AP_HandoverCmd(template (value) MME_UE_S1AP_ID mme_id, template (value) ENB_UE_S1AP_ID enb_id, template (value) HandoverType ho_type, template (value) E_RABSubjecttoDataForwardingList rab_forward_items, - template (value) octetstring container) := { + template (value) octetstring container, + template (omit) E_RABList rab_release_items := omit) := { successfulOutcome := { procedureCode := S1AP_Constants.id_HandoverPreparation, criticality := reject, value_ := { - HandoverCommand := { - protocolIEs := { - { - id := S1AP_Constants.id_MME_UE_S1AP_ID, - criticality := reject, - value_ := { MME_UE_S1AP_ID := mme_id } - }, { - id := S1AP_Constants.id_eNB_UE_S1AP_ID, - criticality := reject, - value_ := { ENB_UE_S1AP_ID := enb_id } - }, { - id := S1AP_Constants.id_HandoverType, - criticality := reject, - value_ := { HandoverType := ho_type } - }, { - id := S1AP_Constants.id_E_RABSubjecttoDataForwardingList, - criticality := ignore, - value_ := { E_RABSubjecttoDataForwardingList := rab_forward_items } - }, { - id := S1AP_Constants.id_Target_ToSource_TransparentContainer, - criticality := reject, - value_ := { Target_ToSource_TransparentContainer := container } - } - } - } + HandoverCommand := f_ts_S1AP_HandoverCmd(mme_id, enb_id, ho_type, rab_forward_items, + container, rab_release_items) } } } @@ -2559,36 +2644,14 @@ template (present) ENB_UE_S1AP_ID enb_id := ?, template (present) HandoverType ho_type := ?, template (present) E_RABSubjecttoDataForwardingList rab_forward_items := ?, - template (present) octetstring container := ?) := { + template (present) octetstring container := ?, + template E_RABList rab_release_items := *) := { successfulOutcome := { procedureCode := S1AP_Constants.id_HandoverPreparation, criticality := reject, value_ := { - HandoverCommand := { - protocolIEs := { - { - id := S1AP_Constants.id_MME_UE_S1AP_ID, - criticality := reject, - value_ := { MME_UE_S1AP_ID := mme_id } - }, { - id := S1AP_Constants.id_eNB_UE_S1AP_ID, - criticality := reject, - value_ := { ENB_UE_S1AP_ID := enb_id } - }, { - id := S1AP_Constants.id_HandoverType, - criticality := reject, - value_ := { HandoverType := ho_type } - }, *, { - id := S1AP_Constants.id_E_RABSubjecttoDataForwardingList, - criticality := ignore, - value_ := { E_RABSubjecttoDataForwardingList := rab_forward_items } - }, *, { - id := S1AP_Constants.id_Target_ToSource_TransparentContainer, - criticality := reject, - value_ := { Target_ToSource_TransparentContainer := container } - }, * - } - } + HandoverCommand := f_tr_S1AP_HandoverCmd(mme_id, enb_id, ho_type, rab_forward_items, + container, rab_release_items) } } } @@ -2807,37 +2870,147 @@ iE_Extensions := * }
+template (value) E_RABFailedtoSetupListHOReqAck +ts_E_RABFailedToSetupListHOReqAck(template (value) E_RABFailedToSetupItemHOReqAck it) := { + { + id := S1AP_Constants.id_E_RABFailedtoSetupItemHOReqAck, + criticality := ignore, + value_ := { E_RABFailedToSetupItemHOReqAck := it } + } +} +template (present) E_RABFailedtoSetupListHOReqAck +tr_E_RABFailedToSetupListHOReqAck(template (present) E_RABFailedToSetupItemHOReqAck it := ?) := { + { + id := S1AP_Constants.id_E_RABFailedtoSetupItemHOReqAck, + criticality := ignore, + value_ := { E_RABFailedToSetupItemHOReqAck := it } + } +} +template (value) E_RABFailedToSetupItemHOReqAck +ts_E_RABFailedToSetupItemHOReqAck(template (value) E_RAB_ID rab_id, + template (value) Cause cause) := { + e_RAB_ID := rab_id, + cause := cause, + iE_Extensions := omit +} +template (present) E_RABFailedToSetupItemHOReqAck +tr_E_RABFailedToSetupItemHOReqAck(template (present) E_RAB_ID rab_id := ?, + template (present) Cause cause := ?) := { + e_RAB_ID := rab_id, + cause := cause, + iE_Extensions := * +} + /* 9.1.5.5 HANDOVER REQUEST ACKNOWLEDGE */ +private function +f_ts_S1AP_HandoverAck(template (value) MME_UE_S1AP_ID mme_id, + template (value) ENB_UE_S1AP_ID enb_id, + template (value) E_RABAdmittedList rab_admitted_items, + template (value) octetstring container, + template (omit) E_RABFailedtoSetupListHOReqAck rab_failed_items := omit) +return template (value) HandoverRequestAcknowledge +{ + var template (value) HandoverRequestAcknowledge ack := { + protocolIEs := { + { + id := S1AP_Constants.id_MME_UE_S1AP_ID, + criticality := ignore, + value_ := { MME_UE_S1AP_ID := mme_id } + }, { + id := S1AP_Constants.id_eNB_UE_S1AP_ID, + criticality := ignore, + value_ := { ENB_UE_S1AP_ID := enb_id } + }, { + id := S1AP_Constants.id_E_RABAdmittedList, + criticality := ignore, + value_ := { E_RABAdmittedList := rab_admitted_items } + } + } + }; + + var integer idx := lengthof(ack.protocolIEs); + if (isvalue(rab_failed_items)) { + ack.protocolIEs[idx] := { + id := S1AP_Constants.id_E_RABFailedToSetupListHOReqAck, + criticality := ignore, + value_ := { E_RABFailedtoSetupListHOReqAck := rab_failed_items } + }; + idx := idx + 1; + } + + ack.protocolIEs[idx] := { + id := S1AP_Constants.id_Target_ToSource_TransparentContainer, + criticality := reject, + value_ := { Target_ToSource_TransparentContainer := container } + }; + idx := idx + 1; + + return ack; +} +private function +f_tr_S1AP_HandoverAck(template (present) MME_UE_S1AP_ID mme_id := ?, + template (present) ENB_UE_S1AP_ID enb_id := ?, + template (present) E_RABAdmittedList rab_admitted_items := ?, + template (present) octetstring container, + template E_RABFailedtoSetupListHOReqAck rab_failed_items := *) +return template HandoverRequestAcknowledge +{ + var template HandoverRequestAcknowledge ack := { + protocolIEs := { + { + id := S1AP_Constants.id_MME_UE_S1AP_ID, + criticality := ignore, + value_ := { MME_UE_S1AP_ID := mme_id } + }, { + id := S1AP_Constants.id_eNB_UE_S1AP_ID, + criticality := ignore, + value_ := { ENB_UE_S1AP_ID := enb_id } + }, { + id := S1AP_Constants.id_E_RABAdmittedList, + criticality := ignore, + value_ := { E_RABAdmittedList := rab_admitted_items } + } + } + }; + + var integer idx := lengthof(ack.protocolIEs); + if (ispresent(rab_failed_items)) { + ack.protocolIEs[idx] := { + id := S1AP_Constants.id_E_RABFailedToSetupListHOReqAck, + criticality := ignore, + value_ := { E_RABFailedtoSetupListHOReqAck := rab_failed_items } + }; + idx := idx + 1; + } else if (istemplatekind(rab_failed_items, "*")) { + ack.protocolIEs[idx] := *; + idx := idx + 1; + } + + ack.protocolIEs[idx] := { + id := S1AP_Constants.id_Target_ToSource_TransparentContainer, + criticality := reject, + value_ := { Target_ToSource_TransparentContainer := container } + }; + idx := idx + 1; + + /* ignore the remaining IEs */ + ack.protocolIEs[idx] := *; + + return ack; +} + template (value) S1AP_PDU ts_S1AP_HandoverAck(template (value) MME_UE_S1AP_ID mme_id, template (value) ENB_UE_S1AP_ID enb_id, template (value) E_RABAdmittedList rab_admit_items, - template (value) octetstring container) := { + template (value) octetstring container, + template (omit) E_RABFailedtoSetupListHOReqAck rab_failed_items := omit) := { successfulOutcome := { procedureCode := S1AP_Constants.id_HandoverResourceAllocation, criticality := reject, value_ := { - HandoverRequestAcknowledge := { - protocolIEs := { - { - id := S1AP_Constants.id_MME_UE_S1AP_ID, - criticality := ignore, - value_ := { MME_UE_S1AP_ID := mme_id } - }, { - id := S1AP_Constants.id_eNB_UE_S1AP_ID, - criticality := ignore, - value_ := { ENB_UE_S1AP_ID := enb_id } - }, { - id := S1AP_Constants.id_E_RABAdmittedList, - criticality := ignore, - value_ := { E_RABAdmittedList := rab_admit_items } - }, { - id := S1AP_Constants.id_Target_ToSource_TransparentContainer, - criticality := reject, - value_ := { Target_ToSource_TransparentContainer := container } - } - } - } + HandoverRequestAcknowledge := f_ts_S1AP_HandoverAck(mme_id, enb_id, rab_admit_items, + container, rab_failed_items) } } } @@ -2845,32 +3018,14 @@ tr_S1AP_HandoverAck(template (present) MME_UE_S1AP_ID mme_id := ?, template (present) ENB_UE_S1AP_ID enb_id := ?, template (present) E_RABAdmittedList rab_admit_items := ?, - template (present) octetstring container := ?) := { + template (present) octetstring container := ?, + template E_RABFailedtoSetupListHOReqAck rab_failed_items := *) := { successfulOutcome := { procedureCode := S1AP_Constants.id_HandoverResourceAllocation, criticality := reject, value_ := { - HandoverRequestAcknowledge := { - protocolIEs := { - { - id := S1AP_Constants.id_MME_UE_S1AP_ID, - criticality := ignore, - value_ := { MME_UE_S1AP_ID := mme_id } - }, { - id := S1AP_Constants.id_eNB_UE_S1AP_ID, - criticality := ignore, - value_ := { ENB_UE_S1AP_ID := enb_id } - }, { - id := S1AP_Constants.id_E_RABAdmittedList, - criticality := ignore, - value_ := { E_RABAdmittedList := rab_admit_items } - }, *, { - id := S1AP_Constants.id_Target_ToSource_TransparentContainer, - criticality := reject, - value_ := { Target_ToSource_TransparentContainer := container } - }, * - } - } + HandoverRequestAcknowledge := f_tr_S1AP_HandoverAck(mme_id, enb_id, rab_admit_items, + container, rab_failed_items) } } }