jolly has uploaded this change for review. ( https://gerrit.osmocom.org/c/onomondo-ipa/+/43031?usp=email )
Change subject: V1.2: Add setDefaultDpAddress function ......................................................................
V1.2: Add setDefaultDpAddress function
Add setDefaultDpAddress to EuiccResultData. Implement the SGP.32 function SetDefaultDpAddress and handle the setDefaultDpAddress PSMO.
The IoT eUICC emulation uses the non-IoT eUICC SGP.22 function SetDefaultDpAddress.
Reference: SGP.32 Section 2.11.1.1.3
Related: SYS#8101 Change-Id: I514b03240289469142e6a41a7290a4afce199318 --- M asn1/SGP32Definitions.asn M src/ipa/libasn/CMakeLists.txt M src/ipa/libasn/EuiccResultData.c M src/ipa/libasn/EuiccResultData.h M src/ipa/libasn/Psmo.c M src/ipa/libasn/Psmo.h A src/ipa/libasn/SGP32-SetDefaultDpAddressRequest.c A src/ipa/libasn/SGP32-SetDefaultDpAddressRequest.h A src/ipa/libasn/SGP32-SetDefaultDpAddressResponse.c A src/ipa/libasn/SGP32-SetDefaultDpAddressResponse.h M src/ipa/libasn/SetDefaultDpAddressResponse.c M src/ipa/libasn/SetDefaultDpAddressResponse.h M src/ipa/libipa/CMakeLists.txt M src/ipa/libipa/es10b_load_euicc_pkg.c A src/ipa/libipa/es10c_set_def_dp_addr.c A src/ipa/libipa/es10c_set_def_dp_addr.h 16 files changed, 404 insertions(+), 22 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/onomondo-ipa refs/changes/31/43031/1
diff --git a/asn1/SGP32Definitions.asn b/asn1/SGP32Definitions.asn index c37ac17..0e3723c 100644 --- a/asn1/SGP32Definitions.asn +++ b/asn1/SGP32Definitions.asn @@ -104,7 +104,8 @@ smdpAddress [2] UTF8String OPTIONAL }, setFallbackAttribute [8] SEQUENCE {iccid [APPLICATION 26] Iccid}, - unsetFallbackAttribute [9] SEQUENCE {} + unsetFallbackAttribute [9] SEQUENCE {}, + setDefaultDpAddress [101] SGP32-SetDefaultDpAddressRequest -- Tag 'BF65' } -- ASN1STOP
@@ -181,7 +182,8 @@ unknownOrDamagedCommand(2), interruption(3), undefinedError(127) - } + }, + setDefaultDpAddressResult [101] SetDefaultDpAddressResponse } EuiccPackageErrorSigned ::= SEQUENCE { euiccPackageErrorDataSigned EuiccPackageErrorDataSigned, @@ -542,6 +544,16 @@ } -- ASN1STOP
+-- Section 5.9.25 +-- ASN1START +SGP32-SetDefaultDpAddressRequest ::= [101] SEQUENCE { -- Tag 'BF65' + defaultDpAddress UTF8String -- Default SM-DP+ address as an FQDN +} +SGP32-SetDefaultDpAddressResponse ::= [101] SEQUENCE { -- Tag 'BF65' + setDefaultDpAddressResult INTEGER { ok (0), undefinedError (127)} +} +-- ASN1STOP + -- Section 5.14.2 -- ASN1START SGP32-PrepareDownloadResponse ::= [33] CHOICE { -- Tag 'BF21' diff --git a/src/ipa/libasn/CMakeLists.txt b/src/ipa/libasn/CMakeLists.txt index 68338fb..bd8ed73 100644 --- a/src/ipa/libasn/CMakeLists.txt +++ b/src/ipa/libasn/CMakeLists.txt @@ -818,6 +818,10 @@ SGP32-RetrieveNotificationsListRequest.h SGP32-RetrieveNotificationsListResponse.c SGP32-RetrieveNotificationsListResponse.h +SGP32-SetDefaultDpAddressRequest.c +SGP32-SetDefaultDpAddressRequest.h +SGP32-SetDefaultDpAddressResponse.c +SGP32-SetDefaultDpAddressResponse.h SkipCerts.c SkipCerts.h SmdpSigned2.c diff --git a/src/ipa/libasn/EuiccResultData.c b/src/ipa/libasn/EuiccResultData.c index 15fc272..5a0376c 100644 --- a/src/ipa/libasn/EuiccResultData.c +++ b/src/ipa/libasn/EuiccResultData.c @@ -11,7 +11,7 @@ { 0, 0 }, -1}; asn_per_constraints_t asn_PER_type_EuiccResultData_constr_1 CC_NOTUSED = { - { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 13 } /* (0..13,...) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 14 } /* (0..14,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; @@ -142,9 +142,18 @@ 0, 0, /* No default value */ "processingTerminated" }, + { ATF_NOFLAGS, 0, offsetof(struct EuiccResultData, choice.setDefaultDpAddressResult), + (ASN_TAG_CLASS_CONTEXT | (101 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SetDefaultDpAddressResponse, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "setDefaultDpAddressResult" + }, }; -static const unsigned asn_MAP_EuiccResultData_to_canonical_1[] = { 13, 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3 }; -static const unsigned asn_MAP_EuiccResultData_from_canonical_1[] = { 1, 2, 3, 13, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0 }; +static const unsigned asn_MAP_EuiccResultData_to_canonical_1[] = { 13, 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 3, 14 }; +static const unsigned asn_MAP_EuiccResultData_from_canonical_1[] = { 1, 2, 3, 13, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 14 }; static const asn_TYPE_tag2member_t asn_MAP_EuiccResultData_tag2el_1[] = { { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 13, 0, 0 }, /* processingTerminated */ { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* enableResult */ @@ -159,7 +168,8 @@ { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 10, 0, 0 }, /* rollbackResult */ { (ASN_TAG_CLASS_CONTEXT | (13 << 2)), 11, 0, 0 }, /* setFallbackAttributeResult */ { (ASN_TAG_CLASS_CONTEXT | (14 << 2)), 12, 0, 0 }, /* unsetFallbackAttributeResult */ - { (ASN_TAG_CLASS_CONTEXT | (45 << 2)), 3, 0, 0 } /* listProfileInfoResult */ + { (ASN_TAG_CLASS_CONTEXT | (45 << 2)), 3, 0, 0 }, /* listProfileInfoResult */ + { (ASN_TAG_CLASS_CONTEXT | (101 << 2)), 14, 0, 0 } /* setDefaultDpAddressResult */ }; asn_CHOICE_specifics_t asn_SPC_EuiccResultData_specs_1 = { sizeof(struct EuiccResultData), @@ -167,10 +177,10 @@ offsetof(struct EuiccResultData, present), sizeof(((struct EuiccResultData *)0)->present), asn_MAP_EuiccResultData_tag2el_1, - 14, /* Count of tags in the map */ + 15, /* Count of tags in the map */ asn_MAP_EuiccResultData_to_canonical_1, asn_MAP_EuiccResultData_from_canonical_1, - 14 /* Extensions start */ + 15 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_EuiccResultData = { "EuiccResultData", @@ -182,7 +192,7 @@ 0, /* No tags (count) */ { &asn_OER_type_EuiccResultData_constr_1, &asn_PER_type_EuiccResultData_constr_1, CHOICE_constraint }, asn_MBR_EuiccResultData_1, - 14, /* Elements count */ + 15, /* Elements count */ &asn_SPC_EuiccResultData_specs_1 /* Additional specs */ };
diff --git a/src/ipa/libasn/EuiccResultData.h b/src/ipa/libasn/EuiccResultData.h index 79197a6..aa7069b 100644 --- a/src/ipa/libasn/EuiccResultData.h +++ b/src/ipa/libasn/EuiccResultData.h @@ -26,6 +26,7 @@ #include "SetFallbackAttributeResult.h" #include "UnsetFallbackAttributeResult.h" #include <NativeInteger.h> +#include "SetDefaultDpAddressResponse.h" #include <constr_CHOICE.h>
#ifdef __cplusplus @@ -48,7 +49,8 @@ EuiccResultData_PR_rollbackResult, EuiccResultData_PR_setFallbackAttributeResult, EuiccResultData_PR_unsetFallbackAttributeResult, - EuiccResultData_PR_processingTerminated + EuiccResultData_PR_processingTerminated, + EuiccResultData_PR_setDefaultDpAddressResult /* Extensions may appear below */ } EuiccResultData_PR; @@ -77,6 +79,7 @@ SetFallbackAttributeResult_t setFallbackAttributeResult; UnsetFallbackAttributeResult_t unsetFallbackAttributeResult; long processingTerminated; + SetDefaultDpAddressResponse_t setDefaultDpAddressResult; /* * This type is extensible, * possible extensions are below. @@ -90,7 +93,7 @@ /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_EuiccResultData; extern asn_CHOICE_specifics_t asn_SPC_EuiccResultData_specs_1; -extern asn_TYPE_member_t asn_MBR_EuiccResultData_1[14]; +extern asn_TYPE_member_t asn_MBR_EuiccResultData_1[15]; extern asn_per_constraints_t asn_PER_type_EuiccResultData_constr_1;
#ifdef __cplusplus diff --git a/src/ipa/libasn/Psmo.c b/src/ipa/libasn/Psmo.c index 144a95a..e6bb849 100644 --- a/src/ipa/libasn/Psmo.c +++ b/src/ipa/libasn/Psmo.c @@ -11,7 +11,7 @@ { 0, 0 }, -1}; asn_per_constraints_t asn_PER_type_Psmo_constr_1 CC_NOTUSED = { - { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 8 } /* (0..8,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; @@ -393,9 +393,18 @@ 0, 0, /* No default value */ "unsetFallbackAttribute" }, + { ATF_NOFLAGS, 0, offsetof(struct Psmo, choice.setDefaultDpAddress), + (ASN_TAG_CLASS_CONTEXT | (101 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SGP32_SetDefaultDpAddressRequest, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "setDefaultDpAddress" + }, }; -static const unsigned asn_MAP_Psmo_to_canonical_1[] = { 0, 1, 2, 4, 5, 6, 7, 3 }; -static const unsigned asn_MAP_Psmo_from_canonical_1[] = { 0, 1, 2, 7, 3, 4, 5, 6 }; +static const unsigned asn_MAP_Psmo_to_canonical_1[] = { 0, 1, 2, 4, 5, 6, 7, 3, 8 }; +static const unsigned asn_MAP_Psmo_from_canonical_1[] = { 0, 1, 2, 7, 3, 4, 5, 6, 8 }; static const asn_TYPE_tag2member_t asn_MAP_Psmo_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 0, 0, 0 }, /* enable */ { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 1, 0, 0 }, /* disable */ @@ -404,7 +413,8 @@ { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 5, 0, 0 }, /* configureImmediateEnable */ { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 6, 0, 0 }, /* setFallbackAttribute */ { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 7, 0, 0 }, /* unsetFallbackAttribute */ - { (ASN_TAG_CLASS_CONTEXT | (45 << 2)), 3, 0, 0 } /* listProfileInfo */ + { (ASN_TAG_CLASS_CONTEXT | (45 << 2)), 3, 0, 0 }, /* listProfileInfo */ + { (ASN_TAG_CLASS_CONTEXT | (101 << 2)), 8, 0, 0 } /* setDefaultDpAddress */ }; asn_CHOICE_specifics_t asn_SPC_Psmo_specs_1 = { sizeof(struct Psmo), @@ -412,10 +422,10 @@ offsetof(struct Psmo, present), sizeof(((struct Psmo *)0)->present), asn_MAP_Psmo_tag2el_1, - 8, /* Count of tags in the map */ + 9, /* Count of tags in the map */ asn_MAP_Psmo_to_canonical_1, asn_MAP_Psmo_from_canonical_1, - 8 /* Extensions start */ + 9 /* Extensions start */ }; asn_TYPE_descriptor_t asn_DEF_Psmo = { "Psmo", @@ -427,7 +437,7 @@ 0, /* No tags (count) */ { &asn_OER_type_Psmo_constr_1, &asn_PER_type_Psmo_constr_1, CHOICE_constraint }, asn_MBR_Psmo_1, - 8, /* Elements count */ + 9, /* Elements count */ &asn_SPC_Psmo_specs_1 /* Additional specs */ };
diff --git a/src/ipa/libasn/Psmo.h b/src/ipa/libasn/Psmo.h index c5e3e10..e00f820 100644 --- a/src/ipa/libasn/Psmo.h +++ b/src/ipa/libasn/Psmo.h @@ -13,6 +13,7 @@
/* Including external dependencies */ #include "ProfileInfoListRequest.h" +#include "SGP32-SetDefaultDpAddressRequest.h" #include "Iccid.h" #include <NULL.h> #include <constr_SEQUENCE.h> @@ -34,7 +35,8 @@ Psmo_PR_getRAT, Psmo_PR_configureImmediateEnable, Psmo_PR_setFallbackAttribute, - Psmo_PR_unsetFallbackAttribute + Psmo_PR_unsetFallbackAttribute, + Psmo_PR_setDefaultDpAddress /* Extensions may appear below */ } Psmo_PR; @@ -115,6 +117,7 @@ /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } unsetFallbackAttribute; + SGP32_SetDefaultDpAddressRequest_t setDefaultDpAddress; /* * This type is extensible, * possible extensions are below. @@ -128,7 +131,7 @@ /* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_Psmo; extern asn_CHOICE_specifics_t asn_SPC_Psmo_specs_1; -extern asn_TYPE_member_t asn_MBR_Psmo_1[8]; +extern asn_TYPE_member_t asn_MBR_Psmo_1[9]; extern asn_per_constraints_t asn_PER_type_Psmo_constr_1;
#ifdef __cplusplus diff --git a/src/ipa/libasn/SGP32-SetDefaultDpAddressRequest.c b/src/ipa/libasn/SGP32-SetDefaultDpAddressRequest.c new file mode 100644 index 0000000..471f70d --- /dev/null +++ b/src/ipa/libasn/SGP32-SetDefaultDpAddressRequest.c @@ -0,0 +1,51 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "SGP32Definitions" + * found in "../../../asn1/SGP32Definitions.asn" + * `asn1c -fcompound-names -no-gen-example` + */ + +#include "SGP32-SetDefaultDpAddressRequest.h" + +asn_TYPE_member_t asn_MBR_SGP32_SetDefaultDpAddressRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SGP32_SetDefaultDpAddressRequest, defaultDpAddress), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UTF8String, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "defaultDpAddress" + }, +}; +static const ber_tlv_tag_t asn_DEF_SGP32_SetDefaultDpAddressRequest_tags_1[] = { + (ASN_TAG_CLASS_CONTEXT | (101 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SGP32_SetDefaultDpAddressRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* defaultDpAddress */ +}; +asn_SEQUENCE_specifics_t asn_SPC_SGP32_SetDefaultDpAddressRequest_specs_1 = { + sizeof(struct SGP32_SetDefaultDpAddressRequest), + offsetof(struct SGP32_SetDefaultDpAddressRequest, _asn_ctx), + asn_MAP_SGP32_SetDefaultDpAddressRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SGP32_SetDefaultDpAddressRequest = { + "SGP32-SetDefaultDpAddressRequest", + "SGP32-SetDefaultDpAddressRequest", + &asn_OP_SEQUENCE, + asn_DEF_SGP32_SetDefaultDpAddressRequest_tags_1, + sizeof(asn_DEF_SGP32_SetDefaultDpAddressRequest_tags_1) + /sizeof(asn_DEF_SGP32_SetDefaultDpAddressRequest_tags_1[0]) - 1, /* 1 */ + asn_DEF_SGP32_SetDefaultDpAddressRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_SGP32_SetDefaultDpAddressRequest_tags_1) + /sizeof(asn_DEF_SGP32_SetDefaultDpAddressRequest_tags_1[0]), /* 2 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SGP32_SetDefaultDpAddressRequest_1, + 1, /* Elements count */ + &asn_SPC_SGP32_SetDefaultDpAddressRequest_specs_1 /* Additional specs */ +}; + diff --git a/src/ipa/libasn/SGP32-SetDefaultDpAddressRequest.h b/src/ipa/libasn/SGP32-SetDefaultDpAddressRequest.h new file mode 100644 index 0000000..137b5e9 --- /dev/null +++ b/src/ipa/libasn/SGP32-SetDefaultDpAddressRequest.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "SGP32Definitions" + * found in "../../../asn1/SGP32Definitions.asn" + * `asn1c -fcompound-names -no-gen-example` + */ + +#ifndef _SGP32_SetDefaultDpAddressRequest_H_ +#define _SGP32_SetDefaultDpAddressRequest_H_ + + +#include <asn_application.h> + +/* Including external dependencies */ +#include <UTF8String.h> +#include <constr_SEQUENCE.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* SGP32-SetDefaultDpAddressRequest */ +typedef struct SGP32_SetDefaultDpAddressRequest { + UTF8String_t defaultDpAddress; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SGP32_SetDefaultDpAddressRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SGP32_SetDefaultDpAddressRequest; +extern asn_SEQUENCE_specifics_t asn_SPC_SGP32_SetDefaultDpAddressRequest_specs_1; +extern asn_TYPE_member_t asn_MBR_SGP32_SetDefaultDpAddressRequest_1[1]; + +#ifdef __cplusplus +} +#endif + +#endif /* _SGP32_SetDefaultDpAddressRequest_H_ */ +#include <asn_internal.h> diff --git a/src/ipa/libasn/SGP32-SetDefaultDpAddressResponse.c b/src/ipa/libasn/SGP32-SetDefaultDpAddressResponse.c new file mode 100644 index 0000000..04ee4a0 --- /dev/null +++ b/src/ipa/libasn/SGP32-SetDefaultDpAddressResponse.c @@ -0,0 +1,51 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "SGP32Definitions" + * found in "../../../asn1/SGP32Definitions.asn" + * `asn1c -fcompound-names -no-gen-example` + */ + +#include "SGP32-SetDefaultDpAddressResponse.h" + +static asn_TYPE_member_t asn_MBR_SGP32_SetDefaultDpAddressResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SGP32_SetDefaultDpAddressResponse, setDefaultDpAddressResult), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, + { 0, 0, 0 }, + 0, 0, /* No default value */ + "setDefaultDpAddressResult" + }, +}; +static const ber_tlv_tag_t asn_DEF_SGP32_SetDefaultDpAddressResponse_tags_1[] = { + (ASN_TAG_CLASS_CONTEXT | (101 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SGP32_SetDefaultDpAddressResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* setDefaultDpAddressResult */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SGP32_SetDefaultDpAddressResponse_specs_1 = { + sizeof(struct SGP32_SetDefaultDpAddressResponse), + offsetof(struct SGP32_SetDefaultDpAddressResponse, _asn_ctx), + asn_MAP_SGP32_SetDefaultDpAddressResponse_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* First extension addition */ +}; +asn_TYPE_descriptor_t asn_DEF_SGP32_SetDefaultDpAddressResponse = { + "SGP32-SetDefaultDpAddressResponse", + "SGP32-SetDefaultDpAddressResponse", + &asn_OP_SEQUENCE, + asn_DEF_SGP32_SetDefaultDpAddressResponse_tags_1, + sizeof(asn_DEF_SGP32_SetDefaultDpAddressResponse_tags_1) + /sizeof(asn_DEF_SGP32_SetDefaultDpAddressResponse_tags_1[0]) - 1, /* 1 */ + asn_DEF_SGP32_SetDefaultDpAddressResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_SGP32_SetDefaultDpAddressResponse_tags_1) + /sizeof(asn_DEF_SGP32_SetDefaultDpAddressResponse_tags_1[0]), /* 2 */ + { 0, 0, SEQUENCE_constraint }, + asn_MBR_SGP32_SetDefaultDpAddressResponse_1, + 1, /* Elements count */ + &asn_SPC_SGP32_SetDefaultDpAddressResponse_specs_1 /* Additional specs */ +}; + diff --git a/src/ipa/libasn/SGP32-SetDefaultDpAddressResponse.h b/src/ipa/libasn/SGP32-SetDefaultDpAddressResponse.h new file mode 100644 index 0000000..83e8d2a --- /dev/null +++ b/src/ipa/libasn/SGP32-SetDefaultDpAddressResponse.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.29 (http://lionet.info/asn1c) + * From ASN.1 module "SGP32Definitions" + * found in "../../../asn1/SGP32Definitions.asn" + * `asn1c -fcompound-names -no-gen-example` + */ + +#ifndef _SGP32_SetDefaultDpAddressResponse_H_ +#define _SGP32_SetDefaultDpAddressResponse_H_ + + +#include <asn_application.h> + +/* Including external dependencies */ +#include <NativeInteger.h> +#include <constr_SEQUENCE.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SGP32_SetDefaultDpAddressResponse__setDefaultDpAddressResult { + SGP32_SetDefaultDpAddressResponse__setDefaultDpAddressResult_ok = 0, + SGP32_SetDefaultDpAddressResponse__setDefaultDpAddressResult_undefinedError = 127 +} e_SGP32_SetDefaultDpAddressResponse__setDefaultDpAddressResult; + +/* SGP32-SetDefaultDpAddressResponse */ +typedef struct SGP32_SetDefaultDpAddressResponse { + long setDefaultDpAddressResult; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SGP32_SetDefaultDpAddressResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SGP32_SetDefaultDpAddressResponse; + +#ifdef __cplusplus +} +#endif + +#endif /* _SGP32_SetDefaultDpAddressResponse_H_ */ +#include <asn_internal.h> diff --git a/src/ipa/libasn/SetDefaultDpAddressResponse.c b/src/ipa/libasn/SetDefaultDpAddressResponse.c index 0115f19..6aa5a5f 100644 --- a/src/ipa/libasn/SetDefaultDpAddressResponse.c +++ b/src/ipa/libasn/SetDefaultDpAddressResponse.c @@ -7,7 +7,7 @@
#include "SetDefaultDpAddressResponse.h"
-static asn_TYPE_member_t asn_MBR_SetDefaultDpAddressResponse_1[] = { +asn_TYPE_member_t asn_MBR_SetDefaultDpAddressResponse_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SetDefaultDpAddressResponse, setDefaultDpAddressResult), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ @@ -25,7 +25,7 @@ static const asn_TYPE_tag2member_t asn_MAP_SetDefaultDpAddressResponse_tag2el_1[] = { { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* setDefaultDpAddressResult */ }; -static asn_SEQUENCE_specifics_t asn_SPC_SetDefaultDpAddressResponse_specs_1 = { +asn_SEQUENCE_specifics_t asn_SPC_SetDefaultDpAddressResponse_specs_1 = { sizeof(struct SetDefaultDpAddressResponse), offsetof(struct SetDefaultDpAddressResponse, _asn_ctx), asn_MAP_SetDefaultDpAddressResponse_tag2el_1, diff --git a/src/ipa/libasn/SetDefaultDpAddressResponse.h b/src/ipa/libasn/SetDefaultDpAddressResponse.h index 14a049b..06cd019 100644 --- a/src/ipa/libasn/SetDefaultDpAddressResponse.h +++ b/src/ipa/libasn/SetDefaultDpAddressResponse.h @@ -39,6 +39,8 @@
/* Implementation */ extern asn_TYPE_descriptor_t asn_DEF_SetDefaultDpAddressResponse; +extern asn_SEQUENCE_specifics_t asn_SPC_SetDefaultDpAddressResponse_specs_1; +extern asn_TYPE_member_t asn_MBR_SetDefaultDpAddressResponse_1[1];
#ifdef __cplusplus } diff --git a/src/ipa/libipa/CMakeLists.txt b/src/ipa/libipa/CMakeLists.txt index e6bed87..7a6ac28 100644 --- a/src/ipa/libipa/CMakeLists.txt +++ b/src/ipa/libipa/CMakeLists.txt @@ -23,6 +23,7 @@ es10c_delete_prfle.c es10c_disable_prfle.c es10c_enable_prfle.c + es10c_set_def_dp_addr.c es10b_immediate_enable.c es10c_get_eid.c es10c_get_prfle_info.c diff --git a/src/ipa/libipa/es10b_load_euicc_pkg.c b/src/ipa/libipa/es10b_load_euicc_pkg.c index 01e743a..ff1fc01 100644 --- a/src/ipa/libipa/es10b_load_euicc_pkg.c +++ b/src/ipa/libipa/es10b_load_euicc_pkg.c @@ -25,6 +25,7 @@ #include "es10c_disable_prfle.h" #include "es10c_delete_prfle.h" #include "es10c_get_prfle_info.h" +#include "es10c_set_def_dp_addr.h" #include "es10b_get_eim_cfg_data.h" #include "es10b_add_init_eim.h" #include "es10b_get_rat.h" @@ -292,6 +293,30 @@ return euicc_result_data; }
+struct EuiccResultData *iot_emo_do_setDefaultDpAddress_psmo(struct ipa_context *ctx, + const SGP32_SetDefaultDpAddressRequest_t *setDefaultDpAddress_psmo) +{ + struct EuiccResultData *euicc_result_data = IPA_ALLOC_ZERO(struct EuiccResultData); + struct ipa_es10c_set_def_dp_addr_req set_def_dp_addr_req = { 0 }; + struct ipa_es10c_set_def_dp_addr_res *set_def_dp_addr_res = NULL; + + euicc_result_data->present = EuiccResultData_PR_setDefaultDpAddressResult; + + set_def_dp_addr_req.req.defaultDpAddress = setDefaultDpAddress_psmo->defaultDpAddress; + + set_def_dp_addr_res = ipa_es10c_set_def_dp_addr(ctx, &set_def_dp_addr_req); + if (set_def_dp_addr_res) { + euicc_result_data->choice.setDefaultDpAddressResult.setDefaultDpAddressResult = + set_def_dp_addr_res->res->setDefaultDpAddressResult; + } else { + euicc_result_data->choice.setDefaultDpAddressResult.setDefaultDpAddressResult = + SetDefaultDpAddressResponse__setDefaultDpAddressResult_undefinedError; + } + + ipa_es10c_set_def_dp_addr_res_free(set_def_dp_addr_res); + return euicc_result_data; +} + struct EuiccResultData *iot_emo_do_addEim_eco(struct ipa_context *ctx, const struct EimConfigurationData *addEim_eco) { struct EuiccResultData *euicc_result_data = IPA_ALLOC_ZERO(struct EuiccResultData); @@ -632,6 +657,9 @@ case Psmo_PR_unsetFallbackAttribute: psmo_result = iot_emo_do_unsetFallbackAttribute_psmo(ctx, &psmo->choice.unsetFallbackAttribute); break; + case Psmo_PR_setDefaultDpAddress: + psmo_result = iot_emo_do_setDefaultDpAddress_psmo(ctx, &psmo->choice.setDefaultDpAddress); + break; default: IPA_LOGP_ES10X("LoadEuiccPackage", LERROR, "ignoring invalid or unsupported PSMO!\n"); break; diff --git a/src/ipa/libipa/es10c_set_def_dp_addr.c b/src/ipa/libipa/es10c_set_def_dp_addr.c new file mode 100644 index 0000000..db755dd --- /dev/null +++ b/src/ipa/libipa/es10c_set_def_dp_addr.c @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2026 sysmocom - s.f.m.c. GmbH. All rights reserved. + * + * SPDX-License-Identifier: AGPL-3.0-only + * + * Author: Philipp Maier pmaier@sysmocom.de / sysmocom - s.f.m.c. GmbH + * Andreas Eversberg aeversberg@sysmocom.de / sysmocom - s.f.m.c. GmbH + * + * See also: GSMA SGP.22, 5.7.4: Function (ES10c): SetDefaultDpAddress + */ + +#include <stdio.h> +#include <assert.h> +#include <onomondo/ipa/utils.h> +#include "context.h" +#include "utils.h" +#include "euicc.h" +#include "es10x.h" +#include "es10c_set_def_dp_addr.h" + +static const struct num_str_map error_code_strings[] = { + { SetDefaultDpAddressResponse__setDefaultDpAddressResult_ok, "ok" }, + { SetDefaultDpAddressResponse__setDefaultDpAddressResult_undefinedError, "undefinedError" }, + { 0, NULL } +}; + +static int dec_set_def_dp_addr_res(struct ipa_es10c_set_def_dp_addr_res *res, const struct ipa_buf *es10c_res) +{ + struct SetDefaultDpAddressResponse *asn = NULL; + + asn = ipa_es10x_res_dec(&asn_DEF_SetDefaultDpAddressResponse, es10c_res, "SetDefaultDpAddress"); + if (!asn) + return -EINVAL; + + if (asn->setDefaultDpAddressResult != SetDefaultDpAddressResponse__setDefaultDpAddressResult_ok) { + IPA_LOGP_ES10X("SetDefaultDpAddress", LERROR, "function failed with error code %ld=%s!\n", + asn->setDefaultDpAddressResult, + ipa_str_from_num(error_code_strings, asn->setDefaultDpAddressResult, "(unknown)")); + } else { + IPA_LOGP_ES10X("SetDefaultDpAddress", LERROR, "function succeeded with status code %ld=%s!\n", + asn->setDefaultDpAddressResult, + ipa_str_from_num(error_code_strings, asn->setDefaultDpAddressResult, "(unknown)")); + } + + res->res = asn; + return 0; +} + +/*! Function (Es10c): SetDefaultDpAddress. + * \param[inout] ctx pointer to ipa_context. + * \param[in] req pointer to struct that holds the function parameters. + * \returns pointer newly allocated struct with function result, NULL on error. */ +struct ipa_es10c_set_def_dp_addr_res *ipa_es10c_set_def_dp_addr(struct ipa_context *ctx, + const struct ipa_es10c_set_def_dp_addr_req *req) +{ + struct ipa_buf *es10c_req = NULL; + struct ipa_buf *es10c_res = NULL; + struct ipa_es10c_set_def_dp_addr_res *res = IPA_ALLOC_ZERO(struct ipa_es10c_set_def_dp_addr_res); + int rc; + + es10c_req = ipa_es10x_req_enc(&asn_DEF_SetDefaultDpAddressRequest, &req->req, "SetDefaultDpAddress"); + if (!es10c_req) { + IPA_LOGP_ES10X("SetDefaultDpAddress", LERROR, "unable to encode Es10c request\n"); + goto error; + } + + es10c_res = ipa_euicc_transceive_es10x(ctx, es10c_req); + if (!es10c_res) { + IPA_LOGP_ES10X("SetDefaultDpAddress", LERROR, "no Es10c response\n"); + goto error; + } + + rc = dec_set_def_dp_addr_res(res, es10c_res); + if (rc < 0) + goto error; + + IPA_FREE(es10c_req); + IPA_FREE(es10c_res); + return res; +error: + IPA_FREE(es10c_req); + IPA_FREE(es10c_res); + ipa_es10c_set_def_dp_addr_res_free(res); + return NULL; +} + +/*! Free results of function (Es10c): SetDefaultDpAddress. + * \param[in] res pointer to function result. */ +void ipa_es10c_set_def_dp_addr_res_free(struct ipa_es10c_set_def_dp_addr_res *res) +{ + IPA_ES10X_RES_FREE(asn_DEF_SetDefaultDpAddressResponse, res); +} diff --git a/src/ipa/libipa/es10c_set_def_dp_addr.h b/src/ipa/libipa/es10c_set_def_dp_addr.h new file mode 100644 index 0000000..c8a3186 --- /dev/null +++ b/src/ipa/libipa/es10c_set_def_dp_addr.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2026 sysmocom - s.f.m.c. GmbH. All rights reserved. + * + * SPDX-License-Identifier: AGPL-3.0-only + */ + +#pragma once + +#include <SetDefaultDpAddressRequest.h> +#include <SetDefaultDpAddressResponse.h> +struct ipa_context; + +struct ipa_es10c_set_def_dp_addr_req { + struct SetDefaultDpAddressRequest req; +}; + +struct ipa_es10c_set_def_dp_addr_res { + struct SetDefaultDpAddressResponse *res; +}; + +struct ipa_es10c_set_def_dp_addr_res *ipa_es10c_set_def_dp_addr(struct ipa_context *ctx, + const struct ipa_es10c_set_def_dp_addr_req *req); +void ipa_es10c_set_def_dp_addr_res_free(struct ipa_es10c_set_def_dp_addr_res *res);