jolly submitted this change.
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(-)
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)
}
}
}
To view, visit change 41093. To unsubscribe, or for help writing mail filters, visit settings.