blob: 5dea7e9a44577304b3ffa96641b4508ec3f4c575 [file] [log] [blame]
Harald Welte0f7d03a2019-07-16 19:43:32 +09001module GTPv2_Templates {
2
3/* (C) 2019 by Harald Welte <laforge@gnumonks.org>
4 * All rights reserved.
5 *
6 * Released under the terms of GNU General Public License, Version 2 or
7 * (at your option) any later version.
8 *
9 * SPDX-License-Identifier: GPL-2.0-or-later
10 */
11
12import from General_Types all;
13import from Osmocom_Types all;
14import from GTPv2_Types all;
15
16private function fs_GTP2C_t_bit(template (omit) OCT4 teid) return BIT1 {
17 if (istemplatekind(teid, "omit")) {
18 return '0'B;
19 } else {
20 return '1'B;
21 }
22}
23
24private function fs_GTP2C_p_bit(template (omit) PDU_GTPCv2 piggyback) return BIT1 {
25 if (istemplatekind(piggyback, "omit")) {
26 return '0'B;
27 } else {
28 return '1'B;
29 }
30}
31
32template (present) PDU_GTPCv2 tr_PDU_GTP2C(template OCT4 teid := ?,
Harald Welte88b3ccb2020-03-12 21:36:32 +010033 template (present) OCT3 seq := ?,
Harald Welte0f7d03a2019-07-16 19:43:32 +090034 template (present) GTPCv2_PDUs pdus := ?,
35 template PDU_GTPCv2 piggyback := omit) := {
36 spare := '000'B,
37 t_Bit := ?,
38 p_Bit := ?,
39 version := '010'B,
40 messageType := ?,
41 lengthf := ?,
42 tEID := teid,
Harald Welte88b3ccb2020-03-12 21:36:32 +010043 sequenceNumber := seq,
Harald Welte0f7d03a2019-07-16 19:43:32 +090044 spare3 := '00'O,
45 gtpcv2_pdu := pdus,
46 piggybackPDU_GTPCv2 := piggyback
47}
48
Harald Welte88b3ccb2020-03-12 21:36:32 +010049template (present) OCT1 gtp2_requests := (
50 '01'O, // echoRequest
51 '20'O, // createSessionRequest
52 '5F'O, // createBearerRequest
53 '22'O, // modifyBearerRequest
54 '24'O, // deleteSessionRequest
55 '63'O, // deleteBearerRequest
56 'A8'O, // deleteIndirectDataForwardingTunnelRequest
57 '61'O, // updateBearerRequest
58 '42'O, // deleteBearerCommand
59 'A6'O, // createIndirectDataForwardingTunnelRequest
60 'AA'O, // releaseAccessBearersRequest
61 'B3'O, // modifyAccessBearersRequest
62 '85'O, // forwardRelocationRequest
63 '82'O, // contextRequest
64 '80'O, // identificationRequest
65 '26'O, // changeNotificationRequest
66 '8B'O, // relocationCancelRequest
67 'A0'O, // createForwardingTunnelRequest
68 '65'O, // deletePDN_ConnectionSetRequest
69 'C8'O, // updatePDN_ConnectionSetRequest
70 '9E'O, // uE_RegistrationQueryRequest
71 'E7'O, // mBMSSessionStartRequest
72 'E9'O, // mBMSSessionUpdateRequest
73 'EB'O // mBMSSessionStopRequest
74);
75template (present) OCT1 gtp2_responses := (
76 '02'O, // echoResponse
77 '21'O, // createSessionResponse
78 '60'O, // createBearerResponse
79 '23'O, // modifyBearerResponse
80 '25'O, // deleteSessionResponse
81 '64'O, // deleteBearerResponse
82 'A9'O, // deleteIndirectDataForwardingTunnelResponse
83 '62'O, // updateBearerResponse
84 '43'O, // deleteBearerFailureIndication
85 'A7'O, // createIndirectDataForwardingTunnelResponse
86 'AB'O, // releaseAccessBearersResponse
87 'B4'O, // modifyAccessBearersResponse
88 '86'O, // forwardRelocationResponse
89 '83'O, // contextResponse
90 '81'O, // identificationResponse
91 '27'O, // changeNotificationResponse
92 '8C'O, // relocationCancelResponse
93 'A1'O, // createForwardingTunnelResponse
94 '66'O, // deletePDN_ConnectionSetResponse
95 'C9'O, // updatePDN_ConnectionSetResponse
96 '9F'O, // uE_RegistrationQueryResponse
97 'E8'O, // mBMSSessionStartResponse
98 'EA'O, // mBMSSessionUpdateResponse
99 'EC'O // mBMSSessionStopResponse
100);
101
102template (present) PDU_GTPCv2 tr_PDU_GTP2C_msgtypes(template (present) OCT1 types) := {
103 spare := '000'B,
104 t_Bit := ?,
105 p_Bit := ?,
106 version := '010'B,
107 messageType := types,
108 lengthf := ?,
109 tEID := ?,
110 sequenceNumber := ?,
111 spare3 := '00'O,
112 gtpcv2_pdu := ?,
113 piggybackPDU_GTPCv2 := *
114};
Harald Welte0f7d03a2019-07-16 19:43:32 +0900115
116/* 8.3 */
117template (value) IMSI ts_GTP2C_Imsi(template (value) hexstring imsi) := {
118 elementIdentifier := '01'O,
119 lengthIndicator := 0, /* overwritten */
120 instance := '0000'B,
121 spare := '0000'B,
122 iMSI_Value := imsi
123}
124template (present) IMSI tr_GTP2C_Imsi(template (present) hexstring imsi) := {
125 elementIdentifier := '01'O,
126 lengthIndicator := ?,
127 instance := ?,
128 spare := '0000'B,
Pau Espin Pedrol5c18a0c2023-10-19 13:41:41 +0200129 iMSI_Value := f_pad_bcd_number_tmpl(imsi)
Harald Welte0f7d03a2019-07-16 19:43:32 +0900130}
131
Harald Welte88b3ccb2020-03-12 21:36:32 +0100132template (present) MSISDN ts_GTP2C_msisdn(template (present) hexstring msisdn) := {
133 elementIdentifier := '4C'O,
134 lengthIndicator := 0, /* overwritten */
135 instance := '0000'B,
136 spare := '0000'B,
137 mSISDN_Value := msisdn
138}
139private function fs_GTP2C_msisdn(template (omit) hexstring msisdn) return
140template (omit) MSISDN {
141 if (istemplatekind(msisdn, "omit")) {
142 return omit;
143 } else {
144 return ts_GTP2C_msisdn(msisdn);
145 }
146}
147
148
Harald Welte0f7d03a2019-07-16 19:43:32 +0900149/* 8.4-1 */
Harald Welte0f7d03a2019-07-16 19:43:32 +0900150type enumerated GTP2C_Cause {
151 Local_Detach (2),
152 Complete_Detach (3),
153 RAT_changed_from_3GPP_to_Non_3GPP (4),
154 ISR_deactivation (5),
Pau Espin Pedrol1344e472023-10-23 19:54:29 +0200155 Error_Ind_from_RNC_eNB_SGSN_MME (6),
Harald Welte0f7d03a2019-07-16 19:43:32 +0900156 IMSI_Detach_Only (7),
157 Reactivation_Required (8),
Pau Espin Pedrol1344e472023-10-23 19:54:29 +0200158 PDN_reconnection_to_APN_disallowed (9),
159 Access_changed_from_Non_3GPP_to_3GPP (10),
160 PDN_connection_inactivity_timer_expires (11),
161 PGW_not_responding (12),
162 Network_Failure (13),
163 QoS_parameter_mismatch (14),
164 EPS_to_5GS_Mobility (15),
165 Request_accepted (16),
166 Request_accepted_partially (17),
167 New_PDN_type_due_to_network_preference (18),
168 New_PDN_type_due_to_single_address_bearer_only (19),
169 /* ... */
170 Context_Not_Found (64)
171} with { variant "FIELDLENGTH(8)" encode "RAW" };
Harald Welte0f7d03a2019-07-16 19:43:32 +0900172
173/* 8.4 */
Pau Espin Pedrol1344e472023-10-23 19:54:29 +0200174template (value) Cause ts_GTP2C_Cause(template (value) GTP2C_Cause cause,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900175 template (value) BIT1 cs) := {
176 elementIdentifier := '02'O,
177 lengthIndicator := 0, /* overwritten */
178 instance := '0000'B,
179 spare := '0000'B,
Pau Espin Pedrol1344e472023-10-23 19:54:29 +0200180 causeValue := int2oct(enum2int(valueof(cause)), 1),
Harald Welte0f7d03a2019-07-16 19:43:32 +0900181 cS := cs,
182 bCE := '0'B,
183 pCE := '0'B,
184 spare2 := '00000'B,
185 typeOfOffendingIE := omit,
186 lengthIndicator2 := omit,
187 instanceOfOffendingIE := omit,
188 spare3 := omit
189}
Pau Espin Pedrol1344e472023-10-23 19:54:29 +0200190private function enum2int_GTP2C_Cause_tmpl(template GTP2C_Cause inp) return template integer
191{
192 if (istemplatekind(inp, "omit")) {
193 return omit;
194 } else if (istemplatekind(inp, "*")) {
195 return *;
196 } else if (istemplatekind(inp, "?")) {
197 return ?;
198 } else {
199 return enum2int(valueof(inp));
200 }
201}
202template (present) Cause tr_GTP2C_Cause(template (present) GTP2C_Cause cause) := {
Harald Welte0f7d03a2019-07-16 19:43:32 +0900203 elementIdentifier := '02'O,
204 lengthIndicator := ?,
205 instance := ?,
206 spare := '0000'B,
Pau Espin Pedrol1344e472023-10-23 19:54:29 +0200207 causeValue := int2oct_tmpl(enum2int_GTP2C_Cause_tmpl(cause), 1),
Harald Welte0f7d03a2019-07-16 19:43:32 +0900208 cS := ?,
209 bCE := ?,
210 pCE := ?,
211 spare2 := '00000'B,
212 typeOfOffendingIE := *,
213 lengthIndicator2 := *,
214 instanceOfOffendingIE := *,
215 spare3 := *
216}
Pau Espin Pedrol1344e472023-10-23 19:54:29 +0200217private function fs_GTP2C_Cause(template (omit) GTP2C_Cause cause, template (value) BIT1 cs) return
Harald Welte88b3ccb2020-03-12 21:36:32 +0100218template (omit) Cause {
219 if (istemplatekind(cause, "omit")) {
220 return omit;
221 } else {
222 return ts_GTP2C_Cause(cause, cs);
223 }
224}
Pau Espin Pedrol1344e472023-10-23 19:54:29 +0200225private function fr_GTP2C_Cause(template GTP2C_Cause cause) return
Harald Welte88b3ccb2020-03-12 21:36:32 +0100226template Cause {
227 if (istemplatekind(cause, "omit")) {
228 return omit;
229 } else if (istemplatekind(cause, "*")) {
230 return *;
231 } else {
232 return tr_GTP2C_Cause(cause);
233 }
234}
235
Harald Welte0f7d03a2019-07-16 19:43:32 +0900236
Pau Espin Pedrol2a2e8542023-10-19 13:39:45 +0200237/* 8.6 */
Harald Welte0f7d03a2019-07-16 19:43:32 +0900238template (value) AccessPointName ts_GTP2C_APN(template (value) octetstring apn) := {
Pau Espin Pedrol2a2e8542023-10-19 13:39:45 +0200239 elementIdentifier := '47'O,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900240 lengthIndicator := 0, /* overwritten */
241 instance := '0000'B,
242 spare := '0000'B,
243 aPN_Value := apn
244}
245template (present) AccessPointName tr_GTP2C_APN(template (present) octetstring apn) := {
Pau Espin Pedrol2a2e8542023-10-19 13:39:45 +0200246 elementIdentifier := '47'O,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900247 lengthIndicator := ?,
248 instance := ?,
249 spare := '0000'B,
250 aPN_Value := apn
251}
252
Harald Welte88b3ccb2020-03-12 21:36:32 +0100253/* 8.7 */
254template (value) AggregateMaximumBitRate
255ts_GTP2C_Ambr(integer ambr_ul, integer ambr_dl) := {
256 elementIdentifier := '48'O,
257 lengthIndicator := 0, /* overwritten */
258 instance := '0000'B,
259 spare := '0000'B,
260 aPN_AMBR_for_uplink := int2oct(ambr_ul, 4),
261 aPN_AMBR_for_downlink := int2oct(ambr_dl, 4)
262}
263
264/* 8.8 */
265template (value) EPS_BearerID
266ts_GTP2C_EpsBearerId(template (value) uint4_t bid) := {
267 elementIdentifier := '49'O,
268 lengthIndicator := 0, /* overwritten */
269 instance := '0000'B,
270 spare := '0000'B,
271 ePS_Bearer_ID_Value := bid,
272 spare2 := '0000'B,
273 additionalOctets := omit
274}
275template (present) EPS_BearerID
276tr_GTP2C_EpsBearerId(template (present) uint4_t bid) := {
277 elementIdentifier := '49'O,
278 lengthIndicator := ?, /* overwritten */
279 instance := '0000'B,
280 spare := '0000'B,
281 ePS_Bearer_ID_Value := bid,
282 spare2 := '0000'B,
283 additionalOctets := *
284}
285
Pau Espin Pedrol78c5e412023-12-21 19:50:11 +0100286/* 8.12 */
287template (present) Indication
288tr_GTP2C_Indication(template (present) BIT1 oI := ?) := {
289 elementIdentifier := '4D'O,
290 lengthIndicator := ?,
291 instance := '0000'B,
292 spare := '0000'B,
293 sGWCI := ?,
294 iSRAI := ?,
295 iSRSI := ?,
296 oI := oI,
297 dFI := ?,
298 hI := ?,
299 dTF := ?,
300 dAF := ?,
301 mSV := ?,
302 sI := ?,
303 pT := ?,
304 pBit := ?,
305 cRSI := ?,
306 cFSI := ?,
307 uIMSI := ?,
308 sQCI := ?,
309 cCRSI := *,
310 iSRAU := *,
311 mBMDT := *,
312 s4AF := *,
313 s6AF := *,
314 sRNI := *,
315 pBIC := *,
316 retLoc := *,
317 cPSR := *,
318 cLII := *,
319 cSFBI := *,
320 pPSI := *,
321 pPON_PPEI := *,
322 pPOF := *,
323 aRRL := *,
324 cPRAI := *,
325 aOPI := *,
326 aOSI := *,
327 pCRI := *,
328 pSCI := *,
329 bDWI := *,
330 dTCI := *,
331 uASI := *,
332 nSI := *,
333 wPMSI := *,
334 uNACCSI := *,
335 pNSI := *,
336 s11TF := *,
337 pMTSMI := *,
338 cPOPCI := *,
339 ePCOSI := *,
340 rOAAI := *,
341 tSPCMI := *,
342 spare_1 := *,
343 spare_2 := *,
344 spare_3 := *,
345 spare_4 := *,
346 spare_5 := *,
347 spare_6 := *,
348 spare_7 := *,
Harald Welte88b3ccb2020-03-12 21:36:32 +0100349
350
Pau Espin Pedrol78c5e412023-12-21 19:50:11 +0100351 additionalOctets := *
352}
353
Harald Welte0f7d03a2019-07-16 19:43:32 +0900354/* 8.14 */
355template (value) PDN_AddressAllocation
356ts_GTP2C_PdnAddrAlloc(template (value) BIT3 pdn_type,
357 template (value) PDN_Address_and_Prefix addr_pfx) := {
358 elementIdentifier := '4F'O,
359 lengthIndicator := 0, /* overwritten */
360 instance := '0000'B,
361 spare := '0000'B,
362 pDN_Type := pdn_type,
363 spare2 := '00000'B,
364 pDN_Address_and_Prefix := addr_pfx
365}
366template (present) PDN_AddressAllocation
367tr_GTP2C_PdnAddrAlloc(template (present) BIT3 pdn_type,
368 template (present) PDN_Address_and_Prefix addr_pfx) := {
369 elementIdentifier := '4F'O,
370 lengthIndicator := ?,
371 instance := ?,
372 spare := '0000'B,
373 pDN_Type := pdn_type,
374 spare2 := '00000'B,
375 pDN_Address_and_Prefix := addr_pfx
376}
377template (value) PDN_AddressAllocation
378ts_GTP2C_PdnAddrAlloc_v4(template (value) OCT4 addr) :=
379 ts_GTP2C_PdnAddrAlloc('001'B, {iPv4_Address:=addr});
380template (present) PDN_AddressAllocation
381tr_GTP2C_PdnAddrAlloc_v4(template (present) OCT4 addr) :=
382 ts_GTP2C_PdnAddrAlloc('001'B, {iPv4_Address:=addr});
383
Harald Welte88b3ccb2020-03-12 21:36:32 +0100384/* 8.15 */
385template (value) Bearer_QoS
386ts_GTP2C_BearerQos(template (value) OCT1 qci,
387 uint40_t max_br_ul, uint40_t max_br_dl,
388 uint40_t g_br_ul, uint40_t g_br_dl,
389 template (value) BIT4 prio_lvl := '1001'B,
390 template (value) BIT1 pe_vuln := '0'B,
391 template (value) BIT1 pe_capa := '0'B) := {
392 elementIdentifier := '50'O,
393 lengthIndicator := 0, /* overwritten */
394 instance := '0000'B,
395 spare := '0000'B,
396 pVI := pe_vuln,
397 spare2 := '0'B,
398 pL := prio_lvl,
399 pCI := pe_capa,
400 spare3 := '0'B,
401 labelQCI := qci,
402 maxBitrateUplink := int2oct(max_br_ul, 5),
403 maxBitrateDownLink := int2oct(max_br_dl, 5),
404 guaranteedBitrateUplink := int2oct(g_br_ul, 5),
405 guaranteedBitrateDownLink := int2oct(g_br_dl, 5),
406 additionalOctets := omit
407}
408
Harald Welte0f7d03a2019-07-16 19:43:32 +0900409/* 8.17 */
410template (value) RAT_Type ts_GTP2C_RatType(template (value) integer rat) := {
Pau Espin Pedrol2a2e8542023-10-19 13:39:45 +0200411 elementIdentifier := '52'O,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900412 lengthIndicator := 0, /* overwritten */
413 instance := '0000'B,
414 spare := '0000'B,
415 rAT_TypeValue := rat,
416 additionalOctets := omit
417}
418template (present) RAT_Type tr_GTP2C_RatType(template (present) integer rat) := {
Pau Espin Pedrol2a2e8542023-10-19 13:39:45 +0200419 elementIdentifier := '52'O,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900420 lengthIndicator := ?,
421 instance := ?,
422 spare := '0000'B,
423 rAT_TypeValue := rat,
424 additionalOctets := *
425}
426
Harald Welte88b3ccb2020-03-12 21:36:32 +0100427/* 8.21 */
428function ts_GTP2C_UserLocInfo(template (omit) CGI cgi := omit,
429 template (omit) SAI sai := omit,
430 template (omit) RAI rai := omit,
431 template (omit) TAI tai := omit,
432 template (omit) ECGI ecgi := omit,
433 template (omit) LAI lai := omit)
434return template (value) UserLocationInfo {
435 var template (value) UserLocationInfo uli;
436 uli.elementIdentifier := '56'O;
437 uli.lengthIndicator := 0; // overwritten
438 uli.instance := '0000'B;
439 uli.spare := '0000'B;
440 uli.spare2 := '00'B;
441 uli.additionalOctets := omit;
442
443 if (istemplatekind(cgi, "omit")) {
444 uli.cGI_Flag := '0'B;
445 } else {
446 uli.cGI_Flag := '1'B;
447 }
448 uli.cGI := cgi;
449
450 if (istemplatekind(sai, "omit")) {
451 uli.sAI_Flag := '0'B;
452 } else {
453 uli.sAI_Flag := '1'B;
454 }
455 uli.sAI := sai;
456
457 if (istemplatekind(rai, "omit")) {
458 uli.rAI_Flag := '0'B;
459 } else {
460 uli.rAI_Flag := '1'B;
461 }
462 uli.rAI := rai
463
464 if (istemplatekind(tai, "omit")) {
465 uli.tAI_Flag := '0'B;
466 } else {
467 uli.tAI_Flag := '1'B;
468 }
469 uli.tAI := tai
470
471 if (istemplatekind(ecgi, "omit")) {
472 uli.eCGI_Flag := '0'B;
473 } else {
474 uli.eCGI_Flag := '1'B;
475 }
476 uli.eCGI := ecgi;
477
478 if (istemplatekind(lai, "omit")) {
479 uli.lAI_Flag := '0'B;
480 } else {
481 uli.lAI_Flag := '1'B;
482 }
483 uli.lAI := lai
484
485 return uli;
486}
Harald Welte0f7d03a2019-07-16 19:43:32 +0900487
488/* 8.22 */
489private function f_bit4oct(template (omit) octetstring os) return BIT1
490{
491 if (istemplatekind(os, "omit")) {
492 return '0'B;
493 } else {
494 return '1'B;
495 }
496}
Harald Welte88b3ccb2020-03-12 21:36:32 +0100497type enumerated FteidInterface {
498 FTEID_IF_S1U_eNodeB_GTPU (0),
499 FTEID_IF_S1U_SGW_GTPU (1),
500 FTEID_IF_S12_RNC_GTPU (2),
501 FTEID_IF_S12_SGW_GTPU (3),
502 FTEID_IF_S5S8_SGW_GTPU (4),
503 FTEID_IF_S5S8_PGW_GTPU (5),
504 FTEID_IF_S5S8_SGW_GTPC (6),
505 FTEID_IF_S5S8_PGW_GTPC (7),
506 FTEID_IF_S5S8_SGW_PMIPv6 (8),
507 FTEID_IF_S5S8_PGW_PMIPv6 (9),
508 FTEID_IF_S11_MME_GTPC (10),
509 FTEID_IF_S11S4_SGW_GTPC (11),
510 FTEID_IF_S10ND26_MME_GTPC (12),
511 FTEID_IF_S3_MME_GTPC (13),
512 FTEID_IF_S3_SGSN_GTPC (14),
513 FTEID_IF_S4_SGSN_GTPU (15),
514 FTEID_IF_S4_SGW_GTPU (16),
515 FTEID_IF_S16_SGSN_GTPC (18),
516 FTEID_IF_eNB_GTPU_DL_DATA_FW (19),
517 FTEID_IF_eNB_GTPU_UL_DATA_FW (20),
518 FTEID_IF_RNC_GTPU_DATA_FW (21),
519 FTEID_IF_SGSN_GTPU_DATA_FW (22),
520 FTEID_IF_SGWUPF_GTPU_DL_DATA_FW (23),
521 FTEID_IF_Sm_MMBS_GW_GTPC (24),
522 FTEID_IF_Sn_MMBS_GW_GTPC (25),
523 FTEID_IF_Sm_MME_GTPC (26),
524 FTEID_IF_Sn_MME_GTPC (27),
525 FTEID_IF_SGW_GTPU_UL_DATA_FW (28),
526 FTEID_IF_Sn_SGSN_GTPU (29),
527 FTEID_IF_S2b_ePDG_GTPC (30),
528 FTEID_IF_S2bU_ePDG_GTPU (31),
529 FTEID_IF_S2b_PGW_GTPC (32),
530 FTEID_IF_S2bU_PGW_GTPU (33),
531 FTEID_IF_S2a_TWAN_GTPU (34),
532 FTEID_IF_S2a_TWAN_GTPC (35),
533 FTEID_IF_S2a_PGW_GTPC (36),
534 FTEID_IF_S2a_PGW_GTPU (37),
535 FTEID_IF_S11_MME_GTPU (38),
536 FTEID_IF_S11_SGW_GTPU (39),
537 FTEID_IF_N26_AMF_GTPC (40)
538};
Harald Welte0f7d03a2019-07-16 19:43:32 +0900539template (value) FullyQualifiedTEID
Harald Welte88b3ccb2020-03-12 21:36:32 +0100540ts_GTP2C_FTEID(FteidInterface if_type, OCT4 teid, uint4_t instance := 0,
541 template (omit) OCT4 v4_addr := omit,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900542 template (omit) OCT16 v6_addr := omit) := {
543 elementIdentifier := '57'O,
544 lengthIndicator := 0, /* overwritten */
Harald Welte88b3ccb2020-03-12 21:36:32 +0100545 instance := int2bit(instance, 4),
Harald Welte0f7d03a2019-07-16 19:43:32 +0900546 spare := '0000'B,
Harald Welte88b3ccb2020-03-12 21:36:32 +0100547 interfaceType := enum2int(if_type),
548 v6_Flag := f_bit4oct(v6_addr),
549 v4_Flag := f_bit4oct(v4_addr),
Harald Welte0f7d03a2019-07-16 19:43:32 +0900550 tEID_GRE_Key := teid,
551 iPv4_Address := v4_addr,
552 iPv6_Address := v6_addr,
553 additionalOctets := omit
554}
555template (present) FullyQualifiedTEID
556tr_GTP2C_FTEID(template (present) integer if_type, template (present) OCT4 teid,
Harald Welte88b3ccb2020-03-12 21:36:32 +0100557 template BIT4 instance := ?,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900558 template OCT4 v4_addr := omit,
559 template OCT16 v6_addr := omit) := {
560 elementIdentifier := '57'O,
561 lengthIndicator := ?,
Harald Welte88b3ccb2020-03-12 21:36:32 +0100562 instance := instance,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900563 spare := '0000'B,
564 interfaceType := if_type,
565 v6_Flag := ?,
566 v4_Flag := ?,
567 tEID_GRE_Key := teid,
568 iPv4_Address := v4_addr,
569 iPv6_Address := v6_addr,
570 additionalOctets := omit
571}
572
Harald Welte88b3ccb2020-03-12 21:36:32 +0100573/* 8.28 */
Pau Espin Pedrol8c746492023-10-23 20:56:09 +0200574template (value) BearerContextIEs
Pau Espin Pedrold4a20082023-10-23 19:59:24 +0200575ts_GTP2C_BcContextIE(template (value) uint4_t ebi,
Pau Espin Pedrol8c746492023-10-23 20:56:09 +0200576 template (omit) FullyQualifiedTEID_List teid_list := omit,
577 template (omit) Bearer_QoS qos := ts_GTP2C_BearerQos('09'O, 0,0,0,0),
578 template (omit) ChargingID charging_id := omit) := {
Pau Espin Pedrold4a20082023-10-23 19:59:24 +0200579 ePS_Bearer_ID := ts_GTP2C_EpsBearerId(ebi),
Pau Espin Pedrol8c746492023-10-23 20:56:09 +0200580 cause := ts_GTP2C_Cause(Request_accepted, '0'B),
581 ePS_Bearer_TFT := omit,
582 fullyQualifiedTEID := teid_list,
583 bearerLevel_QoS := qos,
584 chargingID := charging_id,
585 bearerFlags := omit,
586 transactionIdentifier := omit,
587 protocolConfigOptions := omit,
588 rAN_NASCause := omit,
589 additionalProtocolConfigOptions := omit,
590 extendedProtocolConfigOptions := omit
591}
592
Harald Welte88b3ccb2020-03-12 21:36:32 +0100593template (value) BearerContextGrouped
594ts_GTP2C_BcGrouped(template (value) BearerContextIEs ies) := {
595 elementIdentifier := '5D'O,
596 lengthIndicator := 0, /* overwritten */
597 instance := '0000'B,
598 spare := '0000'B,
599 bearerContextIEs := ies
600}
601template (present) BearerContextGrouped
602tr_GTP2C_BcGrouped(template (present) BearerContextIEs ies) := {
603 elementIdentifier := '5D'O,
604 lengthIndicator := ?, /* overwritten */
605 instance := '0000'B,
606 spare := '0000'B,
607 bearerContextIEs := ies
608}
609
Pau Espin Pedrol8c746492023-10-23 20:56:09 +0200610/* 8.29 */
611template (value) ChargingID
612ts_GTP2C_ChargingID(template (value) OCT4 chargingID_Value) := {
613 elementIdentifier := '5D'O,
614 lengthIndicator := 0, /* overwritten */
615 instance := '0000'B,
616 spare := '0000'B,
617 chargingID_Value := chargingID_Value,
618 additionalOctets := omit
619}
Harald Welte88b3ccb2020-03-12 21:36:32 +0100620
621/* 8.30 */
622template (value) ChargingCharacteristics
623ts_GTP2C_ChargingCaracteristics(template (value) OCT2 cc) := {
624 elementIdentifier := '5F'O,
625 lengthIndicator := 0, /* overwritten */
626 instance := '0000'B,
627 spare := '0000'B,
628 chargingCharacteristicsValue := cc,
629 additionalOctets := omit
630}
631template (present) ChargingCharacteristics
632tr_GTP2C_ChargingCaracteristics(template (present) OCT2 cc) := {
633 elementIdentifier := '5F'O,
634 lengthIndicator := ?, /* overwritten */
635 instance := '0000'B,
636 spare := '0000'B,
637 chargingCharacteristicsValue := cc,
638 additionalOctets := omit
639}
640
641
642/* 8.34 */
643template (value) PDN_Type
644ts_GTP2C_PdnType(template (value) BIT3 pdn_type) := {
645 elementIdentifier := '63'O,
646 lengthIndicator := 0,
647 instance := '0000'B,
648 spare := '0000'B,
649 pDN_TypeValue := pdn_type,
650 spare2 := '00000'B,
651 additionalOctets := omit
652}
653template (present) PDN_Type
654tr_GTP2C_PdnType(template (present) BIT3 pdn_type) := {
655 elementIdentifier := '63'O,
656 lengthIndicator := ?,
657 instance := ?,
658 spare := ?,
659 pDN_TypeValue := pdn_type,
660 spare2 := ?,
661 additionalOctets := *
662}
663
664/* 8.35 */
665template (value) ProcedureTransactionID
666ts_GTP2C_ProcTransId(template (value) integer pti) := {
667 elementIdentifier := '64'O,
668 lengthIndicator := 0,
669 instance := '0000'B,
670 spare := '0000'B,
671 pTI_Value := pti,
672 additionalOctets := omit
673}
674template (present) ProcedureTransactionID
675tr_GTP2C_ProcTransId(template (present) integer pti) := {
676 elementIdentifier := '64'O,
677 lengthIndicator := ?,
678 instance :=?,
679 spare := ?,
680 pTI_Value := pti,
681 additionalOctets := *
682}
683
684
685/* 8.57 */
686template (value) APN_Restriction
687ts_GTP2C_ApnRestriction(template (value) integer val) := {
688 elementIdentifier := '7F'O,
689 lengthIndicator := 0,
690 instance := '0000'B,
691 spare := '0000'B,
692 restrictionTypeValue := val,
693 additionalOctets := omit
694}
695template (present) APN_Restriction
696tr_GTP2C_ApnRestriction(template (present) integer val) := {
697 elementIdentifier := '7F'O,
698 lengthIndicator := ?,
699 instance := '0000'B,
700 spare := ?,
701 restrictionTypeValue := val,
702 additionalOctets := *
703}
704
705
706/* 8.58 */
707template (value) SelectionMode
708ts_GTP2C_SelectionMode(template (value) integer mode) := {
709 elementIdentifier := '80'O,
710 lengthIndicator := 0, /* overwritten */
711 instance := '0000'B,
712 spare := '0000'B,
713 selectionModeValue := mode,
714 spare2 := '000000'B,
715 additionalOctets := omit
716}
717template (present) SelectionMode
718tr_GTP2C_SelectionMode(template (present) integer mode) := {
719 elementIdentifier := '80'O,
720 lengthIndicator := ?,
721 instance := ?,
722 spare := ?,
723 selectionModeValue := mode,
724 spare2 := ?,
725 additionalOctets := *
726}
727
728
Harald Welte0f7d03a2019-07-16 19:43:32 +0900729
730
731template (value) PDU_GTPCv2 ts_PDU_GTP2C(template (omit) OCT4 teid, template (value) OCT3 seq,
732 template (value) OCT1 msg_type,
733 template (value) GTPCv2_PDUs pdus,
734 template (omit) PDU_GTPCv2 piggyback := omit) := {
735 spare := '000'B,
736 t_Bit := fs_GTP2C_t_bit(teid),
737 p_Bit := fs_GTP2C_p_bit(piggyback),
738 version := '010'B,
739 messageType := msg_type,
740 lengthf := 0, /* overwritten */
741 tEID := teid,
742 sequenceNumber := seq,
743 spare3 := '00'O,
744 gtpcv2_pdu := pdus,
745 piggybackPDU_GTPCv2 := piggyback
746}
747
748
Harald Welte88b3ccb2020-03-12 21:36:32 +0100749template (value) PDU_GTPCv2
750ts_GTP2C_EchoReq(template (value) integer rec_val) :=
751ts_PDU_GTP2C(omit, '000000'O, '01'O, {
752 echoRequest := {
753 recovery := {
754 elementIdentifier := '03'O,
755 lengthIndicator := 0,
756 instance := '0000'B,
757 spare := '0000'B,
758 recoveryValue := rec_val
759 },
760 sendingNodeFeatures := omit,
761 privateExtension := omit
762 }});
Harald Welte0f7d03a2019-07-16 19:43:32 +0900763template (present) PDU_GTPCv2
Harald Welte88b3ccb2020-03-12 21:36:32 +0100764tr_GTP2C_EchoReq(template (present) OCT3 seq := ?) :=
765tr_PDU_GTP2C(omit, seq, { echoRequest := ? }, omit);
766
767template (value) PDU_GTPCv2
768ts_GTP2C_EchoResp(template (value) integer rec_val) :=
769ts_PDU_GTP2C(omit, '000000'O, '02'O, {
770 echoRequest := {
771 recovery := {
772 elementIdentifier := '03'O,
773 lengthIndicator := 0,
774 instance := '0000'B,
775 spare := '0000'B,
776 recoveryValue := rec_val
777 },
778 sendingNodeFeatures := omit,
779 privateExtension := omit
780 }});
781template (present) PDU_GTPCv2
782tr_GTP2C_EchoResp(template (present) OCT3 seq := ?) :=
783tr_PDU_GTP2C(omit, seq, { echoResponse := ? }, omit);
784
785
786
787template (present) PDU_GTPCv2
788ts_GTP2C_CreateSessionReq(template (value) hexstring imsi, template (omit) hexstring msisdn,
789 integer rat_type, template (value) FullyQualifiedTEID sender_fteid,
790 template (value) octetstring apn, template (value) BIT3 pdn_type,
791 template (omit) FullyQualifiedTEID_List teid_list,
792 template (value) OCT2 chg_car, template (value) uint4_t bearer_id,
793 template (value) Bearer_QoS qos := ts_GTP2C_BearerQos('09'O, 0,0,0,0)) :=
794ts_PDU_GTP2C('00000000'O, '000000'O, '20'O, {
795 createSessionRequest := {
796 iMSI := ts_GTP2C_Imsi(imsi),
797 mSISDN := fs_GTP2C_msisdn(msisdn),
798 mEI := omit,
799 userLocationInfo := omit,
800 servingNetwork := omit,
801 rAT_Type := ts_GTP2C_RatType(rat_type),
802 indication := omit,
803 fullyQualifiedTEID := { sender_fteid },
804 accessPointName := ts_GTP2C_APN(apn),
805 selectionMode := ts_GTP2C_SelectionMode(0),
806 pDN_Type := ts_GTP2C_PdnType(pdn_type),
807 pDN_AddressAllocation := ts_GTP2C_PdnAddrAlloc('001'B, {iPv4_Address:='00000000'O}),
808 maxAPN_Restriction := ts_GTP2C_ApnRestriction(0),
809 ambr := ts_GTP2C_Ambr(102400, 102400),
810 linkedEPS_Bearer_ID := omit,
811 trustedWLANModeIndication := omit,
812 protocolConfigOptions := omit,
813 bearerContextGrouped := {
814 ts_GTP2C_BcGrouped({
815 ePS_Bearer_ID := ts_GTP2C_EpsBearerId(bearer_id),
816 cause := omit,
817 ePS_Bearer_TFT := omit,
818 fullyQualifiedTEID := teid_list,
819 bearerLevel_QoS := qos,
820 chargingID := omit,
821 bearerFlags := omit,
822 transactionIdentifier := omit,
823 protocolConfigOptions := omit,
824 rAN_NASCause := omit,
825 additionalProtocolConfigOptions := omit,
826 extendedProtocolConfigOptions := omit
827 })
828 },
829 traceInformation := omit,
830 recovery := omit,
831 csid := omit,
832 uE_TimeZone := omit,
833 user_CSG_Information := omit,
834 chargingCharacteristics := ts_GTP2C_ChargingCaracteristics(chg_car),
835 lDN := omit,
836 signallingPriorityIndication := omit,
837 iP_Addr := omit,
838 portNumber := omit,
839 aPCO := omit,
840 trustedWLANAccessNetworkIdentifier := omit,
841 cNOperatorSelectionEntity := omit,
842 presenceReportingAreaInformation := omit,
843 overloadControlInformationGrouped := omit,
844 originationTimeStamp := omit,
845 maximumWaitTime := omit,
846 wLANLocationTimestamp := omit,
847 nBIFOMContainer := omit,
848 remoteUEContextGrouped := omit,
849 nodeIdentifier := omit,
850 extendedProtocolConfigOptions := omit,
851 servingPLMNRateControl := omit,
852 counter := omit,
853 privateExtension := omit
854 }});
855
856
857template (present) PDU_GTPCv2
Pau Espin Pedrol90a46c42023-10-19 13:44:44 +0200858tr_GTP2C_CreateSessionReq(template (present) hexstring imsi := ?, template (present) octetstring apn := ?) :=
Harald Welte88b3ccb2020-03-12 21:36:32 +0100859tr_PDU_GTP2C('00000000'O, ?, {
Harald Welte0f7d03a2019-07-16 19:43:32 +0900860 createSessionRequest := {
861 iMSI := tr_GTP2C_Imsi(imsi),
862 mSISDN := *,
863 mEI := *,
Pau Espin Pedrol90a46c42023-10-19 13:44:44 +0200864 userLocationInfo := *,
865 servingNetwork := *,
866 rAT_Type := tr_GTP2C_RatType(?),
Harald Welte0f7d03a2019-07-16 19:43:32 +0900867 indication := *,
868 fullyQualifiedTEID := ?,
Pau Espin Pedrol90a46c42023-10-19 13:44:44 +0200869 accessPointName := tr_GTP2C_APN(apn), // '*'
Harald Welte0f7d03a2019-07-16 19:43:32 +0900870 selectionMode := ?,
Pau Espin Pedrol90a46c42023-10-19 13:44:44 +0200871 pDN_Type := *,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900872 pDN_AddressAllocation := ?,
Pau Espin Pedrol90a46c42023-10-19 13:44:44 +0200873 maxAPN_Restriction := *,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900874 ambr := *,
875 linkedEPS_Bearer_ID := omit,
876 trustedWLANModeIndication := omit,
877 protocolConfigOptions := omit,
878 bearerContextGrouped := ?,
879 traceInformation := *,
Pau Espin Pedrol90a46c42023-10-19 13:44:44 +0200880 recovery := *,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900881 csid := omit,
Pau Espin Pedrol90a46c42023-10-19 13:44:44 +0200882 uE_TimeZone := *,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900883 user_CSG_Information := omit,
Pau Espin Pedrol90a46c42023-10-19 13:44:44 +0200884 chargingCharacteristics := *,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900885 lDN := omit,
886 signallingPriorityIndication := *,
887 iP_Addr := omit,
888 portNumber := omit,
Pau Espin Pedrol90a46c42023-10-19 13:44:44 +0200889 aPCO := *,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900890 trustedWLANAccessNetworkIdentifier := omit,
891 cNOperatorSelectionEntity := omit,
892 presenceReportingAreaInformation := omit,
893 overloadControlInformationGrouped := omit,
894 originationTimeStamp := *,
895 maximumWaitTime := *,
896 wLANLocationTimestamp := omit,
897 nBIFOMContainer := omit,
898 remoteUEContextGrouped := *,
899 nodeIdentifier := *,
900 extendedProtocolConfigOptions := omit,
901 servingPLMNRateControl := omit,
902 counter := omit,
903 privateExtension := omit
904 }});
905
906template (value) PDU_GTPCv2
Pau Espin Pedrolfa2b3842023-12-13 18:49:19 +0100907ts_GTP2C_CreateSessionResp(template (value) OCT4 d_teid,
908 template (value) OCT3 seq,
909 template (value) FullyQualifiedTEID_List fteids,
Pau Espin Pedrol8c746492023-10-23 20:56:09 +0200910 template (value) PDN_AddressAllocation addr,
911 template (omit) BearerContextGrouped_List bearerContextGrouped := omit) :=
Pau Espin Pedrolfa2b3842023-12-13 18:49:19 +0100912ts_PDU_GTP2C(d_teid, seq, '21'O, {
Harald Welte0f7d03a2019-07-16 19:43:32 +0900913 createSessionResponse := {
Pau Espin Pedrol1344e472023-10-23 19:54:29 +0200914 cause := ts_GTP2C_Cause(Request_accepted, '0'B),
Harald Welte0f7d03a2019-07-16 19:43:32 +0900915 changeReportingAction := omit,
916 cSG_InformationReportingAction := omit,
917 heNBInformationReporting := omit,
918 fullyQualifiedTEID := fteids,
919 pDN_AddressAllocation := addr,
920 aPN_Restriction := omit,
921 ambr := omit,
922 linkedEPS_Bearer_ID := omit,
923 protocolConfigOptions := omit,
Pau Espin Pedrol8c746492023-10-23 20:56:09 +0200924 bearerContextGrouped := bearerContextGrouped,
Harald Welte0f7d03a2019-07-16 19:43:32 +0900925 recovery := omit,
926 chargingGatewayName := omit,
927 chargingGatewayAddress := omit,
928 csid := omit,
929 lDN := omit,
930 pGW_Back_OffTime := omit,
931 aPCO := omit,
932 trustedWLANIPv4Parameters := omit,
933 indicationFlags := omit,
934 presenceReportingAreaAction := omit,
935 loadControlInformationGrouped := omit,
936 overloadControlInformationGrouped := omit,
937 nBIFOMContainer := omit,
938 pDNConnectionChargingID := omit,
939 extendedProtocolConfigOptions := omit,
940 privateExtension := omit
941 }});
Harald Welte88b3ccb2020-03-12 21:36:32 +0100942template (present) PDU_GTPCv2
943tr_GTP2C_CreateSessionResp(template (present) OCT4 d_teid := ?,
944 template (present) OCT3 seq := ?,
Pau Espin Pedrol1344e472023-10-23 19:54:29 +0200945 template (present) GTP2C_Cause cause := ?,
Harald Welte88b3ccb2020-03-12 21:36:32 +0100946 template FullyQualifiedTEID_List fteids := *,
947 template PDN_AddressAllocation addr := *,
948 template BearerContextGrouped_List bctxg := *) :=
949tr_PDU_GTP2C(d_teid, seq, {
950 createSessionResponse := {
951 cause := tr_GTP2C_Cause(cause),
952 changeReportingAction := *,
953 cSG_InformationReportingAction := *,
954 heNBInformationReporting := *,
955 fullyQualifiedTEID := fteids,
956 pDN_AddressAllocation := addr,
957 aPN_Restriction := ?,
958 ambr := *,
959 linkedEPS_Bearer_ID := *,
960 protocolConfigOptions := *,
961 bearerContextGrouped := bctxg,
962 recovery := *,
963 chargingGatewayName := *,
964 chargingGatewayAddress := *,
965 csid := *,
966 lDN := *,
967 pGW_Back_OffTime := *,
968 aPCO := *,
969 trustedWLANIPv4Parameters := *,
970 indicationFlags := *,
971 presenceReportingAreaAction := *,
972 loadControlInformationGrouped := *,
973 overloadControlInformationGrouped := *,
974 nBIFOMContainer := *,
975 pDNConnectionChargingID := *,
976 extendedProtocolConfigOptions := *,
977 privateExtension := *
978 }});
979
980
981template (value) PDU_GTPCv2
982ts_GTP2C_DeleteSessionReq(template (value) OCT4 d_teid,
Pau Espin Pedrol1344e472023-10-23 19:54:29 +0200983 template (omit) GTP2C_Cause cause := omit,
Harald Welte88b3ccb2020-03-12 21:36:32 +0100984 template (value) FullyQualifiedTEID sender_fteid,
985 template (omit) FullyQualifiedTEID_List teid_list := omit,
986 template (value) uint4_t bearer_id) :=
987ts_PDU_GTP2C(d_teid, '000000'O, '24'O, {
988 deleteSessionRequest := {
989 cause := fs_GTP2C_Cause(cause, '0'B),
990 linkedEPS_Bearer_ID := ts_GTP2C_EpsBearerId(bearer_id),
991 uLI := omit,
992 indicationFlags := omit,
993 protocolConfigOptions := omit,
994 originatingNode := omit,
995 fullyQualifiedTEID := sender_fteid,
996 uE_TimeZone := omit,
997 uLITimestamp := omit,
998 rANNASReleaseCause := omit,
999 trustedWLANAccessNetworkIdentifier := omit,
1000 tWANIdentifierTimestamp := omit,
1001 overloadControlInformationGrouped := omit,
1002 uELocalIP_Addr := omit,
1003 portNumber := omit,
1004 extendedProtocolConfigOptions := omit,
1005 privateExtension := omit
1006 }});
1007template (present) PDU_GTPCv2
Pau Espin Pedrol2f327072023-12-21 19:11:35 +01001008tr_GTP2C_DeleteSessionReq(template (present) OCT4 d_teid := ?,
Harald Welte88b3ccb2020-03-12 21:36:32 +01001009 template (present) OCT3 seq := ?,
Pau Espin Pedrol2f327072023-12-21 19:11:35 +01001010 template GTP2C_Cause cause := *,
1011 template (present) uint4_t bearer_id := ?,
Pau Espin Pedrol78c5e412023-12-21 19:50:11 +01001012 template Indication indicationFlags := *,
Pau Espin Pedrol2f327072023-12-21 19:11:35 +01001013 template FullyQualifiedTEID sender_fteid := *) :=
Harald Welte88b3ccb2020-03-12 21:36:32 +01001014tr_PDU_GTP2C(d_teid, seq, {
1015 deleteSessionRequest := {
1016 cause := fr_GTP2C_Cause(cause),
1017 linkedEPS_Bearer_ID := tr_GTP2C_EpsBearerId(bearer_id),
1018 uLI := *,
Pau Espin Pedrol78c5e412023-12-21 19:50:11 +01001019 indicationFlags := indicationFlags,
Harald Welte88b3ccb2020-03-12 21:36:32 +01001020 protocolConfigOptions := *,
1021 originatingNode := *,
1022 fullyQualifiedTEID := sender_fteid,
1023 uE_TimeZone := *,
1024 uLITimestamp := *,
1025 rANNASReleaseCause := *,
1026 trustedWLANAccessNetworkIdentifier := *,
1027 tWANIdentifierTimestamp := *,
1028 overloadControlInformationGrouped := *,
1029 uELocalIP_Addr := *,
1030 portNumber := *,
1031 extendedProtocolConfigOptions := *,
1032 privateExtension := *
1033 }});
1034
1035
1036template (value) PDU_GTPCv2
1037ts_GTP2C_DeleteSessionResp(template (value) OCT4 d_teid,
1038 template (value) OCT3 seq,
Pau Espin Pedrol1344e472023-10-23 19:54:29 +02001039 template (value) GTP2C_Cause cause) :=
Pau Espin Pedrol2e9988d2023-12-13 18:48:33 +01001040ts_PDU_GTP2C(d_teid, seq, '25'O, {
Harald Welte88b3ccb2020-03-12 21:36:32 +01001041 deleteSessionResponse := {
1042 cause := ts_GTP2C_Cause(cause, '0'B),
1043 recovery := omit,
1044 protocolConfigOptions := omit,
1045 indicationFlags := omit,
1046 loadControlInformationGrouped := omit,
1047 overloadControlInformationGrouped := omit,
1048 extendedProtocolConfigOptions := omit,
1049 privateExtension := omit
1050
1051 }});
1052template (present) PDU_GTPCv2
1053tr_GTP2C_DeleteSessionResp(template (present) OCT4 d_teid,
1054 template (present) OCT3 seq := ?,
Pau Espin Pedrol1344e472023-10-23 19:54:29 +02001055 template (present) GTP2C_Cause cause := ?
Harald Welte88b3ccb2020-03-12 21:36:32 +01001056 ) :=
1057tr_PDU_GTP2C(d_teid, seq, {
1058 deleteSessionResponse := {
1059 cause := tr_GTP2C_Cause(cause),
1060 recovery := *,
1061 protocolConfigOptions := *,
1062 indicationFlags := *,
1063 loadControlInformationGrouped := *,
1064 overloadControlInformationGrouped := *,
1065 extendedProtocolConfigOptions := *,
1066 privateExtension := *
1067 }});
1068
1069template (value) PDU_GTPCv2
1070ts_GTP2C_CreateBearerReq(template (value) OCT4 d_teid,
1071 template (value) integer proc_trans_id,
1072 template (value) uint4_t linked_id,
1073 template (value) uint4_t bearer_id,
1074 template (omit) FullyQualifiedTEID_List teid_list,
1075 template (value) Bearer_QoS qos := ts_GTP2C_BearerQos('09'O, 0,0,0,0)) :=
1076ts_PDU_GTP2C(d_teid, '000000'O, '5F'O, {
1077 createBearerRequest := {
1078 procedureTransactionID := ts_GTP2C_ProcTransId(proc_trans_id),
1079 linkedEPS_BearerID := ts_GTP2C_EpsBearerId(linked_id),
1080 protocolConfigOptions := omit,
1081 bearerContextGrouped := {
1082 ts_GTP2C_BcGrouped({
1083 ePS_Bearer_ID := ts_GTP2C_EpsBearerId(bearer_id),
1084 cause := omit,
1085 ePS_Bearer_TFT := omit,
1086 fullyQualifiedTEID := teid_list,
1087 bearerLevel_QoS := qos,
1088 chargingID := omit,
1089 bearerFlags := omit,
1090 transactionIdentifier := omit,
1091 protocolConfigOptions := omit,
1092 rAN_NASCause := omit,
1093 additionalProtocolConfigOptions := omit,
1094 extendedProtocolConfigOptions := omit
1095 })
1096 },
1097 csid := omit,
1098 changeReportingAction := omit,
1099 cSG_InformationReportingAction := omit,
1100 heNBInformationReporting := omit,
1101 presenceReportingAreaAction := omit,
1102 indicationFlags := omit,
1103 loadControlInformationGrouped := omit,
1104 overloadControlInformationGrouped := omit,
1105 nBIFOMContainer := omit,
1106 privateExtension := omit
1107 }});
1108
Pau Espin Pedrolecfc7d62023-12-13 18:49:29 +01001109template (present) PDU_GTPCv2
1110tr_GTP2C_ModifyBearerReq(template (present) OCT4 d_teid := ?,
1111 template (present) OCT3 seq := ?) :=
1112tr_PDU_GTP2C(d_teid, seq, {
1113 modifyBearerRequest := {
1114 mEI := *,
1115 userLocationInfo := *,
1116 servingNetwork := *,
1117 rAT_Type := *,
1118 indicationFlags := *,
1119 fullyQualifiedTEID := *,
1120 ambr := *,
1121 delayDownlinkPacketNotificationReq := *,
1122 bearerContextGrouped := *,
1123 recovery := *,
1124 uE_TimeZone := *,
1125 csid := *,
1126 user_CSG_Information := *,
1127 iP_Addr := *,
1128 portNumber := *,
1129 lDN := *,
1130 //maxMBR_APN_AMBR := *,
1131 cNOperatorSelectionEntity := *,
1132 presenceReportingAreaInformation := *,
1133 overloadControlInformationGrouped := *,
1134 servingPLMNRateControl := *,
1135 counter := *,
1136 privateExtension := *
1137 }});
1138
1139template (value) PDU_GTPCv2
1140ts_GTP2C_ModifyBearerResp(template (value) OCT4 d_teid,
1141 template (value) OCT3 seq,
1142 template (value) GTP2C_Cause cause,
1143 template (value) uint4_t bearer_id,
1144 template (omit) BearerContextGrouped_List bearerContextGrouped := omit) :=
1145ts_PDU_GTP2C(d_teid, seq, '23'O, {
1146 modifyBearerResponse := {
1147 cause := ts_GTP2C_Cause(cause, '0'B),
1148 mSISDN := omit,
1149 linkedEPS_Bearer_ID := ts_GTP2C_EpsBearerId(bearer_id),
1150 aPN_Restriction := omit,
1151 protocolConfigOptions := omit,
1152 bearerContextGrouped := bearerContextGrouped,
1153 changeReportingAction := omit,
1154 cSG_InformationReportingAction := omit,
1155 heNBInformationReporting := omit,
1156 chargingGatewayName := omit,
1157 chargingGatewayAddress := omit,
1158 csid := omit,
1159 recovery := omit,
1160 lDN := omit,
1161 indicationFlags := omit,
1162 presenceReportingAreaAction := omit,
1163 loadControlInformationGrouped := omit,
1164 overloadControlInformationGrouped := omit,
1165 pDNConnectionChargingID := omit,
1166 privateExtension := omit
1167 }});
Harald Welte88b3ccb2020-03-12 21:36:32 +01001168
1169template (value) PDU_GTPCv2
1170ts_GTP2C_DeleteBearerReq(template (value) OCT4 d_teid,
1171 template (value) integer proc_trans_id,
1172 template (value) uint4_t bearer_id,
Pau Espin Pedrol1344e472023-10-23 19:54:29 +02001173 template (value) GTP2C_Cause cause) :=
Harald Welte88b3ccb2020-03-12 21:36:32 +01001174ts_PDU_GTP2C(d_teid, '000000'O, '63'O, {
1175 deleteBearerRequest := {
1176 epsBearerIdentity := { ts_GTP2C_EpsBearerId(bearer_id) },
1177 bearerContextGrouped := omit,
1178 procedureTransactionID := ts_GTP2C_ProcTransId(proc_trans_id),
1179 protocolConfigOptions := omit,
1180 csid := omit,
1181 cause := ts_GTP2C_Cause(cause, '0'B),
1182 indicationFlags := omit,
1183 loadControlInformationGrouped := omit,
1184 overloadControlInformationGrouped := omit,
1185 nBIFOMContainer := omit,
1186 extendedProtocolConfigOptions := omit,
1187 privateExtension := omit
1188 }});
1189
1190
1191template (present) PDU_GTPCv2
1192tr_GTP2C_DeleteBearerResp(template (present) OCT4 d_teid,
1193 template (present) OCT3 seq := ?,
Pau Espin Pedrol1344e472023-10-23 19:54:29 +02001194 template (present) GTP2C_Cause cause := ?) :=
Harald Welte88b3ccb2020-03-12 21:36:32 +01001195tr_PDU_GTP2C(d_teid, seq, {
1196 deleteBearerResponse := {
1197 cause := tr_GTP2C_Cause(cause),
1198 linkedBearerIdentity := *,
1199 bearerContextGrouped := *,
1200 recovery := *,
1201 csid := *,
1202 protocolConfigOptions := *,
1203 uE_TimeZone := *,
1204 uLI := *,
1205 uLITimestamp := *,
1206 trustedWLANAccessNetworkIdentifier := *,
1207 tWANIdentifierTimestamp := *,
1208 overloadControlInformationGrouped := *,
1209 iP_Addr := *,
1210 portNumber := *,
1211 nBIFOMContainer := *,
1212 privateExtension := *
1213 }});
Harald Welte0f7d03a2019-07-16 19:43:32 +09001214
Vadim Yanitskiybada3c92022-01-20 18:59:07 +06001215/* 8.18 */
1216template (value) ServingNetwork
1217ts_GTP2C_ServingNetwork(template (value) hexstring mcc,
1218 template (value) hexstring mnc,
1219 template (value) BIT4 instance := '0000'B) :=
1220{
1221 elementIdentifier := '53'O,
1222 lengthIndicator := 0, /* overwritten */
1223 instance := instance,
1224 spare := '0000'B,
1225 mccDigit1 := mcc[0],
1226 mccDigit2 := mcc[1],
1227 mccDigit3 := mcc[2],
1228 mncDigit3 := mnc[2], /* 'F'H for 2 digit MNC */
1229 mncDigit1 := mnc[0],
1230 mncDigit2 := mnc[1],
1231 additionalOctets := omit
1232}
1233
Harald Welte0f7d03a2019-07-16 19:43:32 +09001234
1235
1236}