blob: bbf3cff59affdeade999526851705adf2d4a9454 [file] [log] [blame]
Harald Welted27ab242019-07-26 13:45:18 +02001module DIAMETER_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 DIAMETER_Types all;
13import from Osmocom_Types all;
Pau Espin Pedrol8fa22842022-05-20 14:47:55 +020014import from Misc_Helpers all;
Harald Welted27ab242019-07-26 13:45:18 +020015
16/* https://www.iana.org/assignments/aaa-parameters/aaa-parameters.xhtml#aaa-parameters-4 */
17type enumerated DIAMETER_Resultcode {
18 /* Informational */
19 DIAMETER_MULTI_ROUND_AUTH (1001),
20
21 /* Success */
22 DIAMETER_SUCCESS (2001),
23 DIAMETER_LIMITED_SUCCESS (2002),
24 DIAMETER_FIRST_REGISTRATION (2003),
25 DIAMETER_SUBSEQUENT_REGISTRATION (2004),
26 DIAMETER_UNREGISTERED_SERVICE (2005),
27 DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED (2006),
28 DIAMETER_SERVER_SELECTION (2007),
29 DIAMETER_SUCCESS_AUTH_SENT_SERVER_NOT_STORED (2008),
30 DIAMETER_SUCCESS_RELOCATE_HA (2009),
31
32 /* Protocol Errors */
33 DIAMETER_COMMAND_UNSUPPORTED (3001),
34 DIAMETER_UNABLE_TO_DELIVER (3002),
35 DIAMETER_REALM_NOT_SERVED (3003),
36 DIAMETER_TOO_BUSY (3004),
37 DIAMETER_LOOP_DETECTED (3005),
38 DIAMETER_REDIRECT_INDICATION (3006),
39 DIAMETER_APPLICATION_UNSUPPORTED (3007),
40 DIAMETER_INVALID_HDR_BITS (3008),
41 DIAMETER_INVALID_AVP_BITS (3009),
42 DIAMETER_UNKNOWN_PEER (3010),
43 DIAMETER_REALM_REDIRECT_INDICATION (3011),
44
45 /* Transient Failures */
46 DIAMETER_AUTHENTICATION_REJECTED (4001),
47 DIAMETER_OUT_OF_SPACE (4002),
48 ELECTION_LOST (4003),
49 DIAMETER_ERROR_MIP_REPLY_FAILURE (4005),
50 DIAMETER_ERROR_HA_NOT_AVAILABLE (4006),
51 DIAMETER_ERROR_BAD_KEY (4007),
52 DIAMETER_ERROR_MIP_FILTER_NOT_SUPPORTED (4008),
53 DIAMETER_END_USER_SERVICE_DENIED (4010),
54 DIAMETER_CREDIT_CONTROL_NOT_APPLICABLE (4011),
55 DIAMETER_CREDIT_LIMIT_REACHED (4012),
56 DIAMETER_USER_NAME_REQUIRED (4013),
57 RESOURCE_FAILURE (4014),
58
59 DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE (4181),
60 DIAMETER_ERROR_CAMEL_SUBSCRIPTION_PRESENT (4882),
61
62 /* Permanent Failure */
63 DIAMETER_AVP_UNSUPPORTED (5001),
64 DIAMETER_UNKNOWN_SESSION_ID (5002),
65 DIAMETER_AUTHORIZATION_REJECTED (5003),
66 DIAMETER_INVALID_AVP_VALUE (5004),
67 DIAMETER_MISSING_AVP (5005),
68 DIAMETER_RESOURCES_EXCEEDED (5006),
69 DIAMETER_CONTRADICTING_AVPS (5007),
70 DIAMETER_AVP_NOT_ALLOWED (5008),
71 DIAMETER_AVP_OCCURS_TOO_MANY_TIMES (5009),
72 DIAMETER_NO_COMMON_APPLICATION (5010),
73 DIAMETER_UNSUPPORTED_VERSION (5011),
74 DIAMETER_UNABLE_TO_COMPLY (5012),
75 DIAMETER_INVALID_BIT_IN_HEADER (5013),
76 DIAMETER_INVALID_AVP_LENGTH (5014),
77 DIAMETER_INVALID_MESSAGE_LENGTH (5015),
78 DIAMETER_INVALID_AVP_BIT_COMBO (5016),
79 DIAMETER_NO_COMMON_SECURITY (5017),
80 DIAMETER_RADIUS_AVP_UNTRANSLATABLE (5018),
81 DIAMETER_ERROR_NO_FOREIGN_HA_SERVICE (5024),
82 DIAMETER_ERROR_END_TO_END_MIP_KEY_ENCRYPTION (5025),
83 DIAMETER_USER_UNKNOWN (5030),
84 DIAMETER_RATING_FAILED (5031),
85 DIAMETER_ERROR_USER_UNKNOWN (5032),
86 DIAMETER_ERROR_IDENTITIES_DONT_MATCH (5033),
87 DIAMETER_ERROR_IDENTITY_NOT_REGISTERED (5034),
88 DIAMETER_ERROR_ROAMING_NOT_ALLOWED (5035),
89 DIAMETER_ERROR_IDENTITY_ALREADY_REGISTERED (5036),
90 DIAMETER_ERROR_AUTH_SCHEME_NOT_SUPPORTED (5037),
91 DIAMETER_ERROR_IN_ASSIGNMENT_TYPE (5038),
92 DIAMETER_ERROR_TOO_MUCH_DATA (5039),
93 DIAMETER_ERROR_NOT_SUPPORTED_USER_DATA (5040),
94 DIAMETER_ERROR_MIP6_AUTH_MODE (5041),
95 UNKNOWN_BINDING_TEMPLATE_NAME (5042),
96 BINDING_FAILURE (5043),
97 MAX_BINDINGS_SET_FAILURE (5044),
98 MAXIMUM_BINDINGS_REACHED_FOR_ENDPOINT (5045),
99 SESSION_EXISTS (5046),
100 INSUFFICIENT_CLASSIFIERS (5047),
101 DIAMETER_ERROR_EAP_CODE_UNKNOWN (5048)
102};
103
Pau Espin Pedrol7aa4ad82023-08-28 18:24:24 +0200104/* 3GPP TS 29.272 section 7.4. Errors in Experimental-Result-Code */
105type enumerated DIAMETER_ExperimentalResultcode {
106 /* transient */
107 DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE (4181),
108 DIAMETER_ERROR_CAMEL_SUBSCRIPTION_PRESENT (4182),
109 /* permanent */
110 DIAMETER_ERROR_USER_UNKNOWN (5001),
111 DIAMETER_AUTHORIZATION_REJECTED (5003),
112 DIAMETER_ERROR_ROAMING_NOT_ALLOWED (5004),
113 DIAMETER_MISSING_AVP (5005),
114 DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION (5420),
115 DIAMETER_ERROR_RAT_NOT_ALLOWED (5421),
116 DIAMETER_ERROR_EQUIPMENT_UNKNOWN (5422),
117 DIAMETER_ERROR_UNKOWN_SERVING_NODE (5423)
118}
119
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +0100120/* Gy : 3GPP TS 32.299 7.1.6, RFC4006 3.1 */
121const uint32_t c_DIAMETER_CREDIT_CONTROL_AID := 4;
Harald Welted27ab242019-07-26 13:45:18 +0200122/* 3GPP TS 29.272 Section 7.1.8 */
Harald Weltef9fb63e2020-04-26 18:07:19 +0200123const uint32_t c_DIAMETER_3GPP_Gx_AID := 16777238;
Harald Welted27ab242019-07-26 13:45:18 +0200124const uint32_t c_DIAMETER_3GPP_S6_AID := 16777251;
125const uint32_t c_DIAMETER_3GPP_S13_AID := 16777252;
126const uint32_t c_DIAMETER_3GPP_S7_AID := 16777308;
127
Vadim Yanitskiy0e8f5162021-12-15 05:00:32 +0300128const octetstring c_def_sess_id := char2oct("ttcn3.session");
129
Harald Welted27ab242019-07-26 13:45:18 +0200130template (value) PDU_DIAMETER
131ts_DIAMETER(template (value) BIT8 flags,
132 template (value) Command_Code cmd_code,
133 template (value) OCTET4 app_id := '00000000'O,
Vadim Yanitskiy00720bd2021-12-12 02:05:08 +0300134 template (value) UINT32 hbh_id := '00000000'O,
135 template (value) UINT32 ete_id := '00000000'O,
Harald Welted27ab242019-07-26 13:45:18 +0200136 template (value) AVP_list avps := {}
137) := {
138 version := 1,
139 message_length := 0, /* overwritten */
140 RPETxxxx := flags,
141 command_code := cmd_code,
142 application_id := app_id,
143 hop_by_hop_id := hbh_id,
144 end_to_end_id := ete_id,
145 avps := avps
146}
147template (present) PDU_DIAMETER
148tr_DIAMETER(template (present) BIT8 flags := ?,
149 template (present) Command_Code cmd_code := ?,
150 template (present) OCTET4 app_id := ?,
151 template (present) UINT32 hbh_id := ?,
152 template (present) UINT32 ete_id := ?,
153 template (present) AVP_list avps := ?) := {
154 version := 1,
155 message_length := ?,
156 RPETxxxx := flags,
157 command_code := cmd_code,
158 application_id := app_id,
159 hop_by_hop_id := hbh_id,
160 end_to_end_id := ete_id,
161 avps := avps
162}
163template (present) PDU_DIAMETER
164tr_DIAMETER_A(
165 template (present) Command_Code cmd_code := ?,
166 template (present) OCTET4 app_id := ?,
167 template (present) UINT32 hbh_id := ?,
168 template (present) UINT32 ete_id := ?,
169 template (present) AVP_list avps := ?) :=
170 tr_DIAMETER('0???????'B, cmd_code, app_id, hbh_id, ete_id, avps);
171template (present) PDU_DIAMETER
172tr_DIAMETER_R(
173 template (present) Command_Code cmd_code := ?,
174 template (present) OCTET4 app_id := ?,
175 template (present) UINT32 hbh_id := ?,
176 template (present) UINT32 ete_id := ?,
177 template (present) AVP_list avps := ?) :=
178 tr_DIAMETER('1???????'B, cmd_code, app_id, hbh_id, ete_id, avps);
179
180
181template (value) AVP_Header
182ts_DIA_Hdr(template (value) AVP_Code avp_code,
183 template (value) BIT8 flags := '01000000'B) := {
184 avp_code := avp_code,
185 VMPxxxxx := flags,
186 avp_length := 0, /* overwritten */
187 vendor_id := omit
188}
189template (present) AVP_Header
190tr_DIA_Hdr(template (present) AVP_Code avp_code,
191 template (present) BIT8 flags := '0???????'B) := {
192 avp_code := avp_code,
193 VMPxxxxx := flags,
194 avp_length := ?, /* overwritten */
195 vendor_id := omit
196}
197
198template (value) AVP_Header
199ts_DIA_Hdr_3GPP(template (value) AVP_Code avp_code,
200 template (value) BIT8 flags := '11000000'B) := {
201 avp_code := avp_code,
202 VMPxxxxx := flags,
203 avp_length := 0, /* overwritten */
204 vendor_id := vendor_id_3GPP
205}
206template (present) AVP_Header
207tr_DIA_Hdr_3GPP(template (present) AVP_Code avp_code,
208 template (present) BIT8 flags := '1???????'B) := {
209 avp_code := avp_code,
210 VMPxxxxx := flags,
211 avp_length := ?, /* overwritten */
212 vendor_id := vendor_id_3GPP
213}
214
Pau Espin Pedrola2af5782022-05-18 16:34:29 +0200215template (present) AVP_Address tr_AVP_Address(template (present) AddressType addr_type := ?,
216 template (present) octetstring addr_data := ?) := {
217 address_type := addr_type,
218 address_data := addr_data
219}
220
221template (present) GenericAVP tr_AVP_SubcrId(template (present) DCC_NONE_Subscription_Id t) := {
222 avp := {
223 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Subscription_Id),
224 avp_data := {
225 avp_DCC_NONE_Subscription_Id := t
226 }
227 }
228}
229
Pau Espin Pedrolb8cd34a2022-05-18 16:34:12 +0200230template (present) GenericAVP tr_AVP_SubcrIdType(template (present) DCC_NONE_Subscription_Id_Type t) := {
Harald Weltef9fb63e2020-04-26 18:07:19 +0200231 avp := {
232 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Subscription_Id_Type),
233 avp_data := {
234 avp_DCC_NONE_Subscription_Id_Type := t
235 }
236 }
237}
Harald Welted27ab242019-07-26 13:45:18 +0200238
Pau Espin Pedrola2af5782022-05-18 16:34:29 +0200239template (present) GenericAVP tr_AVP_SubcrIdData(template (present) DCC_NONE_Subscription_Id_Data t) := {
240 avp := {
241 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Subscription_Id_Data),
242 avp_data := {
243 avp_DCC_NONE_Subscription_Id_Data := t
244 }
245 }
246}
247
248template (present) GenericAVP tr_AVP_RequestedAction(template (present) DCC_NONE_Requested_Action t := ?) := {
249 avp := {
250 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Requested_Action),
251 avp_data := {
252 avp_DCC_NONE_Requested_Action := t
253 }
254 }
255}
256
257template (present) GenericAVP tr_AVP_MultipleServicesIndicator(template (present) DCC_NONE_Multiple_Services_Indicator t := ?) := {
258 avp := {
259 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Multiple_Services_Indicator),
260 avp_data := {
261 avp_DCC_NONE_Multiple_Services_Indicator := t
262 }
263 }
264}
265
266template (present) GenericAVP tr_AVP_ServiceContextId(template (present) DCC_NONE_Service_Context_Id id := ?) := {
267 avp := {
268 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Service_Context_Id),
269 avp_data := {
270 avp_DCC_NONE_Service_Context_Id := id
271 }
272 }
273}
274
Harald Welted27ab242019-07-26 13:45:18 +0200275template (value) GenericAVP ts_AVP_OriginHost(template (value) charstring host) := {
276 avp := {
277 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Origin_Host),
278 avp_data := {
279 avp_BASE_NONE_Origin_Host := host
280 }
281 }
282}
283template (present) GenericAVP tr_AVP_OriginHost(template (present) charstring host := ?) := {
284 avp := {
285 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Origin_Host),
286 avp_data := {
287 avp_BASE_NONE_Origin_Host := host
288 }
289 }
290}
291
292
293template (value) GenericAVP ts_AVP_OriginRealm(template (value) charstring realm) := {
294 avp := {
295 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Origin_Realm),
296 avp_data := {
297 avp_BASE_NONE_Origin_Realm := realm
298 }
299 }
300}
301template (present) GenericAVP tr_AVP_OriginRealm(template (present) charstring realm := ?) := {
302 avp := {
303 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Origin_Realm),
304 avp_data := {
305 avp_BASE_NONE_Origin_Realm := realm
306 }
307 }
308}
309
310
311template (value) GenericAVP ts_AVP_OriginStateId(template (value) OCTET4 state_id) := {
312 avp := {
313 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Origin_State_Id),
314 avp_data := {
315 avp_BASE_NONE_Origin_State_Id := state_id
316 }
317 }
318}
Vadim Yanitskiyf28b2552021-12-11 03:49:14 +0300319template (present) GenericAVP tr_AVP_OriginStateId(template (present) OCTET4 state_id := ?) := {
320 avp := {
321 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Origin_State_Id),
322 avp_data := {
323 avp_BASE_NONE_Origin_State_Id := state_id
324 }
325 }
326}
Harald Welted27ab242019-07-26 13:45:18 +0200327
Pau Espin Pedrola2af5782022-05-18 16:34:29 +0200328template (present) GenericAVP tr_AVP_TerminationCause(template (present) BASE_NONE_Termination_Cause tc) := {
329 avp := {
330 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Termination_Cause),
331 avp_data := {
332 avp_BASE_NONE_Termination_Cause := tc
333 }
334 }
335}
336
Harald Welted27ab242019-07-26 13:45:18 +0200337template (value) GenericAVP ts_AVP_HostIpAddr(template (value) OCTET4 ipv4_addr) := {
338 avp := {
339 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Host_IP_Address),
340 avp_data := {
341 avp_BASE_NONE_Host_IP_Address := {
342 address_type := IP,
343 address_data := ipv4_addr
344 }
345 }
346 }
347}
348
349template (value) GenericAVP ts_AVP_VendorId(Vendor_Id vendor_id) := {
350 avp := {
351 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Vendor_Id, '00000000'B),
352 avp_data := {
353 avp_BASE_NONE_Vendor_Id := int2oct(enum2int(vendor_id), 4)
354 }
355 }
356}
Pau Espin Pedrol7aa4ad82023-08-28 18:24:24 +0200357private function f_tr_AVP_VendorId(template (present) Vendor_Id vendor_id)
358return template (present) BASE_NONE_Vendor_Id {
359 if (istemplatekind(vendor_id, "?")) {
360 return ?;
361 } else {
362 var template (present) BASE_NONE_Vendor_Id c;
363 c := int2oct(enum2int(valueof(vendor_id)), 4);
364 return c;
365 }
366}
367template (present) GenericAVP tr_AVP_VendorId(template (present) Vendor_Id vendor_id) := {
368 avp := {
369 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Vendor_Id),
370 avp_data := {
371 avp_BASE_NONE_Vendor_Id := f_tr_AVP_VendorId(vendor_id)
372 }
373 }
374}
Harald Welted27ab242019-07-26 13:45:18 +0200375
376template (value) GenericAVP ts_AVP_ProductName(charstring name) := {
377 avp := {
378 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Product_Name, '00000000'B),
379 avp_data := {
380 avp_BASE_NONE_Product_Name := char2oct(name)
381 }
382 }
383}
384
385template (value) GenericAVP ts_AVP_FwRevision(octetstring fw_version) := {
386 avp := {
387 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Firmware_Revision, '00000000'B),
388 avp_data := {
389 avp_BASE_NONE_Firmware_Revision := fw_version
390 }
391 }
392}
393
394template (value) GenericAVP ts_AVP_InbSecId(template (value) OCTET4 inb_sec_id) := {
395 avp := {
396 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Inband_Security_Id),
397 avp_data := {
398 avp_BASE_NONE_Inband_Security_Id := inb_sec_id
399 }
400 }
401}
402
Pau Espin Pedrol462f3df2023-10-16 18:10:55 +0200403private function enum2int_Vendor_Id_tmpl(template Vendor_Id inp) return template integer
404{
405 if (istemplatekind(inp, "omit")) {
406 return omit;
407 } else if (istemplatekind(inp, "*")) {
408 return *;
409 } else if (istemplatekind(inp, "?")) {
410 return ?;
411 } else {
412 return enum2int(valueof(inp));
413 }
414}
415
416template (present) GenericAVP tr_AVP_VendorSpecAppId(template (present) Vendor_Id vendor_id := ?,
417 template (present) uint32_t auth_app_id := ?) := {
418 avp := {
419 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Vendor_Specific_Application_Id),
420 avp_data := {
421 avp_BASE_NONE_Vendor_Specific_Application_Id := {
422 {
423 avp := {
424 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Vendor_Id),
425 avp_data := {
426 avp_BASE_NONE_Vendor_Id := int2oct_tmpl(enum2int_Vendor_Id_tmpl(vendor_id), 4)
427 }
428 }
429 }, {
430 avp := {
431 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Auth_Application_Id),
432 avp_data := {
433 avp_BASE_NONE_Auth_Application_Id := int2oct_tmpl(auth_app_id, 4)
434 }
435 }
436 }
437 }
438 }
439 }
440}
Harald Welted27ab242019-07-26 13:45:18 +0200441template (value) GenericAVP ts_AVP_VendorSpecAppId(Vendor_Id vendor_id, uint32_t auth_app_id) := {
442 avp := {
443 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Vendor_Specific_Application_Id),
444 avp_data := {
445 avp_BASE_NONE_Vendor_Specific_Application_Id := {
446 {
447 avp := {
448 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Vendor_Id),
449 avp_data := {
450 avp_BASE_NONE_Vendor_Id := int2oct(enum2int(vendor_id), 4)
451 }
452 }
453 }, {
454 avp := {
455 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Auth_Application_Id),
456 avp_data := {
457 avp_BASE_NONE_Auth_Application_Id := int2oct(auth_app_id, 4)
458 }
459 }
460 }
461 }
462 }
463 }
464}
465
466template (value) GenericAVP ts_AVP_AuthAppId(template (value) OCTET4 auth_app_id) := {
467 avp := {
468 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Auth_Application_Id),
469 avp_data := {
470 avp_BASE_NONE_Auth_Application_Id := auth_app_id
471 }
472 }
473}
Harald Weltef4001512020-04-26 21:48:34 +0200474template (present) GenericAVP tr_AVP_AuthAppId(template (present) OCTET4 auth_app_id := ?) := {
475 avp := {
476 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Auth_Application_Id),
477 avp_data := {
478 avp_BASE_NONE_Auth_Application_Id := auth_app_id
479 }
480 }
481}
482
483template (value) GenericAVP ts_AVP_CcReqType(template (value) DCC_NONE_CC_Request_Type r) := {
484 avp := {
485 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_CC_Request_Type),
486 avp_data := {
487 avp_DCC_NONE_CC_Request_Type := r
488 }
489 }
490}
491template (present) GenericAVP tr_AVP_CcReqType(template (present) DCC_NONE_CC_Request_Type r := ?) := {
492 avp := {
493 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_CC_Request_Type),
494 avp_data := {
495 avp_DCC_NONE_CC_Request_Type := r
496 }
497 }
498}
499
500template (value) GenericAVP ts_AVP_CcReqNum(template (value) AVP_Unsigned32 n) := {
501 avp := {
502 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_CC_Request_Number),
503 avp_data := {
504 avp_DCC_NONE_CC_Request_Number := n
505 }
506 }
507}
508template (present) GenericAVP tr_AVP_CcReqNum(template (present) AVP_Unsigned32 n := ?) := {
509 avp := {
510 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_CC_Request_Number),
511 avp_data := {
512 avp_DCC_NONE_CC_Request_Number := n
513 }
514 }
515}
516
Pau Espin Pedrola2af5782022-05-18 16:34:29 +0200517template (present) GenericAVP tr_AVP_EventTimestamp(template (present) AVP_Unsigned32 n := ?) := {
518 avp := {
519 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Event_Timestamp),
520 avp_data := {
521 avp_BASE_NONE_Event_Timestamp := n
522 }
523 }
524}
Harald Weltef4001512020-04-26 21:48:34 +0200525
Pau Espin Pedrol7aa4ad82023-08-28 18:24:24 +0200526template (present) GenericAVP tr_AVP_ExperimentalResultCode(template (present) AVP_Unsigned32 n := ?) := {
527 avp := {
528 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Experimental_Result_Code),
529 avp_data := {
530 avp_BASE_NONE_Experimental_Result_Code := n
531 }
532 }
533}
534
535template (present) GenericAVP tr_AVP_ExperimentalResult(template (present) Vendor_Id vendor_id := ?,
536 template (present) AVP_Unsigned32 err_code := ?
537 ) := {
538 avp := {
539 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Experimental_Result),
540 avp_data := {
541 avp_BASE_NONE_Experimental_Result := {
542 tr_AVP_VendorId(vendor_id),
543 tr_AVP_ExperimentalResultCode(err_code)
544 }
545 }
546 }
547}
Harald Welted27ab242019-07-26 13:45:18 +0200548
549template (value) GenericAVP ts_AVP_SuppVendorIdRaw(uint32_t vendor_id) := {
550 avp := {
551 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Supported_Vendor_Id),
552 avp_data := {
553 avp_BASE_NONE_Supported_Vendor_Id := int2oct(vendor_id, 4)
554 }
555 }
556}
557template (value) GenericAVP ts_AVP_SuppVendorId(Vendor_Id vendor_id) :=
558 ts_AVP_SuppVendorIdRaw(enum2int(vendor_id));
559
560template (value) GenericAVP ts_AVP_ResultCode(DIAMETER_Resultcode res_code) := {
561 avp := {
562 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Result_Code),
563 avp_data := {
564 avp_BASE_NONE_Result_Code := int2oct(enum2int(res_code), 4)
565 }
566 }
567}
Pau Espin Pedrol7aa4ad82023-08-28 18:24:24 +0200568private function f_tr_DIAMETER_Resultcode(template (present) DIAMETER_Resultcode res_code)
569return template (present) BASE_NONE_Result_Code {
570 if (istemplatekind(res_code, "?")) {
571 return ?;
572 } else {
573 var template (present) BASE_NONE_Result_Code c;
574 c := int2oct(enum2int(valueof(res_code)), 4);
575 return c;
576 }
577}
578template (present) GenericAVP tr_AVP_ResultCode(template (present) DIAMETER_Resultcode res_code) := {
Vadim Yanitskiyf28b2552021-12-11 03:49:14 +0300579 avp := {
580 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Result_Code),
581 avp_data := {
Pau Espin Pedrol7aa4ad82023-08-28 18:24:24 +0200582 avp_BASE_NONE_Result_Code := f_tr_DIAMETER_Resultcode(res_code)
Vadim Yanitskiyf28b2552021-12-11 03:49:14 +0300583 }
584 }
585}
Harald Welted27ab242019-07-26 13:45:18 +0200586
587template (value) GenericAVP ts_AVP_AuthSessionState(template (value) BASE_NONE_Auth_Session_State ass := NO_STATE_MAINTAINED) := {
588 avp := {
589 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Auth_Session_State),
590 avp_data := {
591 avp_BASE_NONE_Auth_Session_State := ass
592 }
593 }
594}
595template (present) GenericAVP tr_AVP_AuthSessionState(template (present) BASE_NONE_Auth_Session_State ass := ?) := {
596 avp := {
597 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Auth_Session_State),
598 avp_data := {
599 avp_BASE_NONE_Auth_Session_State := ass
600 }
601 }
602}
603
604template (value) GenericAVP ts_AVP_SessionId(template (value) octetstring session_id) := {
605 avp := {
606 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Session_Id),
607 avp_data := {
608 avp_BASE_NONE_Session_Id := session_id
609 }
610 }
611}
612template (present) GenericAVP tr_AVP_SessionId(template (present) octetstring session_id := ?) := {
613 avp := {
614 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Session_Id),
615 avp_data := {
616 avp_BASE_NONE_Session_Id := session_id
617 }
618 }
619}
620
Pau Espin Pedrola2af5782022-05-18 16:34:29 +0200621template (present) GenericAVP tr_AVP_DestinationHost(template (present) charstring host := ?) := {
622 avp := {
623 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Destination_Host),
624 avp_data := {
625 avp_BASE_NONE_Destination_Host := host
626 }
627 }
628}
629
Harald Welted27ab242019-07-26 13:45:18 +0200630/* 3.3 Destination Realm */
631template (value) GenericAVP ts_AVP_DestinationRealm(template (value) charstring dest_realm) := {
632 avp := {
633 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Destination_Realm),
634 avp_data := {
635 avp_BASE_NONE_Destination_Realm := dest_realm
636 }
637 }
638}
639template (present) GenericAVP tr_AVP_DestinationRealm(template (present) charstring dest_realm := ?) := {
640 avp := {
641 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Destination_Realm),
642 avp_data := {
643 avp_BASE_NONE_Destination_Realm := dest_realm
644 }
645 }
646}
647
648/* 8.14 User-Name */
649template (value) GenericAVP ts_AVP_UserName(template (value) octetstring uid) := {
650 avp := {
651 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_User_Name),
652 avp_data := {
653 avp_BASE_NONE_User_Name := uid
654 }
655 }
656}
657template (present) GenericAVP tr_AVP_UserName(template (present) octetstring uid := ?) := {
658 avp := {
659 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_User_Name),
660 avp_data := {
661 avp_BASE_NONE_User_Name := uid
662 }
663 }
664}
665template (value) GenericAVP ts_AVP_UserNameImsi(hexstring imsi) := ts_AVP_UserName(char2oct(hex2str(imsi)));
Pau Espin Pedrolf4619d82023-10-16 18:08:07 +0200666template (present) GenericAVP tr_AVP_UserNameImsi(template (present) hexstring imsi := ?) := tr_AVP_UserName(char2oct_tmpl(hex2str_tmpl(imsi)));
Harald Welted27ab242019-07-26 13:45:18 +0200667
668
669
Harald Welte40b1e002023-01-27 17:26:39 +0100670/* TS 29.272 7.3.53 RAND */
Harald Welted27ab242019-07-26 13:45:18 +0200671template (value) GenericAVP ts_AVP_RAND(template (value) octetstring rand) := {
672 avp := {
673 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_RAND),
674 avp_data := {
675 avp_AAA_3GPP_RAND := rand
676 }
677 }
678}
679
Harald Welte40b1e002023-01-27 17:26:39 +0100680/* TS 29.272 7.3.54 XRES */
Harald Welted27ab242019-07-26 13:45:18 +0200681template (value) GenericAVP ts_AVP_XRES(template (value) octetstring xres) := {
682 avp := {
683 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_XRES),
684 avp_data := {
685 avp_AAA_3GPP_XRES := xres
686 }
687 }
688}
689
Harald Welte40b1e002023-01-27 17:26:39 +0100690/* TS 29.272 7.3.55 XRES */
Harald Welted27ab242019-07-26 13:45:18 +0200691template (value) GenericAVP ts_AVP_AUTN(template (value) octetstring autn) := {
692 avp := {
693 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_AUTN),
694 avp_data := {
695 avp_AAA_3GPP_AUTN := autn
696 }
697 }
698}
699
Harald Welte40b1e002023-01-27 17:26:39 +0100700/* TS 29.272 7.3.56 KASME */
Harald Welted27ab242019-07-26 13:45:18 +0200701template (value) GenericAVP ts_AVP_KASME(template (value) octetstring kasme) := {
702 avp := {
703 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_KASME),
704 avp_data := {
705 avp_AAA_3GPP_KASME := kasme
706 }
707 }
708}
709
Harald Welte40b1e002023-01-27 17:26:39 +0100710/* TS 29.272 7.3.23 Item-Number */
Harald Welted27ab242019-07-26 13:45:18 +0200711template (value) GenericAVP ts_AVP_ItemNumber(uint32_t num) := {
712 avp := {
713 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_KASME),
714 avp_data := {
715 avp_AAA_3GPP_Item_Number := int2oct(num, 4)
716 }
717 }
718}
719
Harald Welte40b1e002023-01-27 17:26:39 +0100720/* TS 29.272 7.3.18 E-UTRAN Vector */
Harald Welted27ab242019-07-26 13:45:18 +0200721template (value) GenericAVP ts_AVP_EutranVec(uint32_t item_num, octetstring rand, octetstring xres,
722 octetstring autn, octetstring kasme) := {
723 avp := {
724 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_E_UTRAN_Vector),
725 avp_data := {
726 avp_AAA_3GPP_E_UTRAN_Vector := {
727 ts_AVP_ItemNumber(item_num),
728 ts_AVP_RAND(rand),
729 ts_AVP_XRES(xres),
730 ts_AVP_AUTN(autn),
731 ts_AVP_KASME(kasme)
732 }
733 }
734 }
735}
736
Harald Welte40b1e002023-01-27 17:26:39 +0100737/* TS 29.272 7.3.2 Subscription-Data */
Harald Welted27ab242019-07-26 13:45:18 +0200738template (value) GenericAVP ts_AVP_3GPP_SubscriptionData(template (value) AVP_list content) := {
739 avp := {
740 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscription_Data),
741 avp_data := {
742 avp_AAA_3GPP_Subscription_Data := content
743 }
744 }
745}
Vadim Yanitskiy5e1bdc02021-12-12 02:33:59 +0300746template (present) GenericAVP
747tr_AVP_3GPP_SubscriptionData(template (present) AVP_list content := ?) := {
748 avp := {
749 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscription_Data),
750 avp_data := {
751 avp_AAA_3GPP_Subscription_Data := content
752 }
753 }
754}
Harald Welted27ab242019-07-26 13:45:18 +0200755
756
Harald Welte40b1e002023-01-27 17:26:39 +0100757/* TS 29.272 7.3.17 Authentication-Info */
Harald Welted27ab242019-07-26 13:45:18 +0200758template (value) GenericAVP ts_AVP_3GPP_AuthInfo(template (value) AVP_list content) := {
759 avp := {
760 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Authentication_Info),
761 avp_data := {
762 avp_AAA_3GPP_Authentication_Info := content
763 }
764 }
765}
Vadim Yanitskiy446edae2021-12-12 04:33:08 +0300766template (present) GenericAVP
767tr_AVP_3GPP_AuthInfo(template (present) AVP_list content := ?) := {
768 avp := {
769 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Authentication_Info),
770 avp_data := {
771 avp_AAA_3GPP_Authentication_Info := content
772 }
773 }
774}
Harald Welted27ab242019-07-26 13:45:18 +0200775
Harald Welte40b1e002023-01-27 17:26:39 +0100776/* TS 29.272 7.3.9 Visited-PLMN-Id */
Harald Welted27ab242019-07-26 13:45:18 +0200777template (value) GenericAVP ts_AVP_3GPP_VisitedPlmnId(template (value) octetstring id) := {
778 avp := {
779 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Visited_PLMN_Id),
780 avp_data := {
781 avp_AAA_3GPP_Visited_PLMN_Id := id
782 }
783 }
784}
785template (present) GenericAVP tr_AVP_3GPP_VisitedPlmnId(template (present) octetstring id := ?) := {
786 avp := {
787 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Visited_PLMN_Id),
788 avp_data := {
789 avp_AAA_3GPP_Visited_PLMN_Id := id
790 }
791 }
792}
793
Harald Welte40b1e002023-01-27 17:26:39 +0100794/* TS 29.272 7.3.13 RAT-Type */
Pau Espin Pedrola2af5782022-05-18 16:34:29 +0200795template (value) GenericAVP ts_AVP_PCC_3GPP_RatType(template (value) PCC_3GPP_RAT_Type rat_type) := {
Harald Welted27ab242019-07-26 13:45:18 +0200796 avp := {
797 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_RAT_Type),
798 avp_data := {
799 avp_PCC_3GPP_RAT_Type := rat_type
800 }
801 }
802}
Pau Espin Pedrola2af5782022-05-18 16:34:29 +0200803template (present) GenericAVP tr_AVP_PCC_3GPP_RatType(template (present) PCC_3GPP_RAT_Type rat_type := ?) := {
Harald Welted27ab242019-07-26 13:45:18 +0200804 avp := {
805 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_RAT_Type),
806 avp_data := {
807 avp_PCC_3GPP_RAT_Type := rat_type
808 }
809 }
810}
811
Pau Espin Pedrola2af5782022-05-18 16:34:29 +0200812template (present) GenericAVP tr_AVP_GI_3GPP_RatType(template (present) GI_3GPP_3GPP_RAT_Type rat_type := ?) := {
813 avp := {
814 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_RAT_Type),
815 avp_data := {
816 avp_GI_3GPP_3GPP_RAT_Type := rat_type
817 }
818 }
819}
820
Harald Welte40b1e002023-01-27 17:26:39 +0100821/* TS 29.272 7.3.7 ULR-Flags */
Harald Welted27ab242019-07-26 13:45:18 +0200822template (value) GenericAVP ts_AVP_3GPP_UlrFlags(template (value) UINT32 flags) := {
823 avp := {
824 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULR_Flags),
825 avp_data := {
826 avp_AAA_3GPP_ULR_Flags := flags
827 }
828 }
829}
830template (present) GenericAVP tr_AVP_3GPP_UlrFlags(template (present) UINT32 flags := ?) := {
831 avp := {
832 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULR_Flags),
833 avp_data := {
834 avp_AAA_3GPP_ULR_Flags := flags
835 }
836 }
837}
838
Harald Welte40b1e002023-01-27 17:26:39 +0100839/* TS 29.272 7.3.8 ULA-Flags */
Harald Welted27ab242019-07-26 13:45:18 +0200840template (value) GenericAVP ts_AVP_3GPP_UlaFlags(template (value) UINT32 flags) := {
841 avp := {
842 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULA_Flags),
843 avp_data := {
844 avp_AAA_3GPP_ULA_Flags := flags
845 }
846 }
847}
848template (present) GenericAVP tr_AVP_3GPP_UlaFlags(template (present) UINT32 flags := ?) := {
849 avp := {
850 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULA_Flags),
851 avp_data := {
852 avp_AAA_3GPP_ULA_Flags := flags
853 }
854 }
855}
856
Harald Welte6effabb2020-02-18 21:39:59 +0100857
858
859template (value) GenericAVP ts_AVP_NumOfReqVectors(template (value) UINT32 num_req := '00000004'O) := {
860 avp := {
861 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Number_Of_Requested_Vectors),
862 avp_data := {
863 avp_AAA_3GPP_Number_Of_Requested_Vectors := num_req
864 }
865 }
866}
867
868template (value) GenericAVP ts_AVP_ImmReqPref(template (value) UINT32 par := '00000000'O) := {
869 avp := {
870 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Immediate_Response_Preferred),
871 avp_data := {
872 avp_AAA_3GPP_Immediate_Response_Preferred := par
873 }
874 }
875}
876
877
878/* 7.3.11 Requested-EUTRAN-Authentication-Info */
879template (value) GenericAVP ts_AVP_RequestedEutranAuthInfo(template (value) UINT32 num_vec := '00000004'O) := {
880 avp := {
881 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Requested_EUTRAN_Authentication_Info),
882 avp_data := {
883 avp_AAA_3GPP_Requested_EUTRAN_Authentication_Info := {
884 ts_AVP_NumOfReqVectors(num_vec),
885 ts_AVP_ImmReqPref('00000000'O)
886 }
887 }
888 }
889}
890
891
Harald Welte40b1e002023-01-27 17:26:39 +0100892/* TS 29.272 7.3.27 Context-Identifier */
Pau Espin Pedrol446145a2023-10-10 19:12:21 +0200893template (present) GenericAVP tr_AVP_3GPP_ContextId(template (present) uint32_t ctx := ?) := {
894 avp := {
895 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Context_Identifier),
896 avp_data := {
897 avp_AAA_3GPP_Context_Identifier := int2oct_tmpl(ctx, 4)
898 }
899 }
900}
Harald Welted27ab242019-07-26 13:45:18 +0200901template (value) GenericAVP ts_AVP_3GPP_ContextId(uint32_t ctx) := {
902 avp := {
903 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Context_Identifier),
904 avp_data := {
905 avp_AAA_3GPP_Context_Identifier := int2oct(ctx, 4)
906 }
907 }
908}
909
Harald Welte40b1e002023-01-27 17:26:39 +0100910/* Ts 29.272 7.3.29 Subscriber-Status */
Pau Espin Pedrol446145a2023-10-10 19:12:21 +0200911template (present) GenericAVP tr_AVP_3GPP_SubscriberStatus(template (present) AAA_3GPP_Subscriber_Status sts) := {
912 avp := {
913 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscriber_Status),
914 avp_data := {
915 avp_AAA_3GPP_Subscriber_Status := sts
916 }
917 }
918}
Harald Welted27ab242019-07-26 13:45:18 +0200919template (value) GenericAVP ts_AVP_3GPP_SubscriberStatus(template (value) AAA_3GPP_Subscriber_Status sts) := {
920 avp := {
921 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscriber_Status),
922 avp_data := {
923 avp_AAA_3GPP_Subscriber_Status := sts
924 }
925 }
926}
927
Pau Espin Pedrold34720f2023-10-11 17:49:39 +0200928/* Ts 29.272 7.3.30 Operator-Determined-Barring */
929template (present) GenericAVP tr_AVP_3GPP_OperatorDeterminedBarring(template (present) uint32_t val := ?) := {
930 avp := {
931 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Operator_Determined_Barring),
932 avp_data := {
933 avp_AAA_3GPP_Operator_Determined_Barring := int2oct_tmpl(val, 4)
934 }
935 }
936}
937template (value) GenericAVP ts_AVP_3GPP_OperatorDeterminedBarring(uint32_t val) := {
938 avp := {
939 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Operator_Determined_Barring),
940 avp_data := {
941 avp_AAA_3GPP_Operator_Determined_Barring := int2oct(val, 4)
942 }
943 }
944}
945
Pau Espin Pedrol446145a2023-10-10 19:12:21 +0200946template (present) GenericAVP tr_AVP_3GPP_SubscrRauTauTmr(template (present) uint32_t tmr := ?) := {
947 avp := {
948 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscribed_Periodic_RAU_TAU_Timer),
949 avp_data := {
950 avp_AAA_3GPP_Subscribed_Periodic_RAU_TAU_Timer := int2oct_tmpl(tmr, 4)
951 }
952 }
953}
954
Harald Welted27ab242019-07-26 13:45:18 +0200955template (value) GenericAVP ts_AVP_3GPP_SubscrRauTauTmr(uint32_t tmr) := {
956 avp := {
957 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscribed_Periodic_RAU_TAU_Timer),
958 avp_data := {
959 avp_AAA_3GPP_Subscribed_Periodic_RAU_TAU_Timer := int2oct(tmr, 4)
960 }
961 }
962}
963
Harald Welte40b1e002023-01-27 17:26:39 +0100964/* TS 29.272 7.3.33 All-APN-Configurations-Included-Indicator */
Pau Espin Pedrol446145a2023-10-10 19:12:21 +0200965template (present) GenericAVP tr_AVP_3GPP_AllApnConfigsIncl(template (present) AAA_3GPP_All_APN_Configurations_Included_Indicator ind := ?) := {
966 avp := {
967 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_All_APN_Configurations_Included_Indicator),
968 avp_data := {
969 avp_AAA_3GPP_All_APN_Configurations_Included_Indicator := ind
970 }
971 }
972}
Harald Welted27ab242019-07-26 13:45:18 +0200973template (value) GenericAVP ts_AVP_3GPP_AllApnConfigsIncl(template (value) AAA_3GPP_All_APN_Configurations_Included_Indicator ind := All_APN_CONFIGURATIONS_INCLUDED) := {
974 avp := {
975 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_All_APN_Configurations_Included_Indicator),
976 avp_data := {
977 avp_AAA_3GPP_All_APN_Configurations_Included_Indicator := ind
978 }
979 }
980}
981
Harald Welte40b1e002023-01-27 17:26:39 +0100982/* TS 29.272 7.3.34 APN-Configuration-Profile */
Pau Espin Pedrol446145a2023-10-10 19:12:21 +0200983template (present) GenericAVP tr_AVP_3GPP_ApnConfigProfile(template (present) AVP_list content := ?) := {
984 avp := {
985 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration_Profile),
986 avp_data := {
987 avp_AAA_3GPP_APN_Configuration_Profile := content
988 }
989 }
990}
Harald Welted27ab242019-07-26 13:45:18 +0200991template (value) GenericAVP ts_AVP_3GPP_ApnConfigProfile(template (value) AVP_list content) := {
992 avp := {
993 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration_Profile),
994 avp_data := {
995 avp_AAA_3GPP_APN_Configuration_Profile := content
996 }
997 }
998}
999
Harald Welte40b1e002023-01-27 17:26:39 +01001000/* TS 29.272 7.3.35 APN-Configuration */
Pau Espin Pedrol446145a2023-10-10 19:12:21 +02001001template (present) GenericAVP tr_AVP_3GPP_ApnConfig(template (present) uint32_t ctx := ?,
1002 template (present) AAA_3GPP_PDN_Type pdn_type := ?,
1003 template (present) charstring apn := ?) := {
1004 avp := {
1005 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration),
1006 avp_data := {
1007 avp_AAA_3GPP_APN_Configuration := superset(
1008 tr_AVP_3GPP_ContextId(ctx),
1009 tr_AVP_3GPP_PdnType(pdn_type),
1010 tr_AVP_ServiceSelection(apn),
1011 tr_AVP_3GPP_EpsSubscrQosProfile(?, ?)
1012 )
1013 }
1014 }
1015}
Harald Welted27ab242019-07-26 13:45:18 +02001016template (value) GenericAVP ts_AVP_3GPP_ApnConfig(uint32_t ctx, AAA_3GPP_PDN_Type pdn_type,
1017 charstring apn) := {
1018 avp := {
Pau Espin Pedrolaaad2762023-10-11 17:35:20 +02001019 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration),
Harald Welted27ab242019-07-26 13:45:18 +02001020 avp_data := {
1021 avp_AAA_3GPP_APN_Configuration := {
1022 ts_AVP_3GPP_ContextId(ctx),
1023 ts_AVP_3GPP_PdnType(pdn_type),
Pau Espin Pedrolaaad2762023-10-11 17:35:20 +02001024 ts_AVP_ServiceSelection(apn),
1025 ts_AVP_3GPP_EpsSubscrQosProfile(1, 1)
Harald Welted27ab242019-07-26 13:45:18 +02001026 }
1027 }
1028 }
1029}
1030
Harald Welte40b1e002023-01-27 17:26:39 +01001031/* TS 29.272 7.3.36 Service-Selection (refers to RFC 5778) */
Pau Espin Pedrol446145a2023-10-10 19:12:21 +02001032template (present) GenericAVP tr_AVP_ServiceSelection(template (present) charstring apn := ?) := {
1033 avp := {
1034 avp_header := tr_DIA_Hdr(c_AVP_Code_MIPv6_NONE_Service_Selection),
1035 avp_data := {
1036 avp_MIPv6_NONE_Service_Selection := char2oct_tmpl(apn)
1037 }
1038 }
1039}
Harald Welted27ab242019-07-26 13:45:18 +02001040template (value) GenericAVP ts_AVP_ServiceSelection(charstring apn) := {
1041 avp := {
1042 avp_header := ts_DIA_Hdr(c_AVP_Code_MIPv6_NONE_Service_Selection),
1043 avp_data := {
1044 avp_MIPv6_NONE_Service_Selection := char2oct(apn)
1045 }
1046 }
1047}
1048
Pau Espin Pedrol6477d732022-06-03 12:04:40 +02001049template (present) GenericAVP tr_AVP_PCC_3GPP_QoS_Information(template (present) AVP_list list := ?) := {
Pau Espin Pedrola2af5782022-05-18 16:34:29 +02001050 avp := {
1051 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_QoS_Information),
1052 avp_data := {
1053 avp_PCC_3GPP_QoS_Information := list
1054 }
1055 }
1056}
1057
Pau Espin Pedrol6477d732022-06-03 12:04:40 +02001058template (value) GenericAVP ts_AVP_PCC_3GPP_QoS_Information(template (value) AVP_list list) := {
1059 avp := {
1060 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_QoS_Information),
1061 avp_data := {
1062 avp_PCC_3GPP_QoS_Information := list
1063 }
1064 }
1065}
1066
1067template (value) GenericAVP ts_AVP_PCC_3GPP_APN_Aggregate_Max_Bitrate_DL(uint32_t val) := {
1068 avp := {
1069 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_APN_Aggregate_Max_Bitrate_DL),
1070 avp_data := {
1071 avp_PCC_3GPP_APN_Aggregate_Max_Bitrate_DL := int2oct(val, 4)
1072 }
1073 }
1074}
1075
1076template (value) GenericAVP ts_AVP_PCC_3GPP_APN_Aggregate_Max_Bitrate_UL(uint32_t val) := {
1077 avp := {
1078 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_APN_Aggregate_Max_Bitrate_UL),
1079 avp_data := {
1080 avp_PCC_3GPP_APN_Aggregate_Max_Bitrate_UL := int2oct(val, 4)
1081 }
1082 }
1083}
1084
1085template (value) GenericAVP ts_AVP_PCC_3GPP_Default_EPS_Bearer_QoS(template (value) AVP_list list) := {
1086 avp := {
1087 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_Default_EPS_Bearer_QoS),
1088 avp_data := {
1089 avp_PCC_3GPP_Default_EPS_Bearer_QoS := list
1090 }
1091 }
1092}
1093
Pau Espin Pedrol446145a2023-10-10 19:12:21 +02001094template (present) GenericAVP tr_AVP_PCC_3GPP_QoS_Class_Identifier(template (present) uint32_t val := ?) := {
1095 avp := {
1096 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_QoS_Class_Identifier),
1097 avp_data := {
1098 avp_PCC_3GPP_QoS_Class_Identifier := int2oct_tmpl(val, 4)
1099 }
1100 }
1101}
1102
Pau Espin Pedrol6477d732022-06-03 12:04:40 +02001103template (value) GenericAVP ts_AVP_PCC_3GPP_QoS_Class_Identifier(uint32_t val) := {
Harald Welted27ab242019-07-26 13:45:18 +02001104 avp := {
1105 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_QoS_Class_Identifier),
1106 avp_data := {
Pau Espin Pedrol6477d732022-06-03 12:04:40 +02001107 avp_PCC_3GPP_QoS_Class_Identifier := int2oct(val, 4)
Harald Welted27ab242019-07-26 13:45:18 +02001108 }
1109 }
1110}
1111
Pau Espin Pedrol446145a2023-10-10 19:12:21 +02001112template (present) GenericAVP tr_AVP_3GPP_PriorityLevel(template (present) uint32_t prio := ?) := {
1113 avp := {
1114 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_Priority_Level),
1115 avp_data := {
1116 avp_PCC_3GPP_Priority_Level := int2oct_tmpl(prio, 4)
1117 }
1118 }
1119}
1120
Harald Welted27ab242019-07-26 13:45:18 +02001121template (value) GenericAVP ts_AVP_3GPP_PriorityLevel(uint32_t prio) := {
1122 avp := {
1123 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_Priority_Level),
1124 avp_data := {
1125 avp_PCC_3GPP_Priority_Level := int2oct(prio, 4)
1126 }
1127 }
1128}
1129
Pau Espin Pedrol446145a2023-10-10 19:12:21 +02001130template (present) GenericAVP tr_AVP_PCC_3GPP_AllocRetenPrio(template (present) uint32_t prio := ?) := {
1131 avp := {
1132 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_Allocation_Retention_Priority),
1133 avp_data := {
1134 avp_PCC_3GPP_Allocation_Retention_Priority := superset(
1135 tr_AVP_3GPP_PriorityLevel(prio)
1136 /* pre-emption capability */
1137 /* pre-emption vulnerability */
1138 )
1139 }
1140 }
1141}
Pau Espin Pedrol6477d732022-06-03 12:04:40 +02001142template (value) GenericAVP ts_AVP_PCC_3GPP_AllocRetenPrio(uint32_t prio) := {
Harald Welted27ab242019-07-26 13:45:18 +02001143 avp := {
1144 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_Allocation_Retention_Priority),
1145 avp_data := {
1146 avp_PCC_3GPP_Allocation_Retention_Priority := {
1147 ts_AVP_3GPP_PriorityLevel(prio)
1148 /* pre-emption capability */
1149 /* pre-emption vulnerability */
1150 }
1151 }
1152 }
1153}
1154
Pau Espin Pedrol446145a2023-10-10 19:12:21 +02001155/* 7.3.37 EPS-Subscribed-QoS-Profile */
1156template (present) GenericAVP tr_AVP_3GPP_EpsSubscrQosProfile(template (present) uint32_t qos_class := ?,
1157 template (present) uint32_t prio := ?) := {
1158 avp := {
1159 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_EPS_Subscribed_QoS_Profile),
1160 avp_data := {
1161 avp_AAA_3GPP_EPS_Subscribed_QoS_Profile := superset(
1162 tr_AVP_PCC_3GPP_QoS_Class_Identifier(qos_class),
1163 tr_AVP_PCC_3GPP_AllocRetenPrio(prio)
1164 )
1165 }
1166 }
1167}
1168
Harald Welted27ab242019-07-26 13:45:18 +02001169template (value) GenericAVP ts_AVP_3GPP_EpsSubscrQosProfile(uint32_t qos_class, uint32_t prio) := {
1170 avp := {
1171 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_EPS_Subscribed_QoS_Profile),
1172 avp_data := {
1173 avp_AAA_3GPP_EPS_Subscribed_QoS_Profile := {
Pau Espin Pedrol6477d732022-06-03 12:04:40 +02001174 ts_AVP_PCC_3GPP_QoS_Class_Identifier(qos_class),
1175 ts_AVP_PCC_3GPP_AllocRetenPrio(prio)
Harald Welted27ab242019-07-26 13:45:18 +02001176 }
1177 }
1178 }
1179}
1180
1181
Harald Welte40b1e002023-01-27 17:26:39 +01001182/* TS 29.272 7.3.41 AMBR */
Pau Espin Pedrol446145a2023-10-10 19:12:21 +02001183template (present) GenericAVP tr_AVP_3GPP_AMBR(template (present) uint32_t ul := ?, template (present) uint32_t dl := ?) := {
1184 avp := {
1185 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_AMBR),
1186 avp_data := {
1187 avp_AAA_3GPP_AMBR := {
1188 tr_AVP_3GPP_MaxReqBwUL(ul),
1189 tr_AVP_3GPP_MaxReqBwDL(dl)
1190 }
1191 }
1192 }
1193}
Harald Welted27ab242019-07-26 13:45:18 +02001194template (value) GenericAVP ts_AVP_3GPP_AMBR(uint32_t ul, uint32_t dl) := {
1195 avp := {
1196 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_AMBR),
1197 avp_data := {
1198 avp_AAA_3GPP_AMBR := {
1199 ts_AVP_3GPP_MaxReqBwUL(ul),
1200 ts_AVP_3GPP_MaxReqBwDL(dl)
1201 }
1202 }
1203 }
1204}
1205
Pau Espin Pedrol446145a2023-10-10 19:12:21 +02001206template (present) GenericAVP tr_AVP_3GPP_MaxReqBwUL(template (present) uint32_t bw := ?) := {
1207 avp := {
1208 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_UL),
1209 avp_data := {
1210 avp_RX_3GPP_Max_Requested_Bandwidth_UL := int2oct_tmpl(bw, 4)
1211 }
1212 }
1213}
1214
Harald Welted27ab242019-07-26 13:45:18 +02001215template (value) GenericAVP ts_AVP_3GPP_MaxReqBwUL(uint32_t bw) := {
1216 avp := {
1217 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_UL),
1218 avp_data := {
1219 avp_RX_3GPP_Max_Requested_Bandwidth_UL := int2oct(bw, 4)
1220 }
1221 }
1222}
1223
Pau Espin Pedrol446145a2023-10-10 19:12:21 +02001224template (present) GenericAVP tr_AVP_3GPP_MaxReqBwDL(template (present) uint32_t bw := ?) := {
1225 avp := {
1226 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_DL),
1227 avp_data := {
1228 avp_RX_3GPP_Max_Requested_Bandwidth_DL := int2oct_tmpl(bw, 4)
1229 }
1230 }
1231}
1232
Harald Welted27ab242019-07-26 13:45:18 +02001233template (value) GenericAVP ts_AVP_3GPP_MaxReqBwDL(uint32_t bw) := {
1234 avp := {
1235 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_DL),
1236 avp_data := {
1237 avp_RX_3GPP_Max_Requested_Bandwidth_DL := int2oct(bw, 4)
1238 }
1239 }
1240}
1241
Pau Espin Pedrola2af5782022-05-18 16:34:29 +02001242template (present) GenericAVP tr_AVP_3GPP_Reporting_Reason(template (present) DCA_3GPP_Reporting_Reason r := ?) := {
1243 avp := {
1244 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_Reporting_Reason),
1245 avp_data := {
1246 avp_DCA_3GPP_Reporting_Reason := r
1247 }
1248 }
1249}
Harald Welted27ab242019-07-26 13:45:18 +02001250
Pau Espin Pedrola2af5782022-05-18 16:34:29 +02001251template (present) GenericAVP tr_AVP_3GPP_AoCRequestType(template (present) DCA_3GPP_AoC_Request_Type t := ?) := {
1252 avp := {
1253 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_AoC_Request_Type),
1254 avp_data := {
1255 avp_DCA_3GPP_AoC_Request_Type := t
1256 }
1257 }
1258}
1259
1260template (present) GenericAVP tr_AVP_3GPP_ServiceInformation(template (present) AVP_list content := ?) := {
1261 avp := {
1262 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_Service_Information),
1263 avp_data := {
1264 avp_DCA_3GPP_Service_Information := content
1265 }
1266 }
1267}
1268
1269template (present) GenericAVP tr_AVP_3GPP_PSInformation(template (present) AVP_list content := ?) := {
1270 avp := {
1271 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_PS_Information),
1272 avp_data := {
1273 avp_DCA_3GPP_PS_Information := content
1274 }
1275 }
1276}
1277
1278template (present) GenericAVP tr_AVP_3GPP_ChargingId(template (present) AVP_OctetString id := ?) := {
1279 avp := {
1280 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_Charging_Id),
1281 avp_data := {
1282 avp_GI_3GPP_3GPP_Charging_Id := id
1283 }
1284 }
1285}
1286
1287template (present) GenericAVP tr_AVP_3GPP_PDPType(template (present) GI_3GPP_3GPP_PDP_Type t := ?) := {
1288 avp := {
1289 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_PDP_Type),
1290 avp_data := {
1291 avp_GI_3GPP_3GPP_PDP_Type := t
1292 }
1293 }
1294}
1295
1296template (present) GenericAVP tr_AVP_3GPP_PDPAddress(template (present) DCA_3GPP_PDP_Address addr := ?) := {
1297 avp := {
1298 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_PDP_Address),
1299 avp_data := {
1300 avp_DCA_3GPP_PDP_Address := addr
1301 }
1302 }
1303}
1304
1305template (present) GenericAVP tr_AVP_3GPP_SGSNAddress(template (present) DCA_3GPP_SGSN_Address addr := ?) := {
1306 avp := {
1307 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_SGSN_Address),
1308 avp_data := {
1309 avp_DCA_3GPP_SGSN_Address := addr
1310 }
1311 }
1312}
1313
1314template (present) GenericAVP tr_AVP_3GPP_GGSNAddress(template (present) DCA_3GPP_GGSN_Address addr := ?) := {
1315 avp := {
1316 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_GGSN_Address),
1317 avp_data := {
1318 avp_DCA_3GPP_GGSN_Address := addr
1319 }
1320 }
1321}
1322
1323template (present) GenericAVP tr_AVP_3GPP_SelectionMode(template (present) GI_3GPP_3GPP_Selection_Mode sm := ?) := {
1324 avp := {
1325 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_Selection_Mode),
1326 avp_data := {
1327 avp_GI_3GPP_3GPP_Selection_Mode := sm
1328 }
1329 }
1330}
1331
1332template (present) GenericAVP tr_AVP_3GPP_ChargingCharacteristics(template (present) GI_3GPP_3GPP_Charging_Characteristics cc := ?) := {
1333 avp := {
1334 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_Charging_Characteristics),
1335 avp_data := {
1336 avp_GI_3GPP_3GPP_Charging_Characteristics := cc
1337 }
1338 }
1339}
1340
1341template (present) GenericAVP tr_AVP_3GPP_SGSNMCCMNC(template (present) GI_3GPP_3GPP_SGSN_MCC_MNC smn := ?) := {
1342 avp := {
1343 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_SGSN_MCC_MNC),
1344 avp_data := {
1345 avp_GI_3GPP_3GPP_SGSN_MCC_MNC := smn
1346 }
1347 }
1348}
1349
1350template (present) GenericAVP tr_AVP_3GPP_NSAPI(template (present) GI_3GPP_3GPP_NSAPI nsapi := ?) := {
1351 avp := {
1352 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_NSAPI),
1353 avp_data := {
1354 avp_GI_3GPP_3GPP_NSAPI := nsapi
1355 }
1356 }
1357}
1358
1359template (present) GenericAVP tr_AVP_3GPP_MS_TimeZone(template (present) GI_3GPP_3GPP_MS_TimeZone ms_tz := ?) := {
1360 avp := {
1361 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_MS_TimeZone),
1362 avp_data := {
1363 avp_GI_3GPP_3GPP_MS_TimeZone := ms_tz
1364 }
1365 }
1366}
1367
1368template (present) GenericAVP tr_AVP_3GPP_ULI(template (present) GI_3GPP_3GPP_User_Location_Info uli := ?) := {
1369 avp := {
1370 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_GI_3GPP_3GPP_User_Location_Info),
1371 avp_data := {
1372 avp_GI_3GPP_3GPP_User_Location_Info := uli
1373 }
1374 }
1375}
1376
1377template (present) GenericAVP tr_AVP_UserEquipmentInfo(template (present) DCC_NONE_User_Equipment_Info uei := ?) := {
1378 avp := {
1379 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_User_Equipment_Info),
1380 avp_data := {
1381 avp_DCC_NONE_User_Equipment_Info := uei
1382 }
1383 }
1384}
1385
1386template (present) GenericAVP tr_AVP_UserEquipmentInfoType(template (present) DCC_NONE_User_Equipment_Info_Type ueit := ?) := {
1387 avp := {
1388 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_User_Equipment_Info_Type),
1389 avp_data := {
1390 avp_DCC_NONE_User_Equipment_Info_Type := ueit
1391 }
1392 }
1393}
1394
1395template (present) GenericAVP tr_AVP_UserEquipmentInfoValue(template (present) DCC_NONE_User_Equipment_Info_Value ueiv := ?) := {
1396 avp := {
1397 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_User_Equipment_Info_Value),
1398 avp_data := {
1399 avp_DCC_NONE_User_Equipment_Info_Value := ueiv
1400 }
1401 }
1402}
Harald Welted27ab242019-07-26 13:45:18 +02001403
Harald Welte40b1e002023-01-27 17:26:39 +01001404/* TS 29.272 7.3.62 PDN-Type */
Pau Espin Pedrol446145a2023-10-10 19:12:21 +02001405template (present) GenericAVP tr_AVP_3GPP_PdnType(template (present) AAA_3GPP_PDN_Type pdn_type := ?) := {
1406 avp := {
1407 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_PDN_Type),
1408 avp_data := {
1409 avp_AAA_3GPP_PDN_Type := pdn_type
1410 }
1411 }
1412}
Harald Welted27ab242019-07-26 13:45:18 +02001413template (value) GenericAVP ts_AVP_3GPP_PdnType(template (value) AAA_3GPP_PDN_Type pdn_type) := {
1414 avp := {
1415 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_PDN_Type),
1416 avp_data := {
1417 avp_AAA_3GPP_PDN_Type := pdn_type
1418 }
1419 }
1420}
1421
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +01001422/* RFC4006 8.16 Multiple-Services-Credit-Control AVP */
1423template (value) GenericAVP ts_AVP_Multiple_Services_Credit_Control(template (value) AVP_list content) := {
1424 avp := {
1425 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_Multiple_Services_Credit_Control),
1426 avp_data := {
1427 avp_DCC_NONE_Multiple_Services_Credit_Control := content
1428 }
1429 }
1430}
Pau Espin Pedrola2af5782022-05-18 16:34:29 +02001431template (present) GenericAVP tr_AVP_Multiple_Services_Credit_Control(template (present) AVP_list content := ?) := {
1432 avp := {
1433 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Multiple_Services_Credit_Control),
1434 avp_data := {
1435 avp_DCC_NONE_Multiple_Services_Credit_Control := content
1436 }
1437 }
1438}
1439
1440/* Requested-Service-Unit AVP */
1441template (present) GenericAVP tr_AVP_Requested_Service_Unit(template (present) AVP_list content := ?) := {
1442 avp := {
1443 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Requested_Service_Unit),
1444 avp_data := {
1445 avp_DCC_NONE_Requested_Service_Unit := content
1446 }
1447 }
1448}
1449
1450/* Used-Service-Unit AVP */
1451template (present) GenericAVP tr_AVP_Used_Service_Unit(template (present) AVP_list content := ?) := {
1452 avp := {
1453 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Used_Service_Unit),
1454 avp_data := {
1455 avp_DCC_NONE_Used_Service_Unit := content
1456 }
1457 }
1458}
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +01001459
1460/* RFC4006 8.17 Granted-Service-Unit AVP */
1461template (value) GenericAVP ts_AVP_Granted_Service_Unit(template (value) AVP_list content) := {
1462 avp := {
1463 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_Granted_Service_Unit),
1464 avp_data := {
1465 avp_DCC_NONE_Granted_Service_Unit := content
1466 }
1467 }
1468}
1469
1470/* RFC4006 8.21 CC-Time AVP */
1471template (value) GenericAVP ts_AVP_CC_Time(uint32_t cc_time_val) := {
1472 avp := {
1473 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_CC_Time),
1474 avp_data := {
1475 avp_DCC_NONE_CC_Time := int2oct(cc_time_val, 4)
1476 }
1477 }
1478}
1479
1480/* RFC4006 8.23 CC-Total-Octets AVP */
1481template (value) GenericAVP ts_AVP_CC_Total_Octets(uint64_t cc_total_octets_val) := {
1482 avp := {
1483 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_CC_Total_Octets),
1484 avp_data := {
1485 avp_DCC_NONE_CC_Total_Octets := int2oct(cc_total_octets_val, 8)
1486 }
1487 }
1488}
1489
1490/* RFC4006 8.33 Validity-Time AVP */
1491template (value) GenericAVP ts_AVP_Validity_Time(uint32_t validity_time_val) := {
1492 avp := {
1493 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_Validity_Time),
1494 avp_data := {
1495 avp_DCC_NONE_Validity_Time := int2oct(validity_time_val, 4)
1496 }
1497 }
1498}
1499
Pau Espin Pedrol52562c92022-05-23 15:45:46 +02001500template (value) GenericAVP ts_AVP_3GPP_VolumeQuotaThreshold(uint32_t volume_quota_thresh_val) := {
1501 avp := {
1502 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_DCA_3GPP_Volume_Quota_Threshold),
1503 avp_data := {
1504 avp_DCA_3GPP_Volume_Quota_Threshold := int2oct(volume_quota_thresh_val, 4)
1505 }
1506 }
1507}
1508
Pau Espin Pedrola2af5782022-05-18 16:34:29 +02001509template (present) GenericAVP tr_AVP_3GPP_CalledStationId(template (present) DNAS_NONE_Called_Station_Id id := ?) := {
1510 avp := {
1511 avp_header := tr_DIA_Hdr(c_AVP_Code_DNAS_NONE_Called_Station_Id),
1512 avp_data := {
1513 avp_DNAS_NONE_Called_Station_Id := id
1514 }
1515 }
1516}
Harald Welted27ab242019-07-26 13:45:18 +02001517
1518
Vadim Yanitskiy0d6cbd32023-02-11 08:07:27 +07001519/* 5.3.1 Capabilities Exchange Request */
1520template (value) PDU_DIAMETER
1521ts_DIA_CER(octetstring host_ip, uint32_t vendor_app_id,
1522 template (value) charstring orig_host := "ttcn3.localdomain",
1523 template (value) charstring orig_realm := "localdomain",
1524 template (value) UINT32 hbh_id := '00000000'O,
1525 template (value) UINT32 ete_id := '00000000'O) :=
1526 ts_DIAMETER(flags := '10000000'B,
1527 cmd_code := Capabilities_Exchange,
1528 hbh_id := hbh_id,
1529 ete_id := ete_id,
1530 avps := {
1531 ts_AVP_OriginHost(orig_host),
1532 ts_AVP_OriginRealm(orig_realm),
1533 ts_AVP_HostIpAddr(host_ip),
1534 ts_AVP_VendorId(vendor_id_3GPP),
1535 ts_AVP_ProductName("TTCN-3 Testsuite"),
1536 ts_AVP_FwRevision('00000000'O),
1537 ts_AVP_InbSecId('00000000'O),
1538 ts_AVP_AuthAppId('FFFFFFFF'O),
1539 ts_AVP_VendorSpecAppId(vendor_id_3GPP, vendor_app_id)
1540 });
1541
1542
Harald Welted27ab242019-07-26 13:45:18 +02001543/* 5.3.2 Capabilities Exchange Answer */
1544template (value) PDU_DIAMETER
Pau Espin Pedrol33b47492022-03-08 17:43:01 +01001545ts_DIA_CEA_AUTH_APP_ID(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
1546 template (value) charstring origin_host,
1547 template (value) charstring origin_realm,
1548 template (value) octetstring host_ip, uint32_t auth_app_id)
1549:= ts_DIAMETER(flags:='00000000'B, cmd_code:=Capabilities_Exchange, hbh_id:=hbh_id, ete_id:=ete_id,
1550 avps := {
1551 ts_AVP_ResultCode(DIAMETER_SUCCESS),
1552 ts_AVP_OriginHost(origin_host),
1553 ts_AVP_OriginRealm(origin_realm),
1554 ts_AVP_HostIpAddr(host_ip),
1555 ts_AVP_VendorId(vendor_id_3GPP),
1556 ts_AVP_ProductName("TTCN-3 Testsuite"),
1557 ts_AVP_OriginStateId('00000001'O),
1558 ts_AVP_SuppVendorIdRaw(5535), /* 3GPP2 */
1559 ts_AVP_SuppVendorId(vendor_id_3GPP),
1560 ts_AVP_SuppVendorIdRaw(13019), /* ETSI */
Pau Espin Pedrol33b47492022-03-08 17:43:01 +01001561 ts_AVP_AuthAppId(int2oct(auth_app_id, 4)),
1562 ts_AVP_InbSecId('00000000'O)
1563 });
1564template (value) PDU_DIAMETER
1565ts_DIA_CEA_VENDOR_APP_ID(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
1566 template (value) charstring origin_host,
1567 template (value) charstring origin_realm,
1568 template (value) octetstring host_ip, uint32_t vendor_app_id)
Harald Welted27ab242019-07-26 13:45:18 +02001569:= ts_DIAMETER(flags:='00000000'B, cmd_code:=Capabilities_Exchange, hbh_id:=hbh_id, ete_id:=ete_id,
1570 avps := {
1571 ts_AVP_ResultCode(DIAMETER_SUCCESS),
Harald Welte61f73d52020-04-26 21:41:12 +02001572 ts_AVP_OriginHost(origin_host),
1573 ts_AVP_OriginRealm(origin_realm),
1574 ts_AVP_HostIpAddr(host_ip),
Harald Welted27ab242019-07-26 13:45:18 +02001575 ts_AVP_VendorId(vendor_id_3GPP),
1576 ts_AVP_ProductName("TTCN-3 Testsuite"),
1577 ts_AVP_OriginStateId('00000001'O),
1578 ts_AVP_SuppVendorIdRaw(5535), /* 3GPP2 */
1579 ts_AVP_SuppVendorId(vendor_id_3GPP),
1580 ts_AVP_SuppVendorIdRaw(13019), /* ETSI */
Harald Welted27ab242019-07-26 13:45:18 +02001581 ts_AVP_InbSecId('00000000'O),
Harald Welte61f73d52020-04-26 21:41:12 +02001582 ts_AVP_VendorSpecAppId(vendor_id_3GPP, vendor_app_id)
Harald Welted27ab242019-07-26 13:45:18 +02001583 });
Pau Espin Pedrol33b47492022-03-08 17:43:01 +01001584function f_ts_DIA_CEA(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
1585 template (value) charstring origin_host,
1586 template (value) charstring origin_realm,
1587 template (value) octetstring host_ip, template (omit) uint32_t auth_app_id,
1588 template (omit) uint32_t vendor_app_id)
1589 return template (value) PDU_DIAMETER
1590{
1591 var template (value) PDU_DIAMETER diam_pdu;
1592 if (istemplatekind(vendor_app_id, "omit")) {
1593 diam_pdu := ts_DIA_CEA_AUTH_APP_ID(hbh_id, ete_id, origin_host, origin_realm, host_ip, valueof(auth_app_id));
1594 } else {
1595 diam_pdu := ts_DIA_CEA_VENDOR_APP_ID(hbh_id, ete_id, origin_host, origin_realm, host_ip, valueof(vendor_app_id));
1596 }
1597 return diam_pdu;
1598}
Harald Welted27ab242019-07-26 13:45:18 +02001599
Harald Welte6effabb2020-02-18 21:39:59 +01001600
1601template (value) PDU_DIAMETER
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +03001602ts_DIA_AIR(/* template (value) */ hexstring imsi,
Vadim Yanitskiy59ef8e52023-02-07 23:38:29 +07001603 template (value) octetstring mcc_mnc := '111F11'O,
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +03001604 template (value) octetstring sess_id := c_def_sess_id,
Vadim Yanitskiyb57ef872021-12-12 04:14:18 +03001605 template (value) charstring orig_host := "ttcn3.localdomain",
1606 template (value) charstring orig_realm := "localdomain",
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +03001607 template (value) charstring dest_realm := "localdomain",
1608 template (value) UINT32 hbh_id := '00000000'O,
1609 template (value) UINT32 ete_id := '00000000'O) :=
Vadim Yanitskiy21fd7db2021-12-15 05:29:35 +03001610 ts_DIAMETER(flags := '11000000'B,
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +03001611 cmd_code := Authentication_Information,
Vadim Yanitskiy463d8262021-12-11 16:50:46 +03001612 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +03001613 hbh_id := hbh_id,
1614 ete_id := ete_id,
1615 avps := {
1616 ts_AVP_SessionId(sess_id),
1617 ts_AVP_DestinationRealm(dest_realm),
Vadim Yanitskiyb57ef872021-12-12 04:14:18 +03001618 ts_AVP_OriginHost(orig_host),
1619 ts_AVP_OriginRealm(orig_realm),
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +03001620 ts_AVP_UserNameImsi(imsi),
1621 /* Requested EUTRAN Auth Info */
1622 ts_AVP_RequestedEutranAuthInfo,
Vadim Yanitskiyb57ef872021-12-12 04:14:18 +03001623 ts_AVP_AuthSessionState(NO_STATE_MAINTAINED),
Vadim Yanitskiy59ef8e52023-02-07 23:38:29 +07001624 ts_AVP_3GPP_VisitedPlmnId(mcc_mnc)
Harald Welte6effabb2020-02-18 21:39:59 +01001625 });
Harald Welted27ab242019-07-26 13:45:18 +02001626template (present) PDU_DIAMETER
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +03001627tr_DIA_AIR(/* template (present) */ hexstring imsi,
1628 template (present) octetstring sess_id := ?,
1629 template (present) charstring dest_realm := ?,
1630 template (present) UINT32 hbh_id := ?,
1631 template (present) UINT32 ete_id := ?) :=
Vadim Yanitskiy21fd7db2021-12-15 05:29:35 +03001632 tr_DIAMETER(flags := '1???????'B,
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +03001633 cmd_code := Authentication_Information,
1634 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1635 hbh_id := hbh_id, ete_id := ete_id,
1636 avps := superset(
1637 tr_AVP_SessionId(sess_id),
1638 tr_AVP_DestinationRealm(dest_realm),
1639 tr_AVP_UserNameImsi(imsi),
1640 tr_AVP_3GPP_VisitedPlmnId
Harald Welted27ab242019-07-26 13:45:18 +02001641 ));
1642
Harald Welte40b1e002023-01-27 17:26:39 +01001643/* TS 29.272 5.2.3.1 + 7.2.6 Authentication Information Answer */
Harald Welted27ab242019-07-26 13:45:18 +02001644template (value) PDU_DIAMETER
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +03001645ts_DIA_AIA(template (value) AVP_list auth_info_contents,
1646 template (value) octetstring sess_id := c_def_sess_id,
1647 template (value) charstring orig_host := "hss.localdomain",
1648 template (value) charstring orig_realm := "localdomain",
1649 template (value) UINT32 hbh_id := '00000000'O,
1650 template (value) UINT32 ete_id := '00000000'O) :=
1651 ts_DIAMETER(flags := '01000000'B,
1652 cmd_code := Authentication_Information,
1653 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1654 hbh_id := hbh_id,
1655 ete_id := ete_id,
1656 avps := {
1657 ts_AVP_SessionId(sess_id),
1658 ts_AVP_ResultCode(DIAMETER_SUCCESS),
1659 ts_AVP_AuthSessionState(NO_STATE_MAINTAINED),
1660 ts_AVP_OriginHost(orig_host),
1661 ts_AVP_OriginRealm(orig_realm),
1662 ts_AVP_3GPP_AuthInfo(auth_info_contents)
Harald Welted27ab242019-07-26 13:45:18 +02001663 });
Vadim Yanitskiy446edae2021-12-12 04:33:08 +03001664template (present) PDU_DIAMETER
1665tr_DIA_AIA(template (present) AVP_list auth_info_contents := ?,
1666 template (present) octetstring sess_id := ?,
1667 template (present) charstring orig_host := ?,
1668 template (present) charstring orig_realm := ?,
1669 template (present) UINT32 hbh_id := ?,
1670 template (present) UINT32 ete_id := ?) :=
1671 tr_DIAMETER(flags := '0???????'B,
1672 cmd_code := Authentication_Information,
1673 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1674 hbh_id := hbh_id,
1675 ete_id := ete_id,
1676 avps := superset(
1677 tr_AVP_SessionId(sess_id),
Vadim Yanitskiy446edae2021-12-12 04:33:08 +03001678 tr_AVP_AuthSessionState(NO_STATE_MAINTAINED),
Vadim Yanitskiy446edae2021-12-12 04:33:08 +03001679 tr_AVP_OriginHost(orig_host),
Pau Espin Pedrol7bedcf82023-08-24 19:33:49 +02001680 tr_AVP_OriginRealm(orig_realm),
1681 tr_AVP_ResultCode(DIAMETER_SUCCESS),
1682 tr_AVP_3GPP_AuthInfo(auth_info_contents)
Vadim Yanitskiy446edae2021-12-12 04:33:08 +03001683 ));
Pau Espin Pedrol7aa4ad82023-08-28 18:24:24 +02001684template (present) PDU_DIAMETER
1685tr_DIA_AIA_ERR(template (present) GenericAVP err_avp := ?,
1686 template (present) octetstring sess_id := ?,
1687 template (present) charstring orig_host := ?,
1688 template (present) charstring orig_realm := ?,
1689 template (present) UINT32 hbh_id := ?,
1690 template (present) UINT32 ete_id := ?) :=
1691 tr_DIAMETER(flags := '0???????'B,
1692 cmd_code := Authentication_Information,
1693 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1694 hbh_id := hbh_id,
1695 ete_id := ete_id,
1696 avps := superset(
1697 tr_AVP_SessionId(sess_id),
1698 tr_AVP_AuthSessionState(NO_STATE_MAINTAINED),
1699 tr_AVP_OriginHost(orig_host),
1700 tr_AVP_OriginRealm(orig_realm),
1701 err_avp
1702 ));
Harald Welted27ab242019-07-26 13:45:18 +02001703
1704
Harald Welte40b1e002023-01-27 17:26:39 +01001705/* TS 29.272 7.2.3 Update Location Request */
Vadim Yanitskiy5e1bdc02021-12-12 02:33:59 +03001706template (value) PDU_DIAMETER
1707ts_DIA_ULR(/* template (value) */ hexstring imsi,
Vadim Yanitskiy59ef8e52023-02-07 23:38:29 +07001708 template (value) octetstring mcc_mnc := '111F11'O,
Vadim Yanitskiy5e1bdc02021-12-12 02:33:59 +03001709 template (value) octetstring sess_id := c_def_sess_id,
1710 template (value) charstring orig_host := "ttcn3.localdomain",
1711 template (value) charstring orig_realm := "localdomain",
1712 template (value) charstring dest_realm := "localdomain",
1713 template (value) UINT32 hbh_id := '00000000'O,
1714 template (value) UINT32 ete_id := '00000000'O) :=
1715 ts_DIAMETER(flags := '11000000'B,
1716 cmd_code := Update_Location,
1717 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1718 hbh_id := hbh_id,
1719 ete_id := ete_id,
1720 avps := {
1721 ts_AVP_SessionId(sess_id),
1722 ts_AVP_AuthSessionState(NO_STATE_MAINTAINED),
1723 ts_AVP_UserNameImsi(imsi),
1724 ts_AVP_3GPP_UlrFlags('00000000'O),
Vadim Yanitskiy59ef8e52023-02-07 23:38:29 +07001725 ts_AVP_3GPP_VisitedPlmnId(mcc_mnc),
Pau Espin Pedrola2af5782022-05-18 16:34:29 +02001726 ts_AVP_PCC_3GPP_RatType(EUTRAN),
Vadim Yanitskiy5e1bdc02021-12-12 02:33:59 +03001727 ts_AVP_OriginHost(orig_host),
1728 ts_AVP_OriginRealm(orig_realm),
1729 ts_AVP_DestinationRealm(dest_realm)
1730 });
Harald Welted27ab242019-07-26 13:45:18 +02001731template (present) PDU_DIAMETER
Vadim Yanitskiy0e8f5162021-12-15 05:00:32 +03001732tr_DIA_ULR(/* template (present) */ hexstring imsi,
1733 template (present) octetstring sess_id := ?,
1734 template (present) charstring orig_host := ?,
1735 template (present) charstring orig_realm := ?,
1736 template (present) charstring dest_realm := ?,
1737 template (present) UINT32 hbh_id := ?,
1738 template (present) UINT32 ete_id := ?) :=
1739 tr_DIAMETER(flags := '11000000'B,
1740 cmd_code := Update_Location,
1741 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1742 hbh_id := hbh_id,
1743 ete_id := ete_id,
1744 avps := superset(
1745 tr_AVP_SessionId(sess_id),
1746 tr_AVP_AuthSessionState,
1747 tr_AVP_OriginHost(orig_host),
1748 tr_AVP_OriginRealm(orig_realm),
1749 tr_AVP_DestinationRealm(dest_realm),
1750 tr_AVP_UserNameImsi(imsi),
Pau Espin Pedrola2af5782022-05-18 16:34:29 +02001751 tr_AVP_PCC_3GPP_RatType,
Vadim Yanitskiy0e8f5162021-12-15 05:00:32 +03001752 tr_AVP_3GPP_UlrFlags,
1753 tr_AVP_3GPP_VisitedPlmnId
Harald Welted27ab242019-07-26 13:45:18 +02001754 ));
1755
1756template (value) PDU_DIAMETER
Vadim Yanitskiy0e8f5162021-12-15 05:00:32 +03001757ts_DIA_ULA(template (value) AVP_list sub_data,
1758 template (value) octetstring sess_id := c_def_sess_id,
1759 template (value) charstring orig_host := "hss.localdomain",
1760 template (value) charstring orig_realm := "localdomain",
1761 template (value) UINT32 hbh_id := '00000000'O,
1762 template (value) UINT32 ete_id := '00000000'O) :=
1763 ts_DIAMETER(flags:='01000000'B,
1764 cmd_code := Update_Location,
1765 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1766 hbh_id := hbh_id,
1767 ete_id := ete_id,
1768 avps := {
1769 ts_AVP_SessionId(sess_id),
1770 ts_AVP_ResultCode(DIAMETER_SUCCESS), /* optional */
1771 ts_AVP_AuthSessionState(NO_STATE_MAINTAINED),
1772 ts_AVP_OriginHost(orig_host),
1773 ts_AVP_OriginRealm(orig_realm),
1774 ts_AVP_3GPP_UlaFlags('00000002'O),
1775 ts_AVP_3GPP_SubscriptionData(sub_data)
Harald Welted27ab242019-07-26 13:45:18 +02001776 });
Vadim Yanitskiy5e1bdc02021-12-12 02:33:59 +03001777template (present) PDU_DIAMETER
1778tr_DIA_ULA(template (present) AVP_list sub_data := ?,
1779 template (present) octetstring sess_id := ?,
1780 template (present) charstring orig_host := ?,
1781 template (present) charstring orig_realm := ?,
1782 template (present) UINT32 hbh_id := ?,
1783 template (present) UINT32 ete_id := ?) :=
1784 tr_DIAMETER(flags := '0???????'B,
1785 cmd_code := Update_Location,
1786 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1787 hbh_id := hbh_id,
1788 ete_id := ete_id,
1789 avps := superset(
1790 tr_AVP_SessionId(sess_id),
1791 tr_AVP_ResultCode(DIAMETER_SUCCESS),
1792 tr_AVP_AuthSessionState,
1793 tr_AVP_OriginHost(orig_host),
1794 tr_AVP_OriginRealm(orig_realm),
1795 tr_AVP_3GPP_UlaFlags,
1796 tr_AVP_3GPP_SubscriptionData(sub_data)
1797 ));
Harald Welted27ab242019-07-26 13:45:18 +02001798
1799
1800
Harald Weltef4001512020-04-26 21:48:34 +02001801/* RFC 4006 3.1. Credit-Control-Request (CCR) Command */
1802template (present) PDU_DIAMETER
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +01001803tr_DIA_Gx_CCR(template (present) DCC_NONE_CC_Request_Type req_type := INITIAL_REQUEST)
Harald Weltef4001512020-04-26 21:48:34 +02001804:= tr_DIAMETER(flags:='11000000'B, cmd_code:=Credit_Control,
Harald Weltef4001512020-04-26 21:48:34 +02001805 avps := superset(
1806 tr_AVP_SessionId,
1807 tr_AVP_OriginHost,
1808 tr_AVP_OriginRealm,
1809 tr_AVP_DestinationRealm,
1810 tr_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_Gx_AID, 4)),
1811 tr_AVP_CcReqType(req_type),
1812 tr_AVP_CcReqNum(?)
1813 ));
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +01001814template (present) PDU_DIAMETER
1815tr_DIA_Gy_CCR(template (present) DCC_NONE_CC_Request_Type req_type := INITIAL_REQUEST)
1816:= tr_DIAMETER(flags:='11000000'B, cmd_code:=Credit_Control,
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +01001817 avps := superset(
1818 tr_AVP_SessionId,
1819 tr_AVP_OriginHost,
1820 tr_AVP_OriginRealm,
1821 tr_AVP_DestinationRealm,
1822 tr_AVP_AuthAppId(int2oct(c_DIAMETER_CREDIT_CONTROL_AID, 4)),
1823 tr_AVP_CcReqType(req_type),
1824 tr_AVP_CcReqNum(?)
1825 ));
1826
Harald Weltef4001512020-04-26 21:48:34 +02001827
1828
1829/* RFC 4006 3.2. Credit-Control-Answer (CCA) Command */
1830template (value) PDU_DIAMETER
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +01001831ts_DIA_Gx_CCA(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
Harald Weltef4001512020-04-26 21:48:34 +02001832 template (value) octetstring sess_id,
1833 template (value) DCC_NONE_CC_Request_Type req_type,
1834 template (value) AVP_Unsigned32 req_num)
Harald Weltef4001512020-04-26 21:48:34 +02001835:= ts_DIAMETER(flags:='01000000'B, cmd_code:=Credit_Control,
1836 app_id:=int2oct(c_DIAMETER_3GPP_Gx_AID, 4), hbh_id:=hbh_id, ete_id:=ete_id,
1837 avps := {
1838 ts_AVP_SessionId(sess_id),
1839 ts_AVP_ResultCode(DIAMETER_SUCCESS),
1840 ts_AVP_OriginHost("pcrf.localdomain"),
1841 ts_AVP_OriginRealm("localdomain"),
1842 ts_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_Gx_AID, 4)),
1843 ts_AVP_CcReqType(req_type),
Pau Espin Pedrolee961c72022-06-03 12:06:07 +02001844 ts_AVP_CcReqNum(req_num),
1845 ts_AVP_PCC_3GPP_QoS_Information({
1846 ts_AVP_PCC_3GPP_APN_Aggregate_Max_Bitrate_UL(33554432),
1847 ts_AVP_PCC_3GPP_APN_Aggregate_Max_Bitrate_DL(52428800)
1848 }),
1849 ts_AVP_PCC_3GPP_Default_EPS_Bearer_QoS({
1850 ts_AVP_PCC_3GPP_QoS_Class_Identifier(9),
1851 ts_AVP_PCC_3GPP_AllocRetenPrio(2)
1852 })
Harald Weltef4001512020-04-26 21:48:34 +02001853 // supported features
1854 // origin
1855 });
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +01001856template (value) PDU_DIAMETER
1857ts_DIA_Gy_CCA(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
1858 template (value) octetstring sess_id,
1859 template (value) DCC_NONE_CC_Request_Type req_type,
1860 template (value) AVP_Unsigned32 req_num)
1861:= ts_DIAMETER(flags:='01000000'B, cmd_code:=Credit_Control,
1862 app_id:=int2oct(c_DIAMETER_CREDIT_CONTROL_AID, 4), hbh_id:=hbh_id, ete_id:=ete_id,
1863 avps := {
1864 ts_AVP_SessionId(sess_id),
1865 ts_AVP_ResultCode(DIAMETER_SUCCESS),
1866 ts_AVP_OriginHost("ocs.localdomain"),
1867 ts_AVP_OriginRealm("localdomain"),
1868 ts_AVP_AuthAppId(int2oct(c_DIAMETER_CREDIT_CONTROL_AID, 4)),
1869 ts_AVP_CcReqType(req_type),
1870 ts_AVP_CcReqNum(req_num)//,
1871 // qos
1872 // default eps bearer qos
1873 // supported features
1874 // origin
1875 });
1876/* Same as ts_DIA_Gy_CCA, but with extra AVP to grant access for limited amount of seconds */
1877template (value) PDU_DIAMETER
1878ts_DIA_Gy_CCA_ValidityTime(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
1879 template (value) octetstring sess_id,
1880 template (value) DCC_NONE_CC_Request_Type req_type,
1881 template (value) AVP_Unsigned32 req_num,
1882 uint32_t validity_time)
1883:= ts_DIAMETER(flags:='01000000'B, cmd_code:=Credit_Control,
1884 app_id:=int2oct(c_DIAMETER_CREDIT_CONTROL_AID, 4), hbh_id:=hbh_id, ete_id:=ete_id,
1885 avps := {
1886 ts_AVP_SessionId(sess_id),
1887 ts_AVP_ResultCode(DIAMETER_SUCCESS),
1888 ts_AVP_OriginHost("ocs.localdomain"),
1889 ts_AVP_OriginRealm("localdomain"),
1890 ts_AVP_AuthAppId(int2oct(c_DIAMETER_CREDIT_CONTROL_AID, 4)),
1891 ts_AVP_CcReqType(req_type),
1892 ts_AVP_CcReqNum(req_num),
1893 ts_AVP_Multiple_Services_Credit_Control({
1894 ts_AVP_Validity_Time(validity_time),
1895 ts_AVP_Granted_Service_Unit({
1896 //ts_AVP_CC_Time(validity_time*2),
1897 ts_AVP_CC_Total_Octets(1000)
1898 })
1899 })
1900 //,
1901 // qos
1902 // default eps bearer qos
1903 // supported features
1904 // origin
1905 });
Pau Espin Pedrol52562c92022-05-23 15:45:46 +02001906/* Same as ts_DIA_Gy_CCA_ValidityTime, but with extra AVP to grant access for limited amount of octets */
1907template (value) PDU_DIAMETER
1908ts_DIA_Gy_CCA_ValidityTimeVolumeThreshold(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
1909 template (value) octetstring sess_id,
1910 template (value) DCC_NONE_CC_Request_Type req_type,
1911 template (value) AVP_Unsigned32 req_num,
1912 uint32_t validity_time, uint32_t volume_threhsold)
1913:= ts_DIAMETER(flags:='01000000'B, cmd_code:=Credit_Control,
1914 app_id:=int2oct(c_DIAMETER_CREDIT_CONTROL_AID, 4), hbh_id:=hbh_id, ete_id:=ete_id,
1915 avps := {
1916 ts_AVP_SessionId(sess_id),
1917 ts_AVP_ResultCode(DIAMETER_SUCCESS),
1918 ts_AVP_OriginHost("ocs.localdomain"),
1919 ts_AVP_OriginRealm("localdomain"),
1920 ts_AVP_AuthAppId(int2oct(c_DIAMETER_CREDIT_CONTROL_AID, 4)),
1921 ts_AVP_CcReqType(req_type),
1922 ts_AVP_CcReqNum(req_num),
1923 ts_AVP_Multiple_Services_Credit_Control({
1924 ts_AVP_Validity_Time(validity_time),
1925 ts_AVP_Granted_Service_Unit({
1926 ts_AVP_CC_Total_Octets(volume_threhsold*100)
1927 }),
1928 ts_AVP_3GPP_VolumeQuotaThreshold(volume_threhsold)
1929 })
1930 //,
1931 // qos
1932 // default eps bearer qos
1933 // supported features
1934 // origin
1935 });
Harald Weltef4001512020-04-26 21:48:34 +02001936
Vadim Yanitskiyf28b2552021-12-11 03:49:14 +03001937/* RFC 6733, section 5.5.1 "Device-Watchdog-Request" */
1938template (value) PDU_DIAMETER
1939ts_DIA_DWR(template (value) OCTET4 state_id := '00000000'O,
1940 template (value) charstring orig_host := "ttcn3.localdomain",
1941 template (value) charstring orig_realm := "localdomain",
1942 template (value) UINT32 hbh_id := '00000000'O,
1943 template (value) UINT32 ete_id := '00000000'O) :=
1944 ts_DIAMETER(flags := '10000000'B,
1945 cmd_code := Device_Watchdog,
1946 app_id := '00000000'O,
1947 hbh_id := hbh_id,
1948 ete_id := ete_id,
1949 avps := {
1950 ts_AVP_OriginHost(orig_host),
1951 ts_AVP_OriginRealm(orig_realm),
1952 ts_AVP_OriginStateId(state_id)
1953 });
1954template (present) PDU_DIAMETER
1955tr_DIA_DWR(template (present) OCTET4 state_id := ?,
1956 template (present) charstring orig_host := ?,
1957 template (present) charstring orig_realm := ?,
1958 template (present) UINT32 hbh_id := ?,
1959 template (present) UINT32 ete_id := ?) :=
1960 tr_DIAMETER(flags := '1???????'B,
1961 cmd_code := Device_Watchdog,
1962 app_id := '00000000'O,
1963 hbh_id := hbh_id,
1964 ete_id := ete_id,
1965 avps := superset(
1966 tr_AVP_OriginHost(orig_host),
Pau Espin Pedrol8dcb0612023-08-28 19:16:29 +02001967 tr_AVP_OriginRealm(orig_realm)
1968 /* tr_AVP_OriginStateId(state_id) is optional */
Vadim Yanitskiyf28b2552021-12-11 03:49:14 +03001969 ));
1970
1971/* RFC 6733, section 5.5.2 "Device-Watchdog-Answer" */
1972template (value) PDU_DIAMETER
1973ts_DIA_DWA(template (value) OCTET4 state_id := '00000000'O,
1974 template (value) charstring orig_host := "ttcn3.localdomain",
1975 template (value) charstring orig_realm := "localdomain",
1976 template (value) UINT32 hbh_id := '00000000'O,
1977 template (value) UINT32 ete_id := '00000000'O) :=
1978 ts_DIAMETER(flags := '00000000'B,
1979 cmd_code := Device_Watchdog,
1980 app_id := '00000000'O,
1981 hbh_id := hbh_id,
1982 ete_id := ete_id,
1983 avps := {
1984 ts_AVP_ResultCode(DIAMETER_SUCCESS),
1985 ts_AVP_OriginHost(orig_host),
1986 ts_AVP_OriginRealm(orig_realm),
1987 ts_AVP_OriginStateId(state_id)
1988 });
1989template (present) PDU_DIAMETER
1990tr_DIA_DWA(template (present) OCTET4 state_id := ?,
1991 template (present) charstring orig_host := ?,
1992 template (present) charstring orig_realm := ?,
1993 template (present) UINT32 hbh_id := ?,
1994 template (present) UINT32 ete_id := ?) :=
1995 tr_DIAMETER(flags := '0???????'B,
1996 cmd_code := Device_Watchdog,
1997 app_id := '00000000'O,
1998 hbh_id := hbh_id,
1999 ete_id := ete_id,
2000 avps := superset(
2001 tr_AVP_ResultCode(DIAMETER_SUCCESS),
2002 tr_AVP_OriginHost(orig_host),
Pau Espin Pedrol8dcb0612023-08-28 19:16:29 +02002003 tr_AVP_OriginRealm(orig_realm)
2004 /* tr_AVP_OriginStateId(state_id) is optional */
Vadim Yanitskiyf28b2552021-12-11 03:49:14 +03002005 ));
2006
Pau Espin Pedrol8fa22842022-05-20 14:47:55 +02002007function f_DIAMETER_get_avp(PDU_DIAMETER pdu, template (present) AVP_Code avp_code)
2008return template (omit) AVP
2009{
2010 var integer i;
2011
2012 for (i := 0; i < lengthof(pdu.avps); i := i+1) {
2013 if (not ispresent(pdu.avps[i].avp)) {
2014 continue;
2015 }
2016 var AVP_Header hdr := pdu.avps[i].avp.avp_header;
2017 if (match(hdr.avp_code, avp_code)) {
2018 return pdu.avps[i].avp;
2019 }
2020 }
2021 return omit;
2022}
2023function f_DIAMETER_get_avp_or_fail(PDU_DIAMETER pdu, template (present) AVP_Code avp_code)
2024return AVP
2025{
2026 var template (omit) AVP avp;
2027 avp := f_DIAMETER_get_avp(pdu, avp_code);
2028 if (istemplatekind(avp, "omit")) {
2029 Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
2030 log2str("AVP ", avp_code, " not found in ", pdu));
2031 }
2032 return valueof(avp);
2033}
2034
2035function f_AVP_Grouped_get_avp(AVP_Grouped avp_grp, template (present) AVP_Code avp_code)
2036return template (omit) AVP
2037{
2038 var integer i;
2039
2040 for (i := 0; i < lengthof(avp_grp); i := i+1) {
2041 if (not ispresent(avp_grp[i].avp)) {
2042 continue;
2043 }
2044 var AVP_Header hdr := avp_grp[i].avp.avp_header;
2045 if (match(hdr.avp_code, avp_code)) {
2046 return avp_grp[i].avp;
2047 }
2048 }
2049 return omit;
2050}
2051function f_AVP_Grouped_get_avp_or_fail(AVP_Grouped avp_grp, template (present) AVP_Code avp_code)
2052return AVP
2053{
2054 var template (omit) AVP avp;
2055 avp := f_AVP_Grouped_get_avp(avp_grp, avp_code);
2056 if (istemplatekind(avp, "omit")) {
2057 Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
2058 log2str("AVP ", avp_code, " not found in ", avp_grp));
2059 }
2060 return valueof(avp);
2061}
2062
2063function f_validate_gy_cc_report(PDU_DIAMETER rx_dia, template (present) DCA_3GPP_Reporting_Reason repreason_exp := ?,
2064 template (present) integer cc_time_exp := ?,
2065 template (present) integer cc_in_oct_exp := ?,
2066 template (present) integer cc_out_oct_exp := ?)
2067{
2068 var AVP multi_services_cc, used_service_unit;
2069 var AVP_Grouped multi_services_cc_data, used_service_unit_data;
Pau Espin Pedrolcba0f6d2022-05-24 13:49:46 +02002070 var template (omit) AVP repreason_tpl;
Pau Espin Pedrol8fa22842022-05-20 14:47:55 +02002071 var AVP repreason, cc_time, cc_in_oct, cc_out_oct;
2072
2073 multi_services_cc := f_DIAMETER_get_avp_or_fail(rx_dia, c_AVP_Code_DCC_NONE_Multiple_Services_Credit_Control);
2074 multi_services_cc_data := valueof(multi_services_cc.avp_data.avp_DCC_NONE_Multiple_Services_Credit_Control);
2075
Pau Espin Pedrolcba0f6d2022-05-24 13:49:46 +02002076 used_service_unit := f_AVP_Grouped_get_avp_or_fail(multi_services_cc_data, c_AVP_Code_DCC_NONE_Used_Service_Unit);
2077 used_service_unit_data := valueof(used_service_unit.avp_data.avp_DCC_NONE_Used_Service_Unit);
2078
2079 /* Reporting-Reason can be either inside Multiple-Services-Credit-Control or inside Used-Service-Unit */
2080 repreason_tpl := f_AVP_Grouped_get_avp(multi_services_cc_data, c_AVP_Code_DCA_3GPP_Reporting_Reason);
2081 if (istemplatekind(repreason_tpl, "omit")) {
2082 repreason := f_AVP_Grouped_get_avp_or_fail(used_service_unit_data, c_AVP_Code_DCA_3GPP_Reporting_Reason);
2083 } else {
2084 repreason := valueof(repreason_tpl);
2085 }
Pau Espin Pedrol8fa22842022-05-20 14:47:55 +02002086 if (not match(repreason.avp_data.avp_DCA_3GPP_Reporting_Reason, repreason_exp)) {
2087 Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
2088 log2str("3GPP-Reporting-Reason mismatch ", repreason, " vs exp ", repreason_exp));
2089 }
2090
Pau Espin Pedrol8fa22842022-05-20 14:47:55 +02002091 cc_time := f_AVP_Grouped_get_avp_or_fail(used_service_unit_data, c_AVP_Code_DCC_NONE_CC_Time);
2092 if (not match(oct2int(cc_time.avp_data.avp_DCC_NONE_CC_Time), cc_time_exp)) {
2093 Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
2094 log2str("3GPP-CC-Time mismatch ", cc_time, " vs exp ", cc_time_exp));
2095 }
2096
2097 cc_in_oct := f_AVP_Grouped_get_avp_or_fail(used_service_unit_data, c_AVP_Code_DCC_NONE_CC_Input_Octets);
2098 if (not match(oct2int(cc_in_oct.avp_data.avp_DCC_NONE_CC_Input_Octets), cc_in_oct_exp)) {
2099 Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
2100 log2str("3GPP-CC-Input-Octets mismatch ", cc_in_oct, " vs exp ", cc_in_oct_exp));
2101 }
2102
2103 cc_out_oct := f_AVP_Grouped_get_avp_or_fail(used_service_unit_data, c_AVP_Code_DCC_NONE_CC_Output_Octets);
2104 if (not match(oct2int(cc_out_oct.avp_data.avp_DCC_NONE_CC_Output_Octets), cc_out_oct_exp)) {
2105 Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
2106 log2str("3GPP-CC-Output-Octets mismatch ", cc_out_oct, " vs exp ", cc_out_oct_exp));
2107 }
2108}
2109
Pau Espin Pedrol462f3df2023-10-16 18:10:55 +02002110
2111/*****************************
2112 * Cx, Dx, 3GPP TS 29.229
2113 *****************************/
2114/* SIP-Auth-Data-Item, 3GPP TS 29.229 6.3.8 */
2115template (present) GenericAVP tr_AVP_3GPP_SIPNumAuthDataItems(template (present) uint32_t num := ?) := {
2116 avp := {
2117 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Number_Auth_Items),
2118 avp_data := {
2119 avp_CxDx_3GPP_SIP_Number_Auth_Items := int2oct_tmpl(num, 4) /* CxDx_3GPP_SIP_Number_Auth_Items */
2120 }
2121 }
2122}
2123template (value) GenericAVP ts_AVP_3GPP_SIPNumAuthDataItems(uint32_t num) := {
2124 avp := {
2125 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Number_Auth_Items),
2126 avp_data := {
2127 avp_CxDx_3GPP_SIP_Number_Auth_Items := int2oct(num, 4) /* CxDx_3GPP_SIP_Number_Auth_Items */
2128 }
2129 }
2130}
2131
2132/* SIP-Authentication-Scheme, 3GPP TS 29.229 6.3.9 */
2133template (present) GenericAVP tr_AVP_3GPP_SIPAuthScheme(template (present) CxDx_3GPP_SIP_Authentication_Scheme scheme := ?) := {
2134 avp := {
2135 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Authentication_Scheme),
2136 avp_data := {
2137 avp_CxDx_3GPP_SIP_Authentication_Scheme := scheme
2138 }
2139 }
2140}
2141template (value) GenericAVP ts_AVP_3GPP_SIPAuthScheme(template (value) CxDx_3GPP_SIP_Authentication_Scheme scheme) := {
2142 avp := {
2143 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Authentication_Scheme),
2144 avp_data := {
2145 avp_CxDx_3GPP_SIP_Authentication_Scheme := scheme
2146 }
2147 }
2148}
2149
2150/* SIP-Authenticate, 3GPP TS 29.229 6.3.10 */
2151template (present) GenericAVP tr_AVP_3GPP_SIPAuthenticate(template (present) CxDx_3GPP_SIP_Authenticate rand_autn_concatenated := ?) := {
2152 avp := {
2153 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Authenticate),
2154 avp_data := {
2155 avp_CxDx_3GPP_SIP_Authenticate := rand_autn_concatenated
2156 }
2157 }
2158}
2159template (value) GenericAVP ts_AVP_3GPP_SIPAuthenticate(template (value) CxDx_3GPP_SIP_Authenticate rand_autn_concatenated) := {
2160 avp := {
2161 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Authenticate),
2162 avp_data := {
2163 avp_CxDx_3GPP_SIP_Authenticate := rand_autn_concatenated
2164 }
2165 }
2166}
2167
2168/* SIP-Authorization, 3GPP TS 29.229 6.3.11 */
2169template (present) GenericAVP tr_AVP_3GPP_SIPAuthorization(template (present) CxDx_3GPP_SIP_Authorization rand_autn_concatenated := ?) := {
2170 avp := {
2171 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Authorization),
2172 avp_data := {
2173 avp_CxDx_3GPP_SIP_Authorization := rand_autn_concatenated
2174 }
2175 }
2176}
2177template (value) GenericAVP ts_AVP_3GPP_SIPAuthorization(template (value) CxDx_3GPP_SIP_Authorization rand_autn_concatenated) := {
2178 avp := {
2179 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Authorization),
2180 avp_data := {
2181 avp_CxDx_3GPP_SIP_Authorization := rand_autn_concatenated
2182 }
2183 }
2184}
2185
2186/* SIP-Authentication-Context, 3GPP TS 29.229 6.3.12 */
2187template (present) GenericAVP tr_AVP_3GPP_SIPAuthContext(template (present) CxDx_3GPP_SIP_Authentication_Context val := ?) := {
2188 avp := {
2189 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Authentication_Context),
2190 avp_data := {
2191 avp_CxDx_3GPP_SIP_Authentication_Context := val
2192 }
2193 }
2194}
2195template (value) GenericAVP ts_AVP_3GPP_SIPAuthContext(template (value) CxDx_3GPP_SIP_Authentication_Context val) := {
2196 avp := {
2197 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Authentication_Context),
2198 avp_data := {
2199 avp_CxDx_3GPP_SIP_Authentication_Context := val
2200 }
2201 }
2202}
2203
2204/* SIP-Item-Number, 3GPP TS 29.229 6.3.14 */
2205template (present) GenericAVP tr_AVP_3GPP_SIPItemNumber(template (present) uint32_t num := ?) := {
2206 avp := {
2207 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Item_Number),
2208 avp_data := {
2209 avp_CxDx_3GPP_SIP_Item_Number := int2oct_tmpl(num, 4) /* CxDx_3GPP_SIP_Item_Number */
2210 }
2211 }
2212}
2213template (value) GenericAVP ts_AVP_3GPP_SIPItemNumber(uint32_t num) := {
2214 avp := {
2215 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Item_Number),
2216 avp_data := {
2217 avp_CxDx_3GPP_SIP_Item_Number := int2oct(num, 4) /* CxDx_3GPP_SIP_Item_Number */
2218 }
2219 }
2220}
2221
2222/* Confidentiality-Key, 3GPP TS 29.229 6.3.27 */
2223template (present) GenericAVP tr_AVP_3GPP_ConfidentialityKey(template (present) CxDx_3GPP_Confidentiality_Key ckey := ?) := {
2224 avp := {
2225 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_Confidentiality_Key),
2226 avp_data := {
2227 avp_CxDx_3GPP_Confidentiality_Key := ckey
2228 }
2229 }
2230}
2231template (value) GenericAVP ts_AVP_3GPP_ConfidentialityKey(template (value) CxDx_3GPP_Confidentiality_Key ckey) := {
2232 avp := {
2233 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_Confidentiality_Key),
2234 avp_data := {
2235 avp_CxDx_3GPP_Confidentiality_Key := ckey
2236 }
2237 }
2238}
2239
2240/* Inegrity-Key, 3GPP TS 29.229 6.3.28 */
2241template (present) GenericAVP tr_AVP_3GPP_IntegrityKey(template (present) CxDx_3GPP_Integrity_Key ckey := ?) := {
2242 avp := {
2243 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_Integrity_Key),
2244 avp_data := {
2245 avp_CxDx_3GPP_Integrity_Key := ckey
2246 }
2247 }
2248}
2249template (value) GenericAVP ts_AVP_3GPP_IntegrityKey(template (value) CxDx_3GPP_Integrity_Key ckey) := {
2250 avp := {
2251 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_Integrity_Key),
2252 avp_data := {
2253 avp_CxDx_3GPP_Integrity_Key := ckey
2254 }
2255 }
2256}
2257
Harald Welted27ab242019-07-26 13:45:18 +02002258}