Pau Espin Pedrol | 4669b61 | 2023-10-23 17:43:14 +0200 | [diff] [blame] | 1 | module 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 | |
| 14 | import from General_Types all; |
| 15 | import from DIAMETER_Types all; |
| 16 | import from DIAMETER_Templates all; |
Pau Espin Pedrol | 7399673 | 2023-10-23 18:16:21 +0200 | [diff] [blame] | 17 | import from DIAMETER_rfc5447_Templates all; |
Pau Espin Pedrol | d9ff19e | 2024-03-11 12:16:13 +0100 | [diff] [blame^] | 18 | import from DIAMETER_ts29_229_Templates all; |
Pau Espin Pedrol | 5154e35 | 2024-03-05 13:23:40 +0100 | [diff] [blame] | 19 | import from DIAMETER_ts29_272_Templates all; |
Pau Espin Pedrol | 4669b61 | 2023-10-23 17:43:14 +0200 | [diff] [blame] | 20 | import from Osmocom_Types all; |
| 21 | import from Misc_Helpers all; |
| 22 | |
| 23 | /* 3GPP TS 29.273 Section 8.2 */ |
| 24 | const uint32_t c_DIAMETER_3GPP_SWx_AID := 16777265; |
| 25 | /* 3GPP TS 29.273 Section 9 */ |
| 26 | const uint32_t c_DIAMETER_3GPP_S6b_AID := 16777272; |
| 27 | |
Pau Espin Pedrol | 7399673 | 2023-10-23 18:16:21 +0200 | [diff] [blame] | 28 | /* 5.2.3.3 MIP6-Feature-Vector bits */ |
| 29 | const uint64_t DIA_TS29_373_MIP6_Feature_Vector_PMIP6_SUPPORTED := hex2int('0000010000000000'H); |
| 30 | const uint64_t DIA_TS29_373_MIP6_Feature_Vector_ASSIGN_LOCAL_IP := hex2int('0000080000000000'H); |
| 31 | const uint64_t DIA_TS29_373_MIP6_Feature_Vector_MIP4_SUPPORTED := hex2int('0000100000000000'H); |
| 32 | const uint64_t DIA_TS29_373_MIP6_Feature_Vector_OPTIMIZED_IDLE_MODE_MOBILITY := hex2int('0000200000000000'H); |
| 33 | const uint64_t DIA_TS29_373_MIP6_Feature_Vector_GTPv2_SUPPORTED := hex2int('0000400000000000'H); |
| 34 | |
Pau Espin Pedrol | 4669b61 | 2023-10-23 17:43:14 +0200 | [diff] [blame] | 35 | /******************************* |
| 36 | * SWx 3GPP TS 29.273 section 8 |
| 37 | *******************************/ |
| 38 | |
Pau Espin Pedrol | 9b2ebc0 | 2024-03-05 13:25:19 +0100 | [diff] [blame] | 39 | /* TS 29.273 8.2.3.1 Non-3GPP-User-Data */ |
| 40 | template (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 */ |
| 59 | template (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 */ |
| 70 | template (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 Pedrol | 4669b61 | 2023-10-23 17:43:14 +0200 | [diff] [blame] | 82 | /* SIP-Auth-Data-Item , 3GPP TS 29.273 8.2.3.9 */ |
| 83 | template (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 | } |
| 107 | template (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 */ |
| 133 | template (present) PDU_DIAMETER |
| 134 | tr_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 */ |
| 158 | template (value) PDU_DIAMETER |
| 159 | ts_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 Pedrol | 6601f22 | 2024-03-05 18:51:09 +0100 | [diff] [blame] | 184 | template (value) PDU_DIAMETER |
| 185 | ts_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 Pedrol | 4669b61 | 2023-10-23 17:43:14 +0200 | [diff] [blame] | 208 | /* 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 */ |
| 211 | template (present) PDU_DIAMETER |
| 212 | tr_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 */ |
| 240 | template (value) PDU_DIAMETER |
| 241 | ts_DIA_SWx_SAA(template (value) hexstring imsi, |
Pau Espin Pedrol | 9b2ebc0 | 2024-03-05 13:25:19 +0100 | [diff] [blame] | 242 | template (value) AAA_3GPP_PDN_Type pdn_type, |
| 243 | template (value) charstring apn, |
Pau Espin Pedrol | 4669b61 | 2023-10-23 17:43:14 +0200 | [diff] [blame] | 244 | 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 Pedrol | 9b2ebc0 | 2024-03-05 13:25:19 +0100 | [diff] [blame] | 262 | ts_AVP_UserNameImsi(valueof(imsi)), |
| 263 | ts_AVP_3GPP_Non_3GPP_User_Data(pdn_type, apn) |
Pau Espin Pedrol | 4669b61 | 2023-10-23 17:43:14 +0200 | [diff] [blame] | 264 | /* TODO: |
Pau Espin Pedrol | 4669b61 | 2023-10-23 17:43:14 +0200 | [diff] [blame] | 265 | * [ 3GPP-AAA-Server-Name ] |
| 266 | * [ OC-Supported-Features ] |
| 267 | * [ OC-OLR ] ] |
| 268 | * *[ Load ] |
| 269 | * *[ Supported-Features ] |
| 270 | */ |
| 271 | }); |
| 272 | |
Pau Espin Pedrol | d9ff19e | 2024-03-11 12:16:13 +0100 | [diff] [blame^] | 273 | /* Registration-Termination-Request (RTR) , 8.2.2.4 Network Initiated De-Registration by HSS Procedure */ |
| 274 | template (value) PDU_DIAMETER |
| 275 | ts_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 | |
| 306 | template (present) PDU_DIAMETER |
| 307 | tr_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 Pedrol | 4669b61 | 2023-10-23 17:43:14 +0200 | [diff] [blame] | 328 | /******************************* |
| 329 | * S6b 3GPP TS 29.273 section 9 |
| 330 | *******************************/ |
| 331 | |
| 332 | /* TS 29.273 9.2.2.5.1 AA-Request (AAR) */ |
Pau Espin Pedrol | 518e24b | 2024-02-23 17:45:08 +0100 | [diff] [blame] | 333 | template (present) PDU_DIAMETER |
| 334 | tr_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 Pedrol | 4669b61 | 2023-10-23 17:43:14 +0200 | [diff] [blame] | 362 | template (value) PDU_DIAMETER |
Pau Espin Pedrol | 8586b26 | 2024-02-09 18:12:21 +0100 | [diff] [blame] | 363 | ts_DIA_S6b_AAR(template (value) charstring username_nai, |
Pau Espin Pedrol | 7399673 | 2023-10-23 18:16:21 +0200 | [diff] [blame] | 364 | template (value) MIPv6_NONE_MIP6_Feature_Vector mip6_feat_vec, |
Pau Espin Pedrol | 2c2e187 | 2023-10-23 18:31:03 +0200 | [diff] [blame] | 365 | template (value) charstring apn, |
Pau Espin Pedrol | 009ab6f | 2024-03-05 13:25:19 +0100 | [diff] [blame] | 366 | template (value) MIPv4_NONE_MIP_Home_Agent_Address pgw_addr, |
Pau Espin Pedrol | 4669b61 | 2023-10-23 17:43:14 +0200 | [diff] [blame] | 367 | 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 Pedrol | 8586b26 | 2024-02-09 18:12:21 +0100 | [diff] [blame] | 386 | ts_AVP_UserName(char2oct(valueof(username_nai))), |
Pau Espin Pedrol | 009ab6f | 2024-03-05 13:25:19 +0100 | [diff] [blame] | 387 | ts_AVP_MIP6AgentInfo(pgw_addr), |
Pau Espin Pedrol | 2c2e187 | 2023-10-23 18:31:03 +0200 | [diff] [blame] | 388 | ts_AVP_MIP6FeatureVector(mip6_feat_vec), |
| 389 | ts_AVP_ServiceSelection(valueof(apn)) |
Pau Espin Pedrol | 4669b61 | 2023-10-23 17:43:14 +0200 | [diff] [blame] | 390 | /* TODO: Lots other optional */ |
| 391 | }); |
| 392 | |
| 393 | /* TS 29.273 9.2.2.2.2 AA-Answer (AAA) */ |
| 394 | template (present) PDU_DIAMETER |
| 395 | tr_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 Pedrol | 518e24b | 2024-02-23 17:45:08 +0100 | [diff] [blame] | 417 | template (value) PDU_DIAMETER |
| 418 | ts_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 Pedrol | 4944a5c | 2024-01-24 17:23:01 +0100 | [diff] [blame] | 438 | /* 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 */ |
| 440 | template (value) PDU_DIAMETER |
| 441 | ts_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 */ |
| 468 | template (present) PDU_DIAMETER |
| 469 | tr_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 Pedrol | 4669b61 | 2023-10-23 17:43:14 +0200 | [diff] [blame] | 489 | } |