blob: e1a070061b32495c512131874db7f7c632e7c340 [file] [log] [blame]
Pau Espin Pedrol4669b612023-10-23 17:43:14 +02001module DIAMETER_ts29_273_Templates {
2
3/* (C) 2023 by sysmocom s.f.m.c. GmbH <info@sysmocom.de
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 * Templates for AVPs and messages for TS 29.273
12 */
13
14import from General_Types all;
15import from DIAMETER_Types all;
16import from DIAMETER_Templates all;
Pau Espin Pedrol73996732023-10-23 18:16:21 +020017import from DIAMETER_rfc5447_Templates all;
Pau Espin Pedrold9ff19e2024-03-11 12:16:13 +010018import from DIAMETER_ts29_229_Templates all;
Pau Espin Pedrol5154e352024-03-05 13:23:40 +010019import from DIAMETER_ts29_272_Templates all;
Pau Espin Pedrol4669b612023-10-23 17:43:14 +020020import from Osmocom_Types all;
21import from Misc_Helpers all;
22
23/* 3GPP TS 29.273 Section 8.2 */
24const uint32_t c_DIAMETER_3GPP_SWx_AID := 16777265;
25/* 3GPP TS 29.273 Section 9 */
26const uint32_t c_DIAMETER_3GPP_S6b_AID := 16777272;
27
Pau Espin Pedrol73996732023-10-23 18:16:21 +020028/* 5.2.3.3 MIP6-Feature-Vector bits */
29const uint64_t DIA_TS29_373_MIP6_Feature_Vector_PMIP6_SUPPORTED := hex2int('0000010000000000'H);
30const uint64_t DIA_TS29_373_MIP6_Feature_Vector_ASSIGN_LOCAL_IP := hex2int('0000080000000000'H);
31const uint64_t DIA_TS29_373_MIP6_Feature_Vector_MIP4_SUPPORTED := hex2int('0000100000000000'H);
32const uint64_t DIA_TS29_373_MIP6_Feature_Vector_OPTIMIZED_IDLE_MODE_MOBILITY := hex2int('0000200000000000'H);
33const uint64_t DIA_TS29_373_MIP6_Feature_Vector_GTPv2_SUPPORTED := hex2int('0000400000000000'H);
34
Pau Espin Pedrol4669b612023-10-23 17:43:14 +020035/*******************************
36 * SWx 3GPP TS 29.273 section 8
37 *******************************/
38
Pau Espin Pedrol9b2ebc02024-03-05 13:25:19 +010039/* TS 29.273 8.2.3.1 Non-3GPP-User-Data */
40template (value) GenericAVP ts_AVP_3GPP_Non_3GPP_User_Data(template (value) AAA_3GPP_PDN_Type pdn_type,
41 template (value) charstring apn,
42 template (value) uint32_t ambr_max_req_ul := 1000000000,
43 template (value) uint32_t ambr_max_req_dl := 1000000000) := {
44 avp := {
45 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Non_3GPP_User_Data),
46 avp_data := {
47 avp_AAA_3GPP_Non_3GPP_User_Data := {
48 ts_AVP_3GPP_Non_3GPP_IP_Access(NON_3GPP_SUBSCRIPTION_ALLOWED),
49 ts_AVP_3GPP_Non_3GPP_IP_Access_APN(NON_3GPP_APNS_ENABLE),
50 ts_AVP_3GPP_AMBR(ambr_max_req_ul, ambr_max_req_dl),
51 ts_AVP_3GPP_ContextId(1),
52 ts_AVP_3GPP_ApnConfig(1, pdn_type, apn)
53 }
54 }
55 }
56}
57
58/* TS 29.273 8.2.3.3 Non-3GPP-IP-Access */
59template (value) GenericAVP ts_AVP_3GPP_Non_3GPP_IP_Access(template (value) AAA_3GPP_Non_3GPP_IP_Access val := NON_3GPP_SUBSCRIPTION_ALLOWED) := {
60 avp := {
61 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Non_3GPP_IP_Access),
62 avp_data := {
63 avp_AAA_3GPP_Non_3GPP_IP_Access := val
64 }
65 }
66}
67
68
69/* TS 29.273 8.2.3.4 Non-3GPP-IP-Access-APN */
70template (value) GenericAVP ts_AVP_3GPP_Non_3GPP_IP_Access_APN(template (value) AAA_3GPP_Non_3GPP_IP_Access_APN val := NON_3GPP_APNS_ENABLE) := {
71 avp := {
72 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_AAA_3GPP_Non_3GPP_IP_Access_APN),
73 avp_data := {
74 avp_AAA_3GPP_Non_3GPP_IP_Access_APN := val
75 }
76 }
77}
78
79/* TS 29.273 8.2.3.7 APN-Configuration: The APN-Configuration AVP is of type Grouped AVP and is defined in 3GPP TS 29.272 */
80/* TS 29.273 5.2.3.8 AMBR: Please refer to 3GPP TS 29.272 [29] for the encoding of this AVP. */
81
Pau Espin Pedrol4669b612023-10-23 17:43:14 +020082/* SIP-Auth-Data-Item , 3GPP TS 29.273 8.2.3.9 */
83template (present) GenericAVP tr_AVP_3GPP_SIPAuthDataItem(template (present) uint32_t num := ?) := {
84 avp := {
85 avp_header := tr_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Auth_Data_Item),
86 avp_data := {
87 avp_CxDx_3GPP_SIP_Auth_Data_Item := superset(
88 //tr_AVP_3GPP_SIPItemNumber(num), /* Optional */
89 tr_AVP_3GPP_SIPAuthScheme(?)//, /* Optional */
90 //tr_AVP_3GPP_SIPAuthenticate(?), /* Optional */
91 //tr_AVP_3GPP_SIPAuthorization(?), /* Optional */
92 //tr_AVP_3GPP_SIPAuthContext(?), /* Optional */
93 //tr_AVP_3GPP_ConfidentialityKey(?), /* Optional */
94 //tr_AVP_3GPP_IntegrityKey(?) /* Optional */
95 /* TODO:
96 [ SIP-Digest-Authenticate ]
97 [ Framed-IP-Address ]
98 [ Framed-IPv6-Prefix ]
99 [ Framed-Interface-Id ]
100 [ Line-Identifier ]
101 *[AVP]
102 */
103 )
104 }
105 }
106}
107template (value) GenericAVP ts_AVP_3GPP_SIPAuthDataItem(uint32_t num, OCT16 rand, OCT16 ik, OCT16 ck, OCT16 autn, OCT14 auts) := {
108 avp := {
109 avp_header := ts_DIA_Hdr_3GPP(c_AVP_Code_CxDx_3GPP_SIP_Auth_Data_Item),
110 avp_data := {
111 avp_CxDx_3GPP_SIP_Auth_Data_Item := {
112 ts_AVP_3GPP_SIPItemNumber(num),
113 ts_AVP_3GPP_SIPAuthScheme(char2oct("Digest-AKAv1-MD5")),
114 ts_AVP_3GPP_SIPAuthenticate(rand & autn),
115 ts_AVP_3GPP_SIPAuthorization(rand & auts),
116 ts_AVP_3GPP_SIPAuthContext(char2oct("foobar")),
117 ts_AVP_3GPP_ConfidentialityKey(ck),
118 ts_AVP_3GPP_IntegrityKey(ik)
119 /* TODO:
120 [ SIP-Digest-Authenticate ]
121 [ Framed-IP-Address ]
122 [ Framed-IPv6-Prefix ]
123 [ Framed-Interface-Id ]
124 [ Line-Identifier ]
125 *[AVP]
126 */
127 }
128 }
129 }
130}
131
132/* Multimedia-Auth-Request, 3GPP TS 29.273 8.2.2.1 Authentication Procedure */
133template (present) PDU_DIAMETER
134tr_DIA_SWx_MAR(template (present) hexstring imsi := ?,
135 template (present) octetstring sess_id := ?,
136 template (present) charstring orig_host := ?,
137 template (present) charstring orig_realm := ?,
138 template (present) charstring dest_realm := ?,
139 template (present) UINT32 hbh_id := ?,
140 template (present) UINT32 ete_id := ?) :=
141 tr_DIAMETER(flags := '1???????'B,
142 cmd_code := Multimedia_Auth,
143 app_id := int2oct(c_DIAMETER_3GPP_SWx_AID, 4),
144 hbh_id := hbh_id, ete_id := ete_id,
145 avps := superset(
146 tr_AVP_SessionId(sess_id),
147 tr_AVP_VendorSpecAppId(?, ?),
148 tr_AVP_AuthSessionState(NO_STATE_MAINTAINED),
149 tr_AVP_OriginHost(orig_host),
150 tr_AVP_OriginRealm(orig_realm),
151 tr_AVP_DestinationRealm(dest_realm),
152 tr_AVP_UserNameImsi(imsi),
153 tr_AVP_3GPP_SIPAuthDataItem(?),
154 tr_AVP_3GPP_SIPNumAuthDataItems(?)
155 ));
156
157/* Multimedia-Auth-Answer, 3GPP TS 29.273 8.2.2.1 Authentication Procedure */
158template (value) PDU_DIAMETER
159ts_DIA_SWx_MAA(template (value) hexstring imsi,
160 template (value) GenericAVP sip_auth_data_item,
161 template (value) uint32_t vendor_app_id := c_DIAMETER_3GPP_SWx_AID,
162 template (value) octetstring sess_id := c_def_sess_id,
163 template (value) charstring orig_host := "hss.localdomain",
164 template (value) charstring orig_realm := "localdomain",
165 template (value) UINT32 hbh_id := '00000000'O,
166 template (value) UINT32 ete_id := '00000000'O) :=
167 ts_DIAMETER(flags := '01000000'B,
168 cmd_code := Multimedia_Auth,
169 app_id := int2oct(c_DIAMETER_3GPP_SWx_AID, 4),
170 hbh_id := hbh_id,
171 ete_id := ete_id,
172 avps := {
173 ts_AVP_SessionId(sess_id),
174 ts_AVP_VendorSpecAppId(vendor_id_3GPP, valueof(vendor_app_id)),
175 ts_AVP_ResultCode(DIAMETER_SUCCESS),
176 ts_AVP_AuthSessionState(NO_STATE_MAINTAINED),
177 ts_AVP_OriginHost(orig_host),
178 ts_AVP_OriginRealm(orig_realm),
179 ts_AVP_UserNameImsi(valueof(imsi)),
180 sip_auth_data_item,
181 ts_AVP_3GPP_SIPNumAuthDataItems(1)
182 });
183
Pau Espin Pedrol6601f222024-03-05 18:51:09 +0100184template (value) PDU_DIAMETER
185ts_DIA_SWx_MAA_result(template (value) hexstring imsi,
186 template (value) GenericAVP result,
187 template (value) uint32_t vendor_app_id := c_DIAMETER_3GPP_SWx_AID,
188 template (value) octetstring sess_id := c_def_sess_id,
189 template (value) charstring orig_host := "hss.localdomain",
190 template (value) charstring orig_realm := "localdomain",
191 template (value) UINT32 hbh_id := '00000000'O,
192 template (value) UINT32 ete_id := '00000000'O) :=
193 ts_DIAMETER(flags := '01000000'B,
194 cmd_code := Multimedia_Auth,
195 app_id := int2oct(c_DIAMETER_3GPP_SWx_AID, 4),
196 hbh_id := hbh_id,
197 ete_id := ete_id,
198 avps := {
199 ts_AVP_SessionId(sess_id),
200 ts_AVP_VendorSpecAppId(vendor_id_3GPP, valueof(vendor_app_id)),
201 result,
202 ts_AVP_AuthSessionState(NO_STATE_MAINTAINED),
203 ts_AVP_OriginHost(orig_host),
204 ts_AVP_OriginRealm(orig_realm),
205 ts_AVP_UserNameImsi(valueof(imsi))
206 });
207
Pau Espin Pedrol4669b612023-10-23 17:43:14 +0200208/* Server-Assignment-Request,
209 * 3GPP TS 29.273 8.1.2.2.2 UE/PDN Registration/DeRegistration Notification
210 * 3GPP TS 29.273 8.2.2.3 Non-3GPP IP Access Registration Procedure */
211template (present) PDU_DIAMETER
212tr_DIA_SWx_SAR(template (present) hexstring imsi := ?,
213 template (present) octetstring sess_id := ?,
214 template (present) charstring orig_host := ?,
215 template (present) charstring orig_realm := ?,
216 template (present) charstring dest_realm := ?,
217 template (present) UINT32 hbh_id := ?,
218 template (present) UINT32 ete_id := ?,
219 template (present) CxDx_3GPP_Server_Assignment_Type server_ass_type := ?,
220 template (present) charstring service_selection := ?) :=
221 tr_DIAMETER(flags := '1???????'B,
222 cmd_code := Server_Assignment,
223 app_id := int2oct(c_DIAMETER_3GPP_SWx_AID, 4),
224 hbh_id := hbh_id, ete_id := ete_id,
225 avps := superset(
226 tr_AVP_SessionId(sess_id),
227 tr_AVP_VendorSpecAppId(?, ?),
228 tr_AVP_AuthSessionState(NO_STATE_MAINTAINED),
229 tr_AVP_OriginHost(orig_host),
230 tr_AVP_OriginRealm(orig_realm),
231 tr_AVP_DestinationRealm(dest_realm),
232 tr_AVP_UserNameImsi(imsi),
233 tr_AVP_3GPP_ServerAssignmentType(server_ass_type),
234 tr_AVP_ServiceSelection(service_selection)
235 ));
236
237/* Server-Assignment-Answer,
238 * 3GPP TS 29.273 8.1.2.2.2 UE/PDN Registration/DeRegistration Notification
239 * 3GPP TS 29.273 8.2.2.3 Non-3GPP IP Access Registration Procedure */
240template (value) PDU_DIAMETER
241ts_DIA_SWx_SAA(template (value) hexstring imsi,
Pau Espin Pedrol9b2ebc02024-03-05 13:25:19 +0100242 template (value) AAA_3GPP_PDN_Type pdn_type,
243 template (value) charstring apn,
Pau Espin Pedrol4669b612023-10-23 17:43:14 +0200244 template (value) uint32_t vendor_app_id := c_DIAMETER_3GPP_SWx_AID,
245 template (value) octetstring sess_id := c_def_sess_id,
246 template (value) charstring orig_host := "hss.localdomain",
247 template (value) charstring orig_realm := "localdomain",
248 template (value) UINT32 hbh_id := '00000000'O,
249 template (value) UINT32 ete_id := '00000000'O) :=
250 ts_DIAMETER(flags := '01000000'B,
251 cmd_code := Server_Assignment,
252 app_id := int2oct(c_DIAMETER_3GPP_SWx_AID, 4),
253 hbh_id := hbh_id,
254 ete_id := ete_id,
255 avps := {
256 ts_AVP_SessionId(sess_id),
257 ts_AVP_VendorSpecAppId(vendor_id_3GPP, valueof(vendor_app_id)),
258 ts_AVP_ResultCode(DIAMETER_SUCCESS),
259 ts_AVP_AuthSessionState(NO_STATE_MAINTAINED),
260 ts_AVP_OriginHost(orig_host),
261 ts_AVP_OriginRealm(orig_realm),
Pau Espin Pedrol9b2ebc02024-03-05 13:25:19 +0100262 ts_AVP_UserNameImsi(valueof(imsi)),
263 ts_AVP_3GPP_Non_3GPP_User_Data(pdn_type, apn)
Pau Espin Pedrol4669b612023-10-23 17:43:14 +0200264 /* TODO:
Pau Espin Pedrol4669b612023-10-23 17:43:14 +0200265 * [ 3GPP-AAA-Server-Name ]
266 * [ OC-Supported-Features ]
267 * [ OC-OLR ] ]
268 * *[ Load ]
269 * *[ Supported-Features ]
270 */
271 });
272
Pau Espin Pedrold9ff19e2024-03-11 12:16:13 +0100273/* Registration-Termination-Request (RTR) , 8.2.2.4 Network Initiated De-Registration by HSS Procedure */
274template (value) PDU_DIAMETER
275ts_DIA_SWx_RTR(template (value) hexstring imsi,
276 template (value) CxDx_3GPP_Reason_Code reason_code := PERMANENT_TERMINATION,
277 template (value) octetstring reason_info := ''O,
278 template (value) uint32_t vendor_app_id := c_DIAMETER_3GPP_SWx_AID,
279 template (value) octetstring sess_id := c_def_sess_id,
280 template (value) charstring orig_host := "hss.localdomain",
281 template (value) charstring orig_realm := "localdomain",
282 template (value) charstring dest_host := "aaa.localdomain",
283 template (value) charstring dest_realm := "localdomain",
284 template (value) UINT32 hbh_id := '00000000'O,
285 template (value) UINT32 ete_id := '00000000'O) :=
286 ts_DIAMETER(flags := '11000000'B,
287 cmd_code := Registration_Termination,
288 app_id := int2oct(c_DIAMETER_3GPP_SWx_AID, 4),
289 hbh_id := hbh_id,
290 ete_id := ete_id,
291 avps := {
292 ts_AVP_SessionId(sess_id),
293 ts_AVP_VendorSpecAppId(vendor_id_3GPP, valueof(vendor_app_id)),
294 ts_AVP_AuthSessionState(NO_STATE_MAINTAINED),
295 ts_AVP_OriginHost(orig_host),
296 ts_AVP_OriginRealm(orig_realm),
297 ts_AVP_DestinationHost(dest_host),
298 ts_AVP_DestinationRealm(dest_realm),
299 ts_AVP_UserNameImsi(imsi),
300 ts_AVP_CxDx_3GPP_Deregistration_Reason(reason_code, reason_info)
301 /* TODO:
302 * *[ Supported-Features ]
303 */
304 });
305
306template (present) PDU_DIAMETER
307tr_DIA_SWx_RTA(template (present) GenericAVP tmpl_result := ?,
308 template (present) octetstring sess_id := ?,
309 template (present) charstring orig_host := ?,
310 template (present) charstring orig_realm := ?,
311 template (present) charstring dest_host := ?,
312 template (present) charstring dest_realm := ?,
313 template (present) UINT32 hbh_id := ?,
314 template (present) UINT32 ete_id := ?) :=
315 tr_DIAMETER(flags := '0???????'B,
316 cmd_code := Registration_Termination,
317 app_id := int2oct(c_DIAMETER_3GPP_SWx_AID, 4),
318 hbh_id := hbh_id, ete_id := ete_id,
319 avps := superset(
320 tr_AVP_SessionId(sess_id),
321 tr_AVP_VendorSpecAppId(?, ?),
322 tmpl_result,
323 tr_AVP_AuthSessionState(NO_STATE_MAINTAINED),
324 tr_AVP_OriginHost(orig_host),
325 tr_AVP_OriginRealm(orig_realm)
326 ));
327
Pau Espin Pedrol4669b612023-10-23 17:43:14 +0200328/*******************************
329 * S6b 3GPP TS 29.273 section 9
330 *******************************/
331
332 /* TS 29.273 9.2.2.5.1 AA-Request (AAR) */
Pau Espin Pedrol518e24b2024-02-23 17:45:08 +0100333template (present) PDU_DIAMETER
334tr_DIA_S6b_AAR(template (present) charstring username_nai := ?,
335 template (present) MIPv6_NONE_MIP6_Feature_Vector mip6_feat_vec := ?,
336 template (present) charstring apn := ?,
337 template (present) octetstring sess_id := ?,
338 template (present) charstring orig_host := ?,
339 template (present) charstring orig_realm := ?,
340 template (present) charstring dest_realm := ?,
341 template (present) UINT32 hbh_id := ?,
342 template (present) UINT32 ete_id := ?) :=
343 tr_DIAMETER(flags := '1???????'B,
344 cmd_code := Authorize_Authenticate,
345 app_id := int2oct(c_DIAMETER_3GPP_S6b_AID, 4),
346 hbh_id := hbh_id,
347 ete_id := ete_id,
348 avps := superset(
349 tr_AVP_SessionId(sess_id),
350 /* Optional: DRMP, */
351 tr_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_S6b_AID, 4)),
352 tr_AVP_OriginHost(orig_host),
353 tr_AVP_OriginRealm(orig_realm),
354 tr_AVP_DestinationRealm(dest_realm),
355 tr_AVP_AuthRequestType(AUTHORIZE_ONLY),
356 tr_AVP_UserName(char2oct_tmpl_present(username_nai)),
357 tr_AVP_MIP6FeatureVector(mip6_feat_vec),
358 tr_AVP_ServiceSelection(apn)
359 /* TODO: Lots other optional */
360 ));
361
Pau Espin Pedrol4669b612023-10-23 17:43:14 +0200362template (value) PDU_DIAMETER
Pau Espin Pedrol8586b262024-02-09 18:12:21 +0100363ts_DIA_S6b_AAR(template (value) charstring username_nai,
Pau Espin Pedrol73996732023-10-23 18:16:21 +0200364 template (value) MIPv6_NONE_MIP6_Feature_Vector mip6_feat_vec,
Pau Espin Pedrol2c2e1872023-10-23 18:31:03 +0200365 template (value) charstring apn,
Pau Espin Pedrol009ab6f2024-03-05 13:25:19 +0100366 template (value) MIPv4_NONE_MIP_Home_Agent_Address pgw_addr,
Pau Espin Pedrol4669b612023-10-23 17:43:14 +0200367 template (value) octetstring sess_id := c_def_sess_id,
368 template (value) charstring orig_host := "pgw.localdomain",
369 template (value) charstring orig_realm := "localdomain",
370 template (value) charstring dest_realm := "localdomain",
371 template (value) UINT32 hbh_id := '00000000'O,
372 template (value) UINT32 ete_id := '00000000'O) :=
373 ts_DIAMETER(flags := '11000000'B,
374 cmd_code := Authorize_Authenticate,
375 app_id := int2oct(c_DIAMETER_3GPP_S6b_AID, 4),
376 hbh_id := hbh_id,
377 ete_id := ete_id,
378 avps := {
379 ts_AVP_SessionId(sess_id),
380 /* Optional: DRMP, */
381 ts_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_S6b_AID, 4)),
382 ts_AVP_OriginHost(orig_host),
383 ts_AVP_OriginRealm(orig_realm),
384 ts_AVP_DestinationRealm(dest_realm),
385 ts_AVP_AuthRequestType(AUTHORIZE_ONLY),
Pau Espin Pedrol8586b262024-02-09 18:12:21 +0100386 ts_AVP_UserName(char2oct(valueof(username_nai))),
Pau Espin Pedrol009ab6f2024-03-05 13:25:19 +0100387 ts_AVP_MIP6AgentInfo(pgw_addr),
Pau Espin Pedrol2c2e1872023-10-23 18:31:03 +0200388 ts_AVP_MIP6FeatureVector(mip6_feat_vec),
389 ts_AVP_ServiceSelection(valueof(apn))
Pau Espin Pedrol4669b612023-10-23 17:43:14 +0200390 /* TODO: Lots other optional */
391 });
392
393/* TS 29.273 9.2.2.2.2 AA-Answer (AAA) */
394template (present) PDU_DIAMETER
395tr_DIA_S6b_AAA(template (present) octetstring sess_id := ?,
396 template (present) charstring orig_host := ?,
397 template (present) charstring orig_realm := ?,
398 template (present) charstring dest_realm := ?,
399 template (present) UINT32 hbh_id := ?,
400 template (present) UINT32 ete_id := ?,
401 template (present) CxDx_3GPP_Server_Assignment_Type server_ass_type := ?,
402 template (present) charstring service_selection := ?) :=
403 tr_DIAMETER(flags := '0???????'B,
404 cmd_code := Authorize_Authenticate,
405 app_id := int2oct(c_DIAMETER_3GPP_S6b_AID, 4),
406 hbh_id := hbh_id, ete_id := ete_id,
407 avps := superset(
408 tr_AVP_SessionId(sess_id),
409 /* Optional: DRMP, */
410 tr_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_S6b_AID, 4)),
411 tr_AVP_AuthRequestType(AUTHORIZE_ONLY),
412 tr_AVP_ResultCode(DIAMETER_SUCCESS),
413 tr_AVP_OriginHost(orig_host),
414 tr_AVP_OriginRealm(orig_realm)
415 ));
416
Pau Espin Pedrol518e24b2024-02-23 17:45:08 +0100417template (value) PDU_DIAMETER
418ts_DIA_S6b_AAA(template (value) octetstring sess_id := c_def_sess_id,
419 template (value) charstring orig_host := "aaa.localdomain",
420 template (value) charstring orig_realm := "localdomain",
421 template (value) charstring dest_realm := "localdomain",
422 template (value) UINT32 hbh_id := '00000000'O,
423 template (value) UINT32 ete_id := '00000000'O) :=
424 ts_DIAMETER(flags := '01000000'B,
425 cmd_code := Authorize_Authenticate,
426 app_id := int2oct(c_DIAMETER_3GPP_S6b_AID, 4),
427 hbh_id := hbh_id, ete_id := ete_id,
428 avps := {
429 ts_AVP_SessionId(sess_id),
430 /* Optional: DRMP, */
431 ts_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_S6b_AID, 4)),
432 ts_AVP_AuthRequestType(AUTHORIZE_ONLY),
433 ts_AVP_ResultCode(DIAMETER_SUCCESS),
434 ts_AVP_OriginHost(orig_host),
435 ts_AVP_OriginRealm(orig_realm)
436 });
437
Pau Espin Pedrol4944a5c2024-01-24 17:23:01 +0100438 /* TS 29.273 9.2.2.3.1 Session-Termination-Request (STR) Command,
439 * Table 9.1.2.3.1/1: S6b Session Termination Request (STR), based on RFC 6733 8.4.1 */
440template (value) PDU_DIAMETER
441ts_DIA_S6b_STR(template (value) hexstring imsi,
442 template (value) BASE_NONE_Termination_Cause term_cause := DIAMETER_LOGOUT,
443 template (value) octetstring sess_id := c_def_sess_id,
444 template (value) charstring orig_host := "pgw.localdomain",
445 template (value) charstring orig_realm := "localdomain",
446 template (value) charstring dest_realm := "localdomain",
447 template (value) UINT32 hbh_id := '00000000'O,
448 template (value) UINT32 ete_id := '00000000'O) :=
449 ts_DIAMETER(flags := '11000000'B,
450 cmd_code := Session_Termination,
451 app_id := int2oct(c_DIAMETER_3GPP_S6b_AID, 4),
452 hbh_id := hbh_id,
453 ete_id := ete_id,
454 avps := {
455 ts_AVP_SessionId(sess_id),
456 /* Optional: DRMP */
457 ts_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_S6b_AID, 4)),
458 ts_AVP_OriginHost(orig_host),
459 ts_AVP_OriginRealm(orig_realm),
460 ts_AVP_DestinationRealm(dest_realm),
461 ts_AVP_TerminationCause(term_cause),
462 ts_AVP_UserNameImsi(valueof(imsi))
463 /* Optional: OC-Supported-Features */
464 });
465
466/* TS 29.273 9.2.2.3.2 Session-Termination-Answer (STA) Command,
467 * Table 9.1.2.3.1/2: S6b Session Termination Answer (STA), based on RFC 6733 8.4.2 */
468template (present) PDU_DIAMETER
469tr_DIA_S6b_STA(template (present) DIAMETER_Resultcode res_code := ?,
470 template (present) octetstring sess_id := ?,
471 template (present) charstring orig_host := ?,
472 template (present) charstring orig_realm := ?,
473 template (present) charstring dest_realm := ?,
474 template (present) UINT32 hbh_id := ?,
475 template (present) UINT32 ete_id := ?) :=
476 tr_DIAMETER(flags := '0???????'B,
477 cmd_code := Session_Termination,
478 app_id := int2oct(c_DIAMETER_3GPP_S6b_AID, 4),
479 hbh_id := hbh_id, ete_id := ete_id,
480 avps := superset(
481 tr_AVP_SessionId(sess_id),
482 /* Optional: DRMP */
483 tr_AVP_ResultCode(res_code),
484 tr_AVP_OriginHost(orig_host),
485 tr_AVP_OriginRealm(orig_realm)
486 /* Lots other Optional */
487 ));
488
Pau Espin Pedrola7823b92024-03-11 17:55:52 +0100489
490/* TS 29.273 9.2.2.4.1 Abort-Session-Request (ASR) */
491template (present) PDU_DIAMETER
492tr_DIA_S6b_ASR(template (present) charstring username_nai := ?,
493 template (present) octetstring sess_id := ?,
494 template (present) charstring orig_host := ?,
495 template (present) charstring orig_realm := ?,
496 template (present) charstring dest_realm := ?,
497 template (present) charstring dest_host := ?,
498 template (present) UINT32 hbh_id := ?,
499 template (present) UINT32 ete_id := ?) :=
500 tr_DIAMETER(flags := '1???????'B,
501 cmd_code := Abort_Session,
502 app_id := int2oct(c_DIAMETER_3GPP_S6b_AID, 4),
503 hbh_id := hbh_id,
504 ete_id := ete_id,
505 avps := superset(
506 tr_AVP_SessionId(sess_id),
507 /* Optional: DRMP, */
508 tr_AVP_OriginHost(orig_host),
509 tr_AVP_OriginRealm(orig_realm),
510 tr_AVP_DestinationRealm(dest_realm),
511 tr_AVP_DestinationHost(dest_host),
512 tr_AVP_AuthAppId(int2oct(c_DIAMETER_3GPP_S6b_AID, 4)),
513 tr_AVP_UserName(char2oct_tmpl_present(username_nai)),
514 tr_AVP_AuthSessionState(NO_STATE_MAINTAINED)
515 ));
516
517/* TS 29.273 9.2.2.4.2 Abort-Session-Answer (ASA) */
518template (present) PDU_DIAMETER
519tr_DIA_S6b_ASA(template (present) DIAMETER_Resultcode res_code := ?,
520 template (present) octetstring sess_id := ?,
521 template (present) charstring orig_host := ?,
522 template (present) charstring orig_realm := ?,
523 template (present) charstring dest_realm := ?,
524 template (present) UINT32 hbh_id := ?,
525 template (present) UINT32 ete_id := ?) :=
526 tr_DIAMETER(flags := '0???????'B,
527 cmd_code := Abort_Session,
528 app_id := int2oct(c_DIAMETER_3GPP_S6b_AID, 4),
529 hbh_id := hbh_id, ete_id := ete_id,
530 avps := superset(
531 tr_AVP_SessionId(sess_id),
532 /* Optional: DRMP */
533 tr_AVP_ResultCode(res_code),
534 tr_AVP_OriginHost(orig_host),
535 tr_AVP_OriginRealm(orig_realm)
536 ));
537
538template (value) PDU_DIAMETER
539ts_DIA_S6b_ASA(template (value) DIAMETER_Resultcode res_code := DIAMETER_SUCCESS,
540 template (value) octetstring sess_id := c_def_sess_id,
541 template (value) charstring orig_host := "aaa.localdomain",
542 template (value) charstring orig_realm := "localdomain",
543 template (value) charstring dest_realm := "localdomain",
544 template (value) UINT32 hbh_id := '00000000'O,
545 template (value) UINT32 ete_id := '00000000'O) :=
546 ts_DIAMETER(flags := '01000000'B,
547 cmd_code := Abort_Session,
548 app_id := int2oct(c_DIAMETER_3GPP_S6b_AID, 4),
549 hbh_id := hbh_id, ete_id := ete_id,
550 avps := {
551 ts_AVP_SessionId(sess_id),
552 /* Optional: DRMP, */
553 ts_AVP_ResultCode(res_code),
554 ts_AVP_OriginHost(orig_host),
555 ts_AVP_OriginRealm(orig_realm)
556 });
557
Pau Espin Pedrol4669b612023-10-23 17:43:14 +0200558}