blob: adf4ee6750a477bb92af3a17216db4f7a7023cea [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;
14
15/* https://www.iana.org/assignments/aaa-parameters/aaa-parameters.xhtml#aaa-parameters-4 */
16type enumerated DIAMETER_Resultcode {
17 /* Informational */
18 DIAMETER_MULTI_ROUND_AUTH (1001),
19
20 /* Success */
21 DIAMETER_SUCCESS (2001),
22 DIAMETER_LIMITED_SUCCESS (2002),
23 DIAMETER_FIRST_REGISTRATION (2003),
24 DIAMETER_SUBSEQUENT_REGISTRATION (2004),
25 DIAMETER_UNREGISTERED_SERVICE (2005),
26 DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED (2006),
27 DIAMETER_SERVER_SELECTION (2007),
28 DIAMETER_SUCCESS_AUTH_SENT_SERVER_NOT_STORED (2008),
29 DIAMETER_SUCCESS_RELOCATE_HA (2009),
30
31 /* Protocol Errors */
32 DIAMETER_COMMAND_UNSUPPORTED (3001),
33 DIAMETER_UNABLE_TO_DELIVER (3002),
34 DIAMETER_REALM_NOT_SERVED (3003),
35 DIAMETER_TOO_BUSY (3004),
36 DIAMETER_LOOP_DETECTED (3005),
37 DIAMETER_REDIRECT_INDICATION (3006),
38 DIAMETER_APPLICATION_UNSUPPORTED (3007),
39 DIAMETER_INVALID_HDR_BITS (3008),
40 DIAMETER_INVALID_AVP_BITS (3009),
41 DIAMETER_UNKNOWN_PEER (3010),
42 DIAMETER_REALM_REDIRECT_INDICATION (3011),
43
44 /* Transient Failures */
45 DIAMETER_AUTHENTICATION_REJECTED (4001),
46 DIAMETER_OUT_OF_SPACE (4002),
47 ELECTION_LOST (4003),
48 DIAMETER_ERROR_MIP_REPLY_FAILURE (4005),
49 DIAMETER_ERROR_HA_NOT_AVAILABLE (4006),
50 DIAMETER_ERROR_BAD_KEY (4007),
51 DIAMETER_ERROR_MIP_FILTER_NOT_SUPPORTED (4008),
52 DIAMETER_END_USER_SERVICE_DENIED (4010),
53 DIAMETER_CREDIT_CONTROL_NOT_APPLICABLE (4011),
54 DIAMETER_CREDIT_LIMIT_REACHED (4012),
55 DIAMETER_USER_NAME_REQUIRED (4013),
56 RESOURCE_FAILURE (4014),
57
58 DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE (4181),
59 DIAMETER_ERROR_CAMEL_SUBSCRIPTION_PRESENT (4882),
60
61 /* Permanent Failure */
62 DIAMETER_AVP_UNSUPPORTED (5001),
63 DIAMETER_UNKNOWN_SESSION_ID (5002),
64 DIAMETER_AUTHORIZATION_REJECTED (5003),
65 DIAMETER_INVALID_AVP_VALUE (5004),
66 DIAMETER_MISSING_AVP (5005),
67 DIAMETER_RESOURCES_EXCEEDED (5006),
68 DIAMETER_CONTRADICTING_AVPS (5007),
69 DIAMETER_AVP_NOT_ALLOWED (5008),
70 DIAMETER_AVP_OCCURS_TOO_MANY_TIMES (5009),
71 DIAMETER_NO_COMMON_APPLICATION (5010),
72 DIAMETER_UNSUPPORTED_VERSION (5011),
73 DIAMETER_UNABLE_TO_COMPLY (5012),
74 DIAMETER_INVALID_BIT_IN_HEADER (5013),
75 DIAMETER_INVALID_AVP_LENGTH (5014),
76 DIAMETER_INVALID_MESSAGE_LENGTH (5015),
77 DIAMETER_INVALID_AVP_BIT_COMBO (5016),
78 DIAMETER_NO_COMMON_SECURITY (5017),
79 DIAMETER_RADIUS_AVP_UNTRANSLATABLE (5018),
80 DIAMETER_ERROR_NO_FOREIGN_HA_SERVICE (5024),
81 DIAMETER_ERROR_END_TO_END_MIP_KEY_ENCRYPTION (5025),
82 DIAMETER_USER_UNKNOWN (5030),
83 DIAMETER_RATING_FAILED (5031),
84 DIAMETER_ERROR_USER_UNKNOWN (5032),
85 DIAMETER_ERROR_IDENTITIES_DONT_MATCH (5033),
86 DIAMETER_ERROR_IDENTITY_NOT_REGISTERED (5034),
87 DIAMETER_ERROR_ROAMING_NOT_ALLOWED (5035),
88 DIAMETER_ERROR_IDENTITY_ALREADY_REGISTERED (5036),
89 DIAMETER_ERROR_AUTH_SCHEME_NOT_SUPPORTED (5037),
90 DIAMETER_ERROR_IN_ASSIGNMENT_TYPE (5038),
91 DIAMETER_ERROR_TOO_MUCH_DATA (5039),
92 DIAMETER_ERROR_NOT_SUPPORTED_USER_DATA (5040),
93 DIAMETER_ERROR_MIP6_AUTH_MODE (5041),
94 UNKNOWN_BINDING_TEMPLATE_NAME (5042),
95 BINDING_FAILURE (5043),
96 MAX_BINDINGS_SET_FAILURE (5044),
97 MAXIMUM_BINDINGS_REACHED_FOR_ENDPOINT (5045),
98 SESSION_EXISTS (5046),
99 INSUFFICIENT_CLASSIFIERS (5047),
100 DIAMETER_ERROR_EAP_CODE_UNKNOWN (5048)
101};
102
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +0100103/* Gy : 3GPP TS 32.299 7.1.6, RFC4006 3.1 */
104const uint32_t c_DIAMETER_CREDIT_CONTROL_AID := 4;
Harald Welted27ab242019-07-26 13:45:18 +0200105/* 3GPP TS 29.272 Section 7.1.8 */
Harald Weltef9fb63e2020-04-26 18:07:19 +0200106const uint32_t c_DIAMETER_3GPP_Gx_AID := 16777238;
Harald Welted27ab242019-07-26 13:45:18 +0200107const uint32_t c_DIAMETER_3GPP_S6_AID := 16777251;
108const uint32_t c_DIAMETER_3GPP_S13_AID := 16777252;
109const uint32_t c_DIAMETER_3GPP_S7_AID := 16777308;
110
Vadim Yanitskiy0e8f5162021-12-15 05:00:32 +0300111const octetstring c_def_sess_id := char2oct("ttcn3.session");
112
Harald Welted27ab242019-07-26 13:45:18 +0200113template (value) PDU_DIAMETER
114ts_DIAMETER(template (value) BIT8 flags,
115 template (value) Command_Code cmd_code,
116 template (value) OCTET4 app_id := '00000000'O,
Vadim Yanitskiy00720bd2021-12-12 02:05:08 +0300117 template (value) UINT32 hbh_id := '00000000'O,
118 template (value) UINT32 ete_id := '00000000'O,
Harald Welted27ab242019-07-26 13:45:18 +0200119 template (value) AVP_list avps := {}
120) := {
121 version := 1,
122 message_length := 0, /* overwritten */
123 RPETxxxx := flags,
124 command_code := cmd_code,
125 application_id := app_id,
126 hop_by_hop_id := hbh_id,
127 end_to_end_id := ete_id,
128 avps := avps
129}
130template (present) PDU_DIAMETER
131tr_DIAMETER(template (present) BIT8 flags := ?,
132 template (present) Command_Code cmd_code := ?,
133 template (present) OCTET4 app_id := ?,
134 template (present) UINT32 hbh_id := ?,
135 template (present) UINT32 ete_id := ?,
136 template (present) AVP_list avps := ?) := {
137 version := 1,
138 message_length := ?,
139 RPETxxxx := flags,
140 command_code := cmd_code,
141 application_id := app_id,
142 hop_by_hop_id := hbh_id,
143 end_to_end_id := ete_id,
144 avps := avps
145}
146template (present) PDU_DIAMETER
147tr_DIAMETER_A(
148 template (present) Command_Code cmd_code := ?,
149 template (present) OCTET4 app_id := ?,
150 template (present) UINT32 hbh_id := ?,
151 template (present) UINT32 ete_id := ?,
152 template (present) AVP_list avps := ?) :=
153 tr_DIAMETER('0???????'B, cmd_code, app_id, hbh_id, ete_id, avps);
154template (present) PDU_DIAMETER
155tr_DIAMETER_R(
156 template (present) Command_Code cmd_code := ?,
157 template (present) OCTET4 app_id := ?,
158 template (present) UINT32 hbh_id := ?,
159 template (present) UINT32 ete_id := ?,
160 template (present) AVP_list avps := ?) :=
161 tr_DIAMETER('1???????'B, cmd_code, app_id, hbh_id, ete_id, avps);
162
163
164template (value) AVP_Header
165ts_DIA_Hdr(template (value) AVP_Code avp_code,
166 template (value) BIT8 flags := '01000000'B) := {
167 avp_code := avp_code,
168 VMPxxxxx := flags,
169 avp_length := 0, /* overwritten */
170 vendor_id := omit
171}
172template (present) AVP_Header
173tr_DIA_Hdr(template (present) AVP_Code avp_code,
174 template (present) BIT8 flags := '0???????'B) := {
175 avp_code := avp_code,
176 VMPxxxxx := flags,
177 avp_length := ?, /* overwritten */
178 vendor_id := omit
179}
180
181template (value) AVP_Header
182ts_DIA_Hdr_3GPP(template (value) AVP_Code avp_code,
183 template (value) BIT8 flags := '11000000'B) := {
184 avp_code := avp_code,
185 VMPxxxxx := flags,
186 avp_length := 0, /* overwritten */
187 vendor_id := vendor_id_3GPP
188}
189template (present) AVP_Header
190tr_DIA_Hdr_3GPP(template (present) AVP_Code avp_code,
191 template (present) BIT8 flags := '1???????'B) := {
192 avp_code := avp_code,
193 VMPxxxxx := flags,
194 avp_length := ?, /* overwritten */
195 vendor_id := vendor_id_3GPP
196}
197
Pau Espin Pedrolb8cd34a2022-05-18 16:34:12 +0200198template (present) GenericAVP tr_AVP_SubcrIdType(template (present) DCC_NONE_Subscription_Id_Type t) := {
Harald Weltef9fb63e2020-04-26 18:07:19 +0200199 avp := {
200 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_Subscription_Id_Type),
201 avp_data := {
202 avp_DCC_NONE_Subscription_Id_Type := t
203 }
204 }
205}
Harald Welted27ab242019-07-26 13:45:18 +0200206
207template (value) GenericAVP ts_AVP_OriginHost(template (value) charstring host) := {
208 avp := {
209 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Origin_Host),
210 avp_data := {
211 avp_BASE_NONE_Origin_Host := host
212 }
213 }
214}
215template (present) GenericAVP tr_AVP_OriginHost(template (present) charstring host := ?) := {
216 avp := {
217 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Origin_Host),
218 avp_data := {
219 avp_BASE_NONE_Origin_Host := host
220 }
221 }
222}
223
224
225template (value) GenericAVP ts_AVP_OriginRealm(template (value) charstring realm) := {
226 avp := {
227 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Origin_Realm),
228 avp_data := {
229 avp_BASE_NONE_Origin_Realm := realm
230 }
231 }
232}
233template (present) GenericAVP tr_AVP_OriginRealm(template (present) charstring realm := ?) := {
234 avp := {
235 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Origin_Realm),
236 avp_data := {
237 avp_BASE_NONE_Origin_Realm := realm
238 }
239 }
240}
241
242
243template (value) GenericAVP ts_AVP_OriginStateId(template (value) OCTET4 state_id) := {
244 avp := {
245 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Origin_State_Id),
246 avp_data := {
247 avp_BASE_NONE_Origin_State_Id := state_id
248 }
249 }
250}
Vadim Yanitskiyf28b2552021-12-11 03:49:14 +0300251template (present) GenericAVP tr_AVP_OriginStateId(template (present) OCTET4 state_id := ?) := {
252 avp := {
253 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Origin_State_Id),
254 avp_data := {
255 avp_BASE_NONE_Origin_State_Id := state_id
256 }
257 }
258}
Harald Welted27ab242019-07-26 13:45:18 +0200259
260template (value) GenericAVP ts_AVP_HostIpAddr(template (value) OCTET4 ipv4_addr) := {
261 avp := {
262 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Host_IP_Address),
263 avp_data := {
264 avp_BASE_NONE_Host_IP_Address := {
265 address_type := IP,
266 address_data := ipv4_addr
267 }
268 }
269 }
270}
271
272template (value) GenericAVP ts_AVP_VendorId(Vendor_Id vendor_id) := {
273 avp := {
274 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Vendor_Id, '00000000'B),
275 avp_data := {
276 avp_BASE_NONE_Vendor_Id := int2oct(enum2int(vendor_id), 4)
277 }
278 }
279}
280
281template (value) GenericAVP ts_AVP_ProductName(charstring name) := {
282 avp := {
283 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Product_Name, '00000000'B),
284 avp_data := {
285 avp_BASE_NONE_Product_Name := char2oct(name)
286 }
287 }
288}
289
290template (value) GenericAVP ts_AVP_FwRevision(octetstring fw_version) := {
291 avp := {
292 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Firmware_Revision, '00000000'B),
293 avp_data := {
294 avp_BASE_NONE_Firmware_Revision := fw_version
295 }
296 }
297}
298
299template (value) GenericAVP ts_AVP_InbSecId(template (value) OCTET4 inb_sec_id) := {
300 avp := {
301 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Inband_Security_Id),
302 avp_data := {
303 avp_BASE_NONE_Inband_Security_Id := inb_sec_id
304 }
305 }
306}
307
308template (value) GenericAVP ts_AVP_VendorSpecAppId(Vendor_Id vendor_id, uint32_t auth_app_id) := {
309 avp := {
310 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Vendor_Specific_Application_Id),
311 avp_data := {
312 avp_BASE_NONE_Vendor_Specific_Application_Id := {
313 {
314 avp := {
315 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Vendor_Id),
316 avp_data := {
317 avp_BASE_NONE_Vendor_Id := int2oct(enum2int(vendor_id), 4)
318 }
319 }
320 }, {
321 avp := {
322 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Auth_Application_Id),
323 avp_data := {
324 avp_BASE_NONE_Auth_Application_Id := int2oct(auth_app_id, 4)
325 }
326 }
327 }
328 }
329 }
330 }
331}
332
333template (value) GenericAVP ts_AVP_AuthAppId(template (value) OCTET4 auth_app_id) := {
334 avp := {
335 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Auth_Application_Id),
336 avp_data := {
337 avp_BASE_NONE_Auth_Application_Id := auth_app_id
338 }
339 }
340}
Harald Weltef4001512020-04-26 21:48:34 +0200341template (present) GenericAVP tr_AVP_AuthAppId(template (present) OCTET4 auth_app_id := ?) := {
342 avp := {
343 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Auth_Application_Id),
344 avp_data := {
345 avp_BASE_NONE_Auth_Application_Id := auth_app_id
346 }
347 }
348}
349
350template (value) GenericAVP ts_AVP_CcReqType(template (value) DCC_NONE_CC_Request_Type r) := {
351 avp := {
352 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_CC_Request_Type),
353 avp_data := {
354 avp_DCC_NONE_CC_Request_Type := r
355 }
356 }
357}
358template (present) GenericAVP tr_AVP_CcReqType(template (present) DCC_NONE_CC_Request_Type r := ?) := {
359 avp := {
360 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_CC_Request_Type),
361 avp_data := {
362 avp_DCC_NONE_CC_Request_Type := r
363 }
364 }
365}
366
367template (value) GenericAVP ts_AVP_CcReqNum(template (value) AVP_Unsigned32 n) := {
368 avp := {
369 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_CC_Request_Number),
370 avp_data := {
371 avp_DCC_NONE_CC_Request_Number := n
372 }
373 }
374}
375template (present) GenericAVP tr_AVP_CcReqNum(template (present) AVP_Unsigned32 n := ?) := {
376 avp := {
377 avp_header := tr_DIA_Hdr(c_AVP_Code_DCC_NONE_CC_Request_Number),
378 avp_data := {
379 avp_DCC_NONE_CC_Request_Number := n
380 }
381 }
382}
383
384
385
Harald Welted27ab242019-07-26 13:45:18 +0200386
387template (value) GenericAVP ts_AVP_SuppVendorIdRaw(uint32_t vendor_id) := {
388 avp := {
389 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Supported_Vendor_Id),
390 avp_data := {
391 avp_BASE_NONE_Supported_Vendor_Id := int2oct(vendor_id, 4)
392 }
393 }
394}
395template (value) GenericAVP ts_AVP_SuppVendorId(Vendor_Id vendor_id) :=
396 ts_AVP_SuppVendorIdRaw(enum2int(vendor_id));
397
398template (value) GenericAVP ts_AVP_ResultCode(DIAMETER_Resultcode res_code) := {
399 avp := {
400 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Result_Code),
401 avp_data := {
402 avp_BASE_NONE_Result_Code := int2oct(enum2int(res_code), 4)
403 }
404 }
405}
Vadim Yanitskiyf28b2552021-12-11 03:49:14 +0300406template (present) GenericAVP tr_AVP_ResultCode(DIAMETER_Resultcode res_code) := {
407 avp := {
408 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Result_Code),
409 avp_data := {
410 avp_BASE_NONE_Result_Code := int2oct(enum2int(res_code), 4)
411 }
412 }
413}
Harald Welted27ab242019-07-26 13:45:18 +0200414
415template (value) GenericAVP ts_AVP_AuthSessionState(template (value) BASE_NONE_Auth_Session_State ass := NO_STATE_MAINTAINED) := {
416 avp := {
417 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Auth_Session_State),
418 avp_data := {
419 avp_BASE_NONE_Auth_Session_State := ass
420 }
421 }
422}
423template (present) GenericAVP tr_AVP_AuthSessionState(template (present) BASE_NONE_Auth_Session_State ass := ?) := {
424 avp := {
425 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Auth_Session_State),
426 avp_data := {
427 avp_BASE_NONE_Auth_Session_State := ass
428 }
429 }
430}
431
432template (value) GenericAVP ts_AVP_SessionId(template (value) octetstring session_id) := {
433 avp := {
434 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Session_Id),
435 avp_data := {
436 avp_BASE_NONE_Session_Id := session_id
437 }
438 }
439}
440template (present) GenericAVP tr_AVP_SessionId(template (present) octetstring session_id := ?) := {
441 avp := {
442 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Session_Id),
443 avp_data := {
444 avp_BASE_NONE_Session_Id := session_id
445 }
446 }
447}
448
449/* 3.3 Destination Realm */
450template (value) GenericAVP ts_AVP_DestinationRealm(template (value) charstring dest_realm) := {
451 avp := {
452 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_Destination_Realm),
453 avp_data := {
454 avp_BASE_NONE_Destination_Realm := dest_realm
455 }
456 }
457}
458template (present) GenericAVP tr_AVP_DestinationRealm(template (present) charstring dest_realm := ?) := {
459 avp := {
460 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_Destination_Realm),
461 avp_data := {
462 avp_BASE_NONE_Destination_Realm := dest_realm
463 }
464 }
465}
466
467/* 8.14 User-Name */
468template (value) GenericAVP ts_AVP_UserName(template (value) octetstring uid) := {
469 avp := {
470 avp_header := ts_DIA_Hdr(c_AVP_Code_BASE_NONE_User_Name),
471 avp_data := {
472 avp_BASE_NONE_User_Name := uid
473 }
474 }
475}
476template (present) GenericAVP tr_AVP_UserName(template (present) octetstring uid := ?) := {
477 avp := {
478 avp_header := tr_DIA_Hdr(c_AVP_Code_BASE_NONE_User_Name),
479 avp_data := {
480 avp_BASE_NONE_User_Name := uid
481 }
482 }
483}
484template (value) GenericAVP ts_AVP_UserNameImsi(hexstring imsi) := ts_AVP_UserName(char2oct(hex2str(imsi)));
485template (present) GenericAVP tr_AVP_UserNameImsi(hexstring imsi) := tr_AVP_UserName(char2oct(hex2str(imsi)));
486
487
488
489/* TS 29.262 7.3.53 RAND */
490template (value) GenericAVP ts_AVP_RAND(template (value) octetstring rand) := {
491 avp := {
492 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_RAND),
493 avp_data := {
494 avp_AAA_3GPP_RAND := rand
495 }
496 }
497}
498
499/* TS 29.262 7.3.54 XRES */
500template (value) GenericAVP ts_AVP_XRES(template (value) octetstring xres) := {
501 avp := {
502 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_XRES),
503 avp_data := {
504 avp_AAA_3GPP_XRES := xres
505 }
506 }
507}
508
509/* TS 29.262 7.3.55 XRES */
510template (value) GenericAVP ts_AVP_AUTN(template (value) octetstring autn) := {
511 avp := {
512 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_AUTN),
513 avp_data := {
514 avp_AAA_3GPP_AUTN := autn
515 }
516 }
517}
518
519/* TS 29.262 7.3.56 KASME */
520template (value) GenericAVP ts_AVP_KASME(template (value) octetstring kasme) := {
521 avp := {
522 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_KASME),
523 avp_data := {
524 avp_AAA_3GPP_KASME := kasme
525 }
526 }
527}
528
529/* TS 29.262 7.3.23 Item-Number */
530template (value) GenericAVP ts_AVP_ItemNumber(uint32_t num) := {
531 avp := {
532 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_KASME),
533 avp_data := {
534 avp_AAA_3GPP_Item_Number := int2oct(num, 4)
535 }
536 }
537}
538
539/* TS 29.262 7.3.18 E-UTRAN Vector */
540template (value) GenericAVP ts_AVP_EutranVec(uint32_t item_num, octetstring rand, octetstring xres,
541 octetstring autn, octetstring kasme) := {
542 avp := {
543 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_E_UTRAN_Vector),
544 avp_data := {
545 avp_AAA_3GPP_E_UTRAN_Vector := {
546 ts_AVP_ItemNumber(item_num),
547 ts_AVP_RAND(rand),
548 ts_AVP_XRES(xres),
549 ts_AVP_AUTN(autn),
550 ts_AVP_KASME(kasme)
551 }
552 }
553 }
554}
555
556/* TS 29.262 7.3.2 Subscription-Data */
557template (value) GenericAVP ts_AVP_3GPP_SubscriptionData(template (value) AVP_list content) := {
558 avp := {
559 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscription_Data),
560 avp_data := {
561 avp_AAA_3GPP_Subscription_Data := content
562 }
563 }
564}
Vadim Yanitskiy5e1bdc02021-12-12 02:33:59 +0300565template (present) GenericAVP
566tr_AVP_3GPP_SubscriptionData(template (present) AVP_list content := ?) := {
567 avp := {
568 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscription_Data),
569 avp_data := {
570 avp_AAA_3GPP_Subscription_Data := content
571 }
572 }
573}
Harald Welted27ab242019-07-26 13:45:18 +0200574
575
576/* TS 29.262 7.3.17 Authentication-Info */
577template (value) GenericAVP ts_AVP_3GPP_AuthInfo(template (value) AVP_list content) := {
578 avp := {
579 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Authentication_Info),
580 avp_data := {
581 avp_AAA_3GPP_Authentication_Info := content
582 }
583 }
584}
Vadim Yanitskiy446edae2021-12-12 04:33:08 +0300585template (present) GenericAVP
586tr_AVP_3GPP_AuthInfo(template (present) AVP_list content := ?) := {
587 avp := {
588 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Authentication_Info),
589 avp_data := {
590 avp_AAA_3GPP_Authentication_Info := content
591 }
592 }
593}
Harald Welted27ab242019-07-26 13:45:18 +0200594
595/* TS 29.262 7.3.9 Visited-PLMN-Id */
596template (value) GenericAVP ts_AVP_3GPP_VisitedPlmnId(template (value) octetstring id) := {
597 avp := {
598 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Visited_PLMN_Id),
599 avp_data := {
600 avp_AAA_3GPP_Visited_PLMN_Id := id
601 }
602 }
603}
604template (present) GenericAVP tr_AVP_3GPP_VisitedPlmnId(template (present) octetstring id := ?) := {
605 avp := {
606 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Visited_PLMN_Id),
607 avp_data := {
608 avp_AAA_3GPP_Visited_PLMN_Id := id
609 }
610 }
611}
612
613/* TS 29.262 7.3.13 RAT-Type */
614template (value) GenericAVP ts_AVP_3GPP_RatType(template (value) PCC_3GPP_RAT_Type rat_type) := {
615 avp := {
616 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_RAT_Type),
617 avp_data := {
618 avp_PCC_3GPP_RAT_Type := rat_type
619 }
620 }
621}
622template (present) GenericAVP tr_AVP_3GPP_RatType(template (present) PCC_3GPP_RAT_Type rat_type := ?) := {
623 avp := {
624 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_RAT_Type),
625 avp_data := {
626 avp_PCC_3GPP_RAT_Type := rat_type
627 }
628 }
629}
630
631/* TS 29.262 7.3.7 ULR-Flags */
632template (value) GenericAVP ts_AVP_3GPP_UlrFlags(template (value) UINT32 flags) := {
633 avp := {
634 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULR_Flags),
635 avp_data := {
636 avp_AAA_3GPP_ULR_Flags := flags
637 }
638 }
639}
640template (present) GenericAVP tr_AVP_3GPP_UlrFlags(template (present) UINT32 flags := ?) := {
641 avp := {
642 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULR_Flags),
643 avp_data := {
644 avp_AAA_3GPP_ULR_Flags := flags
645 }
646 }
647}
648
649/* TS 29.262 7.3.8 ULA-Flags */
650template (value) GenericAVP ts_AVP_3GPP_UlaFlags(template (value) UINT32 flags) := {
651 avp := {
652 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULA_Flags),
653 avp_data := {
654 avp_AAA_3GPP_ULA_Flags := flags
655 }
656 }
657}
658template (present) GenericAVP tr_AVP_3GPP_UlaFlags(template (present) UINT32 flags := ?) := {
659 avp := {
660 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_ULA_Flags),
661 avp_data := {
662 avp_AAA_3GPP_ULA_Flags := flags
663 }
664 }
665}
666
Harald Welte6effabb2020-02-18 21:39:59 +0100667
668
669template (value) GenericAVP ts_AVP_NumOfReqVectors(template (value) UINT32 num_req := '00000004'O) := {
670 avp := {
671 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Number_Of_Requested_Vectors),
672 avp_data := {
673 avp_AAA_3GPP_Number_Of_Requested_Vectors := num_req
674 }
675 }
676}
677
678template (value) GenericAVP ts_AVP_ImmReqPref(template (value) UINT32 par := '00000000'O) := {
679 avp := {
680 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Immediate_Response_Preferred),
681 avp_data := {
682 avp_AAA_3GPP_Immediate_Response_Preferred := par
683 }
684 }
685}
686
687
688/* 7.3.11 Requested-EUTRAN-Authentication-Info */
689template (value) GenericAVP ts_AVP_RequestedEutranAuthInfo(template (value) UINT32 num_vec := '00000004'O) := {
690 avp := {
691 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Requested_EUTRAN_Authentication_Info),
692 avp_data := {
693 avp_AAA_3GPP_Requested_EUTRAN_Authentication_Info := {
694 ts_AVP_NumOfReqVectors(num_vec),
695 ts_AVP_ImmReqPref('00000000'O)
696 }
697 }
698 }
699}
700
701
Harald Welted27ab242019-07-26 13:45:18 +0200702/* TS 29.262 7.3.27 Context-Identifier */
703template (value) GenericAVP ts_AVP_3GPP_ContextId(uint32_t ctx) := {
704 avp := {
705 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Context_Identifier),
706 avp_data := {
707 avp_AAA_3GPP_Context_Identifier := int2oct(ctx, 4)
708 }
709 }
710}
711
712/* Ts 29.262 7.3.29 Subscriber-Status */
713template (value) GenericAVP ts_AVP_3GPP_SubscriberStatus(template (value) AAA_3GPP_Subscriber_Status sts) := {
714 avp := {
715 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscriber_Status),
716 avp_data := {
717 avp_AAA_3GPP_Subscriber_Status := sts
718 }
719 }
720}
721
722template (value) GenericAVP ts_AVP_3GPP_SubscrRauTauTmr(uint32_t tmr) := {
723 avp := {
724 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Subscribed_Periodic_RAU_TAU_Timer),
725 avp_data := {
726 avp_AAA_3GPP_Subscribed_Periodic_RAU_TAU_Timer := int2oct(tmr, 4)
727 }
728 }
729}
730
731/* TS 29.262 7.3.33 All-APN-Configurations-Included-Indicator */
732template (value) GenericAVP ts_AVP_3GPP_AllApnConfigsIncl(template (value) AAA_3GPP_All_APN_Configurations_Included_Indicator ind := All_APN_CONFIGURATIONS_INCLUDED) := {
733 avp := {
734 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_All_APN_Configurations_Included_Indicator),
735 avp_data := {
736 avp_AAA_3GPP_All_APN_Configurations_Included_Indicator := ind
737 }
738 }
739}
740
741/* TS 29.262 7.3.34 APN-Configuration-Profile */
742template (value) GenericAVP ts_AVP_3GPP_ApnConfigProfile(template (value) AVP_list content) := {
743 avp := {
744 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration_Profile),
745 avp_data := {
746 avp_AAA_3GPP_APN_Configuration_Profile := content
747 }
748 }
749}
750
751/* TS 29.262 7.3.35 APN-Configuration */
752template (value) GenericAVP ts_AVP_3GPP_ApnConfig(uint32_t ctx, AAA_3GPP_PDN_Type pdn_type,
753 charstring apn) := {
754 avp := {
755 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_APN_Configuration_Profile),
756 avp_data := {
757 avp_AAA_3GPP_APN_Configuration := {
758 ts_AVP_3GPP_ContextId(ctx),
759 ts_AVP_3GPP_PdnType(pdn_type),
760 ts_AVP_3GPP_EpsSubscrQosProfile(1, 1),
761 ts_AVP_ServiceSelection(apn)
762 }
763 }
764 }
765}
766
767/* TS 29.262 7.3.36 Service-Selection (refers to RFC 5778) */
768template (value) GenericAVP ts_AVP_ServiceSelection(charstring apn) := {
769 avp := {
770 avp_header := ts_DIA_Hdr(c_AVP_Code_MIPv6_NONE_Service_Selection),
771 avp_data := {
772 avp_MIPv6_NONE_Service_Selection := char2oct(apn)
773 }
774 }
775}
776
777template (value) GenericAVP ts_AVP_3GPP_QosClassId(uint32_t id) := {
778 avp := {
779 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_QoS_Class_Identifier),
780 avp_data := {
781 avp_PCC_3GPP_QoS_Class_Identifier := int2oct(id, 4)
782 }
783 }
784}
785
786template (value) GenericAVP ts_AVP_3GPP_PriorityLevel(uint32_t prio) := {
787 avp := {
788 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_Priority_Level),
789 avp_data := {
790 avp_PCC_3GPP_Priority_Level := int2oct(prio, 4)
791 }
792 }
793}
794
795
796template (value) GenericAVP ts_AVP_3GPP_AllocRetenPrio(uint32_t prio) := {
797 avp := {
798 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_PCC_3GPP_Allocation_Retention_Priority),
799 avp_data := {
800 avp_PCC_3GPP_Allocation_Retention_Priority := {
801 ts_AVP_3GPP_PriorityLevel(prio)
802 /* pre-emption capability */
803 /* pre-emption vulnerability */
804 }
805 }
806 }
807}
808
809template (value) GenericAVP ts_AVP_3GPP_EpsSubscrQosProfile(uint32_t qos_class, uint32_t prio) := {
810 avp := {
811 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_EPS_Subscribed_QoS_Profile),
812 avp_data := {
813 avp_AAA_3GPP_EPS_Subscribed_QoS_Profile := {
814 ts_AVP_3GPP_QosClassId(qos_class),
815 ts_AVP_3GPP_AllocRetenPrio(prio)
816 }
817 }
818 }
819}
820
821
822/* TS 29.262 7.3.41 AMBR */
823template (value) GenericAVP ts_AVP_3GPP_AMBR(uint32_t ul, uint32_t dl) := {
824 avp := {
825 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_AMBR),
826 avp_data := {
827 avp_AAA_3GPP_AMBR := {
828 ts_AVP_3GPP_MaxReqBwUL(ul),
829 ts_AVP_3GPP_MaxReqBwDL(dl)
830 }
831 }
832 }
833}
834
835template (value) GenericAVP ts_AVP_3GPP_MaxReqBwUL(uint32_t bw) := {
836 avp := {
837 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_UL),
838 avp_data := {
839 avp_RX_3GPP_Max_Requested_Bandwidth_UL := int2oct(bw, 4)
840 }
841 }
842}
843
844template (value) GenericAVP ts_AVP_3GPP_MaxReqBwDL(uint32_t bw) := {
845 avp := {
846 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_RX_3GPP_Max_Requested_Bandwidth_DL),
847 avp_data := {
848 avp_RX_3GPP_Max_Requested_Bandwidth_DL := int2oct(bw, 4)
849 }
850 }
851}
852
853
854
855/* TS 29.262 7.3.62 PDN-Type */
856template (value) GenericAVP ts_AVP_3GPP_PdnType(template (value) AAA_3GPP_PDN_Type pdn_type) := {
857 avp := {
858 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_PDN_Type),
859 avp_data := {
860 avp_AAA_3GPP_PDN_Type := pdn_type
861 }
862 }
863}
864
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +0100865/* RFC4006 8.16 Multiple-Services-Credit-Control AVP */
866template (value) GenericAVP ts_AVP_Multiple_Services_Credit_Control(template (value) AVP_list content) := {
867 avp := {
868 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_Multiple_Services_Credit_Control),
869 avp_data := {
870 avp_DCC_NONE_Multiple_Services_Credit_Control := content
871 }
872 }
873}
874
875/* RFC4006 8.17 Granted-Service-Unit AVP */
876template (value) GenericAVP ts_AVP_Granted_Service_Unit(template (value) AVP_list content) := {
877 avp := {
878 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_Granted_Service_Unit),
879 avp_data := {
880 avp_DCC_NONE_Granted_Service_Unit := content
881 }
882 }
883}
884
885/* RFC4006 8.21 CC-Time AVP */
886template (value) GenericAVP ts_AVP_CC_Time(uint32_t cc_time_val) := {
887 avp := {
888 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_CC_Time),
889 avp_data := {
890 avp_DCC_NONE_CC_Time := int2oct(cc_time_val, 4)
891 }
892 }
893}
894
895/* RFC4006 8.23 CC-Total-Octets AVP */
896template (value) GenericAVP ts_AVP_CC_Total_Octets(uint64_t cc_total_octets_val) := {
897 avp := {
898 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_CC_Total_Octets),
899 avp_data := {
900 avp_DCC_NONE_CC_Total_Octets := int2oct(cc_total_octets_val, 8)
901 }
902 }
903}
904
905/* RFC4006 8.33 Validity-Time AVP */
906template (value) GenericAVP ts_AVP_Validity_Time(uint32_t validity_time_val) := {
907 avp := {
908 avp_header := ts_DIA_Hdr(c_AVP_Code_DCC_NONE_Validity_Time),
909 avp_data := {
910 avp_DCC_NONE_Validity_Time := int2oct(validity_time_val, 4)
911 }
912 }
913}
914
Harald Welted27ab242019-07-26 13:45:18 +0200915
916
917/* 5.3.2 Capabilities Exchange Answer */
918template (value) PDU_DIAMETER
Pau Espin Pedrol33b47492022-03-08 17:43:01 +0100919ts_DIA_CEA_AUTH_APP_ID(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
920 template (value) charstring origin_host,
921 template (value) charstring origin_realm,
922 template (value) octetstring host_ip, uint32_t auth_app_id)
923:= ts_DIAMETER(flags:='00000000'B, cmd_code:=Capabilities_Exchange, hbh_id:=hbh_id, ete_id:=ete_id,
924 avps := {
925 ts_AVP_ResultCode(DIAMETER_SUCCESS),
926 ts_AVP_OriginHost(origin_host),
927 ts_AVP_OriginRealm(origin_realm),
928 ts_AVP_HostIpAddr(host_ip),
929 ts_AVP_VendorId(vendor_id_3GPP),
930 ts_AVP_ProductName("TTCN-3 Testsuite"),
931 ts_AVP_OriginStateId('00000001'O),
932 ts_AVP_SuppVendorIdRaw(5535), /* 3GPP2 */
933 ts_AVP_SuppVendorId(vendor_id_3GPP),
934 ts_AVP_SuppVendorIdRaw(13019), /* ETSI */
Pau Espin Pedrol33b47492022-03-08 17:43:01 +0100935 ts_AVP_AuthAppId(int2oct(auth_app_id, 4)),
936 ts_AVP_InbSecId('00000000'O)
937 });
938template (value) PDU_DIAMETER
939ts_DIA_CEA_VENDOR_APP_ID(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
940 template (value) charstring origin_host,
941 template (value) charstring origin_realm,
942 template (value) octetstring host_ip, uint32_t vendor_app_id)
Harald Welted27ab242019-07-26 13:45:18 +0200943:= ts_DIAMETER(flags:='00000000'B, cmd_code:=Capabilities_Exchange, hbh_id:=hbh_id, ete_id:=ete_id,
944 avps := {
945 ts_AVP_ResultCode(DIAMETER_SUCCESS),
Harald Welte61f73d52020-04-26 21:41:12 +0200946 ts_AVP_OriginHost(origin_host),
947 ts_AVP_OriginRealm(origin_realm),
948 ts_AVP_HostIpAddr(host_ip),
Harald Welted27ab242019-07-26 13:45:18 +0200949 ts_AVP_VendorId(vendor_id_3GPP),
950 ts_AVP_ProductName("TTCN-3 Testsuite"),
951 ts_AVP_OriginStateId('00000001'O),
952 ts_AVP_SuppVendorIdRaw(5535), /* 3GPP2 */
953 ts_AVP_SuppVendorId(vendor_id_3GPP),
954 ts_AVP_SuppVendorIdRaw(13019), /* ETSI */
Harald Welted27ab242019-07-26 13:45:18 +0200955 ts_AVP_InbSecId('00000000'O),
Harald Welte61f73d52020-04-26 21:41:12 +0200956 ts_AVP_VendorSpecAppId(vendor_id_3GPP, vendor_app_id)
Harald Welted27ab242019-07-26 13:45:18 +0200957 });
Pau Espin Pedrol33b47492022-03-08 17:43:01 +0100958function f_ts_DIA_CEA(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
959 template (value) charstring origin_host,
960 template (value) charstring origin_realm,
961 template (value) octetstring host_ip, template (omit) uint32_t auth_app_id,
962 template (omit) uint32_t vendor_app_id)
963 return template (value) PDU_DIAMETER
964{
965 var template (value) PDU_DIAMETER diam_pdu;
966 if (istemplatekind(vendor_app_id, "omit")) {
967 diam_pdu := ts_DIA_CEA_AUTH_APP_ID(hbh_id, ete_id, origin_host, origin_realm, host_ip, valueof(auth_app_id));
968 } else {
969 diam_pdu := ts_DIA_CEA_VENDOR_APP_ID(hbh_id, ete_id, origin_host, origin_realm, host_ip, valueof(vendor_app_id));
970 }
971 return diam_pdu;
972}
Harald Welted27ab242019-07-26 13:45:18 +0200973
Harald Welte6effabb2020-02-18 21:39:59 +0100974
975template (value) PDU_DIAMETER
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +0300976ts_DIA_AIR(/* template (value) */ hexstring imsi,
977 template (value) octetstring sess_id := c_def_sess_id,
Vadim Yanitskiyb57ef872021-12-12 04:14:18 +0300978 template (value) charstring orig_host := "ttcn3.localdomain",
979 template (value) charstring orig_realm := "localdomain",
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +0300980 template (value) charstring dest_realm := "localdomain",
981 template (value) UINT32 hbh_id := '00000000'O,
982 template (value) UINT32 ete_id := '00000000'O) :=
Vadim Yanitskiy21fd7db2021-12-15 05:29:35 +0300983 ts_DIAMETER(flags := '11000000'B,
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +0300984 cmd_code := Authentication_Information,
Vadim Yanitskiy463d8262021-12-11 16:50:46 +0300985 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +0300986 hbh_id := hbh_id,
987 ete_id := ete_id,
988 avps := {
989 ts_AVP_SessionId(sess_id),
990 ts_AVP_DestinationRealm(dest_realm),
Vadim Yanitskiyb57ef872021-12-12 04:14:18 +0300991 ts_AVP_OriginHost(orig_host),
992 ts_AVP_OriginRealm(orig_realm),
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +0300993 ts_AVP_UserNameImsi(imsi),
994 /* Requested EUTRAN Auth Info */
995 ts_AVP_RequestedEutranAuthInfo,
Vadim Yanitskiyb57ef872021-12-12 04:14:18 +0300996 ts_AVP_AuthSessionState(NO_STATE_MAINTAINED),
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +0300997 ts_AVP_3GPP_VisitedPlmnId('11111F'O)
Harald Welte6effabb2020-02-18 21:39:59 +0100998 });
Harald Welted27ab242019-07-26 13:45:18 +0200999template (present) PDU_DIAMETER
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +03001000tr_DIA_AIR(/* template (present) */ hexstring imsi,
1001 template (present) octetstring sess_id := ?,
1002 template (present) charstring dest_realm := ?,
1003 template (present) UINT32 hbh_id := ?,
1004 template (present) UINT32 ete_id := ?) :=
Vadim Yanitskiy21fd7db2021-12-15 05:29:35 +03001005 tr_DIAMETER(flags := '1???????'B,
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +03001006 cmd_code := Authentication_Information,
1007 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1008 hbh_id := hbh_id, ete_id := ete_id,
1009 avps := superset(
1010 tr_AVP_SessionId(sess_id),
1011 tr_AVP_DestinationRealm(dest_realm),
1012 tr_AVP_UserNameImsi(imsi),
1013 tr_AVP_3GPP_VisitedPlmnId
Harald Welted27ab242019-07-26 13:45:18 +02001014 ));
1015
1016/* TS 29.262 5.2.3.1 + 7.2.6 Authentication Information Answer */
1017template (value) PDU_DIAMETER
Vadim Yanitskiy2dba4942021-12-11 15:46:30 +03001018ts_DIA_AIA(template (value) AVP_list auth_info_contents,
1019 template (value) octetstring sess_id := c_def_sess_id,
1020 template (value) charstring orig_host := "hss.localdomain",
1021 template (value) charstring orig_realm := "localdomain",
1022 template (value) UINT32 hbh_id := '00000000'O,
1023 template (value) UINT32 ete_id := '00000000'O) :=
1024 ts_DIAMETER(flags := '01000000'B,
1025 cmd_code := Authentication_Information,
1026 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1027 hbh_id := hbh_id,
1028 ete_id := ete_id,
1029 avps := {
1030 ts_AVP_SessionId(sess_id),
1031 ts_AVP_ResultCode(DIAMETER_SUCCESS),
1032 ts_AVP_AuthSessionState(NO_STATE_MAINTAINED),
1033 ts_AVP_OriginHost(orig_host),
1034 ts_AVP_OriginRealm(orig_realm),
1035 ts_AVP_3GPP_AuthInfo(auth_info_contents)
Harald Welted27ab242019-07-26 13:45:18 +02001036 });
Vadim Yanitskiy446edae2021-12-12 04:33:08 +03001037template (present) PDU_DIAMETER
1038tr_DIA_AIA(template (present) AVP_list auth_info_contents := ?,
1039 template (present) octetstring sess_id := ?,
1040 template (present) charstring orig_host := ?,
1041 template (present) charstring orig_realm := ?,
1042 template (present) UINT32 hbh_id := ?,
1043 template (present) UINT32 ete_id := ?) :=
1044 tr_DIAMETER(flags := '0???????'B,
1045 cmd_code := Authentication_Information,
1046 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1047 hbh_id := hbh_id,
1048 ete_id := ete_id,
1049 avps := superset(
1050 tr_AVP_SessionId(sess_id),
1051 tr_AVP_ResultCode(DIAMETER_SUCCESS),
1052 tr_AVP_AuthSessionState(NO_STATE_MAINTAINED),
1053 tr_AVP_3GPP_AuthInfo(auth_info_contents),
1054 tr_AVP_OriginHost(orig_host),
1055 tr_AVP_OriginRealm(orig_realm)
1056 ));
Harald Welted27ab242019-07-26 13:45:18 +02001057
1058
1059/* TS 29.262 7.2.3 Update Location Request */
Vadim Yanitskiy5e1bdc02021-12-12 02:33:59 +03001060template (value) PDU_DIAMETER
1061ts_DIA_ULR(/* template (value) */ hexstring imsi,
1062 template (value) octetstring sess_id := c_def_sess_id,
1063 template (value) charstring orig_host := "ttcn3.localdomain",
1064 template (value) charstring orig_realm := "localdomain",
1065 template (value) charstring dest_realm := "localdomain",
1066 template (value) UINT32 hbh_id := '00000000'O,
1067 template (value) UINT32 ete_id := '00000000'O) :=
1068 ts_DIAMETER(flags := '11000000'B,
1069 cmd_code := Update_Location,
1070 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1071 hbh_id := hbh_id,
1072 ete_id := ete_id,
1073 avps := {
1074 ts_AVP_SessionId(sess_id),
1075 ts_AVP_AuthSessionState(NO_STATE_MAINTAINED),
1076 ts_AVP_UserNameImsi(imsi),
1077 ts_AVP_3GPP_UlrFlags('00000000'O),
1078 ts_AVP_3GPP_VisitedPlmnId('11111F'O),
1079 ts_AVP_3GPP_RatType(EUTRAN),
1080 ts_AVP_OriginHost(orig_host),
1081 ts_AVP_OriginRealm(orig_realm),
1082 ts_AVP_DestinationRealm(dest_realm)
1083 });
Harald Welted27ab242019-07-26 13:45:18 +02001084template (present) PDU_DIAMETER
Vadim Yanitskiy0e8f5162021-12-15 05:00:32 +03001085tr_DIA_ULR(/* template (present) */ hexstring imsi,
1086 template (present) octetstring sess_id := ?,
1087 template (present) charstring orig_host := ?,
1088 template (present) charstring orig_realm := ?,
1089 template (present) charstring dest_realm := ?,
1090 template (present) UINT32 hbh_id := ?,
1091 template (present) UINT32 ete_id := ?) :=
1092 tr_DIAMETER(flags := '11000000'B,
1093 cmd_code := Update_Location,
1094 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1095 hbh_id := hbh_id,
1096 ete_id := ete_id,
1097 avps := superset(
1098 tr_AVP_SessionId(sess_id),
1099 tr_AVP_AuthSessionState,
1100 tr_AVP_OriginHost(orig_host),
1101 tr_AVP_OriginRealm(orig_realm),
1102 tr_AVP_DestinationRealm(dest_realm),
1103 tr_AVP_UserNameImsi(imsi),
1104 tr_AVP_3GPP_RatType(EUTRAN),
1105 tr_AVP_3GPP_UlrFlags,
1106 tr_AVP_3GPP_VisitedPlmnId
Harald Welted27ab242019-07-26 13:45:18 +02001107 ));
1108
1109template (value) PDU_DIAMETER
Vadim Yanitskiy0e8f5162021-12-15 05:00:32 +03001110ts_DIA_ULA(template (value) AVP_list sub_data,
1111 template (value) octetstring sess_id := c_def_sess_id,
1112 template (value) charstring orig_host := "hss.localdomain",
1113 template (value) charstring orig_realm := "localdomain",
1114 template (value) UINT32 hbh_id := '00000000'O,
1115 template (value) UINT32 ete_id := '00000000'O) :=
1116 ts_DIAMETER(flags:='01000000'B,
1117 cmd_code := Update_Location,
1118 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1119 hbh_id := hbh_id,
1120 ete_id := ete_id,
1121 avps := {
1122 ts_AVP_SessionId(sess_id),
1123 ts_AVP_ResultCode(DIAMETER_SUCCESS), /* optional */
1124 ts_AVP_AuthSessionState(NO_STATE_MAINTAINED),
1125 ts_AVP_OriginHost(orig_host),
1126 ts_AVP_OriginRealm(orig_realm),
1127 ts_AVP_3GPP_UlaFlags('00000002'O),
1128 ts_AVP_3GPP_SubscriptionData(sub_data)
Harald Welted27ab242019-07-26 13:45:18 +02001129 });
Vadim Yanitskiy5e1bdc02021-12-12 02:33:59 +03001130template (present) PDU_DIAMETER
1131tr_DIA_ULA(template (present) AVP_list sub_data := ?,
1132 template (present) octetstring sess_id := ?,
1133 template (present) charstring orig_host := ?,
1134 template (present) charstring orig_realm := ?,
1135 template (present) UINT32 hbh_id := ?,
1136 template (present) UINT32 ete_id := ?) :=
1137 tr_DIAMETER(flags := '0???????'B,
1138 cmd_code := Update_Location,
1139 app_id := int2oct(c_DIAMETER_3GPP_S6_AID, 4),
1140 hbh_id := hbh_id,
1141 ete_id := ete_id,
1142 avps := superset(
1143 tr_AVP_SessionId(sess_id),
1144 tr_AVP_ResultCode(DIAMETER_SUCCESS),
1145 tr_AVP_AuthSessionState,
1146 tr_AVP_OriginHost(orig_host),
1147 tr_AVP_OriginRealm(orig_realm),
1148 tr_AVP_3GPP_UlaFlags,
1149 tr_AVP_3GPP_SubscriptionData(sub_data)
1150 ));
Harald Welted27ab242019-07-26 13:45:18 +02001151
1152
1153
Harald Weltef4001512020-04-26 21:48:34 +02001154/* RFC 4006 3.1. Credit-Control-Request (CCR) Command */
1155template (present) PDU_DIAMETER
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +01001156tr_DIA_Gx_CCR(template (present) DCC_NONE_CC_Request_Type req_type := INITIAL_REQUEST)
Harald Weltef4001512020-04-26 21:48:34 +02001157:= tr_DIAMETER(flags:='11000000'B, cmd_code:=Credit_Control,
Harald Weltef4001512020-04-26 21:48:34 +02001158 avps := superset(
1159 tr_AVP_SessionId,
1160 tr_AVP_OriginHost,
1161 tr_AVP_OriginRealm,
1162 tr_AVP_DestinationRealm,
1163 tr_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_Gx_AID, 4)),
1164 tr_AVP_CcReqType(req_type),
1165 tr_AVP_CcReqNum(?)
1166 ));
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +01001167template (present) PDU_DIAMETER
1168tr_DIA_Gy_CCR(template (present) DCC_NONE_CC_Request_Type req_type := INITIAL_REQUEST)
1169:= tr_DIAMETER(flags:='11000000'B, cmd_code:=Credit_Control,
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +01001170 avps := superset(
1171 tr_AVP_SessionId,
1172 tr_AVP_OriginHost,
1173 tr_AVP_OriginRealm,
1174 tr_AVP_DestinationRealm,
1175 tr_AVP_AuthAppId(int2oct(c_DIAMETER_CREDIT_CONTROL_AID, 4)),
1176 tr_AVP_CcReqType(req_type),
1177 tr_AVP_CcReqNum(?)
1178 ));
1179
Harald Weltef4001512020-04-26 21:48:34 +02001180
1181
1182/* RFC 4006 3.2. Credit-Control-Answer (CCA) Command */
1183template (value) PDU_DIAMETER
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +01001184ts_DIA_Gx_CCA(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
Harald Weltef4001512020-04-26 21:48:34 +02001185 template (value) octetstring sess_id,
1186 template (value) DCC_NONE_CC_Request_Type req_type,
1187 template (value) AVP_Unsigned32 req_num)
Harald Weltef4001512020-04-26 21:48:34 +02001188:= ts_DIAMETER(flags:='01000000'B, cmd_code:=Credit_Control,
1189 app_id:=int2oct(c_DIAMETER_3GPP_Gx_AID, 4), hbh_id:=hbh_id, ete_id:=ete_id,
1190 avps := {
1191 ts_AVP_SessionId(sess_id),
1192 ts_AVP_ResultCode(DIAMETER_SUCCESS),
1193 ts_AVP_OriginHost("pcrf.localdomain"),
1194 ts_AVP_OriginRealm("localdomain"),
1195 ts_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_Gx_AID, 4)),
1196 ts_AVP_CcReqType(req_type),
1197 ts_AVP_CcReqNum(req_num)//,
1198 // qos
1199 // default eps bearer qos
1200 // supported features
1201 // origin
1202 });
Pau Espin Pedrol77fdd0b2022-03-08 14:03:33 +01001203template (value) PDU_DIAMETER
1204ts_DIA_Gy_CCA(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
1205 template (value) octetstring sess_id,
1206 template (value) DCC_NONE_CC_Request_Type req_type,
1207 template (value) AVP_Unsigned32 req_num)
1208:= ts_DIAMETER(flags:='01000000'B, cmd_code:=Credit_Control,
1209 app_id:=int2oct(c_DIAMETER_CREDIT_CONTROL_AID, 4), hbh_id:=hbh_id, ete_id:=ete_id,
1210 avps := {
1211 ts_AVP_SessionId(sess_id),
1212 ts_AVP_ResultCode(DIAMETER_SUCCESS),
1213 ts_AVP_OriginHost("ocs.localdomain"),
1214 ts_AVP_OriginRealm("localdomain"),
1215 ts_AVP_AuthAppId(int2oct(c_DIAMETER_CREDIT_CONTROL_AID, 4)),
1216 ts_AVP_CcReqType(req_type),
1217 ts_AVP_CcReqNum(req_num)//,
1218 // qos
1219 // default eps bearer qos
1220 // supported features
1221 // origin
1222 });
1223/* Same as ts_DIA_Gy_CCA, but with extra AVP to grant access for limited amount of seconds */
1224template (value) PDU_DIAMETER
1225ts_DIA_Gy_CCA_ValidityTime(template (value) UINT32 hbh_id, template (value) UINT32 ete_id,
1226 template (value) octetstring sess_id,
1227 template (value) DCC_NONE_CC_Request_Type req_type,
1228 template (value) AVP_Unsigned32 req_num,
1229 uint32_t validity_time)
1230:= ts_DIAMETER(flags:='01000000'B, cmd_code:=Credit_Control,
1231 app_id:=int2oct(c_DIAMETER_CREDIT_CONTROL_AID, 4), hbh_id:=hbh_id, ete_id:=ete_id,
1232 avps := {
1233 ts_AVP_SessionId(sess_id),
1234 ts_AVP_ResultCode(DIAMETER_SUCCESS),
1235 ts_AVP_OriginHost("ocs.localdomain"),
1236 ts_AVP_OriginRealm("localdomain"),
1237 ts_AVP_AuthAppId(int2oct(c_DIAMETER_CREDIT_CONTROL_AID, 4)),
1238 ts_AVP_CcReqType(req_type),
1239 ts_AVP_CcReqNum(req_num),
1240 ts_AVP_Multiple_Services_Credit_Control({
1241 ts_AVP_Validity_Time(validity_time),
1242 ts_AVP_Granted_Service_Unit({
1243 //ts_AVP_CC_Time(validity_time*2),
1244 ts_AVP_CC_Total_Octets(1000)
1245 })
1246 })
1247 //,
1248 // qos
1249 // default eps bearer qos
1250 // supported features
1251 // origin
1252 });
Harald Weltef4001512020-04-26 21:48:34 +02001253
Vadim Yanitskiyf28b2552021-12-11 03:49:14 +03001254/* RFC 6733, section 5.5.1 "Device-Watchdog-Request" */
1255template (value) PDU_DIAMETER
1256ts_DIA_DWR(template (value) OCTET4 state_id := '00000000'O,
1257 template (value) charstring orig_host := "ttcn3.localdomain",
1258 template (value) charstring orig_realm := "localdomain",
1259 template (value) UINT32 hbh_id := '00000000'O,
1260 template (value) UINT32 ete_id := '00000000'O) :=
1261 ts_DIAMETER(flags := '10000000'B,
1262 cmd_code := Device_Watchdog,
1263 app_id := '00000000'O,
1264 hbh_id := hbh_id,
1265 ete_id := ete_id,
1266 avps := {
1267 ts_AVP_OriginHost(orig_host),
1268 ts_AVP_OriginRealm(orig_realm),
1269 ts_AVP_OriginStateId(state_id)
1270 });
1271template (present) PDU_DIAMETER
1272tr_DIA_DWR(template (present) OCTET4 state_id := ?,
1273 template (present) charstring orig_host := ?,
1274 template (present) charstring orig_realm := ?,
1275 template (present) UINT32 hbh_id := ?,
1276 template (present) UINT32 ete_id := ?) :=
1277 tr_DIAMETER(flags := '1???????'B,
1278 cmd_code := Device_Watchdog,
1279 app_id := '00000000'O,
1280 hbh_id := hbh_id,
1281 ete_id := ete_id,
1282 avps := superset(
1283 tr_AVP_OriginHost(orig_host),
1284 tr_AVP_OriginRealm(orig_realm),
1285 tr_AVP_OriginStateId(state_id)
1286 ));
1287
1288/* RFC 6733, section 5.5.2 "Device-Watchdog-Answer" */
1289template (value) PDU_DIAMETER
1290ts_DIA_DWA(template (value) OCTET4 state_id := '00000000'O,
1291 template (value) charstring orig_host := "ttcn3.localdomain",
1292 template (value) charstring orig_realm := "localdomain",
1293 template (value) UINT32 hbh_id := '00000000'O,
1294 template (value) UINT32 ete_id := '00000000'O) :=
1295 ts_DIAMETER(flags := '00000000'B,
1296 cmd_code := Device_Watchdog,
1297 app_id := '00000000'O,
1298 hbh_id := hbh_id,
1299 ete_id := ete_id,
1300 avps := {
1301 ts_AVP_ResultCode(DIAMETER_SUCCESS),
1302 ts_AVP_OriginHost(orig_host),
1303 ts_AVP_OriginRealm(orig_realm),
1304 ts_AVP_OriginStateId(state_id)
1305 });
1306template (present) PDU_DIAMETER
1307tr_DIA_DWA(template (present) OCTET4 state_id := ?,
1308 template (present) charstring orig_host := ?,
1309 template (present) charstring orig_realm := ?,
1310 template (present) UINT32 hbh_id := ?,
1311 template (present) UINT32 ete_id := ?) :=
1312 tr_DIAMETER(flags := '0???????'B,
1313 cmd_code := Device_Watchdog,
1314 app_id := '00000000'O,
1315 hbh_id := hbh_id,
1316 ete_id := ete_id,
1317 avps := superset(
1318 tr_AVP_ResultCode(DIAMETER_SUCCESS),
1319 tr_AVP_OriginHost(orig_host),
1320 tr_AVP_OriginRealm(orig_realm),
1321 tr_AVP_OriginStateId(state_id)
1322 ));
1323
Harald Welted27ab242019-07-26 13:45:18 +02001324}