pespin submitted this change.
cosmetic: library/GTPv1C_Templates: remove extra indentation level
The extra first indentation level around 99% of the file just loses
space which makes it difficult to keep templates at an acceptable width.
Do similarly to what we already do in lots of other template files which
were added later than this one.
Change-Id: I87755ec0a9023e79fb5f7a40c6c1734dca44696b
---
M library/GTPv1C_Templates.ttcn
1 file changed, 1,893 insertions(+), 1,891 deletions(-)
diff --git a/library/GTPv1C_Templates.ttcn b/library/GTPv1C_Templates.ttcn
index 5a25504..12e2f51 100644
--- a/library/GTPv1C_Templates.ttcn
+++ b/library/GTPv1C_Templates.ttcn
@@ -11,804 +11,889 @@
module GTPv1C_Templates {
- import from General_Types all;
- import from Osmocom_Types all;
- import from GTPC_Types all;
- import from GTPv1C_CodecPort all;
- import from IPCP_Types all;
- import from GSM_Types all; // RoutingAreaIdentification, CellIdentity
+import from General_Types all;
+import from Osmocom_Types all;
+import from GTPC_Types all;
+import from GTPv1C_CodecPort all;
+import from IPCP_Types all;
+import from GSM_Types all; // RoutingAreaIdentification, CellIdentity
- template (present) OCT1 gtp1_requests := (
- '10'O, /* createPDPContextRequest */
- '12'O, /* updatePDPContextRequest */
- '14'O, /* */
- '16'O, /* deletePDPContextRequest */
- '1B'O, /* pdu_NotificationRequest */
- '1D'O, /* pdu_NotificationRejectRequest */
- '1F'O, /* supportedExtensionHeadersNotification */
- '20'O, /* sendRouteingInformationForGPRSRequest */
- '22'O, /* failureReportRequest */
- '24'O, /* noteMS_GPRSPresentRequest */
- '30'O, /* identificationRequest */
- '32'O, /* sgsn_ContextRequest */
- '35'O, /* forwardRelocationRequest */
- '38'O, /* relocationCancelRequest */
- '3A'O, /* forwardSRNSContext */
- '3D'O, /* uERegistrationQueryRequest */
- '46'O, /* ranInformationRelay */
- '60'O, /* mBMSNotificationRequest */
- '62'O, /* mBMSNotificationRejectRequest */
- '64'O, /* createMBMSContextRequest */
- '66'O, /* updateMBMSContextRequest */
- '68'O, /* deleteMBMSContextRequest */
- '70'O, /* mBMSRegistrationRequest */
- '72'O, /* mBMSDeRegistrationRequest */
- '74'O, /* mBMSSessionStartRequest */
- '76'O, /* mBMSSessionStopRequest */
- '78'O, /* mBMSSessionUpdateRequest */
- '80'O /* mS_InfoChangeNotificationRequest */
- );
+template (present) OCT1 gtp1_requests := (
+ '10'O, /* createPDPContextRequest */
+ '12'O, /* updatePDPContextRequest */
+ '14'O, /* */
+ '16'O, /* deletePDPContextRequest */
+ '1B'O, /* pdu_NotificationRequest */
+ '1D'O, /* pdu_NotificationRejectRequest */
+ '1F'O, /* supportedExtensionHeadersNotification */
+ '20'O, /* sendRouteingInformationForGPRSRequest */
+ '22'O, /* failureReportRequest */
+ '24'O, /* noteMS_GPRSPresentRequest */
+ '30'O, /* identificationRequest */
+ '32'O, /* sgsn_ContextRequest */
+ '35'O, /* forwardRelocationRequest */
+ '38'O, /* relocationCancelRequest */
+ '3A'O, /* forwardSRNSContext */
+ '3D'O, /* uERegistrationQueryRequest */
+ '46'O, /* ranInformationRelay */
+ '60'O, /* mBMSNotificationRequest */
+ '62'O, /* mBMSNotificationRejectRequest */
+ '64'O, /* createMBMSContextRequest */
+ '66'O, /* updateMBMSContextRequest */
+ '68'O, /* deleteMBMSContextRequest */
+ '70'O, /* mBMSRegistrationRequest */
+ '72'O, /* mBMSDeRegistrationRequest */
+ '74'O, /* mBMSSessionStartRequest */
+ '76'O, /* mBMSSessionStopRequest */
+ '78'O, /* mBMSSessionUpdateRequest */
+ '80'O /* mS_InfoChangeNotificationRequest */
+);
- type record GTP_CellId {
- RoutingAreaIdentification ra_id,
- CellIdentity cell_id
- } with { encode "RAW" };
+type record GTP_CellId {
+ RoutingAreaIdentification ra_id,
+ CellIdentity cell_id
+} with { encode "RAW" };
- template (value) GTP_CellId ts_GTP_CellId(template (value) RoutingAreaIdentification rai,
- template (value) CellIdentity cell_id) := {
- ra_id := rai,
- cell_id := cell_id
- };
+template (value) GTP_CellId ts_GTP_CellId(template (value) RoutingAreaIdentification rai,
+ template (value) CellIdentity cell_id) := {
+ ra_id := rai,
+ cell_id := cell_id
+};
- /* Table 38 of 3GPP TS 29.060 */
- type enumerated GTP_Cause {
- GTP_CAUSE_REQUEST_IMEI (1),
- GTP_CAUSE_REQUEST_IMSI_AND_IMEI (2),
- GTP_CAUSE_NO_IDENTITY_NEDED (3),
- GTP_CAUSE_MS_REFUSES (4),
- GTP_CAUSE_MS_IS_NOT_GPRS_RESPONDING (5),
- /* reserved */
- GTP_CAUSE_REQUEST_ACCEPTED (128),
- GTP_CAUSE_INVALID_MSG_FORMAT (193),
- GTP_CAUSE_NO_RESOURCES_AVAILABLE (199)
- /* FIXME */
- } with { encode "RAW"
- variant "FIELDLENGTH(8)"; };
+/* Table 38 of 3GPP TS 29.060 */
+type enumerated GTP_Cause {
+ GTP_CAUSE_REQUEST_IMEI (1),
+ GTP_CAUSE_REQUEST_IMSI_AND_IMEI (2),
+ GTP_CAUSE_NO_IDENTITY_NEDED (3),
+ GTP_CAUSE_MS_REFUSES (4),
+ GTP_CAUSE_MS_IS_NOT_GPRS_RESPONDING (5),
+ /* reserved */
+ GTP_CAUSE_REQUEST_ACCEPTED (128),
+ GTP_CAUSE_INVALID_MSG_FORMAT (193),
+ GTP_CAUSE_NO_RESOURCES_AVAILABLE (199)
+ /* FIXME */
+} with { encode "RAW"
+ variant "FIELDLENGTH(8)"; };
- private function f_GTP_Cause_2_OCT1(template (value) GTP_Cause cause) return OCT1 {
- return int2oct(enum2int(valueof(cause)), 1);
+private function f_GTP_Cause_2_OCT1(template (value) GTP_Cause cause) return OCT1 {
+ return int2oct(enum2int(valueof(cause)), 1);
+}
+template (value) Cause_gtpc ts_Cause_gtpc(template (value) GTP_Cause cause) := {
+ type_gtpc := '01'O,
+ causevalue := f_GTP_Cause_2_OCT1(cause)
+}
+private function enum2oct1_Cause_gtpc_tmpl(template GTP_Cause inp) return template OCT1
+{
+ if (istemplatekind(inp, "omit")) {
+ return omit;
+ } else if (istemplatekind(inp, "*")) {
+ return *;
+ } else if (istemplatekind(inp, "?")) {
+ return ?;
+ } else {
+ return f_GTP_Cause_2_OCT1(valueof(inp));
}
- template (value) Cause_gtpc ts_Cause_gtpc(template (value) GTP_Cause cause) := {
- type_gtpc := '01'O,
- causevalue := f_GTP_Cause_2_OCT1(cause)
+}
+template (present) Cause_gtpc tr_Cause_gtpc(template (present) GTP_Cause cause) := {
+ type_gtpc := '01'O,
+ causevalue := enum2oct1_Cause_gtpc_tmpl(cause)
+}
+function f_tr_Cause_gtpc(template GTP_Cause cause) return
+template Cause_gtpc {
+ if (istemplatekind(cause, "omit")) {
+ return omit;
+ } else if (istemplatekind(cause, "*")) {
+ return *;
+ } else {
+ return tr_Cause_gtpc(cause);
}
- private function enum2oct1_Cause_gtpc_tmpl(template GTP_Cause inp) return template OCT1
- {
- if (istemplatekind(inp, "omit")) {
- return omit;
- } else if (istemplatekind(inp, "*")) {
- return *;
- } else if (istemplatekind(inp, "?")) {
- return ?;
- } else {
- return f_GTP_Cause_2_OCT1(valueof(inp));
+}
+
+/* generalized GTP-C receive template */
+template (present) PDU_GTPC tr_GTP1C_PDU(template (present) OCT1 msg_type,
+ template (present) OCT4 teid,
+ template (present) GTPC_PDUs pdu := ?) := {
+ /* N-PDU Number flag (PN) shall be set to '0'. A GTP-C receiver shall not return an
+ * error if this flag is set to '1'. */
+ pn_bit := '0'B,
+ /* Sequence number flag (S) shall be set to '1'. */
+ s_bit := '1'B,
+ e_bit := ?,
+ spare := ?,
+ /* Protocol Type flag (PT) shall be set to '1'.*/
+ pt := '1'B,
+ /* Version shall be set to decimal 1 ('001'). */
+ version := '001'B,
+ messageType := msg_type,
+ lengthf := ?,
+ teid := teid,
+ opt_part := *,
+ gtpc_pdu := pdu
+}
+
+/* generalized GTP-C send template */
+template (value) PDU_GTPC ts_GTP1C_PDU(template (value) OCT1 msg_type,
+ template (value) OCT4 teid,
+ template (value) GTPC_PDUs pdu,
+ template (value) uint16_t seq_nr) := {
+ /* N-PDU Number flag (PN) shall be set to '0'. A GTP-C receiver shall not return an
+ * error if this flag is set to '1'. */
+ pn_bit := '0'B,
+ /* Sequence number flag (S) shall be set to '1'. */
+ s_bit := '1'B,
+ e_bit := '0'B,
+ spare := '0'B,
+ /* Protocol Type flag (PT) shall be set to '1'.*/
+ pt := '1'B,
+ /* Version shall be set to decimal 1 ('001'). */
+ version := '001'B,
+ messageType := msg_type,
+ lengthf := 0, /* we assume encoder overwrites this */
+ teid := teid,
+ opt_part := {
+ sequenceNumber := int2oct(valueof(seq_nr), 2),
+ npduNumber := '00'O,
+ nextExtHeader := '00'O,
+ gTPC_extensionHeader_List := omit
+ },
+ gtpc_pdu := pdu
+}
+
+/* recovery IE */
+template (value) Recovery_gtpc ts_Recovery(template (value) OCT1 restart_counter) := {
+ type_gtpc := '0E'O,
+ restartCounter := restart_counter
+}
+
+template (present) Recovery_gtpc tr_Recovery(template (present) OCT1 restart_counter := ?) := {
+ type_gtpc := '0E'O,
+ restartCounter := restart_counter
+}
+
+/* Packet TMSI - 7.7.5 */
+template (value) PacketTMSI ts_PTMSI(template (value) OCT4 ptmsi) := {
+ type_gtpc := '05'O,
+ p_tmsi := ptmsi
+}
+
+/* PTMSI Signature - 7.7.9 */
+template (value) PTMSI_Signature ts_PTMSI_sig(template (value) OCT3 ptmsi_sig) := {
+ type_gtpc := '0C'O,
+ ptmsi_Signature := ptmsi_sig
+}
+
+/* MS Validated - 7.7.10 */
+template (value) MS_Validated ts_MS_Validated(template (value) BIT1 msValidated) := {
+ type_gtpc := '0D'O,
+ msValidated := msValidated,
+ spare := '1111111'B
+}
+template (present) MS_Validated tr_MS_Validated(template (present) BIT1 msValidated := ?) := {
+ type_gtpc := '0D'O,
+ msValidated := msValidated,
+ spare := '1111111'B
+}
+function f_tr_MS_Validated(template BIT1 msValidated := *) return template MS_Validated {
+ if (istemplatekind(msValidated, "omit")) {
+ return omit;
+ } else if (istemplatekind(msValidated, "*")) {
+ return *;
+ } else {
+ return tr_MS_Validated(msValidated);
+ }
+}
+private function f_ts_MS_Validated(template (omit) BIT1 msValidated)
+return template (omit) MS_Validated {
+ if (istemplatekind(msValidated, "omit")) {
+ return omit;
+ }
+ return ts_MS_Validated(valueof(msValidated));
+}
+
+/* 7.7.13 TEI Data I */
+template (value) TeidDataI ts_TeidDataI(template (value) OCT4 teid) := {
+ type_gtpc := '10'O,
+ teidDataI := teid
+}
+template (present) TeidDataI tr_TeidDataI(template (present) OCT4 teid := ?) := {
+ type_gtpc := '10'O,
+ teidDataI := teid
+}
+
+/* 7.7.14 TEI Control Plane */
+template (value) TeidControlPlane ts_TEIC(template (value) OCT4 teic) := {
+ type_gtpc := '11'O,
+ teidControlPlane := teic
+}
+template (present) TeidControlPlane tr_TEIC(template (present) OCT4 teic := ?) := {
+ type_gtpc := '11'O,
+ teidControlPlane := teic
+}
+private function f_ts_TEIC(template (omit) OCT4 teic)
+return template (omit) TeidControlPlane {
+ if (istemplatekind(teic, "omit")) {
+ return omit;
+ }
+ return ts_TEIC(valueof(teic));
+}
+
+/* 7.7.15 Tunnel Endpoint Identifier Data II */
+template (value) TeidDataII ts_TeidDataII(template (value) BIT4 nsapi,
+ template (value) OCT4 teid) := {
+ type_gtpc := '12'O,
+ nsapi := nsapi,
+ unused := '0000'B,
+ teidDataII := teid
+}
+template (present) TeidDataII tr_TeidDataII(template (present) BIT4 nsapi := ?,
+ template (present) OCT4 teid := ?) := {
+ type_gtpc := '12'O,
+ nsapi := nsapi,
+ unused := '0000'B,
+ teidDataII := teid
+}
+
+/* IMEI(SV) IE TS 29.060 7.7.53 */
+template (value) IMEISV_gtpc ts_IMEISV(template (value) OCT8 imeisv) := {
+ type_gtpc := '9A'O,
+ lengthf := 8,
+ imeisv := imeisv
+}
+private function f_ts_IMEISV(template (omit) OCT8 imeisv)
+return template (omit) IMEISV_gtpc {
+ if (istemplatekind(imeisv, "omit")) {
+ return omit;
+ }
+ return ts_IMEISV(valueof(imeisv));
+}
+
+template (present) IMEISV_gtpc tr_IMEISV(template (present) OCT8 imeisv) := {
+ type_gtpc := '9A'O,
+ lengthf := 8,
+ imeisv := imeisv
+}
+
+// MS Time Zone - 7.7.52
+template (value) MS_TimeZone ts_MS_TimeZone(template (value) OCT1 timeZone := '00'O,
+ template (value) BIT2 daylightSavingTime := '00'B) := {
+ type_gtpc := '99'O,
+ lengthf := 2,
+ timeZone := timeZone,
+ daylightSavingTime := daylightSavingTime,
+ spare1 := '000'B,
+ sgsnAttempsToUpdateMS := '0'B, /* propietary, use it as spare */
+ spare2 := '00'B
+}
+function f_ts_MS_TimeZone(template (omit) OCT1 timeZone, template (omit) BIT2 daylightSavingTime)
+return template (omit) MS_TimeZone {
+ if (istemplatekind(timeZone, "omit") and istemplatekind(daylightSavingTime, "omit")) {
+ return omit;
+ }
+ if (istemplatekind(timeZone, "omit")) {
+ return ts_MS_TimeZone(daylightSavingTime := valueof(daylightSavingTime));
+ }
+ if (istemplatekind(daylightSavingTime, "omit")) {
+ return ts_MS_TimeZone(valueof(timeZone));
+ }
+ return ts_MS_TimeZone(valueof(timeZone), valueof(daylightSavingTime));
+}
+
+template (present) MS_TimeZone tr_MS_TimeZone(template (present) OCT1 timeZone := ?,
+ template (present) BIT2 daylightSavingTime := ?) := {
+ type_gtpc := '99'O,
+ lengthf := 2,
+ timeZone := timeZone,
+ daylightSavingTime := daylightSavingTime,
+ spare1 := '000'B,
+ sgsnAttempsToUpdateMS := '0'B, /* propietary, use it as spare */
+ spare2 := '00'B
+}
+
+/* Charging Characteristics IE TS 29.060 7.7.23 */
+template (value) ChargingCharacteristics_GTPC ts_ChargingCharacteristics(template (value) OCT2 chargingChar) := {
+ type_gtpc := '1A'O,
+ chargingChar := chargingChar
+}
+private function f_ts_ChargingCharacteristics(template (omit) OCT2 chargingChar)
+return template (omit) ChargingCharacteristics_GTPC {
+ if (istemplatekind(chargingChar, "omit")) {
+ return omit;
+ }
+ return ts_ChargingCharacteristics(valueof(chargingChar));
+}
+
+template (present) ChargingCharacteristics_GTPC tr_ChargingCharacteristics(template (present) OCT2 chargingChar) := {
+ type_gtpc := '1A'O,
+ chargingChar := chargingChar
+}
+
+/* 7.7.28 MM Context */
+template (value) MM_Context ts_MM_ContextGSM(template (value) OCT8 kc,
+ template (value) BIT3 cksn := '000'B,
+ template (value) BIT3 gea := '000'B,
+ template (value) octetstring triplet := ''O) := {
+ type_gtpc := '81'O,
+ context := {
+ mmcontGSM := {
+ lengthf := 0, /* overwritten */
+ cksn := cksn,
+ spare := '11111'B,
+ usedCipher := gea,
+ noofVectors := 0, /* overwritten */
+ security := '01'B, /* GSM key and triplets */
+ kc := kc,
+ triplet := triplet,
+ drx_par := '0000'O,
+ msNetW_cap_length := 0, /* overwritten */
+ msNetw_cap := omit,
+ containerLength := 0, /* overwritten */
+ container := omit,
+ access_restriction_data_length := 0,
+ access_restriction_data := omit
}
}
- template (present) Cause_gtpc tr_Cause_gtpc(template (present) GTP_Cause cause) := {
- type_gtpc := '01'O,
- causevalue := enum2oct1_Cause_gtpc_tmpl(cause)
- }
- function f_tr_Cause_gtpc(template GTP_Cause cause) return
- template Cause_gtpc {
- if (istemplatekind(cause, "omit")) {
- return omit;
- } else if (istemplatekind(cause, "*")) {
- return *;
- } else {
- return tr_Cause_gtpc(cause);
+}
+template (present) MM_Context tr_MM_ContextGSM(template (present) OCT8 kc := ?,
+ template (present) BIT3 cksn := ?,
+ template (present) BIT3 gea := ?,
+ template (present) octetstring triplet := ?) := {
+ type_gtpc := '81'O,
+ context := {
+ mmcontGSM := {
+ lengthf := ?,
+ cksn := cksn,
+ spare := ?,
+ usedCipher := gea,
+ noofVectors := ?,
+ security := '01'B, /* GSM key and triplets */
+ kc := kc,
+ triplet := triplet,
+ drx_par := ?,
+ msNetW_cap_length := ?,
+ msNetw_cap := *,
+ containerLength := ?,
+ container := *,
+ access_restriction_data_length := ?,
+ access_restriction_data := *
}
}
+}
- /* generalized GTP-C receive template */
- template (present) PDU_GTPC tr_GTP1C_PDU(template (present) OCT1 msg_type,
+template (value) MM_Context ts_MM_ContextUMTS(template (value) OCT16 ck,
+ template (value) OCT16 ik) := {
+ type_gtpc := '81'O,
+ context := {
+ mmcontUMTS := {
+ lengthf := 0, /* overwritten */
+ ksi := '001'B,
+ usedGPRSIntegrityAlgorithm := '000'B,
+ ugipai := '1'B, /* Integrity Protection not required */
+ gupii := '1'B, /* Ignore "Used GPRS integrity protection algorithm" field" */
+ spare1 := '111'B,
+ noofVectors := 0, /* TODO: fill quintpuplets*/
+ security := '10'B, /* UMTS key and quintuplets */
+ ck := ck,
+ ik := ik,
+ quintupletlength := 0, /* overwritten */
+ quintuplet := ''O,
+ drx_par := '0000'O,
+ msNetW_cap_length := 0, /* overwritten */
+ msNetw_cap := omit,
+ containerLength := 0, /* overwritten */
+ container := omit,
+ access_restriction_data_length := 0, /* overwritten */
+ access_restriction_data := omit
+ }
+ }
+}
+
+/* 7.7.81 Direct Tunnel Flags */
+template (value) DirectTunnelFlags ts_DirectTunnelFlags(template (value) BIT1 dTI := '0'B,
+ template (value) BIT1 gCSI := '0'B,
+ template (value) BIT1 eI := '0'B) := {
+ type_gtpc := 'B6'O,
+ lengthf := 0, /* overwritten */
+ dTI := dTI,
+ gCSI := gCSI,
+ eI := eI,
+ spare := '00000'B
+}
+
+/* 7.7.29 PDP Context */
+template (value) PDP_Context_GTPC ts_PDP_Context_GTPC(template (value) octetstring pdp_addr,
+ template (value) octetstring ggsn_gsn_addr,
+ template (value) octetstring apn,
+ template (value) OCT4 ggsn_teic := '12345678'O,
+ template (value) OCT4 ggsn_teid := '87654321'O) := {
+ type_gtpc := '82'O,
+ lengthf := 0, /* overwritten */
+ nsapi := '0101'B,
+ order := '0'B,
+ asi := '0'B,
+ vaa := '0'B,
+ ea := '0'B,
+ sapi := '0011'B,
+ spare1 := '0000'B,
+ qos_subLength := 0, /* overwritten */
+ qos_sub := ts_QosProfileValueDefault,
+ qos_reqLength := 0, /* overwritten */
+ qos_req := ts_QosProfileValueDefault,
+ qos_negLength := 0, /* overwritten */
+ qos_neg := ts_QosProfileValueDefault,
+ snd := '0000'O,
+ snu := '0000'O,
+ sendNPDUnum := '00'O,
+ receiveNPDUnum := '00'O,
+ uteidControlPlane := ggsn_teic,
+ uteidData1 := ggsn_teid,
+ pdpcontext := '00'O,
+ pdp_typeorg := '0001'B, /* IETF */
+ spare2 := '1111'B,
+ pdp_typenum := '21'O, /* IETF IPV4 */
+ pdp_addressLength := 0, /* overwritten */
+ pdp_address := pdp_addr,
+ ggsn_addressControlPlaneLength := 0, /* overwritten */
+ ggsn_addressControlPlane := ggsn_gsn_addr,
+ ggsn_addressUserPlaneLength := 0, /* overwritten */
+ ggsn_addressUserPlane := ggsn_gsn_addr,
+ apnLength := 0, /* overwritten */
+ apn := apn,
+ transactionId := '0001'B,
+ spare3 := '0000'B,
+ transactionID_cont := '00'O,
+ pdp_typenum2 := omit,
+ pdp_addresslength2 := omit,
+ pdp_Address2 := omit
+}
+
+
+/* template matching reception of GTP-C unit-data */
+template (present) Gtp1cUnitdata tr_GTPC_MsgType(template (present) Gtp1cPeer peer,
+ template (present) OCT1 msg_type,
template (present) OCT4 teid,
- template (present) GTPC_PDUs pdu := ?) := {
- /* N-PDU Number flag (PN) shall be set to '0'. A GTP-C receiver shall not return an
- * error if this flag is set to '1'. */
- pn_bit := '0'B,
- /* Sequence number flag (S) shall be set to '1'. */
- s_bit := '1'B,
- e_bit := ?,
- spare := ?,
- /* Protocol Type flag (PT) shall be set to '1'.*/
- pt := '1'B,
- /* Version shall be set to decimal 1 ('001'). */
- version := '001'B,
- messageType := msg_type,
- lengthf := ?,
- teid := teid,
- opt_part := *,
- gtpc_pdu := pdu
- }
+ template (present) GTPC_PDUs pdus := ?) := {
+ peer := peer,
+ gtpc := tr_GTP1C_PDU(msg_type, teid, pdus)
+}
- /* generalized GTP-C send template */
- template (value) PDU_GTPC ts_GTP1C_PDU(template (value) OCT1 msg_type,
- template (value) OCT4 teid,
- template (value) GTPC_PDUs pdu,
- template (value) uint16_t seq_nr) := {
- /* N-PDU Number flag (PN) shall be set to '0'. A GTP-C receiver shall not return an
- * error if this flag is set to '1'. */
- pn_bit := '0'B,
- /* Sequence number flag (S) shall be set to '1'. */
- s_bit := '1'B,
- e_bit := '0'B,
- spare := '0'B,
- /* Protocol Type flag (PT) shall be set to '1'.*/
- pt := '1'B,
- /* Version shall be set to decimal 1 ('001'). */
- version := '001'B,
- messageType := msg_type,
- lengthf := 0, /* we assume encoder overwrites this */
- teid := teid,
- opt_part := {
- sequenceNumber := int2oct(valueof(seq_nr), 2),
- npduNumber := '00'O,
- nextExtHeader := '00'O,
- gTPC_extensionHeader_List := omit
- },
- gtpc_pdu := pdu
- }
+/* template matching reception of GTP-C echo-request */
+template (present) Gtp1cUnitdata tr_GTPC_PING(template (present) Gtp1cPeer peer) := tr_GTPC_MsgType(peer, echoRequest, '00000000'O);
- /* recovery IE */
- template (value) Recovery_gtpc ts_Recovery(template (value) OCT1 restart_counter) := {
- type_gtpc := '0E'O,
- restartCounter := restart_counter
+template (present) GTPC_PDUs tr_EchoRespPDU(template (present) OCT1 restart_counter) := {
+ echoResponse := {
+ recovery := tr_Recovery(restart_counter),
+ private_extension_gtpc := *
}
+}
- template (present) Recovery_gtpc tr_Recovery(template (present) OCT1 restart_counter := ?) := {
- type_gtpc := '0E'O,
- restartCounter := restart_counter
- }
+/* template matching reception of GTP-C echo-response */
+template (present) Gtp1cUnitdata tr_GTPC_PONG(template (present) Gtp1cPeer peer) := tr_GTPC_MsgType(peer, echoResponse, '00000000'O, tr_EchoRespPDU(?));
- /* Packet TMSI - 7.7.5 */
- template (value) PacketTMSI ts_PTMSI(template (value) OCT4 ptmsi) := {
- type_gtpc := '05'O,
- p_tmsi := ptmsi
+template (value) GTPC_PDUs ts_EchoRespPDU(template (value) OCT1 restart_counter) := {
+ echoResponse := {
+ recovery := ts_Recovery(restart_counter),
+ private_extension_gtpc := omit
}
+}
- /* PTMSI Signature - 7.7.9 */
- template (value) PTMSI_Signature ts_PTMSI_sig(template (value) OCT3 ptmsi_sig) := {
- type_gtpc := '0C'O,
- ptmsi_Signature := ptmsi_sig
- }
+/* master template for senidng a GTP-C echo response */
+template (value) Gtp1cUnitdata ts_GTPC_PONG(template (value) Gtp1cPeer peer,
+ template (value) uint16_t seq,
+ template (value) OCT1 rest_ctr) := {
+ peer := peer,
+ gtpc := ts_GTP1C_PDU(echoResponse, '00000000'O, ts_EchoRespPDU(rest_ctr), seq)
+}
- /* MS Validated - 7.7.10 */
- template (value) MS_Validated ts_MS_Validated(template (value) BIT1 msValidated) := {
- type_gtpc := '0D'O,
- msValidated := msValidated,
- spare := '1111111'B
+template (value) GTPC_PDUs ts_EchoReqPDU := {
+ echoRequest := {
+ private_extension_gtpc := omit
}
- template (present) MS_Validated tr_MS_Validated(template (present) BIT1 msValidated := ?) := {
- type_gtpc := '0D'O,
- msValidated := msValidated,
- spare := '1111111'B
- }
- function f_tr_MS_Validated(template BIT1 msValidated := *) return template MS_Validated {
- if (istemplatekind(msValidated, "omit")) {
- return omit;
- } else if (istemplatekind(msValidated, "*")) {
- return *;
- } else {
- return tr_MS_Validated(msValidated);
- }
- }
- private function f_ts_MS_Validated(template (omit) BIT1 msValidated)
- return template (omit) MS_Validated {
- if (istemplatekind(msValidated, "omit")) {
- return omit;
- }
- return ts_MS_Validated(valueof(msValidated));
- }
+}
- /* 7.7.13 TEI Data I */
- template (value) TeidDataI ts_TeidDataI(template (value) OCT4 teid) := {
- type_gtpc := '10'O,
- teidDataI := teid
- }
- template (present) TeidDataI tr_TeidDataI(template (present) OCT4 teid := ?) := {
- type_gtpc := '10'O,
- teidDataI := teid
- }
+/* master template for sending a GTP-C echo request */
+template (value) Gtp1cUnitdata ts_GTPC_PING(template (value) Gtp1cPeer peer,
+ template (value) uint16_t seq) := {
+ peer := peer,
+ gtpc := ts_GTP1C_PDU(echoRequest, '00000000'O, ts_EchoReqPDU, seq)
+}
- /* 7.7.14 TEI Control Plane */
- template (value) TeidControlPlane ts_TEIC(template (value) OCT4 teic) := {
- type_gtpc := '11'O,
- teidControlPlane := teic
- }
- template (present) TeidControlPlane tr_TEIC(template (present) OCT4 teic := ?) := {
- type_gtpc := '11'O,
- teidControlPlane := teic
- }
- private function f_ts_TEIC(template (omit) OCT4 teic)
- return template (omit) TeidControlPlane {
- if (istemplatekind(teic, "omit")) {
- return omit;
- }
- return ts_TEIC(valueof(teic));
- }
-
- /* 7.7.15 Tunnel Endpoint Identifier Data II */
- template (value) TeidDataII ts_TeidDataII(template (value) BIT4 nsapi,
- template (value) OCT4 teid) := {
- type_gtpc := '12'O,
- nsapi := nsapi,
- unused := '0000'B,
- teidDataII := teid
- }
- template (present) TeidDataII tr_TeidDataII(template (present) BIT4 nsapi := ?,
- template (present) OCT4 teid := ?) := {
- type_gtpc := '12'O,
- nsapi := nsapi,
- unused := '0000'B,
- teidDataII := teid
- }
-
- /* IMEI(SV) IE TS 29.060 7.7.53 */
- template (value) IMEISV_gtpc ts_IMEISV(template (value) OCT8 imeisv) := {
- type_gtpc := '9A'O,
- lengthf := 8,
- imeisv := imeisv
- }
- private function f_ts_IMEISV(template (omit) OCT8 imeisv)
- return template (omit) IMEISV_gtpc {
- if (istemplatekind(imeisv, "omit")) {
- return omit;
- }
- return ts_IMEISV(valueof(imeisv));
- }
-
- template (present) IMEISV_gtpc tr_IMEISV(template (present) OCT8 imeisv) := {
- type_gtpc := '9A'O,
- lengthf := 8,
- imeisv := imeisv
- }
-
- // MS Time Zone - 7.7.52
- template (value) MS_TimeZone ts_MS_TimeZone(template (value) OCT1 timeZone := '00'O,
- template (value) BIT2 daylightSavingTime := '00'B) := {
- type_gtpc := '99'O,
- lengthf := 2,
- timeZone := timeZone,
- daylightSavingTime := daylightSavingTime,
- spare1 := '000'B,
- sgsnAttempsToUpdateMS := '0'B, /* propietary, use it as spare */
- spare2 := '00'B
- }
- function f_ts_MS_TimeZone(template (omit) OCT1 timeZone, template (omit) BIT2 daylightSavingTime)
- return template (omit) MS_TimeZone {
- if (istemplatekind(timeZone, "omit") and istemplatekind(daylightSavingTime, "omit")) {
- return omit;
- }
- if (istemplatekind(timeZone, "omit")) {
- return ts_MS_TimeZone(daylightSavingTime := valueof(daylightSavingTime));
- }
- if (istemplatekind(daylightSavingTime, "omit")) {
- return ts_MS_TimeZone(valueof(timeZone));
- }
- return ts_MS_TimeZone(valueof(timeZone), valueof(daylightSavingTime));
- }
-
- template (present) MS_TimeZone tr_MS_TimeZone(template (present) OCT1 timeZone := ?,
- template (present) BIT2 daylightSavingTime := ?) := {
- type_gtpc := '99'O,
- lengthf := 2,
- timeZone := timeZone,
- daylightSavingTime := daylightSavingTime,
- spare1 := '000'B,
- sgsnAttempsToUpdateMS := '0'B, /* propietary, use it as spare */
- spare2 := '00'B
- }
-
- /* Charging Characteristics IE TS 29.060 7.7.23 */
- template (value) ChargingCharacteristics_GTPC ts_ChargingCharacteristics(template (value) OCT2 chargingChar) := {
- type_gtpc := '1A'O,
- chargingChar := chargingChar
- }
- private function f_ts_ChargingCharacteristics(template (omit) OCT2 chargingChar)
- return template (omit) ChargingCharacteristics_GTPC {
- if (istemplatekind(chargingChar, "omit")) {
- return omit;
- }
- return ts_ChargingCharacteristics(valueof(chargingChar));
- }
-
- template (present) ChargingCharacteristics_GTPC tr_ChargingCharacteristics(template (present) OCT2 chargingChar) := {
- type_gtpc := '1A'O,
- chargingChar := chargingChar
- }
-
- /* 7.7.28 MM Context */
- template (value) MM_Context ts_MM_ContextGSM(template (value) OCT8 kc,
- template (value) BIT3 cksn := '000'B,
- template (value) BIT3 gea := '000'B,
- template (value) octetstring triplet := ''O) := {
- type_gtpc := '81'O,
- context := {
- mmcontGSM := {
- lengthf := 0, /* overwritten */
- cksn := cksn,
- spare := '11111'B,
- usedCipher := gea,
- noofVectors := 0, /* overwritten */
- security := '01'B, /* GSM key and triplets */
- kc := kc,
- triplet := triplet,
- drx_par := '0000'O,
- msNetW_cap_length := 0, /* overwritten */
- msNetw_cap := omit,
- containerLength := 0, /* overwritten */
- container := omit,
- access_restriction_data_length := 0,
- access_restriction_data := omit
- }
- }
- }
- template (present) MM_Context tr_MM_ContextGSM(template (present) OCT8 kc := ?,
- template (present) BIT3 cksn := ?,
- template (present) BIT3 gea := ?,
- template (present) octetstring triplet := ?) := {
- type_gtpc := '81'O,
- context := {
- mmcontGSM := {
- lengthf := ?,
- cksn := cksn,
- spare := ?,
- usedCipher := gea,
- noofVectors := ?,
- security := '01'B, /* GSM key and triplets */
- kc := kc,
- triplet := triplet,
- drx_par := ?,
- msNetW_cap_length := ?,
- msNetw_cap := *,
- containerLength := ?,
- container := *,
- access_restriction_data_length := ?,
- access_restriction_data := *
- }
- }
- }
-
- template (value) MM_Context ts_MM_ContextUMTS(template (value) OCT16 ck,
- template (value) OCT16 ik) := {
- type_gtpc := '81'O,
- context := {
- mmcontUMTS := {
- lengthf := 0, /* overwritten */
- ksi := '001'B,
- usedGPRSIntegrityAlgorithm := '000'B,
- ugipai := '1'B, /* Integrity Protection not required */
- gupii := '1'B, /* Ignore "Used GPRS integrity protection algorithm" field" */
- spare1 := '111'B,
- noofVectors := 0, /* TODO: fill quintpuplets*/
- security := '10'B, /* UMTS key and quintuplets */
- ck := ck,
- ik := ik,
- quintupletlength := 0, /* overwritten */
- quintuplet := ''O,
- drx_par := '0000'O,
- msNetW_cap_length := 0, /* overwritten */
- msNetw_cap := omit,
- containerLength := 0, /* overwritten */
- container := omit,
- access_restriction_data_length := 0, /* overwritten */
- access_restriction_data := omit
- }
- }
- }
-
- /* 7.7.81 Direct Tunnel Flags */
- template (value) DirectTunnelFlags ts_DirectTunnelFlags(template (value) BIT1 dTI := '0'B,
- template (value) BIT1 gCSI := '0'B,
- template (value) BIT1 eI := '0'B) := {
- type_gtpc := 'B6'O,
- lengthf := 0, /* overwritten */
- dTI := dTI,
- gCSI := gCSI,
- eI := eI,
- spare := '00000'B
- }
-
- /* 7.7.29 PDP Context */
- template (value) PDP_Context_GTPC ts_PDP_Context_GTPC(template (value) octetstring pdp_addr,
- template (value) octetstring ggsn_gsn_addr,
- template (value) octetstring apn,
- template (value) OCT4 ggsn_teic := '12345678'O,
- template (value) OCT4 ggsn_teid := '87654321'O) := {
- type_gtpc := '82'O,
- lengthf := 0, /* overwritten */
- nsapi := '0101'B,
- order := '0'B,
- asi := '0'B,
- vaa := '0'B,
- ea := '0'B,
- sapi := '0011'B,
- spare1 := '0000'B,
- qos_subLength := 0, /* overwritten */
- qos_sub := ts_QosProfileValueDefault,
- qos_reqLength := 0, /* overwritten */
- qos_req := ts_QosProfileValueDefault,
- qos_negLength := 0, /* overwritten */
- qos_neg := ts_QosProfileValueDefault,
- snd := '0000'O,
- snu := '0000'O,
- sendNPDUnum := '00'O,
- receiveNPDUnum := '00'O,
- uteidControlPlane := ggsn_teic,
- uteidData1 := ggsn_teid,
- pdpcontext := '00'O,
- pdp_typeorg := '0001'B, /* IETF */
- spare2 := '1111'B,
- pdp_typenum := '21'O, /* IETF IPV4 */
- pdp_addressLength := 0, /* overwritten */
- pdp_address := pdp_addr,
- ggsn_addressControlPlaneLength := 0, /* overwritten */
- ggsn_addressControlPlane := ggsn_gsn_addr,
- ggsn_addressUserPlaneLength := 0, /* overwritten */
- ggsn_addressUserPlane := ggsn_gsn_addr,
- apnLength := 0, /* overwritten */
- apn := apn,
- transactionId := '0001'B,
- spare3 := '0000'B,
- transactionID_cont := '00'O,
- pdp_typenum2 := omit,
- pdp_addresslength2 := omit,
- pdp_Address2 := omit
- }
-
-
- /* template matching reception of GTP-C unit-data */
- template (present) Gtp1cUnitdata tr_GTPC_MsgType(template (present) Gtp1cPeer peer,
- template (present) OCT1 msg_type,
- template (present) OCT4 teid,
- template (present) GTPC_PDUs pdus := ?) := {
- peer := peer,
- gtpc := tr_GTP1C_PDU(msg_type, teid, pdus)
- }
-
- /* template matching reception of GTP-C echo-request */
- template (present) Gtp1cUnitdata tr_GTPC_PING(template (present) Gtp1cPeer peer) := tr_GTPC_MsgType(peer, echoRequest, '00000000'O);
-
- template (present) GTPC_PDUs tr_EchoRespPDU(template (present) OCT1 restart_counter) := {
- echoResponse := {
- recovery := tr_Recovery(restart_counter),
- private_extension_gtpc := *
- }
- }
-
- /* template matching reception of GTP-C echo-response */
- template (present) Gtp1cUnitdata tr_GTPC_PONG(template (present) Gtp1cPeer peer) := tr_GTPC_MsgType(peer, echoResponse, '00000000'O, tr_EchoRespPDU(?));
-
- template (value) GTPC_PDUs ts_EchoRespPDU(template (value) OCT1 restart_counter) := {
- echoResponse := {
- recovery := ts_Recovery(restart_counter),
- private_extension_gtpc := omit
- }
- }
-
- /* master template for senidng a GTP-C echo response */
- template (value) Gtp1cUnitdata ts_GTPC_PONG(template (value) Gtp1cPeer peer,
- template (value) uint16_t seq,
- template (value) OCT1 rest_ctr) := {
- peer := peer,
- gtpc := ts_GTP1C_PDU(echoResponse, '00000000'O, ts_EchoRespPDU(rest_ctr), seq)
- }
-
- template (value) GTPC_PDUs ts_EchoReqPDU := {
- echoRequest := {
- private_extension_gtpc := omit
- }
- }
-
- /* master template for sending a GTP-C echo request */
- template (value) Gtp1cUnitdata ts_GTPC_PING(template (value) Gtp1cPeer peer,
- template (value) uint16_t seq) := {
- peer := peer,
- gtpc := ts_GTP1C_PDU(echoRequest, '00000000'O, ts_EchoReqPDU, seq)
- }
-
- private function f_eua_ipv4_len(template OCT4 ip_addr) return template (present) integer {
- if (istemplatekind(ip_addr, "omit")) {
- return 2;
- } else if (istemplatekind(ip_addr, "*")) {
- return ?;
- } else if (istemplatekind(ip_addr, "?")) {
- return 6;
- }
+private function f_eua_ipv4_len(template OCT4 ip_addr) return template (present) integer {
+ if (istemplatekind(ip_addr, "omit")) {
+ return 2;
+ } else if (istemplatekind(ip_addr, "*")) {
+ return ?;
+ } else if (istemplatekind(ip_addr, "?")) {
return 6;
}
+ return 6;
+}
- private function f_eua_ipv6_len(template OCT16 ip_addr) return template (present) integer {
- if (istemplatekind(ip_addr, "omit")) {
- return 2;
- } else if (istemplatekind(ip_addr, "*")) {
- return ?;
- } else if (istemplatekind(ip_addr, "?")) {
- return 18;
- }
+private function f_eua_ipv6_len(template OCT16 ip_addr) return template (present) integer {
+ if (istemplatekind(ip_addr, "omit")) {
+ return 2;
+ } else if (istemplatekind(ip_addr, "*")) {
+ return ?;
+ } else if (istemplatekind(ip_addr, "?")) {
return 18;
}
+ return 18;
+}
- private function f_eua_ipv4v6_len(template OCT4 ip_addr4, template OCT16 ip_addr6) return template (present) integer {
- var integer len := 2;
- if (istemplatekind(ip_addr4, "*") or
- istemplatekind(ip_addr6, "*")) {
- return ?;
- }
- if (not istemplatekind(ip_addr4, "omit")) {
- len := len + 4;
- }
- if (not istemplatekind(ip_addr6, "omit")) {
- len := len + 16;
- }
- return len;
+private function f_eua_ipv4v6_len(template OCT4 ip_addr4, template OCT16 ip_addr6) return template (present) integer {
+ var integer len := 2;
+ if (istemplatekind(ip_addr4, "*") or
+ istemplatekind(ip_addr6, "*")) {
+ return ?;
}
+ if (not istemplatekind(ip_addr4, "omit")) {
+ len := len + 4;
+ }
+ if (not istemplatekind(ip_addr6, "omit")) {
+ len := len + 16;
+ }
+ return len;
+}
- template (present) EndUserAddress t_EuaIPv4(template OCT4 ip_addr) := {
- type_gtpc := '80'O,
- endUserAddress := {
- endUserAddressIPv4 := {
- lengthf := 2,
- pdp_typeorg := '0001'B,
- spare := '1111'B,
- pdp_typenum := '21'O,
- ipv4_address := ip_addr
- }
+template (present) EndUserAddress t_EuaIPv4(template OCT4 ip_addr) := {
+ type_gtpc := '80'O,
+ endUserAddress := {
+ endUserAddressIPv4 := {
+ lengthf := 2,
+ pdp_typeorg := '0001'B,
+ spare := '1111'B,
+ pdp_typenum := '21'O,
+ ipv4_address := ip_addr
}
}
- template (present) EndUserAddress t_EuaIPv4Dyn := t_EuaIPv4(omit);
- template (present) EndUserAddress tr_EuaIPv4(template (present) OCT4 ip_addr) modifies t_EuaIPv4 := {
- endUserAddress := {
- endUserAddressIPv4 := {
- lengthf := f_eua_ipv4_len(ip_addr)
- }
+}
+template (present) EndUserAddress t_EuaIPv4Dyn := t_EuaIPv4(omit);
+template (present) EndUserAddress tr_EuaIPv4(template (present) OCT4 ip_addr) modifies t_EuaIPv4 := {
+ endUserAddress := {
+ endUserAddressIPv4 := {
+ lengthf := f_eua_ipv4_len(ip_addr)
}
}
+}
- template (present) EndUserAddress t_EuaIPv6(template OCT16 ip_addr) := {
- type_gtpc := '80'O,
- endUserAddress := {
- endUserAddressIPv6 := {
- lengthf := 2,
- pdp_typeorg := '0001'B,
- spare := '1111'B,
- pdp_typenum := '57'O,
- ipv6_address := ip_addr
- }
+template (present) EndUserAddress t_EuaIPv6(template OCT16 ip_addr) := {
+ type_gtpc := '80'O,
+ endUserAddress := {
+ endUserAddressIPv6 := {
+ lengthf := 2,
+ pdp_typeorg := '0001'B,
+ spare := '1111'B,
+ pdp_typenum := '57'O,
+ ipv6_address := ip_addr
}
}
- template (present) EndUserAddress t_EuaIPv6Dyn := t_EuaIPv6(omit);
- template (present) EndUserAddress tr_EuaIPv6(template (present) OCT16 ip_addr) modifies t_EuaIPv6 := {
- endUserAddress := {
- endUserAddressIPv6 := {
- lengthf := f_eua_ipv6_len(ip_addr)
- }
+}
+template (present) EndUserAddress t_EuaIPv6Dyn := t_EuaIPv6(omit);
+template (present) EndUserAddress tr_EuaIPv6(template (present) OCT16 ip_addr) modifies t_EuaIPv6 := {
+ endUserAddress := {
+ endUserAddressIPv6 := {
+ lengthf := f_eua_ipv6_len(ip_addr)
}
}
+}
- /* 3GPP TS 29.060 Figure 37A: End User Address Information Element for IPv4v6 (both static) */
- template (present) EndUserAddress t_EuaIPv4v6(template OCT4 ip_addr4, template OCT16 ip_addr6) := {
- type_gtpc := '80'O,
- endUserAddress := {
- endUserAddressIPv4andIPv6 := {
- lengthf := 2,
- pdp_typeorg := '0001'B,
- spare := '1111'B,
- pdp_typenum := '8D'O,
- ipv4_address := ip_addr4,
- ipv6_address := ip_addr6
- }
+/* 3GPP TS 29.060 Figure 37A: End User Address Information Element for IPv4v6 (both static) */
+template (present) EndUserAddress t_EuaIPv4v6(template OCT4 ip_addr4, template OCT16 ip_addr6) := {
+ type_gtpc := '80'O,
+ endUserAddress := {
+ endUserAddressIPv4andIPv6 := {
+ lengthf := 2,
+ pdp_typeorg := '0001'B,
+ spare := '1111'B,
+ pdp_typenum := '8D'O,
+ ipv4_address := ip_addr4,
+ ipv6_address := ip_addr6
}
}
- template (present) EndUserAddress t_EuaIPv4Dynv6Dyn := t_EuaIPv4v6(omit, omit);
- template (present) EndUserAddress tr_EuaIPv4v6(template (present) OCT4 ip_addr4,
- template (present) OCT16 ip_addr6) modifies t_EuaIPv4v6 := {
- endUserAddress := {
- endUserAddressIPv4andIPv6 := {
- lengthf := f_eua_ipv4v6_len(ip_addr4, ip_addr6)
- }
+}
+template (present) EndUserAddress t_EuaIPv4Dynv6Dyn := t_EuaIPv4v6(omit, omit);
+template (present) EndUserAddress tr_EuaIPv4v6(template (present) OCT4 ip_addr4,
+ template (present) OCT16 ip_addr6) modifies t_EuaIPv4v6 := {
+ endUserAddress := {
+ endUserAddressIPv4andIPv6 := {
+ lengthf := f_eua_ipv4v6_len(ip_addr4, ip_addr6)
}
}
+}
- template (value) AccessPointName ts_APN(template (value) octetstring apn) := {
- type_gtpc := '83'O,
- lengthf := lengthof(apn),
- apn_value := apn
- }
+template (value) AccessPointName ts_APN(template (value) octetstring apn) := {
+ type_gtpc := '83'O,
+ lengthf := lengthof(apn),
+ apn_value := apn
+}
- template (value) GSN_Address_GTPC ts_GsnAddr(template (value) octetstring ip_addr) := {
- type_gtpc := '85'O,
- lengthf := lengthof(ip_addr),
- addressf := ip_addr
+template (value) GSN_Address_GTPC ts_GsnAddr(template (value) octetstring ip_addr) := {
+ type_gtpc := '85'O,
+ lengthf := lengthof(ip_addr),
+ addressf := ip_addr
+}
+private function f_ts_GsnAddr(template (omit) octetstring ip_addr) return template (omit) GSN_Address_GTPC {
+ if (istemplatekind(ip_addr, "omit")) {
+ return omit;
}
- private function f_ts_GsnAddr(template (omit) octetstring ip_addr) return template (omit) GSN_Address_GTPC {
- if (istemplatekind(ip_addr, "omit")) {
- return omit;
- }
- return ts_GsnAddr(valueof(ip_addr));
- }
- template (present) GSN_Address_GTPC tr_GsnAddr(template (present) octetstring ip_addr := ?) := {
- type_gtpc := '85'O,
- lengthf := ?,
- addressf := ip_addr
- }
+ return ts_GsnAddr(valueof(ip_addr));
+}
+template (present) GSN_Address_GTPC tr_GsnAddr(template (present) octetstring ip_addr := ?) := {
+ type_gtpc := '85'O,
+ lengthf := ?,
+ addressf := ip_addr
+}
- template (value) MSISDN ts_Msisdn(template (value) octetstring msisdn) := {
- type_gtpc := '86'O,
- lengthf := lengthof(msisdn),
- msisdn := msisdn
- }
+template (value) MSISDN ts_Msisdn(template (value) octetstring msisdn) := {
+ type_gtpc := '86'O,
+ lengthf := lengthof(msisdn),
+ msisdn := msisdn
+}
- template (value) QoSV_GTPC ts_QosValueDefault := {
- reliabilityClass := '011'B,
- delayClass := '001'B,
- spare1 := '00'B,
- precedenceClass := '010'B,
- spare2 := '0'B,
- peakThroughput := '1001'B,
- meanThroughput := '11111'B,
- spare3 := '000'B,
- deliverErroneusSDU := '010'B, /* Erroneus SDU are delivered */
- deliveryOrder := '10'B, /* Without delivery order */
- trafficClass := '100'B, /* Background */
- maxSDUSize := '96'O, /* 1500 octets */
- maxBitrateUplink := 'FE'O, /* 8640, continues in extended octet */
- maxBitrateDownlink := 'FE'O, /* 8640, continues in extended octet */
- sduErrorRatio := '0100'B, /* 1x10^-4 */
- residualBER := '0101'B, /* 1x10^-3 */
- trafficHandlingPriority := '01'B, /* prio 1 */
- transferDelay := '000001'B, /* 10 ms */
- guaranteedBitRateUplink := 'FE'O, /* 8640, continues in extended octet */
- guaranteedBitRateDownlink := 'FE'O, /* 8640, continues in extended octet */
- sourceStatisticsDescriptor := '0000'B, /* unknown */
- signallingIndication := '0'B, /* Not optimized */
- spare4 := '000'B,
- maxBitrateDownlinkExt := '5B'O, /* 33 mbps */
- guaranteedBitRateDownlinkExt := '5B'O, /* 33 mbps */
- maxBitrateUplinkExt := '6e'O, /* 52 mbps */
- guaranteedBitRateUplinkExt := '6e'O /* 52 mbps */
- }
+template (value) QoSV_GTPC ts_QosValueDefault := {
+ reliabilityClass := '011'B,
+ delayClass := '001'B,
+ spare1 := '00'B,
+ precedenceClass := '010'B,
+ spare2 := '0'B,
+ peakThroughput := '1001'B,
+ meanThroughput := '11111'B,
+ spare3 := '000'B,
+ deliverErroneusSDU := '010'B, /* Erroneus SDU are delivered */
+ deliveryOrder := '10'B, /* Without delivery order */
+ trafficClass := '100'B, /* Background */
+ maxSDUSize := '96'O, /* 1500 octets */
+ maxBitrateUplink := 'FE'O, /* 8640, continues in extended octet */
+ maxBitrateDownlink := 'FE'O, /* 8640, continues in extended octet */
+ sduErrorRatio := '0100'B, /* 1x10^-4 */
+ residualBER := '0101'B, /* 1x10^-3 */
+ trafficHandlingPriority := '01'B, /* prio 1 */
+ transferDelay := '000001'B, /* 10 ms */
+ guaranteedBitRateUplink := 'FE'O, /* 8640, continues in extended octet */
+ guaranteedBitRateDownlink := 'FE'O, /* 8640, continues in extended octet */
+ sourceStatisticsDescriptor := '0000'B, /* unknown */
+ signallingIndication := '0'B, /* Not optimized */
+ spare4 := '000'B,
+ maxBitrateDownlinkExt := '5B'O, /* 33 mbps */
+ guaranteedBitRateDownlinkExt := '5B'O, /* 33 mbps */
+ maxBitrateUplinkExt := '6e'O, /* 52 mbps */
+ guaranteedBitRateUplinkExt := '6e'O /* 52 mbps */
+}
- template (value) QualityOfServiceProfile_Value ts_QosProfileValueDefault := {
- allocRetensionPrio := '00'O,
- qos_ProfileValue := ts_QosValueDefault
- }
+template (value) QualityOfServiceProfile_Value ts_QosProfileValueDefault := {
+ allocRetensionPrio := '00'O,
+ qos_ProfileValue := ts_QosValueDefault
+}
- template (value) QualityOfServiceProfile ts_QosDefault := {
- type_gtpc := '87'O,
- lengthf := 17,
- allocRetensionPrio := '00'O,
- qos_ProfileValue := ts_QosValueDefault
- }
+template (value) QualityOfServiceProfile ts_QosDefault := {
+ type_gtpc := '87'O,
+ lengthf := 17,
+ allocRetensionPrio := '00'O,
+ qos_ProfileValue := ts_QosValueDefault
+}
- template (value) IMSI_gtpc ts_Imsi(template (value) hexstring digits) := {
- type_gtpc := '02'O,
- digits := digits,
- padding := 'F'H
+template (value) IMSI_gtpc ts_Imsi(template (value) hexstring digits) := {
+ type_gtpc := '02'O,
+ digits := digits,
+ padding := 'F'H
+}
+function f_ts_Imsi(template (omit) hexstring digits := omit) return template (omit) IMSI_gtpc {
+ var template (omit) IMSI_gtpc imsi;
+ if (istemplatekind(digits, "omit")) {
+ imsi := omit;
+ } else {
+ imsi := ts_Imsi(valueof(digits));
}
- function f_ts_Imsi(template (omit) hexstring digits := omit) return template (omit) IMSI_gtpc {
- var template (omit) IMSI_gtpc imsi;
- if (istemplatekind(digits, "omit")) {
- imsi := omit;
- } else {
- imsi := ts_Imsi(valueof(digits));
- }
- return imsi;
+ return imsi;
+}
+template (present) IMSI_gtpc tr_Imsi(template (present) hexstring digits) := {
+ type_gtpc := '02'O,
+ digits := digits,
+ padding := 'F'H
+}
+function f_tr_Imsi(template hexstring digits := *) return template IMSI_gtpc {
+ if (istemplatekind(digits, "omit")) {
+ return omit;
+ } else if (istemplatekind(digits, "*")) {
+ return *;
+ } else {
+ return tr_Imsi(digits);
}
- template (present) IMSI_gtpc tr_Imsi(template (present) hexstring digits) := {
- type_gtpc := '02'O,
- digits := digits,
- padding := 'F'H
- }
- function f_tr_Imsi(template hexstring digits := *) return template IMSI_gtpc {
- if (istemplatekind(digits, "omit")) {
- return omit;
- } else if (istemplatekind(digits, "*")) {
- return *;
- } else {
- return tr_Imsi(digits);
- }
- }
+}
- /* 7.7.50 RAT Type */
- type enumerated GTP_RATType {
- GTP_RAT_TYPE_RESERVED (0),
- GTP_RAT_TYPE_UTRAN (1),
- GTP_RAT_TYPE_GERAN (2),
- GTP_RAT_TYPE_WLAN (3),
- GTP_RAT_TYPE_GAN (4),
- GTP_RAT_TYPE_HSPA_E (5),
- GTP_RAT_TYPE_EUTRAN (6)
- };
- template (value) RATType ts_RATType(template (value) OCT1 rat_type) := {
- type_gtpc := '97'O,
- lengthf := 1,
- ratTypeValue := rat_type
+/* 7.7.50 RAT Type */
+type enumerated GTP_RATType {
+ GTP_RAT_TYPE_RESERVED (0),
+ GTP_RAT_TYPE_UTRAN (1),
+ GTP_RAT_TYPE_GERAN (2),
+ GTP_RAT_TYPE_WLAN (3),
+ GTP_RAT_TYPE_GAN (4),
+ GTP_RAT_TYPE_HSPA_E (5),
+ GTP_RAT_TYPE_EUTRAN (6)
+};
+template (value) RATType ts_RATType(template (value) OCT1 rat_type) := {
+ type_gtpc := '97'O,
+ lengthf := 1,
+ ratTypeValue := rat_type
+}
+function f_ts_RATType(template (omit) OCT1 rat_type := omit) return template (omit) RATType {
+ if (istemplatekind(rat_type, "omit")) {
+ return omit;
+ } else {
+ return ts_RATType(valueof(rat_type));
}
- function f_ts_RATType(template (omit) OCT1 rat_type := omit) return template (omit) RATType {
- if (istemplatekind(rat_type, "omit")) {
- return omit;
- } else {
- return ts_RATType(valueof(rat_type));
- }
+}
+template (present) RATType tr_RATType(template (present) OCT1 rat_type) := {
+ type_gtpc := '97'O,
+ lengthf := 1,
+ ratTypeValue := rat_type
+}
+function f_tr_RATType(template OCT1 rat_type := *) return template RATType {
+ if (istemplatekind(rat_type, "omit")) {
+ return omit;
+ } else if (istemplatekind(rat_type, "*")) {
+ return *;
+ } else {
+ return tr_RATType(rat_type);
}
- template (present) RATType tr_RATType(template (present) OCT1 rat_type) := {
- type_gtpc := '97'O,
- lengthf := 1,
- ratTypeValue := rat_type
- }
- function f_tr_RATType(template OCT1 rat_type := *) return template RATType {
- if (istemplatekind(rat_type, "omit")) {
- return omit;
- } else if (istemplatekind(rat_type, "*")) {
- return *;
- } else {
- return tr_RATType(rat_type);
- }
- }
+}
- template (value) RoutingAreaIdentity ts_RoutingAreaIdentity(template (value) hexstring mcc_digits,
- template (value) hexstring mnc_digits,
- template (value) OCT2 lac,
- template (value) OCT1 rac) := {
- type_gtpc := '03'O,
- mcc_digits := mcc_digits,
- mnc_digits := mnc_digits,
- lac := lac,
- rac := rac
- }
+template (value) RoutingAreaIdentity ts_RoutingAreaIdentity(template (value) hexstring mcc_digits,
+ template (value) hexstring mnc_digits,
+ template (value) OCT2 lac,
+ template (value) OCT1 rac) := {
+ type_gtpc := '03'O,
+ mcc_digits := mcc_digits,
+ mnc_digits := mnc_digits,
+ lac := lac,
+ rac := rac
+}
- template (value) GeographicLocationCGI
- ts_GeographicLocationCGI(template (value) hexstring mcc,
- template (value) hexstring mnc,
- template (value) OCT2 lac,
- template (value) OCT2 cI_value) :=
- {
- mccDigit1 := mcc[0],
- mccDigit2 := mcc[1],
- mccDigit3 := mcc[2],
- mncDigit3 := mnc[2], /* 'F'H for 2 digit MNC */
- mncDigit1 := mnc[0],
- mncDigit2 := mnc[1],
- lac := lac,
- cI_value := cI_value
- }
+template (value) GeographicLocationCGI
+ts_GeographicLocationCGI(template (value) hexstring mcc,
+ template (value) hexstring mnc,
+ template (value) OCT2 lac,
+ template (value) OCT2 cI_value) :=
+{
+ mccDigit1 := mcc[0],
+ mccDigit2 := mcc[1],
+ mccDigit3 := mcc[2],
+ mncDigit3 := mnc[2], /* 'F'H for 2 digit MNC */
+ mncDigit1 := mnc[0],
+ mncDigit2 := mnc[1],
+ lac := lac,
+ cI_value := cI_value
+}
- template (value) GTPC_PDUs ts_CreatePdpPDU(template (value) hexstring imsi,
- template (value) OCT1 restart_ctr,
- template (value) OCT4 teid_data,
- template (value) OCT4 teid_ctrl,
- template (value) BIT4 nsapi,
- template (value) EndUserAddress eua,
- template (value) octetstring apn,
- template (value) octetstring sgsn_ip_sign,
- template (value) octetstring sgsn_ip_data,
- template (value) octetstring msisdn,
- template (omit) ProtConfigOptions pco := omit,
- template (omit) OCT1 ratType := omit,
- template (omit) UserLocationInformation uli := omit,
- template (omit) OCT2 charging_char := omit,
- template (omit) OCT8 imeisv := omit,
- template (omit) MS_TimeZone ms_tz := omit) := {
- createPDPContextRequest := {
+template (value) GTPC_PDUs ts_CreatePdpPDU(template (value) hexstring imsi,
+ template (value) OCT1 restart_ctr,
+ template (value) OCT4 teid_data,
+ template (value) OCT4 teid_ctrl,
+ template (value) BIT4 nsapi,
+ template (value) EndUserAddress eua,
+ template (value) octetstring apn,
+ template (value) octetstring sgsn_ip_sign,
+ template (value) octetstring sgsn_ip_data,
+ template (value) octetstring msisdn,
+ template (omit) ProtConfigOptions pco := omit,
+ template (omit) OCT1 ratType := omit,
+ template (omit) UserLocationInformation uli := omit,
+ template (omit) OCT2 charging_char := omit,
+ template (omit) OCT8 imeisv := omit,
+ template (omit) MS_TimeZone ms_tz := omit) := {
+ createPDPContextRequest := {
+ imsi := ts_Imsi(imsi),
+ rai := omit,
+ recovery := ts_Recovery(restart_ctr),
+ selectionMode := {
+ type_gtpc := '0F'O,
+ selectModeValue := '00'B,
+ spare := '111111'B
+ },
+ teidDataI := {
+ type_gtpc := '00'O,
+ teidDataI := teid_data
+ },
+ teidControlPlane := {
+ type_gtpc := '00'O,
+ teidControlPlane := teid_ctrl
+ },
+ nsapi := ts_NSAPI(nsapi),
+ linked_nsapi := omit,
+ charging_char := f_ts_ChargingCharacteristics(charging_char),
+ trace_ref := omit,
+ trace_type := omit,
+ endUserAddress := eua,
+ accessPointName := ts_APN(apn),
+ protConfigOptions := pco,
+ sgsn_addr_signalling := ts_GsnAddr(sgsn_ip_sign),
+ sgsn_addr_traffic := ts_GsnAddr(sgsn_ip_data),
+ msisdn := ts_Msisdn(msisdn),
+ qualityOfServiceProfile := ts_QosDefault,
+ tft := omit,
+ triggerId := omit,
+ omcId := omit,
+ commonFlags := omit,
+ aPN_Restriction := omit,
+ ratType := f_ts_RATType(ratType),
+ userLocationInformation := uli,
+ mS_TimeZone := ms_tz,
+ imeisv := f_ts_IMEISV(imeisv),
+ camelChargingInformationContainer := omit,
+ additionalTraceInfo := omit,
+ correlationID := omit,
+ evolvedAllocationRetentionPriorityI := omit,
+ extendedCommonFlags := omit,
+ userCSGInformation := omit,
+ aPN_AMBR := omit,
+ signallingPriorityIndication := omit,
+ cN_OperatorSelectionEntity := omit,
+ private_extension_gtpc := omit
+ }
+}
+
+template (value) Gtp1cUnitdata ts_GTPC_CreatePDP(template (value) Gtp1cPeer peer,
+ template (value) uint16_t seq,
+ template (value) hexstring imsi,
+ template (value) OCT1 restart_ctr,
+ template (value) OCT4 teid_data,
+ template (value) OCT4 teid_ctrl,
+ template (value) BIT4 nsapi,
+ template (value) EndUserAddress eua,
+ template (value) octetstring apn,
+ template (value) octetstring sgsn_ip_sign,
+ template (value) octetstring sgsn_ip_data,
+ template (value) octetstring msisdn,
+ template (omit) ProtConfigOptions pco := omit,
+ template (omit) OCT1 ratType := omit,
+ template (omit) UserLocationInformation uli := omit,
+ template (omit) OCT2 charging_char := omit,
+ template (omit) OCT8 imeisv := omit,
+ template (omit) MS_TimeZone ms_tz := omit) := {
+ peer := peer,
+ gtpc := ts_GTP1C_PDU(createPDPContextRequest, '00000000'O,
+ ts_CreatePdpPDU(imsi, restart_ctr, teid_data, teid_ctrl,
+ nsapi, eua, apn, sgsn_ip_sign,
+ sgsn_ip_data, msisdn, pco, ratType, uli,
+ charging_char, imeisv, ms_tz),
+ seq)
+}
+
+
+template (value) GTPC_PDUs ts_UpdatePdpPDU(template (value) hexstring imsi,
+ template (value) OCT1 restart_ctr,
+ template (value) OCT4 teid_data,
+ template (value) OCT4 teid_ctrl,
+ template (value) BIT4 nsapi,
+ template (value) octetstring sgsn_ip_sign,
+ template (value) octetstring sgsn_ip_data,
+ template (omit) ProtConfigOptions pco := omit,
+ template (omit) OCT1 ratType := omit,
+ template (omit) UserLocationInformation uli := omit) := {
+ updatePDPContextRequest := {
+ updatePDPContextRequestSGSN := {
imsi := ts_Imsi(imsi),
rai := omit,
recovery := ts_Recovery(restart_ctr),
- selectionMode := {
- type_gtpc := '0F'O,
- selectModeValue := '00'B,
- spare := '111111'B
- },
teidDataI := {
type_gtpc := '00'O,
teidDataI := teid_data
@@ -818,29 +903,23 @@
teidControlPlane := teid_ctrl
},
nsapi := ts_NSAPI(nsapi),
- linked_nsapi := omit,
- charging_char := f_ts_ChargingCharacteristics(charging_char),
trace_ref := omit,
trace_type := omit,
- endUserAddress := eua,
- accessPointName := ts_APN(apn),
protConfigOptions := pco,
- sgsn_addr_signalling := ts_GsnAddr(sgsn_ip_sign),
+ sgsn_addr_controlPlane := ts_GsnAddr(sgsn_ip_sign),
sgsn_addr_traffic := ts_GsnAddr(sgsn_ip_data),
- msisdn := ts_Msisdn(msisdn),
+ alt_ggsn_addr_controlPane := omit,
+ alt_ggsn_addr_traffic := omit,
qualityOfServiceProfile := ts_QosDefault,
tft := omit,
triggerId := omit,
omcId := omit,
commonFlags := omit,
- aPN_Restriction := omit,
ratType := f_ts_RATType(ratType),
userLocationInformation := uli,
- mS_TimeZone := ms_tz,
- imeisv := f_ts_IMEISV(imeisv),
- camelChargingInformationContainer := omit,
+ mS_TimeZone := omit,
additionalTraceInfo := omit,
- correlationID := omit,
+ directTunnelFlags := omit,
evolvedAllocationRetentionPriorityI := omit,
extendedCommonFlags := omit,
userCSGInformation := omit,
@@ -850,181 +929,170 @@
private_extension_gtpc := omit
}
}
+}
- template (value) Gtp1cUnitdata ts_GTPC_CreatePDP(template (value) Gtp1cPeer peer,
- template (value) uint16_t seq,
- template (value) hexstring imsi,
- template (value) OCT1 restart_ctr,
- template (value) OCT4 teid_data,
- template (value) OCT4 teid_ctrl,
- template (value) BIT4 nsapi,
- template (value) EndUserAddress eua,
- template (value) octetstring apn,
- template (value) octetstring sgsn_ip_sign,
- template (value) octetstring sgsn_ip_data,
- template (value) octetstring msisdn,
- template (omit) ProtConfigOptions pco := omit,
- template (omit) OCT1 ratType := omit,
- template (omit) UserLocationInformation uli := omit,
- template (omit) OCT2 charging_char := omit,
- template (omit) OCT8 imeisv := omit,
- template (omit) MS_TimeZone ms_tz := omit) := {
- peer := peer,
- gtpc := ts_GTP1C_PDU(createPDPContextRequest, '00000000'O,
- ts_CreatePdpPDU(imsi, restart_ctr, teid_data, teid_ctrl,
- nsapi, eua, apn, sgsn_ip_sign,
- sgsn_ip_data, msisdn, pco, ratType, uli,
- charging_char, imeisv, ms_tz),
- seq)
+template (value) Gtp1cUnitdata ts_GTPC_UpdatePDP(template (value) Gtp1cPeer peer,
+ template (value) OCT4 teid,
+ template (value) uint16_t seq,
+ template (value) hexstring imsi,
+ template (value) OCT1 restart_ctr,
+ template (value) OCT4 teid_data,
+ template (value) OCT4 teid_ctrl,
+ template (value) BIT4 nsapi,
+ template (value) octetstring sgsn_ip_sign,
+ template (value) octetstring sgsn_ip_data,
+ template (omit) ProtConfigOptions pco := omit,
+ template (omit) OCT1 ratType := omit,
+ template (omit) UserLocationInformation uli := omit) := {
+ peer := peer,
+ gtpc := ts_GTP1C_PDU(updatePDPContextRequest, teid,
+ ts_UpdatePdpPDU(imsi, restart_ctr, teid_data, teid_ctrl,
+ nsapi, sgsn_ip_sign,
+ sgsn_ip_data, pco, ratType, uli),
+ seq)
+}
+
+/* Update PPD Context Sent GGSN -> SGSN: */
+template (value) GTPC_PDUs ts_UpdatePdpPDU_GGSN(template (value) BIT4 nsapi,
+ template (omit) hexstring imsi := omit,
+ template (omit) Recovery_gtpc recovery := omit,
+ template (omit) EndUserAddress eua := omit,
+ template (omit) ProtConfigOptions pco := omit,
+ template (omit) QualityOfServiceProfile qos := omit,
+ template (omit) DirectTunnelFlags dtf := omit) := {
+ updatePDPContextRequest := {
+ updatePDPContextRequestGGSN := {
+ imsi := f_ts_Imsi(imsi),
+ recovery := recovery,
+ nsapi := ts_NSAPI(nsapi),
+ endUserAddress := eua,
+ protConfigOptions := pco,
+ qualityOfServiceProfile := qos,
+ tft := omit,
+ commonFlags := omit,
+ aPN_Restriction := omit,
+ mS_InfoChangeReportingAction := omit,
+ directTunnelFlags := dtf,
+ bearerControlMode := omit,
+ evolvedAllocationRetentionPriorityI := omit,
+ extendedCommonFlags := omit,
+ cSGInfoReportingAction := omit,
+ aPN_AMBR := omit,
+ private_extension_gtpc := omit
+ }
}
+}
+template (value) Gtp1cUnitdata ts_GTPC_UpdatePDP_GGSN(template (value) Gtp1cPeer peer,
+ template (value) OCT4 teid,
+ template (value) uint16_t seq,
+ template (value) BIT4 nsapi,
+ template (omit) hexstring imsi := omit,
+ template (omit) Recovery_gtpc recovery := omit,
+ template (omit) EndUserAddress eua := omit,
+ template (omit) ProtConfigOptions pco := omit,
+ template (omit) QualityOfServiceProfile qos := omit,
+ template (omit) DirectTunnelFlags dtf := omit) := {
+ peer := peer,
+ gtpc := ts_GTP1C_PDU(updatePDPContextRequest, teid,
+ ts_UpdatePdpPDU_GGSN(nsapi, imsi, recovery,
+ eua, pco, qos, dtf),
+ seq)
+}
- template (value) GTPC_PDUs ts_UpdatePdpPDU(template (value) hexstring imsi,
- template (value) OCT1 restart_ctr,
+template (value) NSAPI_GTPC ts_NSAPI(template (value) BIT4 nsapi) := {
+ type_gtpc := '14'O,
+ nsapi := nsapi,
+ unused := '0000'B
+}
+
+template (value) ReorderingRequired ts_ReorderReq(template (value) boolean req := false) := {
+ type_gtpc := '08'O,
+ reordreq := bool2bit(valueof(req)),
+ spare := '0000000'B
+}
+
+template (value) GTPC_PDUs ts_CreatePdpRespPDU(template (value) GTP_Cause cause,
+ template (value) OCT4 teid_data,
+ template (value) OCT4 teid_ctrl,
+ template (value) BIT4 nsapi,
+ template (value) octetstring ggsn_ip_sign,
+ template (value) octetstring ggsn_ip_data,
+ template (value) OCT4 chg_id,
+ template (omit) EndUserAddress eua := omit,
+ template (omit) Recovery_gtpc recovery := omit,
+ template (omit) ProtConfigOptions pco := omit) := {
+ createPDPContextResponse := {
+ cause := ts_Cause_gtpc(cause),
+ reorderingRequired := ts_ReorderReq(false),
+ recovery := recovery,
+ teidDataI := {
+ type_gtpc := '00'O,
+ teidDataI := teid_data
+ },
+ teidControlPlane := {
+ type_gtpc := '00'O,
+ teidControlPlane := teid_ctrl
+ },
+ nsapi := ts_NSAPI(nsapi),
+ chargingID := {
+ type_gtpc := '7F'O,
+ chargingID := chg_id
+ },
+ endUserAddress := eua,
+ protConfigOptions := pco,
+ ggsn_addr_controlPlane := ts_GsnAddr(ggsn_ip_sign),
+ ggsn_addr_traffic := ts_GsnAddr(ggsn_ip_data),
+ alt_ggsn_addr_controlPane := omit,
+ alt_ggsn_addr_traffic := omit,
+ qualityOfServiceProfile := ts_QosDefault,
+ commonFlags := omit,
+ aPN_Restriction := omit,
+ mS_InfoChangeReportingAction := omit,
+ bearerControlMode := omit,
+ evolvedAllocationRetentionPriorityI := omit,
+ extendedCommonFlag := omit,
+ csg_information_reporting_action := omit,
+ aPN_AMBR := omit,
+ gGSN_BackOffTime := omit,
+ private_extension_gtpc := omit
+ }
+}
+
+template (value) Gtp1cUnitdata ts_GTPC_CreatePdpResp(template (value) Gtp1cPeer peer,
+ template (value) uint16_t seq,
+ template (value) OCT4 teid,
+ template (value) GTP_Cause cause,
+ template (value) OCT4 teid_ctrl,
+ template (value) OCT4 teid_data,
+ template (value) BIT4 nsapi,
+ template (value) octetstring ggsn_ip_sign,
+ template (value) octetstring ggsn_ip_data,
+ template (value) OCT4 chg_id,
+ template (omit) EndUserAddress eua := omit,
+ template (omit) Recovery_gtpc recovery := omit,
+ template (omit) ProtConfigOptions pco := omit) := {
+ peer := peer,
+ gtpc := ts_GTP1C_PDU(createPDPContextResponse, teid,
+ ts_CreatePdpRespPDU(cause, teid_data, teid_ctrl, nsapi,
+ ggsn_ip_sign, ggsn_ip_data, chg_id,
+ eua, recovery, pco),
+ seq)
+}
+
+template (value) GTPC_PDUs ts_UpdatePdpRespGGSNPDU(template (value) GTP_Cause cause,
template (value) OCT4 teid_data,
template (value) OCT4 teid_ctrl,
- template (value) BIT4 nsapi,
- template (value) octetstring sgsn_ip_sign,
- template (value) octetstring sgsn_ip_data,
- template (omit) ProtConfigOptions pco := omit,
- template (omit) OCT1 ratType := omit,
- template (omit) UserLocationInformation uli := omit) := {
- updatePDPContextRequest := {
- updatePDPContextRequestSGSN := {
- imsi := ts_Imsi(imsi),
- rai := omit,
- recovery := ts_Recovery(restart_ctr),
- teidDataI := {
- type_gtpc := '00'O,
- teidDataI := teid_data
- },
- teidControlPlane := {
- type_gtpc := '00'O,
- teidControlPlane := teid_ctrl
- },
- nsapi := ts_NSAPI(nsapi),
- trace_ref := omit,
- trace_type := omit,
- protConfigOptions := pco,
- sgsn_addr_controlPlane := ts_GsnAddr(sgsn_ip_sign),
- sgsn_addr_traffic := ts_GsnAddr(sgsn_ip_data),
- alt_ggsn_addr_controlPane := omit,
- alt_ggsn_addr_traffic := omit,
- qualityOfServiceProfile := ts_QosDefault,
- tft := omit,
- triggerId := omit,
- omcId := omit,
- commonFlags := omit,
- ratType := f_ts_RATType(ratType),
- userLocationInformation := uli,
- mS_TimeZone := omit,
- additionalTraceInfo := omit,
- directTunnelFlags := omit,
- evolvedAllocationRetentionPriorityI := omit,
- extendedCommonFlags := omit,
- userCSGInformation := omit,
- aPN_AMBR := omit,
- signallingPriorityIndication := omit,
- cN_OperatorSelectionEntity := omit,
- private_extension_gtpc := omit
- }
- }
- }
+ template (value) octetstring ggsn_ip_sign,
+ template (value) octetstring ggsn_ip_data,
+ template (value) OCT4 chg_id,
+ template (omit) EndUserAddress eua := omit,
+ template (omit) Recovery_gtpc recovery := omit,
+ template (omit) ProtConfigOptions pco := omit) := {
+ updatePDPContextResponse := {
+ updatePDPContextResponseGGSN := {
- template (value) Gtp1cUnitdata ts_GTPC_UpdatePDP(template (value) Gtp1cPeer peer,
- template (value) OCT4 teid,
- template (value) uint16_t seq,
- template (value) hexstring imsi,
- template (value) OCT1 restart_ctr,
- template (value) OCT4 teid_data,
- template (value) OCT4 teid_ctrl,
- template (value) BIT4 nsapi,
- template (value) octetstring sgsn_ip_sign,
- template (value) octetstring sgsn_ip_data,
- template (omit) ProtConfigOptions pco := omit,
- template (omit) OCT1 ratType := omit,
- template (omit) UserLocationInformation uli := omit) := {
- peer := peer,
- gtpc := ts_GTP1C_PDU(updatePDPContextRequest, teid,
- ts_UpdatePdpPDU(imsi, restart_ctr, teid_data, teid_ctrl,
- nsapi, sgsn_ip_sign,
- sgsn_ip_data, pco, ratType, uli),
- seq)
- }
-
- /* Update PPD Context Sent GGSN -> SGSN: */
- template (value) GTPC_PDUs ts_UpdatePdpPDU_GGSN(template (value) BIT4 nsapi,
- template (omit) hexstring imsi := omit,
- template (omit) Recovery_gtpc recovery := omit,
- template (omit) EndUserAddress eua := omit,
- template (omit) ProtConfigOptions pco := omit,
- template (omit) QualityOfServiceProfile qos := omit,
- template (omit) DirectTunnelFlags dtf := omit) := {
- updatePDPContextRequest := {
- updatePDPContextRequestGGSN := {
- imsi := f_ts_Imsi(imsi),
- recovery := recovery,
- nsapi := ts_NSAPI(nsapi),
- endUserAddress := eua,
- protConfigOptions := pco,
- qualityOfServiceProfile := qos,
- tft := omit,
- commonFlags := omit,
- aPN_Restriction := omit,
- mS_InfoChangeReportingAction := omit,
- directTunnelFlags := dtf,
- bearerControlMode := omit,
- evolvedAllocationRetentionPriorityI := omit,
- extendedCommonFlags := omit,
- cSGInfoReportingAction := omit,
- aPN_AMBR := omit,
- private_extension_gtpc := omit
- }
- }
- }
- template (value) Gtp1cUnitdata ts_GTPC_UpdatePDP_GGSN(template (value) Gtp1cPeer peer,
- template (value) OCT4 teid,
- template (value) uint16_t seq,
- template (value) BIT4 nsapi,
- template (omit) hexstring imsi := omit,
- template (omit) Recovery_gtpc recovery := omit,
- template (omit) EndUserAddress eua := omit,
- template (omit) ProtConfigOptions pco := omit,
- template (omit) QualityOfServiceProfile qos := omit,
- template (omit) DirectTunnelFlags dtf := omit) := {
- peer := peer,
- gtpc := ts_GTP1C_PDU(updatePDPContextRequest, teid,
- ts_UpdatePdpPDU_GGSN(nsapi, imsi, recovery,
- eua, pco, qos, dtf),
- seq)
- }
-
-
- template (value) NSAPI_GTPC ts_NSAPI(template (value) BIT4 nsapi) := {
- type_gtpc := '14'O,
- nsapi := nsapi,
- unused := '0000'B
- }
-
- template (value) ReorderingRequired ts_ReorderReq(template (value) boolean req := false) := {
- type_gtpc := '08'O,
- reordreq := bool2bit(valueof(req)),
- spare := '0000000'B
- }
-
- template (value) GTPC_PDUs ts_CreatePdpRespPDU(template (value) GTP_Cause cause,
- template (value) OCT4 teid_data,
- template (value) OCT4 teid_ctrl,
- template (value) BIT4 nsapi,
- template (value) octetstring ggsn_ip_sign,
- template (value) octetstring ggsn_ip_data,
- template (value) OCT4 chg_id,
- template (omit) EndUserAddress eua := omit,
- template (omit) Recovery_gtpc recovery := omit,
- template (omit) ProtConfigOptions pco := omit) := {
- createPDPContextResponse := {
cause := ts_Cause_gtpc(cause),
- reorderingRequired := ts_ReorderReq(false),
recovery := recovery,
teidDataI := {
type_gtpc := '00'O,
@@ -1034,12 +1102,10 @@
type_gtpc := '00'O,
teidControlPlane := teid_ctrl
},
- nsapi := ts_NSAPI(nsapi),
chargingID := {
type_gtpc := '7F'O,
chargingID := chg_id
},
- endUserAddress := eua,
protConfigOptions := pco,
ggsn_addr_controlPlane := ts_GsnAddr(ggsn_ip_sign),
ggsn_addr_traffic := ts_GsnAddr(ggsn_ip_data),
@@ -1051,806 +1117,940 @@
mS_InfoChangeReportingAction := omit,
bearerControlMode := omit,
evolvedAllocationRetentionPriorityI := omit,
- extendedCommonFlag := omit,
csg_information_reporting_action := omit,
aPN_AMBR := omit,
- gGSN_BackOffTime := omit,
private_extension_gtpc := omit
}
}
+}
- template (value) Gtp1cUnitdata ts_GTPC_CreatePdpResp(template (value) Gtp1cPeer peer,
- template (value) uint16_t seq,
- template (value) OCT4 teid,
- template (value) GTP_Cause cause,
- template (value) OCT4 teid_ctrl,
- template (value) OCT4 teid_data,
- template (value) BIT4 nsapi,
- template (value) octetstring ggsn_ip_sign,
- template (value) octetstring ggsn_ip_data,
- template (value) OCT4 chg_id,
- template (omit) EndUserAddress eua := omit,
- template (omit) Recovery_gtpc recovery := omit,
- template (omit) ProtConfigOptions pco := omit) := {
- peer := peer,
- gtpc := ts_GTP1C_PDU(createPDPContextResponse, teid,
- ts_CreatePdpRespPDU(cause, teid_data, teid_ctrl, nsapi,
- ggsn_ip_sign, ggsn_ip_data, chg_id,
- eua, recovery, pco),
- seq)
- }
-
- template (value) GTPC_PDUs ts_UpdatePdpRespGGSNPDU(template (value) GTP_Cause cause,
- template (value) OCT4 teid_data,
- template (value) OCT4 teid_ctrl,
- template (value) octetstring ggsn_ip_sign,
- template (value) octetstring ggsn_ip_data,
- template (value) OCT4 chg_id,
- template (omit) EndUserAddress eua := omit,
- template (omit) Recovery_gtpc recovery := omit,
- template (omit) ProtConfigOptions pco := omit) := {
- updatePDPContextResponse := {
- updatePDPContextResponseGGSN := {
-
- cause := ts_Cause_gtpc(cause),
- recovery := recovery,
- teidDataI := {
- type_gtpc := '00'O,
- teidDataI := teid_data
- },
- teidControlPlane := {
- type_gtpc := '00'O,
- teidControlPlane := teid_ctrl
- },
- chargingID := {
- type_gtpc := '7F'O,
- chargingID := chg_id
- },
- protConfigOptions := pco,
- ggsn_addr_controlPlane := ts_GsnAddr(ggsn_ip_sign),
- ggsn_addr_traffic := ts_GsnAddr(ggsn_ip_data),
- alt_ggsn_addr_controlPane := omit,
- alt_ggsn_addr_traffic := omit,
- qualityOfServiceProfile := ts_QosDefault,
- commonFlags := omit,
- aPN_Restriction := omit,
- mS_InfoChangeReportingAction := omit,
- bearerControlMode := omit,
- evolvedAllocationRetentionPriorityI := omit,
- csg_information_reporting_action := omit,
- aPN_AMBR := omit,
- private_extension_gtpc := omit
- }
- }
- }
-
- template (value) Gtp1cUnitdata ts_GTPC_UpdatePdpRespGGSN(template (value) Gtp1cPeer peer,
- template (value) uint16_t seq,
- template (value) OCT4 teid,
- template (value) GTP_Cause cause,
- template (value) OCT4 teid_ctrl,
- template (value) OCT4 teid_data,
- template (value) octetstring ggsn_ip_sign,
- template (value) octetstring ggsn_ip_data,
- template (value) OCT4 chg_id,
- template (omit) EndUserAddress eua := omit,
- template (omit) Recovery_gtpc recovery := omit,
- template (omit) ProtConfigOptions pco := omit) := {
- peer := peer,
- gtpc := ts_GTP1C_PDU(updatePDPContextResponse, teid,
- ts_UpdatePdpRespGGSNPDU(cause, teid_data, teid_ctrl,
- ggsn_ip_sign, ggsn_ip_data, chg_id,
- eua, recovery, pco),
- seq)
- }
-
- /* Update PDP Context Resp sent SGSN -> GGSN: */
- template (present) GTPC_PDUs tr_UpdatePdpRespSGSNPDU(template (present) GTP_Cause cause := ?,
- template Recovery_gtpc recovery := *,
- template TeidDataI teidDataI := *,
- template ProtConfigOptions pco := *,
- template GSN_Address_GTPC sgsn_addr_traffic := *,
- template QualityOfServiceProfile qos := *,
- template DirectTunnelFlags dtf := *) := {
- updatePDPContextResponse := {
- updatePDPContextResponseSGSN := {
-
- cause := tr_Cause_gtpc(cause),
-
- recovery := recovery,
- teidDataI := teidDataI,
- protConfigOptions := pco,
- sgsn_addr_traffic := sgsn_addr_traffic,
- qualityOfServiceProfile := qos,
- userLocationInformation := *,
- mS_TimeZone := *,
- directTunnelFlags := dtf,
- evolvedAllocationRetentionPriorityI := *,
- aPN_AMBR := *,
- private_extension_gtpc := *
- }
- }
- }
-
- template (present) Gtp1cUnitdata tr_GTPC_UpdatePdpRespSGSN(template (present) Gtp1cPeer peer, uint16_t seq, OCT4 teid,
- template (present) GTP_Cause cause := ?,
- template Recovery_gtpc recovery := *,
- template TeidDataI teidDataI := *,
- template ProtConfigOptions pco := *,
- template GSN_Address_GTPC sgsn_addr_traffic := *,
- template QualityOfServiceProfile qos := *,
- template DirectTunnelFlags dtf := *) := {
- peer := peer,
- gtpc := tr_GTP1C_PDU(updatePDPContextResponse, teid,
- tr_UpdatePdpRespSGSNPDU(cause, recovery, teidDataI, pco,
- sgsn_addr_traffic, qos, dtf))
- }
-
- /* PCO send base template */
- template (value) ProtConfigOptions ts_PCO := {
- type_gtpc := '84'O,
- lengthf := 0,
- configProtocol := '000'B,
- spare := '0000'B,
- extension0 := '1'B,
- protocols := {}
- }
- /* PCO receive base template */
- template (present) ProtConfigOptions tr_PCO := {
- type_gtpc := '84'O,
- lengthf := ?,
- configProtocol := '000'B,
- spare := ?,
- extension0 := '1'B,
- protocols := {}
- }
-
- template (value) ProtConfigOptions ts_PCO_IPv6_DNS modifies ts_PCO := {
- protocols := {
- { protocolID := '0003'O, lengthProtoID := 0, protoIDContents := ''O }
- }
- }
- template (present) ProtConfigOptions tr_PCO_IPv6_DNS_resp(template (present) OCT16 contents) modifies tr_PCO := {
- protocols := {
- *, { protocolID := '0003'O, lengthProtoID := 16, protoIDContents := contents }, *
- }
- }
-
- template (value) ProtConfigOptions ts_PCO_IPv4_DNS_IPCP(template (value) uint8_t ipcp_req_id := 0) modifies ts_PCO := {
- protocols := {
- /* dummy PAP entry to check if our parser in the GGSN can properly iterate over
- * the list of protocols, see Change-Id Icc2e6716c33d78d3c3e000f529806228d8aa155e */
- { protocolID := 'C023'O, lengthProtoID := 0, protoIDContents := ''O },
- { protocolID := '8021'O, lengthProtoID := 16, protoIDContents :=
- enc_IpcpPacket(valueof(ts_IPCP_ReqDNS(ipcp_req_id))) }
- }
- }
-
- template (value) ProtConfigOptions ts_PCO_IPv4_PRI_DNS_IPCP modifies ts_PCO := {
- protocols := {
- /* dummy PAP entry to check if our parser can cope with a single primary DNS entry
- * see Change-Id Icffde89f9bc5d8fcadf6e2dd6c0b4de03440edd5 and OS#3288 */
- { protocolID := 'C023'O, lengthProtoID := 0, protoIDContents := ''O },
- { protocolID := '8021'O, lengthProtoID := 16, protoIDContents :=
- enc_IpcpPacket(valueof(ts_IPCP_ReqDNS_Primary)) }
- }
- }
- template (value) ProtConfigOptions ts_PCO_IPv4_SEC_DNS_IPCP modifies ts_PCO := {
- protocols := {
- /* dummy PAP entry to check if our parser can cope with a single secondary DNS entry
- * see Change-Id Icffde89f9bc5d8fcadf6e2dd6c0b4de03440edd5 and OS#3288 */
- { protocolID := 'C023'O, lengthProtoID := 0, protoIDContents := ''O },
- { protocolID := '8021'O, lengthProtoID := 16, protoIDContents :=
- enc_IpcpPacket(valueof(ts_IPCP_ReqDNS_Secondary)) }
- }
- }
- template (value) ProtConfigOptions ts_PCO_IPv4_SEPARATE_DNS_IPCP modifies ts_PCO := {
- protocols := {
- /* dummy PAP entry to check if our parser can cope with a primary and secondary DNS
- * in separate IPCP containers OS#3381 */
- { protocolID := 'C023'O, lengthProtoID := 0, protoIDContents := ''O },
- { protocolID := '8021'O, lengthProtoID := 16, protoIDContents :=
- enc_IpcpPacket(valueof(ts_IPCP_ReqDNS_Primary)) },
- { protocolID := '8021'O, lengthProtoID := 16, protoIDContents :=
- enc_IpcpPacket(valueof(ts_IPCP_ReqDNS_Secondary)) }
- }
- }
-
- template (present) ProtocolElement tr_PCO_Proto(template (present) OCT2 prot_id := ?) := {
- protocolID := prot_id,
- lengthProtoID := ?,
- protoIDContents := ?
- }
- template (value) ProtocolElement ts_PCOelem_PAP_broken := {
- protocolID := 'C023'O,
- lengthProtoID := 60,
- /* PPP Password Authentication Protocol containing incorrect Peer-Id-Length set to 4 (6-7 should be the valid one), see OS#3914. */
- protoIDContents := '0100003c'O & '0444435338323700bc1c08087c1508083e00790000150808fd06000001000000000000000000000000000000000000000000000000000000'O
- }
- template (value) ProtConfigOptions ts_PCO_PAP_IPv4_DNS modifies ts_PCO := {
- protocols := {
- ts_PCOelem_PAP_broken,
- { protocolID := '8021'O, lengthProtoID := 16, protoIDContents := enc_IpcpPacket(valueof(ts_IPCP_ReqDNS)) }
- }
- }
- template (present) ProtConfigOptions tr_PCO_Contains(template (present) OCT2 prot_id) modifies tr_PCO := {
- protocols := { *, tr_PCO_Proto(prot_id), * }
- }
-
- template (value) ProtConfigOptions ts_PCO_IPv4_DNS_CONT modifies ts_PCO := {
- protocols := {
- { protocolID := '000d'O, lengthProtoID := 0, protoIDContents := ''O }
- }
- }
- template (present) ProtConfigOptions tr_PCO_IPv4_DNS_CONT_resp(template (present) OCT4 contents) modifies tr_PCO := {
- protocols := {
- *, { protocolID := '000d'O, lengthProtoID := 4, protoIDContents := contents }, *
- }
- }
-
- /* extract a given protocol payload from PCO */
- function f_PCO_extract_proto(ProtConfigOptions pco, OCT2 protocol, integer nth_match := 1) return octetstring {
- var integer i;
- var integer num_matches := 0;
- for (i := 0; i < lengthof(pco.protocols); i := i + 1) {
- if (pco.protocols[i].protocolID == protocol) {
- num_matches := num_matches + 1;
- if (num_matches == nth_match) {
- return pco.protocols[i].protoIDContents;
- }
- }
- }
- setverdict(fail, "Could not extract protocol payload from protocol ", protocol);
- mtc.stop;
- return ''O;
- }
-
- template (present) IpcpPacket tr_IPCP(template (present) LcpCode code,
- template (present) uint8_t identifier,
- template (present) IpcpOptionList opts) := {
- code := code,
- identifier := identifier,
- len := ?,
- options := opts
- }
- template (value) IpcpPacket ts_IPCP(template (value) LcpCode code,
- template (value) uint8_t identifier,
- template (value) IpcpOptionList opts) := {
- code := code,
- identifier := identifier,
- len := 0, /* overwritten */
- options := opts
- }
- template (present) IpcpOption tr_IPCP_PrimaryDns(template (present) OCT4 addr) := {
- code := IPCP_OPT_PrimaryDNS,
- len := 6,
- data := addr
- }
- template (value) IpcpOption ts_IPCP_PrimaryDns(template (value) OCT4 addr) := {
- code := IPCP_OPT_PrimaryDNS,
- len := 6,
- data := addr
- }
- template (present) IpcpOption tr_IPCP_SecondaryDns(template (present) OCT4 addr) := {
- code := IPCP_OPT_SecondaryDNS,
- len := 6,
- data := addr
- }
- template (value) IpcpOption ts_IPCP_SecondaryDns(template (value) OCT4 addr) := {
- code := IPCP_OPT_SecondaryDNS,
- len := 6,
- data := addr
- }
- template (present) IpcpPacket tr_IPCP_Ack_DNS(template (present) uint8_t identifier := ?,
- template (present) OCT4 dns1 := ?,
- template (present) OCT4 dns2 := ?) :=
- tr_IPCP(LCP_Configure_Ack, identifier,
- { *, tr_IPCP_PrimaryDns(dns1), *, tr_IPCP_SecondaryDns(dns2), * });
-
- template (value) IpcpPacket ts_IPCP_ReqDNS(template (value) uint8_t identifier := 0) :=
- ts_IPCP(LCP_Configure_Request, identifier,
- { ts_IPCP_PrimaryDns('00000000'O), ts_IPCP_SecondaryDns('00000000'O) });
-
- template (value) IpcpPacket ts_IPCP_ReqDNS_Primary(template (value) uint8_t identifier := 0) :=
- ts_IPCP(LCP_Configure_Request, identifier,
- { ts_IPCP_PrimaryDns('00000000'O) });
- template (value) IpcpPacket ts_IPCP_ReqDNS_Secondary(template (value) uint8_t identifier := 0) :=
- ts_IPCP(LCP_Configure_Request, identifier,
- { ts_IPCP_SecondaryDns('00000000'O) });
-
- function f_teardown_ind_IE(in template (omit) BIT1 ind) return template (omit) TearDownInd {
- if (istemplatekind(ind, "omit")) {
- return omit;
- }
- var TearDownInd ret := {
- type_gtpc := '13'O,
- tdInd := valueof(ind),
- spare:= '0000000'B
- }
- return ret;
- }
-
- template (value) GTPC_PDUs ts_DeletePdpPDU(template (value) BIT4 nsapi,
- template (omit) BIT1 teardown_ind) := {
- deletePDPContextRequest := {
- cause := omit,
- tearDownIndicator := f_teardown_ind_IE(teardown_ind),
- nsapi := ts_NSAPI(nsapi),
- protConfigOptions := omit,
- userLocationInformation := omit,
- mS_TimeZone := omit,
- extendedCommonFlags := omit,
- uLI_Timestamp := omit,
- private_extension_gtpc := omit
- }
- }
-
- template (value) Gtp1cUnitdata ts_GTPC_DeletePDP(template (value) Gtp1cPeer peer,
+template (value) Gtp1cUnitdata ts_GTPC_UpdatePdpRespGGSN(template (value) Gtp1cPeer peer,
template (value) uint16_t seq,
template (value) OCT4 teid,
- template (value) BIT4 nsapi,
- template (omit) BIT1 teardown_ind) := {
- peer := peer,
- gtpc := ts_GTP1C_PDU(deletePDPContextRequest, teid,
- ts_DeletePdpPDU(nsapi, teardown_ind),
- seq)
- }
+ template (value) GTP_Cause cause,
+ template (value) OCT4 teid_ctrl,
+ template (value) OCT4 teid_data,
+ template (value) octetstring ggsn_ip_sign,
+ template (value) octetstring ggsn_ip_data,
+ template (value) OCT4 chg_id,
+ template (omit) EndUserAddress eua := omit,
+ template (omit) Recovery_gtpc recovery := omit,
+ template (omit) ProtConfigOptions pco := omit) := {
+ peer := peer,
+ gtpc := ts_GTP1C_PDU(updatePDPContextResponse, teid,
+ ts_UpdatePdpRespGGSNPDU(cause, teid_data, teid_ctrl,
+ ggsn_ip_sign, ggsn_ip_data, chg_id,
+ eua, recovery, pco),
+ seq)
+}
- template (value) GTPC_PDUs ts_DeletePdpRespPDU(template (value) GTP_Cause cause := GTP_CAUSE_REQUEST_ACCEPTED,
- template (omit) ProtConfigOptions pco := omit) := {
- deletePDPContextResponse := {
- cause := ts_Cause_gtpc(cause),
- protConfigOptions := pco,
- userLocationInformation := omit,
- mS_TimeZone := omit,
- uLI_Timestamp := omit,
- private_extension_gtpc := omit
+/* Update PDP Context Resp sent SGSN -> GGSN: */
+template (present) GTPC_PDUs tr_UpdatePdpRespSGSNPDU(template (present) GTP_Cause cause := ?,
+ template Recovery_gtpc recovery := *,
+ template TeidDataI teidDataI := *,
+ template ProtConfigOptions pco := *,
+ template GSN_Address_GTPC sgsn_addr_traffic := *,
+ template QualityOfServiceProfile qos := *,
+ template DirectTunnelFlags dtf := *) := {
+ updatePDPContextResponse := {
+ updatePDPContextResponseSGSN := {
+
+ cause := tr_Cause_gtpc(cause),
+
+ recovery := recovery,
+ teidDataI := teidDataI,
+ protConfigOptions := pco,
+ sgsn_addr_traffic := sgsn_addr_traffic,
+ qualityOfServiceProfile := qos,
+ userLocationInformation := *,
+ mS_TimeZone := *,
+ directTunnelFlags := dtf,
+ evolvedAllocationRetentionPriorityI := *,
+ aPN_AMBR := *,
+ private_extension_gtpc := *
}
}
+}
- template (value) Gtp1cUnitdata ts_GTPC_DeletePdpResp(template (value) Gtp1cPeer peer,
- template (value) uint16_t seq,
- template (value) OCT4 teid,
- template (value) GTP_Cause cause := GTP_CAUSE_REQUEST_ACCEPTED,
- template (omit) ProtConfigOptions pco := omit) := {
- peer := peer,
- gtpc := ts_GTP1C_PDU(deletePDPContextResponse, teid,
- ts_DeletePdpRespPDU(cause, pco),
- seq)
- }
+template (present) Gtp1cUnitdata tr_GTPC_UpdatePdpRespSGSN(template (present) Gtp1cPeer peer, uint16_t seq, OCT4 teid,
+ template (present) GTP_Cause cause := ?,
+ template Recovery_gtpc recovery := *,
+ template TeidDataI teidDataI := *,
+ template ProtConfigOptions pco := *,
+ template GSN_Address_GTPC sgsn_addr_traffic := *,
+ template QualityOfServiceProfile qos := *,
+ template DirectTunnelFlags dtf := *) := {
+ peer := peer,
+ gtpc := tr_GTP1C_PDU(updatePDPContextResponse, teid,
+ tr_UpdatePdpRespSGSNPDU(cause, recovery, teidDataI, pco,
+ sgsn_addr_traffic, qos, dtf))
+}
- /* SGSN Context Request - 7.5.3 */
- template (present) GTPC_PDUs tr_SGSNContextReqPDU(template (present) RoutingAreaIdentity rai := ?,
- template (present) OCT4 teic := ?,
- template (present) octetstring sgsn_addr_control := ?,
- template hexstring imsi := *,
- template BIT1 msValidated := *,
- template TLLI tlli := *,
- template PacketTMSI ptmsi := *,
- template PTMSI_Signature ptmsi_sig := *,
- template OCT1 rat_type := *) := {
- sgsn_ContextRequest := {
- imsi := f_tr_Imsi(imsi),
- routingAreaIdentity := rai,
- tlli := tlli,
- packetTMSI := ptmsi,
- ptmsi_Signature := ptmsi_sig,
- ms_Validated := f_tr_MS_Validated(msValidated),
- teidControlPlane := {
- type_gtpc := '11'O,
- teidControlPlane := teic
- },
- sgsn_addr_controlPlane := tr_GsnAddr(sgsn_addr_control),
- alternative_sgsn_addr_controlPlane := *,
- sGSN_Number := *,
- ratType := f_tr_RATType(rat_type),
- hopCounter := *,
- private_extension_gtpc := *
- }
- }
- template (present) Gtp1cUnitdata tr_GTPC_SGSNContextReq(template (present) Gtp1cPeer peer,
- template (present) GTPC_PDUs SGSNContextReqPDU) := {
- peer := peer,
- gtpc := tr_GTP1C_PDU(sgsnContextRequest, '00000000'O, SGSNContextReqPDU)
- }
- template (value) GTPC_PDUs ts_SGSNContextReqPDU(template (value) RoutingAreaIdentity rai,
- template (value) OCT4 teic,
- template (value) octetstring sgsn_addr_control,
- template (omit) hexstring imsi := omit,
- template (omit) BIT1 msValidated := '0'B,
- template (omit) TLLI tlli := omit,
- template (omit) PacketTMSI ptmsi := omit,
- template (omit) PTMSI_Signature ptmsi_sig := omit,
- template (omit) OCT1 rat_type := omit) := {
- sgsn_ContextRequest := {
- imsi := f_ts_Imsi(imsi),
- routingAreaIdentity := rai,
- tlli := tlli,
- packetTMSI := ptmsi,
- ptmsi_Signature := ptmsi_sig,
- ms_Validated := f_ts_MS_Validated(msValidated),
- teidControlPlane := {
- type_gtpc := '11'O,
- teidControlPlane := teic
- },
- sgsn_addr_controlPlane := ts_GsnAddr(sgsn_addr_control),
- alternative_sgsn_addr_controlPlane := omit,
- sGSN_Number := omit,
- ratType := f_ts_RATType(rat_type),
- hopCounter := omit,
- private_extension_gtpc := omit
- }
- }
- template (value) Gtp1cUnitdata ts_GTPC_SGSNContextReq(template (value) Gtp1cPeer peer,
- template (value) uint16_t seq,
- template (value) GTPC_PDUs SGSNContextReqPDU) := {
- peer := peer,
- gtpc := ts_GTP1C_PDU(sgsnContextRequest, '00000000'O, SGSNContextReqPDU, seq)
- }
+/* PCO send base template */
+template (value) ProtConfigOptions ts_PCO := {
+ type_gtpc := '84'O,
+ lengthf := 0,
+ configProtocol := '000'B,
+ spare := '0000'B,
+ extension0 := '1'B,
+ protocols := {}
+}
+/* PCO receive base template */
+template (present) ProtConfigOptions tr_PCO := {
+ type_gtpc := '84'O,
+ lengthf := ?,
+ configProtocol := '000'B,
+ spare := ?,
+ extension0 := '1'B,
+ protocols := {}
+}
- /* SGSN Context Response - 7.5.4 */
- template (present) GTPC_PDUs tr_SGSNContextRespPDU(template (present) GTP_Cause cause := ?,
- template hexstring imsi := *) := {
- sgsn_ContextResponse := {
- cause := tr_Cause_gtpc(cause),
- imsi := f_tr_Imsi(imsi),
- teidControlPlane := *,
- rabContext := *,
- radioPrioritySMS := *,
- radioPriority := *,
- packetFlowID := *,
- charging_char := *,
- mm_Context := *,
- pdp_Context := *,
- sgsn_addr_controlPlane := *,
- pdpContextPriorization := *,
- radioPriority_LCS := *,
- mBMS_UE_Context := *,
- subscribedRFSP_Index := *,
- rFSP_IndexInUse := *,
- colocatedGGSN_PGW_FQDN := *,
- evolvedAllocationRetentionPriorityII := *,
- extendedCommonFlags := *,
- ue_network_capability := *,
- ue_ambr := *,
- apn_ambr_nsapi := *,
- signallingPriorityIndication_nsapi := *,
- higher_bitrates_than_16mbps_flag := *,
- selectionMode_nsapi := *,
- localHomeNetworkID_nsapi := *,
- uE_UsageType := *,
- extendedCommonFlagsII := *,
- private_extension_gtpc := *
- }
+template (value) ProtConfigOptions ts_PCO_IPv6_DNS modifies ts_PCO := {
+ protocols := {
+ { protocolID := '0003'O, lengthProtoID := 0, protoIDContents := ''O }
}
- template (present) Gtp1cUnitdata tr_GTPC_SGSNContextResp(template (present) Gtp1cPeer peer := ?,
- template (present) OCT4 teid := ?,
- template (present) GTPC_PDUs SGSNContextRespPDU := ?)
- := tr_GTPC_MsgType(peer, sgsnContextResponse, teid, SGSNContextRespPDU);
+}
+template (present) ProtConfigOptions tr_PCO_IPv6_DNS_resp(template (present) OCT16 contents) modifies tr_PCO := {
+ protocols := {
+ *, { protocolID := '0003'O, lengthProtoID := 16, protoIDContents := contents }, *
+ }
+}
- template (value) GTPC_PDUs ts_SGSNContextRespPDU(template (value) GTP_Cause cause,
- template (omit) hexstring imsi := omit,
- template (omit) OCT4 teic := omit,
- template (omit) octetstring sgsn_addr_control := omit,
- template (omit) MM_Context mm_context := omit,
- template (omit) PDP_Context_GTPC_List pdp_ctx_list := omit) := {
- sgsn_ContextResponse := {
- cause := ts_Cause_gtpc(cause),
- imsi := f_ts_Imsi(imsi),
- teidControlPlane := f_ts_TEIC(teic),
- rabContext := omit,
- radioPrioritySMS := omit,
- radioPriority := omit,
- packetFlowID := omit,
- charging_char := omit,
- mm_Context := mm_context,
- pdp_Context := pdp_ctx_list,
- sgsn_addr_controlPlane := f_ts_GsnAddr(sgsn_addr_control),
- pdpContextPriorization := omit,
- radioPriority_LCS := omit,
- mBMS_UE_Context := omit,
- subscribedRFSP_Index := omit,
- rFSP_IndexInUse := omit,
- colocatedGGSN_PGW_FQDN := omit,
- evolvedAllocationRetentionPriorityII := omit,
- extendedCommonFlags := omit,
- ue_network_capability := omit,
- ue_ambr := omit,
- apn_ambr_nsapi := omit,
- signallingPriorityIndication_nsapi := omit,
- higher_bitrates_than_16mbps_flag := omit,
- selectionMode_nsapi := omit,
- localHomeNetworkID_nsapi := omit,
- uE_UsageType := omit,
- extendedCommonFlagsII := omit,
- private_extension_gtpc := omit
- }
+template (value) ProtConfigOptions ts_PCO_IPv4_DNS_IPCP(template (value) uint8_t ipcp_req_id := 0) modifies ts_PCO := {
+ protocols := {
+ /* dummy PAP entry to check if our parser in the GGSN can properly iterate over
+ * the list of protocols, see Change-Id Icc2e6716c33d78d3c3e000f529806228d8aa155e */
+ { protocolID := 'C023'O, lengthProtoID := 0, protoIDContents := ''O },
+ { protocolID := '8021'O, lengthProtoID := 16, protoIDContents :=
+ enc_IpcpPacket(valueof(ts_IPCP_ReqDNS(ipcp_req_id))) }
}
- template (value) Gtp1cUnitdata ts_GTPC_SGSNContextResp(template (value) Gtp1cPeer peer,
- template (value) OCT4 teid,
- template (value) uint16_t seq,
- template (value) GTPC_PDUs SGSNContextRespPDU) := {
- peer := peer,
- gtpc := ts_GTP1C_PDU(sgsnContextResponse, teid, SGSNContextRespPDU, seq)
- }
+}
+template (value) ProtConfigOptions ts_PCO_IPv4_PRI_DNS_IPCP modifies ts_PCO := {
+ protocols := {
+ /* dummy PAP entry to check if our parser can cope with a single primary DNS entry
+ * see Change-Id Icffde89f9bc5d8fcadf6e2dd6c0b4de03440edd5 and OS#3288 */
+ { protocolID := 'C023'O, lengthProtoID := 0, protoIDContents := ''O },
+ { protocolID := '8021'O, lengthProtoID := 16, protoIDContents :=
+ enc_IpcpPacket(valueof(ts_IPCP_ReqDNS_Primary)) }
+ }
+}
+template (value) ProtConfigOptions ts_PCO_IPv4_SEC_DNS_IPCP modifies ts_PCO := {
+ protocols := {
+ /* dummy PAP entry to check if our parser can cope with a single secondary DNS entry
+ * see Change-Id Icffde89f9bc5d8fcadf6e2dd6c0b4de03440edd5 and OS#3288 */
+ { protocolID := 'C023'O, lengthProtoID := 0, protoIDContents := ''O },
+ { protocolID := '8021'O, lengthProtoID := 16, protoIDContents :=
+ enc_IpcpPacket(valueof(ts_IPCP_ReqDNS_Secondary)) }
+ }
+}
+template (value) ProtConfigOptions ts_PCO_IPv4_SEPARATE_DNS_IPCP modifies ts_PCO := {
+ protocols := {
+ /* dummy PAP entry to check if our parser can cope with a primary and secondary DNS
+ * in separate IPCP containers OS#3381 */
+ { protocolID := 'C023'O, lengthProtoID := 0, protoIDContents := ''O },
+ { protocolID := '8021'O, lengthProtoID := 16, protoIDContents :=
+ enc_IpcpPacket(valueof(ts_IPCP_ReqDNS_Primary)) },
+ { protocolID := '8021'O, lengthProtoID := 16, protoIDContents :=
+ enc_IpcpPacket(valueof(ts_IPCP_ReqDNS_Secondary)) }
+ }
+}
- /* SGSN Context Acknowledge - 7.5.5 */
- template (present) GTPC_PDUs tr_SGSNContextAckPDU(template (present) GTP_Cause cause := ?) := {
- sgsn_ContextAcknowledge := {
- cause := tr_Cause_gtpc(cause),
- teidDataII := *,
- sgsn_AddressForUserTraffic := *,
- sgsn_Number := *,
- nodeIdentifier := *,
- private_extension_gtpc := *
- }
+template (present) ProtocolElement tr_PCO_Proto(template (present) OCT2 prot_id := ?) := {
+ protocolID := prot_id,
+ lengthProtoID := ?,
+ protoIDContents := ?
+}
+template (value) ProtocolElement ts_PCOelem_PAP_broken := {
+ protocolID := 'C023'O,
+ lengthProtoID := 60,
+ /* PPP Password Authentication Protocol containing incorrect Peer-Id-Length set to 4 (6-7 should be the valid one), see OS#3914. */
+ protoIDContents := '0100003c'O & '0444435338323700bc1c08087c1508083e00790000150808fd06000001000000000000000000000000000000000000000000000000000000'O
+}
+template (value) ProtConfigOptions ts_PCO_PAP_IPv4_DNS modifies ts_PCO := {
+ protocols := {
+ ts_PCOelem_PAP_broken,
+ { protocolID := '8021'O, lengthProtoID := 16, protoIDContents := enc_IpcpPacket(valueof(ts_IPCP_ReqDNS)) }
}
- template (present) Gtp1cUnitdata tr_GTPC_SGSNContextAck(template (present) Gtp1cPeer peer := ?,
- template (present) OCT4 teid := ?,
- template (present) GTPC_PDUs SGSNContextAckPDU := ?)
- := tr_GTPC_MsgType(peer, sgsnContextAcknowledge, teid, SGSNContextAckPDU);
- template (value) GTPC_PDUs ts_SGSNContextAckPDU(template (value) GTP_Cause cause := GTP_CAUSE_REQUEST_ACCEPTED) := {
- sgsn_ContextAcknowledge := {
- cause := ts_Cause_gtpc(cause),
- teidDataII := omit,
- sgsn_AddressForUserTraffic := omit,
- sgsn_Number := omit,
- nodeIdentifier := omit,
- private_extension_gtpc := omit
- }
- }
+}
+template (present) ProtConfigOptions tr_PCO_Contains(template (present) OCT2 prot_id) modifies tr_PCO := {
+ protocols := { *, tr_PCO_Proto(prot_id), * }
+}
- template (value) Gtp1cUnitdata ts_GTPC_SGSNContextAck(template (value) Gtp1cPeer peer,
- template (value) OCT4 teid,
- template (value) uint16_t seq,
- template (value) GTPC_PDUs SGSNContextAckPDU := ts_SGSNContextAckPDU) := {
- peer := peer,
- gtpc := ts_GTP1C_PDU(sgsnContextAcknowledge, teid, SGSNContextAckPDU, seq)
+template (value) ProtConfigOptions ts_PCO_IPv4_DNS_CONT modifies ts_PCO := {
+ protocols := {
+ { protocolID := '000d'O, lengthProtoID := 0, protoIDContents := ''O }
}
+}
+template (present) ProtConfigOptions tr_PCO_IPv4_DNS_CONT_resp(template (present) OCT4 contents) modifies tr_PCO := {
+ protocols := {
+ *, { protocolID := '000d'O, lengthProtoID := 4, protoIDContents := contents }, *
+ }
+}
- /* GTP-C RIM */
-
- template (value) RIM_Application_Identity_GTPC ts_GTPC_RIM_Application_Identity(template (value) OCT1 app_id) := {
- iEI := '4B'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := 1
- },
- rIMApplicationIdentity := app_id
- }
- /* 3GPP TS 48.018 11.3.62 */
- template (value) RIM_Sequence_Number_GTPC ts_GTPC_RIM_Sequence_Number(template (value) integer seq) := {
- iEI := '4C'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := 4
- },
- rIMSequenceNumber := int2oct(valueof(seq), 4)
- }
- template (value) RIM_PDU_Indications_GTPC ts_GTPC_RIM_PDU_Indications(template (value) boolean ack,
- template (value) BIT3 type_ext) := {
- iEI := '4F'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := 1
- },
- ack := bool2bit(valueof(ack)),
- pDU_Type_Extension := type_ext,
- reserved := '0000'B
- }
- /* 3GPP TS 48.018 11.3.67 */
- template (value) RIM_Protocol_Version_Number_GTPC ts_GTPC_RIM_Protocol_Version_Number(template (value) integer ver) := {
- iEI := '55'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := 1
- },
- rIMProtocolVersionNumber := int2oct(valueof(ver), 1)
- }
- function tr_GTPC_Cell_Identifier_V(template (present) GTP_CellId cid) return template (present) Cell_Identifier_V_GTPC {
- var template (present) Cell_Identifier_V_GTPC ret := {
- mccDigit1 := ?,
- mccDigit2 := ?,
- mccDigit3 := ?,
- mncDigit3 := ?,
- mncDigit1 := ?,
- mncDigit2 := ?,
- lac := ?,
- rac := ?,
- cI_value := ?
- }
- if (istemplatekind(cid, "?")) {
- return ?;
- }
- if (isvalue(cid) and isvalue(cid.ra_id) and isvalue(cid.ra_id.lai)) {
- if (isvalue(cid.ra_id.lai.mcc_mnc)) {
- ret.mccDigit1 := cid.ra_id.lai.mcc_mnc[0];
- ret.mccDigit2 := cid.ra_id.lai.mcc_mnc[1];
- ret.mccDigit3 := cid.ra_id.lai.mcc_mnc[2];
- ret.mncDigit3 := cid.ra_id.lai.mcc_mnc[3];
- ret.mncDigit1 := cid.ra_id.lai.mcc_mnc[4];
- ret.mncDigit2 := cid.ra_id.lai.mcc_mnc[5];
- }
- if (isvalue(cid.ra_id.lai.lac)) {
- ret.lac := int2oct(valueof(cid.ra_id.lai.lac), 2);
+/* extract a given protocol payload from PCO */
+function f_PCO_extract_proto(ProtConfigOptions pco, OCT2 protocol, integer nth_match := 1) return octetstring {
+ var integer i;
+ var integer num_matches := 0;
+ for (i := 0; i < lengthof(pco.protocols); i := i + 1) {
+ if (pco.protocols[i].protocolID == protocol) {
+ num_matches := num_matches + 1;
+ if (num_matches == nth_match) {
+ return pco.protocols[i].protoIDContents;
}
}
- if (isvalue(cid) and isvalue(cid.ra_id)) {
- ret.rac := int2oct(valueof(cid.ra_id.rac), 1);
- }
- if (isvalue(cid)) {
- ret.cI_value := int2oct(valueof(cid.cell_id), 2);
- }
- return ret;
}
- template (value) Cell_Identifier_V_GTPC ts_GTPC_Cell_Identifier_V(template (value) GTP_CellId cid) := {
- mccDigit1 := cid.ra_id.lai.mcc_mnc[0],
- mccDigit2 := cid.ra_id.lai.mcc_mnc[1],
- mccDigit3 := cid.ra_id.lai.mcc_mnc[2],
- mncDigit3 := cid.ra_id.lai.mcc_mnc[3],
- mncDigit1 := cid.ra_id.lai.mcc_mnc[4],
- mncDigit2 := cid.ra_id.lai.mcc_mnc[5],
- lac := int2oct(valueof(cid.ra_id.lai.lac), 2),
- rac := int2oct(valueof(cid.ra_id.rac), 1),
- cI_value := int2oct(valueof(cid.cell_id), 2)
- }
- template (value) RIM_Routing_Address_GTPC ts_GTPC_RIM_Routing_Address_cid(template (value) GTP_CellId cid) := {
- cell_Identifier := ts_GTPC_Cell_Identifier_V(valueof(cid))
- }
- function tr_GTPC_ENB_Identifier(template (present) GTP_CellId cid,
- template (present) integer tac,
- template (present) octetstring gnbid) return template (present) ENB_Identifier {
- var template (present) ENB_Identifier ret := {
- mccDigit1 := ?,
- mccDigit2 := ?,
- mccDigit3 := ?,
- mncDigit3 := ?,
- mncDigit1 := ?,
- mncDigit2 := ?,
- tAC := ?,
- globalENB_ID := ?
- }
- if (istemplatekind(cid, "?") and istemplatekind(tac, "?") and istemplatekind(gnbid, "?")) {
- return ?;
- }
- if (isvalue(cid) and isvalue(cid.ra_id) and isvalue(cid.ra_id.lai)) {
- if (isvalue(cid.ra_id.lai.mcc_mnc)) {
- ret.mccDigit1 := cid.ra_id.lai.mcc_mnc[0];
- ret.mccDigit2 := cid.ra_id.lai.mcc_mnc[1];
- ret.mccDigit3 := cid.ra_id.lai.mcc_mnc[2];
- ret.mncDigit3 := cid.ra_id.lai.mcc_mnc[3];
- ret.mncDigit1 := cid.ra_id.lai.mcc_mnc[4];
- ret.mncDigit2 := cid.ra_id.lai.mcc_mnc[5];
- }
- }
- if (isvalue(tac)) {
- ret.tAC := int2oct(valueof(tac), 2);
- }
- if (isvalue(gnbid)) {
- ret.globalENB_ID := gnbid;
- }
+ setverdict(fail, "Could not extract protocol payload from protocol ", protocol);
+ mtc.stop;
+ return ''O;
+}
- return ret;
+template (present) IpcpPacket tr_IPCP(template (present) LcpCode code,
+ template (present) uint8_t identifier,
+ template (present) IpcpOptionList opts) := {
+ code := code,
+ identifier := identifier,
+ len := ?,
+ options := opts
+}
+template (value) IpcpPacket ts_IPCP(template (value) LcpCode code,
+ template (value) uint8_t identifier,
+ template (value) IpcpOptionList opts) := {
+ code := code,
+ identifier := identifier,
+ len := 0, /* overwritten */
+ options := opts
+}
+template (present) IpcpOption tr_IPCP_PrimaryDns(template (present) OCT4 addr) := {
+ code := IPCP_OPT_PrimaryDNS,
+ len := 6,
+ data := addr
+}
+template (value) IpcpOption ts_IPCP_PrimaryDns(template (value) OCT4 addr) := {
+ code := IPCP_OPT_PrimaryDNS,
+ len := 6,
+ data := addr
+}
+template (present) IpcpOption tr_IPCP_SecondaryDns(template (present) OCT4 addr) := {
+ code := IPCP_OPT_SecondaryDNS,
+ len := 6,
+ data := addr
+}
+template (value) IpcpOption ts_IPCP_SecondaryDns(template (value) OCT4 addr) := {
+ code := IPCP_OPT_SecondaryDNS,
+ len := 6,
+ data := addr
+}
+template (present) IpcpPacket tr_IPCP_Ack_DNS(template (present) uint8_t identifier := ?,
+ template (present) OCT4 dns1 := ?,
+ template (present) OCT4 dns2 := ?) :=
+ tr_IPCP(LCP_Configure_Ack, identifier,
+ { *, tr_IPCP_PrimaryDns(dns1), *, tr_IPCP_SecondaryDns(dns2), * });
+
+template (value) IpcpPacket ts_IPCP_ReqDNS(template (value) uint8_t identifier := 0) :=
+ ts_IPCP(LCP_Configure_Request, identifier,
+ { ts_IPCP_PrimaryDns('00000000'O), ts_IPCP_SecondaryDns('00000000'O) });
+
+template (value) IpcpPacket ts_IPCP_ReqDNS_Primary(template (value) uint8_t identifier := 0) :=
+ ts_IPCP(LCP_Configure_Request, identifier,
+ { ts_IPCP_PrimaryDns('00000000'O) });
+template (value) IpcpPacket ts_IPCP_ReqDNS_Secondary(template (value) uint8_t identifier := 0) :=
+ ts_IPCP(LCP_Configure_Request, identifier,
+ { ts_IPCP_SecondaryDns('00000000'O) });
+
+function f_teardown_ind_IE(in template (omit) BIT1 ind) return template (omit) TearDownInd {
+ if (istemplatekind(ind, "omit")) {
+ return omit;
}
- template (value) ENB_Identifier ts_GTPC_ENB_Identifier(template (value) GTP_CellId cid,
- template (value) integer tac,
- template (value) octetstring gnbid) := {
- mccDigit1 := cid.ra_id.lai.mcc_mnc[0],
- mccDigit2 := cid.ra_id.lai.mcc_mnc[1],
- mccDigit3 := cid.ra_id.lai.mcc_mnc[2],
- mncDigit3 := cid.ra_id.lai.mcc_mnc[3],
- mncDigit1 := cid.ra_id.lai.mcc_mnc[4],
- mncDigit2 := cid.ra_id.lai.mcc_mnc[5],
- tAC := int2oct(valueof(tac), 2),
- globalENB_ID := gnbid
+ var TearDownInd ret := {
+ type_gtpc := '13'O,
+ tdInd := valueof(ind),
+ spare:= '0000000'B
}
- template (value) RIM_Routing_Address_GTPC
- ts_GTPC_RIM_Routing_Address_enbid(template (value) GTP_CellId cid,
- template (value) integer tac,
- template (value) octetstring gnbid) := {
- eNB_Identifier := ts_GTPC_ENB_Identifier(cid, tac, gnbid)
+ return ret;
+}
+
+template (value) GTPC_PDUs ts_DeletePdpPDU(template (value) BIT4 nsapi,
+ template (omit) BIT1 teardown_ind) := {
+ deletePDPContextRequest := {
+ cause := omit,
+ tearDownIndicator := f_teardown_ind_IE(teardown_ind),
+ nsapi := ts_NSAPI(nsapi),
+ protConfigOptions := omit,
+ userLocationInformation := omit,
+ mS_TimeZone := omit,
+ extendedCommonFlags := omit,
+ uLI_Timestamp := omit,
+ private_extension_gtpc := omit
}
- template (present) RIM_Routing_Information_GTPC
- tr_GTPC_RIM_Routing_Information(template (present) HEX1 addr_discr,
- template (present) RIM_Routing_Address_GTPC addr) := {
- iEI := '54'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := ?
+}
+
+template (value) Gtp1cUnitdata ts_GTPC_DeletePDP(template (value) Gtp1cPeer peer,
+ template (value) uint16_t seq,
+ template (value) OCT4 teid,
+ template (value) BIT4 nsapi,
+ template (omit) BIT1 teardown_ind) := {
+ peer := peer,
+ gtpc := ts_GTP1C_PDU(deletePDPContextRequest, teid,
+ ts_DeletePdpPDU(nsapi, teardown_ind),
+ seq)
+}
+
+template (value) GTPC_PDUs ts_DeletePdpRespPDU(template (value) GTP_Cause cause := GTP_CAUSE_REQUEST_ACCEPTED,
+ template (omit) ProtConfigOptions pco := omit) := {
+ deletePDPContextResponse := {
+ cause := ts_Cause_gtpc(cause),
+ protConfigOptions := pco,
+ userLocationInformation := omit,
+ mS_TimeZone := omit,
+ uLI_Timestamp := omit,
+ private_extension_gtpc := omit
+ }
+}
+
+template (value) Gtp1cUnitdata ts_GTPC_DeletePdpResp(template (value) Gtp1cPeer peer,
+ template (value) uint16_t seq,
+ template (value) OCT4 teid,
+ template (value) GTP_Cause cause := GTP_CAUSE_REQUEST_ACCEPTED,
+ template (omit) ProtConfigOptions pco := omit) := {
+ peer := peer,
+ gtpc := ts_GTP1C_PDU(deletePDPContextResponse, teid,
+ ts_DeletePdpRespPDU(cause, pco),
+ seq)
+}
+
+/* SGSN Context Request - 7.5.3 */
+template (present) GTPC_PDUs tr_SGSNContextReqPDU(template (present) RoutingAreaIdentity rai := ?,
+ template (present) OCT4 teic := ?,
+ template (present) octetstring sgsn_addr_control := ?,
+ template hexstring imsi := *,
+ template BIT1 msValidated := *,
+ template TLLI tlli := *,
+ template PacketTMSI ptmsi := *,
+ template PTMSI_Signature ptmsi_sig := *,
+ template OCT1 rat_type := *) := {
+ sgsn_ContextRequest := {
+ imsi := f_tr_Imsi(imsi),
+ routingAreaIdentity := rai,
+ tlli := tlli,
+ packetTMSI := ptmsi,
+ ptmsi_Signature := ptmsi_sig,
+ ms_Validated := f_tr_MS_Validated(msValidated),
+ teidControlPlane := {
+ type_gtpc := '11'O,
+ teidControlPlane := teic
},
- rIMRoutingAddressDiscriminator := addr_discr,
- spare := '0'H,
- rIM_Routing_Address := addr
+ sgsn_addr_controlPlane := tr_GsnAddr(sgsn_addr_control),
+ alternative_sgsn_addr_controlPlane := *,
+ sGSN_Number := *,
+ ratType := f_tr_RATType(rat_type),
+ hopCounter := *,
+ private_extension_gtpc := *
}
- template (value) RIM_Routing_Information_GTPC
- ts_GTPC_RIM_Routing_Information(template (value) HEX1 addr_discr,
- template (value) RIM_Routing_Address_GTPC addr) := {
- iEI := '54'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := 0 /* overwritten */
+}
+template (present) Gtp1cUnitdata tr_GTPC_SGSNContextReq(template (present) Gtp1cPeer peer,
+ template (present) GTPC_PDUs SGSNContextReqPDU) := {
+ peer := peer,
+ gtpc := tr_GTP1C_PDU(sgsnContextRequest, '00000000'O, SGSNContextReqPDU)
+}
+template (value) GTPC_PDUs ts_SGSNContextReqPDU(template (value) RoutingAreaIdentity rai,
+ template (value) OCT4 teic,
+ template (value) octetstring sgsn_addr_control,
+ template (omit) hexstring imsi := omit,
+ template (omit) BIT1 msValidated := '0'B,
+ template (omit) TLLI tlli := omit,
+ template (omit) PacketTMSI ptmsi := omit,
+ template (omit) PTMSI_Signature ptmsi_sig := omit,
+ template (omit) OCT1 rat_type := omit) := {
+ sgsn_ContextRequest := {
+ imsi := f_ts_Imsi(imsi),
+ routingAreaIdentity := rai,
+ tlli := tlli,
+ packetTMSI := ptmsi,
+ ptmsi_Signature := ptmsi_sig,
+ ms_Validated := f_ts_MS_Validated(msValidated),
+ teidControlPlane := {
+ type_gtpc := '11'O,
+ teidControlPlane := teic
},
- rIMRoutingAddressDiscriminator := addr_discr,
- spare := '0'H,
- rIM_Routing_Address := addr
+ sgsn_addr_controlPlane := ts_GsnAddr(sgsn_addr_control),
+ alternative_sgsn_addr_controlPlane := omit,
+ sGSN_Number := omit,
+ ratType := f_ts_RATType(rat_type),
+ hopCounter := omit,
+ private_extension_gtpc := omit
}
- /* 3GPP TS 48.018 11.3.63.1.1 */
- template (present) RAN_Information_Request_Application_Container_NACC_GTPC
- tr_GTPC_RAN_Information_Request_Application_Container_NACC(template (present) GTP_CellId cid) := {
- iEI := '4D'O,
+}
+template (value) Gtp1cUnitdata ts_GTPC_SGSNContextReq(template (value) Gtp1cPeer peer,
+ template (value) uint16_t seq,
+ template (value) GTPC_PDUs SGSNContextReqPDU) := {
+ peer := peer,
+ gtpc := ts_GTP1C_PDU(sgsnContextRequest, '00000000'O, SGSNContextReqPDU, seq)
+}
+
+/* SGSN Context Response - 7.5.4 */
+template (present) GTPC_PDUs tr_SGSNContextRespPDU(template (present) GTP_Cause cause := ?,
+ template hexstring imsi := *) := {
+ sgsn_ContextResponse := {
+ cause := tr_Cause_gtpc(cause),
+ imsi := f_tr_Imsi(imsi),
+ teidControlPlane := *,
+ rabContext := *,
+ radioPrioritySMS := *,
+ radioPriority := *,
+ packetFlowID := *,
+ charging_char := *,
+ mm_Context := *,
+ pdp_Context := *,
+ sgsn_addr_controlPlane := *,
+ pdpContextPriorization := *,
+ radioPriority_LCS := *,
+ mBMS_UE_Context := *,
+ subscribedRFSP_Index := *,
+ rFSP_IndexInUse := *,
+ colocatedGGSN_PGW_FQDN := *,
+ evolvedAllocationRetentionPriorityII := *,
+ extendedCommonFlags := *,
+ ue_network_capability := *,
+ ue_ambr := *,
+ apn_ambr_nsapi := *,
+ signallingPriorityIndication_nsapi := *,
+ higher_bitrates_than_16mbps_flag := *,
+ selectionMode_nsapi := *,
+ localHomeNetworkID_nsapi := *,
+ uE_UsageType := *,
+ extendedCommonFlagsII := *,
+ private_extension_gtpc := *
+ }
+}
+template (present) Gtp1cUnitdata tr_GTPC_SGSNContextResp(template (present) Gtp1cPeer peer := ?,
+ template (present) OCT4 teid := ?,
+ template (present) GTPC_PDUs SGSNContextRespPDU := ?)
+ := tr_GTPC_MsgType(peer, sgsnContextResponse, teid, SGSNContextRespPDU);
+
+template (value) GTPC_PDUs ts_SGSNContextRespPDU(template (value) GTP_Cause cause,
+ template (omit) hexstring imsi := omit,
+ template (omit) OCT4 teic := omit,
+ template (omit) octetstring sgsn_addr_control := omit,
+ template (omit) MM_Context mm_context := omit,
+ template (omit) PDP_Context_GTPC_List pdp_ctx_list := omit) := {
+ sgsn_ContextResponse := {
+ cause := ts_Cause_gtpc(cause),
+ imsi := f_ts_Imsi(imsi),
+ teidControlPlane := f_ts_TEIC(teic),
+ rabContext := omit,
+ radioPrioritySMS := omit,
+ radioPriority := omit,
+ packetFlowID := omit,
+ charging_char := omit,
+ mm_Context := mm_context,
+ pdp_Context := pdp_ctx_list,
+ sgsn_addr_controlPlane := f_ts_GsnAddr(sgsn_addr_control),
+ pdpContextPriorization := omit,
+ radioPriority_LCS := omit,
+ mBMS_UE_Context := omit,
+ subscribedRFSP_Index := omit,
+ rFSP_IndexInUse := omit,
+ colocatedGGSN_PGW_FQDN := omit,
+ evolvedAllocationRetentionPriorityII := omit,
+ extendedCommonFlags := omit,
+ ue_network_capability := omit,
+ ue_ambr := omit,
+ apn_ambr_nsapi := omit,
+ signallingPriorityIndication_nsapi := omit,
+ higher_bitrates_than_16mbps_flag := omit,
+ selectionMode_nsapi := omit,
+ localHomeNetworkID_nsapi := omit,
+ uE_UsageType := omit,
+ extendedCommonFlagsII := omit,
+ private_extension_gtpc := omit
+ }
+}
+template (value) Gtp1cUnitdata ts_GTPC_SGSNContextResp(template (value) Gtp1cPeer peer,
+ template (value) OCT4 teid,
+ template (value) uint16_t seq,
+ template (value) GTPC_PDUs SGSNContextRespPDU) := {
+ peer := peer,
+ gtpc := ts_GTP1C_PDU(sgsnContextResponse, teid, SGSNContextRespPDU, seq)
+}
+
+
+/* SGSN Context Acknowledge - 7.5.5 */
+template (present) GTPC_PDUs tr_SGSNContextAckPDU(template (present) GTP_Cause cause := ?) := {
+ sgsn_ContextAcknowledge := {
+ cause := tr_Cause_gtpc(cause),
+ teidDataII := *,
+ sgsn_AddressForUserTraffic := *,
+ sgsn_Number := *,
+ nodeIdentifier := *,
+ private_extension_gtpc := *
+ }
+}
+template (present) Gtp1cUnitdata tr_GTPC_SGSNContextAck(template (present) Gtp1cPeer peer := ?,
+ template (present) OCT4 teid := ?,
+ template (present) GTPC_PDUs SGSNContextAckPDU := ?)
+ := tr_GTPC_MsgType(peer, sgsnContextAcknowledge, teid, SGSNContextAckPDU);
+template (value) GTPC_PDUs ts_SGSNContextAckPDU(template (value) GTP_Cause cause := GTP_CAUSE_REQUEST_ACCEPTED) := {
+ sgsn_ContextAcknowledge := {
+ cause := ts_Cause_gtpc(cause),
+ teidDataII := omit,
+ sgsn_AddressForUserTraffic := omit,
+ sgsn_Number := omit,
+ nodeIdentifier := omit,
+ private_extension_gtpc := omit
+ }
+}
+
+template (value) Gtp1cUnitdata ts_GTPC_SGSNContextAck(template (value) Gtp1cPeer peer,
+ template (value) OCT4 teid,
+ template (value) uint16_t seq,
+ template (value) GTPC_PDUs SGSNContextAckPDU := ts_SGSNContextAckPDU) := {
+ peer := peer,
+ gtpc := ts_GTP1C_PDU(sgsnContextAcknowledge, teid, SGSNContextAckPDU, seq)
+}
+
+/* GTP-C RIM */
+
+template (value) RIM_Application_Identity_GTPC ts_GTPC_RIM_Application_Identity(template (value) OCT1 app_id) := {
+ iEI := '4B'O,
ext := '1'B,
lengthIndicator := {
- length1 := ?
+ length1 := 1
},
- reporting_Cell_Identifier := tr_GTPC_Cell_Identifier_V(cid)
- }
- template (value) RAN_Information_Request_Application_Container_NACC_GTPC
- ts_GTPC_RAN_Information_Request_Application_Container_NACC(template (value) GTP_CellId cid) := {
- iEI := '4D'O,
+ rIMApplicationIdentity := app_id
+}
+/* 3GPP TS 48.018 11.3.62 */
+template (value) RIM_Sequence_Number_GTPC ts_GTPC_RIM_Sequence_Number(template (value) integer seq) := {
+ iEI := '4C'O,
ext := '1'B,
lengthIndicator := {
- length1 := 0 /* overwritten */
+ length1 := 4
},
- reporting_Cell_Identifier := ts_GTPC_Cell_Identifier_V(cid)
+ rIMSequenceNumber := int2oct(valueof(seq), 4)
+}
+template (value) RIM_PDU_Indications_GTPC ts_GTPC_RIM_PDU_Indications(template (value) boolean ack,
+ template (value) BIT3 type_ext) := {
+ iEI := '4F'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := 1
+ },
+ ack := bool2bit(valueof(ack)),
+ pDU_Type_Extension := type_ext,
+ reserved := '0000'B
+}
+/* 3GPP TS 48.018 11.3.67 */
+template (value) RIM_Protocol_Version_Number_GTPC ts_GTPC_RIM_Protocol_Version_Number(template (value) integer ver) := {
+ iEI := '55'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := 1
+ },
+ rIMProtocolVersionNumber := int2oct(valueof(ver), 1)
+}
+function tr_GTPC_Cell_Identifier_V(template (present) GTP_CellId cid) return template (present) Cell_Identifier_V_GTPC {
+ var template (present) Cell_Identifier_V_GTPC ret := {
+ mccDigit1 := ?,
+ mccDigit2 := ?,
+ mccDigit3 := ?,
+ mncDigit3 := ?,
+ mncDigit1 := ?,
+ mncDigit2 := ?,
+ lac := ?,
+ rac := ?,
+ cI_value := ?
}
- /* 3GPP TS 48.018 11.3.63.1 */
- template (present) RAN_Information_Request_Application_Container_GTPC
- tru_GTPC_RAN_Information_Request_Application_Container_NACC(template (present) GTP_CellId cid) := {
- nacc := tr_GTPC_RAN_Information_Request_Application_Container_NACC(cid)
+ if (istemplatekind(cid, "?")) {
+ return ?;
}
- template (value) RAN_Information_Request_Application_Container_GTPC
- tsu_GTPC_RAN_Information_Request_Application_Container_NACC(template (value) GTP_CellId cid) := {
- nacc := ts_GTPC_RAN_Information_Request_Application_Container_NACC(cid)
+ if (isvalue(cid) and isvalue(cid.ra_id) and isvalue(cid.ra_id.lai)) {
+ if (isvalue(cid.ra_id.lai.mcc_mnc)) {
+ ret.mccDigit1 := cid.ra_id.lai.mcc_mnc[0];
+ ret.mccDigit2 := cid.ra_id.lai.mcc_mnc[1];
+ ret.mccDigit3 := cid.ra_id.lai.mcc_mnc[2];
+ ret.mncDigit3 := cid.ra_id.lai.mcc_mnc[3];
+ ret.mncDigit1 := cid.ra_id.lai.mcc_mnc[4];
+ ret.mncDigit2 := cid.ra_id.lai.mcc_mnc[5];
+ }
+ if (isvalue(cid.ra_id.lai.lac)) {
+ ret.lac := int2oct(valueof(cid.ra_id.lai.lac), 2);
+ }
}
- /* 3GPP TS 48.018 11.3.63.2.1 */
- template (present) RAN_Information_Application_Container_NACC_GTPC
- tr_GTPC_RAN_Information_Application_Container_NACC(template (present) GTP_CellId cid,
- template (value) boolean psi_type,
- template (value) integer si_psi_num,
- template (value) octetstring si_psi) := {
- iEI := '4E'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := ?
- },
- reporting_Cell_Identifier := tr_GTPC_Cell_Identifier_V(cid),
- typeBit := bool2bit(valueof(psi_type)),
- number_of_SI_PSI := int2bit(valueof(si_psi_num), 7),
- sI_PSI := si_psi
+ if (isvalue(cid) and isvalue(cid.ra_id)) {
+ ret.rac := int2oct(valueof(cid.ra_id.rac), 1);
}
- template (value) RAN_Information_Application_Container_NACC_GTPC
- ts_GTPC_RAN_Information_Application_Container_NACC(template (value) GTP_CellId cid,
- template (value) boolean psi_type,
- template (value) integer si_psi_num,
- template (value) octetstring si_psi) := {
- iEI := '4E'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := 0 /* overwritten */
- },
- reporting_Cell_Identifier := ts_GTPC_Cell_Identifier_V(cid),
- typeBit := bool2bit(valueof(psi_type)),
- number_of_SI_PSI := int2bit(valueof(si_psi_num), 7),
- sI_PSI := si_psi
+ if (isvalue(cid)) {
+ ret.cI_value := int2oct(valueof(cid.cell_id), 2);
}
- external function enc_RIM_Routing_Address_GTPC(in RIM_Routing_Address_GTPC ra) return octetstring
- with { extension "prototype(convert) encode(RAW)" };
- external function dec_RIM_Routing_Address_GTPC(in octetstring stream) return RIM_Routing_Address_GTPC
- with { extension "prototype(convert) decode(RAW)" };
+ return ret;
+}
+template (value) Cell_Identifier_V_GTPC ts_GTPC_Cell_Identifier_V(template (value) GTP_CellId cid) := {
+ mccDigit1 := cid.ra_id.lai.mcc_mnc[0],
+ mccDigit2 := cid.ra_id.lai.mcc_mnc[1],
+ mccDigit3 := cid.ra_id.lai.mcc_mnc[2],
+ mncDigit3 := cid.ra_id.lai.mcc_mnc[3],
+ mncDigit1 := cid.ra_id.lai.mcc_mnc[4],
+ mncDigit2 := cid.ra_id.lai.mcc_mnc[5],
+ lac := int2oct(valueof(cid.ra_id.lai.lac), 2),
+ rac := int2oct(valueof(cid.ra_id.rac), 1),
+ cI_value := int2oct(valueof(cid.cell_id), 2)
+}
+template (value) RIM_Routing_Address_GTPC ts_GTPC_RIM_Routing_Address_cid(template (value) GTP_CellId cid) := {
+ cell_Identifier := ts_GTPC_Cell_Identifier_V(valueof(cid))
+}
+function tr_GTPC_ENB_Identifier(template (present) GTP_CellId cid,
+ template (present) integer tac,
+ template (present) octetstring gnbid) return template (present) ENB_Identifier {
+ var template (present) ENB_Identifier ret := {
+ mccDigit1 := ?,
+ mccDigit2 := ?,
+ mccDigit3 := ?,
+ mncDigit3 := ?,
+ mncDigit1 := ?,
+ mncDigit2 := ?,
+ tAC := ?,
+ globalENB_ID := ?
+ }
+ if (istemplatekind(cid, "?") and istemplatekind(tac, "?") and istemplatekind(gnbid, "?")) {
+ return ?;
+ }
+ if (isvalue(cid) and isvalue(cid.ra_id) and isvalue(cid.ra_id.lai)) {
+ if (isvalue(cid.ra_id.lai.mcc_mnc)) {
+ ret.mccDigit1 := cid.ra_id.lai.mcc_mnc[0];
+ ret.mccDigit2 := cid.ra_id.lai.mcc_mnc[1];
+ ret.mccDigit3 := cid.ra_id.lai.mcc_mnc[2];
+ ret.mncDigit3 := cid.ra_id.lai.mcc_mnc[3];
+ ret.mncDigit1 := cid.ra_id.lai.mcc_mnc[4];
+ ret.mncDigit2 := cid.ra_id.lai.mcc_mnc[5];
+ }
+ }
+ if (isvalue(tac)) {
+ ret.tAC := int2oct(valueof(tac), 2);
+ }
+ if (isvalue(gnbid)) {
+ ret.globalENB_ID := gnbid;
+ }
- /* RAN_Information_Request */
- template (value) RAN_Information_Request_RIM_Container_GTPC
- ts_GTPC_RAN_Information_Request_RIM_Container(template (value) RIM_Application_Identity_GTPC app_id,
- template (value) RIM_Sequence_Number_GTPC seq,
- template (value) RIM_PDU_Indications_GTPC ind,
- template (omit) RIM_Protocol_Version_Number_GTPC ver := omit,
- template (omit) RAN_Information_Request_Application_Container_GTPC app_cont := omit,
- template (omit) SON_TransferApplicationIdentity son_app_id := omit) := {
+ return ret;
+}
+template (value) ENB_Identifier ts_GTPC_ENB_Identifier(template (value) GTP_CellId cid,
+ template (value) integer tac,
+ template (value) octetstring gnbid) := {
+ mccDigit1 := cid.ra_id.lai.mcc_mnc[0],
+ mccDigit2 := cid.ra_id.lai.mcc_mnc[1],
+ mccDigit3 := cid.ra_id.lai.mcc_mnc[2],
+ mncDigit3 := cid.ra_id.lai.mcc_mnc[3],
+ mncDigit1 := cid.ra_id.lai.mcc_mnc[4],
+ mncDigit2 := cid.ra_id.lai.mcc_mnc[5],
+ tAC := int2oct(valueof(tac), 2),
+ globalENB_ID := gnbid
+}
+template (value) RIM_Routing_Address_GTPC
+ts_GTPC_RIM_Routing_Address_enbid(template (value) GTP_CellId cid,
+ template (value) integer tac,
+ template (value) octetstring gnbid) := {
+ eNB_Identifier := ts_GTPC_ENB_Identifier(cid, tac, gnbid)
+}
+template (present) RIM_Routing_Information_GTPC
+tr_GTPC_RIM_Routing_Information(template (present) HEX1 addr_discr,
+ template (present) RIM_Routing_Address_GTPC addr) := {
+ iEI := '54'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := ?
+ },
+ rIMRoutingAddressDiscriminator := addr_discr,
+ spare := '0'H,
+ rIM_Routing_Address := addr
+}
+template (value) RIM_Routing_Information_GTPC
+ts_GTPC_RIM_Routing_Information(template (value) HEX1 addr_discr,
+ template (value) RIM_Routing_Address_GTPC addr) := {
+ iEI := '54'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := 0 /* overwritten */
+ },
+ rIMRoutingAddressDiscriminator := addr_discr,
+ spare := '0'H,
+ rIM_Routing_Address := addr
+}
+/* 3GPP TS 48.018 11.3.63.1.1 */
+template (present) RAN_Information_Request_Application_Container_NACC_GTPC
+tr_GTPC_RAN_Information_Request_Application_Container_NACC(template (present) GTP_CellId cid) := {
+ iEI := '4D'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := ?
+ },
+ reporting_Cell_Identifier := tr_GTPC_Cell_Identifier_V(cid)
+}
+template (value) RAN_Information_Request_Application_Container_NACC_GTPC
+ts_GTPC_RAN_Information_Request_Application_Container_NACC(template (value) GTP_CellId cid) := {
+ iEI := '4D'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := 0 /* overwritten */
+ },
+ reporting_Cell_Identifier := ts_GTPC_Cell_Identifier_V(cid)
+}
+/* 3GPP TS 48.018 11.3.63.1 */
+template (present) RAN_Information_Request_Application_Container_GTPC
+tru_GTPC_RAN_Information_Request_Application_Container_NACC(template (present) GTP_CellId cid) := {
+ nacc := tr_GTPC_RAN_Information_Request_Application_Container_NACC(cid)
+}
+template (value) RAN_Information_Request_Application_Container_GTPC
+tsu_GTPC_RAN_Information_Request_Application_Container_NACC(template (value) GTP_CellId cid) := {
+ nacc := ts_GTPC_RAN_Information_Request_Application_Container_NACC(cid)
+}
+/* 3GPP TS 48.018 11.3.63.2.1 */
+template (present) RAN_Information_Application_Container_NACC_GTPC
+tr_GTPC_RAN_Information_Application_Container_NACC(template (present) GTP_CellId cid,
+ template (value) boolean psi_type,
+ template (value) integer si_psi_num,
+ template (value) octetstring si_psi) := {
+ iEI := '4E'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := ?
+ },
+ reporting_Cell_Identifier := tr_GTPC_Cell_Identifier_V(cid),
+ typeBit := bool2bit(valueof(psi_type)),
+ number_of_SI_PSI := int2bit(valueof(si_psi_num), 7),
+ sI_PSI := si_psi
+}
+template (value) RAN_Information_Application_Container_NACC_GTPC
+ts_GTPC_RAN_Information_Application_Container_NACC(template (value) GTP_CellId cid,
+ template (value) boolean psi_type,
+ template (value) integer si_psi_num,
+ template (value) octetstring si_psi) := {
+ iEI := '4E'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := 0 /* overwritten */
+ },
+ reporting_Cell_Identifier := ts_GTPC_Cell_Identifier_V(cid),
+ typeBit := bool2bit(valueof(psi_type)),
+ number_of_SI_PSI := int2bit(valueof(si_psi_num), 7),
+ sI_PSI := si_psi
+}
+external function enc_RIM_Routing_Address_GTPC(in RIM_Routing_Address_GTPC ra) return octetstring
+ with { extension "prototype(convert) encode(RAW)" };
+external function dec_RIM_Routing_Address_GTPC(in octetstring stream) return RIM_Routing_Address_GTPC
+ with { extension "prototype(convert) decode(RAW)" };
+
+/* RAN_Information_Request */
+template (value) RAN_Information_Request_RIM_Container_GTPC
+ts_GTPC_RAN_Information_Request_RIM_Container(template (value) RIM_Application_Identity_GTPC app_id,
+ template (value) RIM_Sequence_Number_GTPC seq,
+ template (value) RIM_PDU_Indications_GTPC ind,
+ template (omit) RIM_Protocol_Version_Number_GTPC ver := omit,
+ template (omit) RAN_Information_Request_Application_Container_GTPC app_cont := omit,
+ template (omit) SON_TransferApplicationIdentity son_app_id := omit) := {
+ iEI := '57'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := 0 /* overwritten */
+ },
+ rIM_Application_Identity := app_id,
+ rIM_Sequence_Number := seq,
+ rIM_PDU_Indications := ind,
+ rIM_Protocol_Version_Number := ver,
+ application_Container := app_cont,
+ sON_TransferApplicationIdentity := son_app_id
+}
+template (value) PDU_BSSGP_RAN_INFORMATION_REQUEST_GTPC
+ts_GTPC_RAN_Information_Request(template (value) RIM_Routing_Information_GTPC dest,
+ template (value) RIM_Routing_Information_GTPC src,
+ template (value) RAN_Information_Request_RIM_Container_GTPC cont) := {
+ bssgpPduType := '71'O,
+ destination_Cell_Identifier := dest,
+ source_Cell_Identifier := src,
+ rIM_Container := cont
+}
+template (present) PDU_BSSGP_RAN_INFORMATION_REQUEST_GTPC
+tr_GTPC_RAN_Information_Request(template (present) RIM_Routing_Information_GTPC dest := ?,
+ template (present) RIM_Routing_Information_GTPC src := ?,
+ template (present) RAN_Information_Request_RIM_Container_GTPC cont := ?) := {
+ bssgpPduType := '71'O,
+ destination_Cell_Identifier := dest,
+ source_Cell_Identifier := src,
+ rIM_Container := cont
+}
+
+template (value) RANTransparentContainer
+ts_RANTransparentContainer_RAN_INFO_REQ(template (value) PDU_BSSGP_RAN_INFORMATION_REQUEST_GTPC pdu) := {
+ type_gtpc := '90'O,
+ lengthf := 0, /* FIXME */
+ rANTransparentContainerField := {
+ pDU_BSSGP_RAN_INFORMATION_REQUEST := pdu
+ }
+}
+template (present) RANTransparentContainer
+tr_RANTransparentContainer_RAN_INFO_REQ(template (present) PDU_BSSGP_RAN_INFORMATION_REQUEST_GTPC pdu := ?) := {
+ type_gtpc := '90'O,
+ lengthf := ?,
+ rANTransparentContainerField := {
+ pDU_BSSGP_RAN_INFORMATION_REQUEST := pdu
+ }
+}
+
+/* RAN_Information */
+template (present) ApplContainer_or_ApplErrContainer_NACC_GTPC
+tru_GTPC_ApplContainer_NACC(template (present) GTP_CellId cid,
+ template (value) boolean psi_type,
+ template (value) integer si_psi_num,
+ template (value) octetstring si_psi) := {
+ application_Container := tr_GTPC_RAN_Information_Application_Container_NACC(cid, psi_type, si_psi_num, si_psi)
+}
+template (value) ApplContainer_or_ApplErrContainer_NACC_GTPC
+tsu_GTPC_ApplContainer_NACC(template (value) GTP_CellId cid,
+ template (value) boolean psi_type,
+ template (value) integer si_psi_num,
+ template (value) octetstring si_psi) := {
+ application_Container := ts_GTPC_RAN_Information_Application_Container_NACC(cid, psi_type, si_psi_num, si_psi)
+}
+template (present) ApplContainer_or_ApplErrContainer_GTPC
+tru_GTPC_ApplContainer_or_ApplErrContainer_NACC(template (present) ApplContainer_or_ApplErrContainer_NACC_GTPC cont) := {
+ nacc := cont
+}
+template (value) ApplContainer_or_ApplErrContainer_GTPC
+tsu_GTPC_ApplContainer_or_ApplErrContainer_NACC(template (value) ApplContainer_or_ApplErrContainer_NACC_GTPC cont) := {
+ nacc := cont
+}
+template (present) RAN_Information_RIM_Container_GTPC
+tr_GTPC_RAN_Information_RIM_Container(template (present) RIM_Application_Identity_GTPC app_id,
+ template (present) RIM_Sequence_Number_GTPC seq,
+ template (present) RIM_PDU_Indications_GTPC ind,
+ template RIM_Protocol_Version_Number_GTPC ver := *,
+ template ApplContainer_or_ApplErrContainer_GTPC app_cont := *,
+ template SON_TransferApplicationIdentity son_app_id := *) := {
+ iEI := '58'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := ?
+ },
+ rIM_Application_Identity := app_id,
+ rIM_Sequence_Number := seq,
+ rIM_PDU_Indications := ind,
+ rIM_Protocol_Version_Number := ver,
+ applContainer_or_ApplErrContainer := app_cont,
+ sON_TransferApplicationIdentity := son_app_id
+}
+template (value) RAN_Information_RIM_Container_GTPC
+ts_GTPC_RAN_Information_RIM_Container(template (value) RIM_Application_Identity_GTPC app_id,
+ template (value) RIM_Sequence_Number_GTPC seq,
+ template (value) RIM_PDU_Indications_GTPC ind,
+ template (omit) RIM_Protocol_Version_Number_GTPC ver := omit,
+ template (omit) ApplContainer_or_ApplErrContainer_GTPC app_cont := omit,
+ template (omit) SON_TransferApplicationIdentity son_app_id := omit) := {
+ iEI := '58'O,
+ ext := '1'B,
+ lengthIndicator := {
+ length1 := 0 /* overwritten */
+ },
+ rIM_Application_Identity := app_id,
+ rIM_Sequence_Number := seq,
+ rIM_PDU_Indications := ind,
+ rIM_Protocol_Version_Number := ver,
+ applContainer_or_ApplErrContainer := app_cont,
+ sON_TransferApplicationIdentity := son_app_id
+}
+template (present) PDU_BSSGP_RAN_INFORMATION_GTPC
+tr_GTPC_RAN_Information(template (present) RIM_Routing_Information_GTPC dest,
+ template (present) RIM_Routing_Information_GTPC src,
+ template (present) RAN_Information_RIM_Container_GTPC cont) := {
+ bssgpPduType := '70'O,
+ destination_Cell_Identifier := dest,
+ source_Cell_Identifier := src,
+ rIM_Container := cont
+}
+template (value) PDU_BSSGP_RAN_INFORMATION_GTPC
+ts_GTPC_RAN_Information(template (value) RIM_Routing_Information_GTPC dest,
+ template (value) RIM_Routing_Information_GTPC src,
+ template (value) RAN_Information_RIM_Container_GTPC cont) := {
+ bssgpPduType := '70'O,
+ destination_Cell_Identifier := dest,
+ source_Cell_Identifier := src,
+ rIM_Container := cont
+}
+template (present) RANTransparentContainer
+tr_RANTransparentContainer_RAN_INFO(template (present) PDU_BSSGP_RAN_INFORMATION_GTPC pdu) := {
+ type_gtpc := '90'O,
+ lengthf := ?,
+ rANTransparentContainerField := {
+ pDU_BSSGP_RAN_INFORMATION := pdu
+ }
+}
+template (value) RANTransparentContainer
+ts_RANTransparentContainer_RAN_INFO(template (value) PDU_BSSGP_RAN_INFORMATION_GTPC pdu) := {
+ type_gtpc := '90'O,
+ lengthf := 0, /* overwritten */
+ rANTransparentContainerField := {
+ pDU_BSSGP_RAN_INFORMATION := pdu
+ }
+}
+
+template (present) RANTransparentContainer
+tr_RANTransparentContainer(template (present) RANTransparentContainerField rANTransparentContainerField) := {
+ type_gtpc := '90'O,
+ lengthf := ?,
+ rANTransparentContainerField := rANTransparentContainerField
+}
+template (value) RANTransparentContainer
+ts_RANTransparentContainer(template (value) RANTransparentContainerField rANTransparentContainerField) := {
+ type_gtpc := '90'O,
+ lengthf := 0, /* overwritten */
+ rANTransparentContainerField := rANTransparentContainerField
+}
+template (present) GTPC_PDUs tr_RANInfoRelay(template (present) RANTransparentContainer transparentContainer) := {
+ ranInformationRelay := {
+ transparentContainer := transparentContainer,
+ rIM_RoutingAddress := *,
+ rIM_RoutingAddress_Discriminator := *,
+ private_extension_gtpc := *
+ }
+}
+template (value) GTPC_PDUs ts_RANInfoRelay(template (value) RANTransparentContainer transparentContainer,
+ template (omit) RIM_RoutingAddress ra := omit,
+ template (omit) RIM_RoutingAddress_Discriminator ra_discr := omit) := {
+ ranInformationRelay := {
+ transparentContainer := transparentContainer,
+ rIM_RoutingAddress := ra,
+ rIM_RoutingAddress_Discriminator := ra_discr,
+ private_extension_gtpc := omit
+ }
+}
+template (present) Gtp1cUnitdata
+tr_GTPC_RANInfoRelay(template (present) Gtp1cPeer peer,
+ template (present) RANTransparentContainer transparentContainer) := {
+ peer := peer,
+ gtpc := tr_GTP1C_PDU(rANInformationRelay, '00000000'O, tr_RANInfoRelay(transparentContainer))
+}
+template (value) Gtp1cUnitdata
+ts_GTPC_RANInfoRelay(template (value) Gtp1cPeer peer,
+ template (value) RANTransparentContainer transparentContainer,
+ template (omit) RIM_RoutingAddress ra := omit,
+ template (omit) RIM_RoutingAddress_Discriminator ra_discr := omit) := {
+ peer := peer,
+ gtpc := ts_GTP1C_PDU(rANInformationRelay,
+ '00000000'O,
+ ts_RANInfoRelay(transparentContainer, ra, ra_discr),
+ 0)
+}
+
+
+template (present) RAN_Information_Request_RIM_Container_GTPC
+tr_GTPC_RAN_Information_Request_RIM_Container(template (present) RIM_Application_Identity_GTPC app_id := ?,
+ template (present) RIM_Sequence_Number_GTPC seq := ?,
+ template (present) RIM_PDU_Indications_GTPC ind := ?,
+ template RIM_Protocol_Version_Number_GTPC ver := *,
+ template RAN_Information_Request_Application_Container_GTPC app_cont := *,
+ template SON_TransferApplicationIdentity son_app_id := *) := {
iEI := '57'O,
ext := '1'B,
lengthIndicator := {
- length1 := 0 /* overwritten */
+ length1 := ?
},
rIM_Application_Identity := app_id,
rIM_Sequence_Number := seq,
@@ -1858,231 +2058,33 @@
rIM_Protocol_Version_Number := ver,
application_Container := app_cont,
sON_TransferApplicationIdentity := son_app_id
- }
- template (value) PDU_BSSGP_RAN_INFORMATION_REQUEST_GTPC
- ts_GTPC_RAN_Information_Request(template (value) RIM_Routing_Information_GTPC dest,
- template (value) RIM_Routing_Information_GTPC src,
- template (value) RAN_Information_Request_RIM_Container_GTPC cont) := {
- bssgpPduType := '71'O,
- destination_Cell_Identifier := dest,
- source_Cell_Identifier := src,
- rIM_Container := cont
- }
- template (present) PDU_BSSGP_RAN_INFORMATION_REQUEST_GTPC
- tr_GTPC_RAN_Information_Request(template (present) RIM_Routing_Information_GTPC dest := ?,
- template (present) RIM_Routing_Information_GTPC src := ?,
- template (present) RAN_Information_Request_RIM_Container_GTPC cont := ?) := {
- bssgpPduType := '71'O,
- destination_Cell_Identifier := dest,
- source_Cell_Identifier := src,
- rIM_Container := cont
- }
-
- template (value) RANTransparentContainer
- ts_RANTransparentContainer_RAN_INFO_REQ(template (value) PDU_BSSGP_RAN_INFORMATION_REQUEST_GTPC pdu) := {
- type_gtpc := '90'O,
- lengthf := 0, /* FIXME */
- rANTransparentContainerField := {
- pDU_BSSGP_RAN_INFORMATION_REQUEST := pdu
- }
- }
- template (present) RANTransparentContainer
- tr_RANTransparentContainer_RAN_INFO_REQ(template (present) PDU_BSSGP_RAN_INFORMATION_REQUEST_GTPC pdu := ?) := {
- type_gtpc := '90'O,
- lengthf := ?,
- rANTransparentContainerField := {
- pDU_BSSGP_RAN_INFORMATION_REQUEST := pdu
- }
- }
-
- /* RAN_Information */
- template (present) ApplContainer_or_ApplErrContainer_NACC_GTPC
- tru_GTPC_ApplContainer_NACC(template (present) GTP_CellId cid,
- template (value) boolean psi_type,
- template (value) integer si_psi_num,
- template (value) octetstring si_psi) := {
- application_Container := tr_GTPC_RAN_Information_Application_Container_NACC(cid, psi_type, si_psi_num, si_psi)
- }
- template (value) ApplContainer_or_ApplErrContainer_NACC_GTPC
- tsu_GTPC_ApplContainer_NACC(template (value) GTP_CellId cid,
- template (value) boolean psi_type,
- template (value) integer si_psi_num,
- template (value) octetstring si_psi) := {
- application_Container := ts_GTPC_RAN_Information_Application_Container_NACC(cid, psi_type, si_psi_num, si_psi)
- }
- template (present) ApplContainer_or_ApplErrContainer_GTPC
- tru_GTPC_ApplContainer_or_ApplErrContainer_NACC(template (present) ApplContainer_or_ApplErrContainer_NACC_GTPC cont) := {
- nacc := cont
- }
- template (value) ApplContainer_or_ApplErrContainer_GTPC
- tsu_GTPC_ApplContainer_or_ApplErrContainer_NACC(template (value) ApplContainer_or_ApplErrContainer_NACC_GTPC cont) := {
- nacc := cont
- }
- template (present) RAN_Information_RIM_Container_GTPC
- tr_GTPC_RAN_Information_RIM_Container(template (present) RIM_Application_Identity_GTPC app_id,
- template (present) RIM_Sequence_Number_GTPC seq,
- template (present) RIM_PDU_Indications_GTPC ind,
- template RIM_Protocol_Version_Number_GTPC ver := *,
- template ApplContainer_or_ApplErrContainer_GTPC app_cont := *,
- template SON_TransferApplicationIdentity son_app_id := *) := {
- iEI := '58'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := ?
- },
- rIM_Application_Identity := app_id,
- rIM_Sequence_Number := seq,
- rIM_PDU_Indications := ind,
- rIM_Protocol_Version_Number := ver,
- applContainer_or_ApplErrContainer := app_cont,
- sON_TransferApplicationIdentity := son_app_id
- }
- template (value) RAN_Information_RIM_Container_GTPC
- ts_GTPC_RAN_Information_RIM_Container(template (value) RIM_Application_Identity_GTPC app_id,
- template (value) RIM_Sequence_Number_GTPC seq,
- template (value) RIM_PDU_Indications_GTPC ind,
- template (omit) RIM_Protocol_Version_Number_GTPC ver := omit,
- template (omit) ApplContainer_or_ApplErrContainer_GTPC app_cont := omit,
- template (omit) SON_TransferApplicationIdentity son_app_id := omit) := {
- iEI := '58'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := 0 /* overwritten */
- },
- rIM_Application_Identity := app_id,
- rIM_Sequence_Number := seq,
- rIM_PDU_Indications := ind,
- rIM_Protocol_Version_Number := ver,
- applContainer_or_ApplErrContainer := app_cont,
- sON_TransferApplicationIdentity := son_app_id
- }
- template (present) PDU_BSSGP_RAN_INFORMATION_GTPC
- tr_GTPC_RAN_Information(template (present) RIM_Routing_Information_GTPC dest,
- template (present) RIM_Routing_Information_GTPC src,
- template (present) RAN_Information_RIM_Container_GTPC cont) := {
- bssgpPduType := '70'O,
- destination_Cell_Identifier := dest,
- source_Cell_Identifier := src,
- rIM_Container := cont
- }
- template (value) PDU_BSSGP_RAN_INFORMATION_GTPC
- ts_GTPC_RAN_Information(template (value) RIM_Routing_Information_GTPC dest,
- template (value) RIM_Routing_Information_GTPC src,
- template (value) RAN_Information_RIM_Container_GTPC cont) := {
- bssgpPduType := '70'O,
- destination_Cell_Identifier := dest,
- source_Cell_Identifier := src,
- rIM_Container := cont
- }
- template (present) RANTransparentContainer
- tr_RANTransparentContainer_RAN_INFO(template (present) PDU_BSSGP_RAN_INFORMATION_GTPC pdu) := {
- type_gtpc := '90'O,
- lengthf := ?,
- rANTransparentContainerField := {
- pDU_BSSGP_RAN_INFORMATION := pdu
- }
- }
- template (value) RANTransparentContainer
- ts_RANTransparentContainer_RAN_INFO(template (value) PDU_BSSGP_RAN_INFORMATION_GTPC pdu) := {
- type_gtpc := '90'O,
- lengthf := 0, /* overwritten */
- rANTransparentContainerField := {
- pDU_BSSGP_RAN_INFORMATION := pdu
- }
- }
-
- template (present) RANTransparentContainer
- tr_RANTransparentContainer(template (present) RANTransparentContainerField rANTransparentContainerField) := {
- type_gtpc := '90'O,
- lengthf := ?,
- rANTransparentContainerField := rANTransparentContainerField
- }
- template (value) RANTransparentContainer
- ts_RANTransparentContainer(template (value) RANTransparentContainerField rANTransparentContainerField) := {
- type_gtpc := '90'O,
- lengthf := 0, /* overwritten */
- rANTransparentContainerField := rANTransparentContainerField
- }
- template (present) GTPC_PDUs tr_RANInfoRelay(template (present) RANTransparentContainer transparentContainer) := {
- ranInformationRelay := {
- transparentContainer := transparentContainer,
- rIM_RoutingAddress := *,
- rIM_RoutingAddress_Discriminator := *,
- private_extension_gtpc := *
- }
- }
- template (value) GTPC_PDUs ts_RANInfoRelay(template (value) RANTransparentContainer transparentContainer,
- template (omit) RIM_RoutingAddress ra := omit,
- template (omit) RIM_RoutingAddress_Discriminator ra_discr := omit) := {
- ranInformationRelay := {
- transparentContainer := transparentContainer,
- rIM_RoutingAddress := ra,
- rIM_RoutingAddress_Discriminator := ra_discr,
- private_extension_gtpc := omit
- }
- }
- template (present) Gtp1cUnitdata
- tr_GTPC_RANInfoRelay(template (present) Gtp1cPeer peer,
- template (present) RANTransparentContainer transparentContainer) := {
- peer := peer,
- gtpc := tr_GTP1C_PDU(rANInformationRelay, '00000000'O, tr_RANInfoRelay(transparentContainer))
- }
- template (value) Gtp1cUnitdata
- ts_GTPC_RANInfoRelay(template (value) Gtp1cPeer peer,
- template (value) RANTransparentContainer transparentContainer,
- template (omit) RIM_RoutingAddress ra := omit,
- template (omit) RIM_RoutingAddress_Discriminator ra_discr := omit) := {
- peer := peer,
- gtpc := ts_GTP1C_PDU(rANInformationRelay,
- '00000000'O,
- ts_RANInfoRelay(transparentContainer, ra, ra_discr),
- 0)
- }
-
-
- template (present) RAN_Information_Request_RIM_Container_GTPC
- tr_GTPC_RAN_Information_Request_RIM_Container(template (present) RIM_Application_Identity_GTPC app_id := ?,
- template (present) RIM_Sequence_Number_GTPC seq := ?,
- template (present) RIM_PDU_Indications_GTPC ind := ?,
- template RIM_Protocol_Version_Number_GTPC ver := *,
- template RAN_Information_Request_Application_Container_GTPC app_cont := *,
- template SON_TransferApplicationIdentity son_app_id := *) := {
- iEI := '57'O,
- ext := '1'B,
- lengthIndicator := {
- length1 := ?
- },
- rIM_Application_Identity := app_id,
- rIM_Sequence_Number := seq,
- rIM_PDU_Indications := ind,
- rIM_Protocol_Version_Number := ver,
- application_Container := app_cont,
- sON_TransferApplicationIdentity := son_app_id
- }
-
- /* 3GPP TS 29.060, section 7.7.57 */
- template (value) RIM_RoutingAddress ts_RIM_RoutingAddress(template (value) octetstring addr_value) := {
- type_gtpc := '9F'O,
- lengthf := 0, /* we assume encoder overwrites this */
- rIM_RoutingAddressValue := addr_value
- }
- template (present) RIM_RoutingAddress tr_RIM_RoutingAddress(template (present) octetstring addr_value := ?) := {
- type_gtpc := '9F'O,
- lengthf := ?,
- rIM_RoutingAddressValue := addr_value
- }
-
- /* 3GPP TS 29.060, section 7.7.77 */
- template (value) RIM_RoutingAddress_Discriminator ts_RIM_RoutingAddress_Discriminator(template (value) bitstring addr_discr) := {
- type_gtpc := 'B2'O,
- lengthf := 0, /* we assume encoder overwrites this */
- rra_discriminator := addr_discr,
- spare := '0000'B
- }
- template (present) RIM_RoutingAddress_Discriminator tr_RIM_RoutingAddress_Discriminator(template (present) bitstring addr_discr := ?) := {
- type_gtpc := 'B2'O,
- lengthf := ?,
- rra_discriminator := addr_discr,
- spare := '0000'B
- }
}
+
+/* 3GPP TS 29.060, section 7.7.57 */
+template (value) RIM_RoutingAddress ts_RIM_RoutingAddress(template (value) octetstring addr_value) := {
+ type_gtpc := '9F'O,
+ lengthf := 0, /* we assume encoder overwrites this */
+ rIM_RoutingAddressValue := addr_value
+}
+template (present) RIM_RoutingAddress tr_RIM_RoutingAddress(template (present) octetstring addr_value := ?) := {
+ type_gtpc := '9F'O,
+ lengthf := ?,
+ rIM_RoutingAddressValue := addr_value
+}
+
+/* 3GPP TS 29.060, section 7.7.77 */
+template (value) RIM_RoutingAddress_Discriminator ts_RIM_RoutingAddress_Discriminator(template (value) bitstring addr_discr) := {
+ type_gtpc := 'B2'O,
+ lengthf := 0, /* we assume encoder overwrites this */
+ rra_discriminator := addr_discr,
+ spare := '0000'B
+}
+template (present) RIM_RoutingAddress_Discriminator tr_RIM_RoutingAddress_Discriminator(template (present) bitstring addr_discr := ?) := {
+ type_gtpc := 'B2'O,
+ lengthf := ?,
+ rra_discriminator := addr_discr,
+ spare := '0000'B
+}
+
+
+} /* module GTPv1C_Templates */
To view, visit change 38462. To unsubscribe, or for help writing mail filters, visit settings.