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)
                }
        }
 }

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/41093?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I78d2fa8e72bb672674727a01d5c5a9aaf31cab7b
Gerrit-Change-Number: 41093
Gerrit-PatchSet: 3
Gerrit-Owner: jolly <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: jolly <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>

Reply via email to