jolly has uploaded this change for review. ( https://gerrit.osmocom.org/c/onomondo-ipa/+/43046?usp=email )
Change subject: V1.2: Add new flags to eUICCMemoryReset ......................................................................
V1.2: Add new flags to eUICCMemoryReset
Introduce flags to reset pre-installed test profiles and provisioning profiles.
The IoT eUICC emulation forwards these flags. The eUICC with V3.0 of SGP.22 will delete these profiles.
Reference: SGP.32 Section 5.9.5, SGP.22 Section 5.7.19
Related: SYS#8101 Change-Id: I8c683e93c2a10ff64c3ef14767000c59f81be090 --- M asn1/RSPDefinitions.asn M asn1/SGP32Definitions.asn M include/onomondo/ipa/ipad.h M src/ipa/libasn/EuiccMemoryResetRequest.h M src/ipa/libasn/SGP32-EuiccMemoryResetRequest.h M src/ipa/libasn/SGP32-EuiccMemoryResetResponse.c M src/ipa/libasn/SGP32-EuiccMemoryResetResponse.h M src/ipa/libipa/es10b_euicc_mem_rst.c M src/ipa/libipa/es10b_euicc_mem_rst.h M src/ipa/libipa/ipad.c M src/ipa/main.c 11 files changed, 49 insertions(+), 26 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/onomondo-ipa refs/changes/46/43046/1
diff --git a/asn1/RSPDefinitions.asn b/asn1/RSPDefinitions.asn index f46100c..5427515 100644 --- a/asn1/RSPDefinitions.asn +++ b/asn1/RSPDefinitions.asn @@ -586,7 +586,10 @@ resetOptions [2] BIT STRING { deleteOperationalProfiles(0), deleteFieldLoadedTestProfiles(1), - resetDefaultSmdpAddress(2)} + resetDefaultSmdpAddress(2), + deletePreLoadedTestProfiles(3), -- #SupportedFromV3.0.0# + deleteProvisioningProfiles(4)} -- #SupportedFromV3.0.0# + -- setting bits 0, 1, 3 and 4 wipes all Profiles }
EuiccMemoryResetResponse ::= [52] SEQUENCE { -- Tag 'BF34' diff --git a/asn1/SGP32Definitions.asn b/asn1/SGP32Definitions.asn index a158221..f38656f 100644 --- a/asn1/SGP32Definitions.asn +++ b/asn1/SGP32Definitions.asn @@ -479,14 +479,16 @@ deleteOperationalProfiles(0), deleteFieldLoadedTestProfiles(1), resetDefaultSmdpAddress(2), - resetEimConfigData(3), - resetImmediateEnableConfig(4) + deletePreLoadedTestProfiles(3), + deleteProvisioningProfiles(4), + resetEimConfigData(5), + resetImmediateEnableConfig (6) } } -SGP32-EuiccMemoryResetResponse ::= [52] SEQUENCE { -- Tag 'BF34' - resetResult INTEGER {ok(0), nothingToDelete(1), catBusy(5), undefinedError(127)}, - resetEimResult [1] INTEGER {ok(0), nothingToDelete(1), eimResetNotSupported(2), undefinedError(127)} OPTIONAL, - resetImmediateEnableConfigResult [2] INTEGER {ok(0), resetAECNotSupported(1), undefinedError(127)} OPTIONAL +SGP32-EuiccMemoryResetResponse ::= [100] SEQUENCE { -- Tag 'BF64' + resetResult INTEGER {ok(0), nothingToDelete(1), catBusy(5), ecallActive(104), undefinedError(127)}, + resetEimResult INTEGER {ok(0), nothingToDelete(1), eimResetNotSupported(2), undefinedError(127)} OPTIONAL, + resetImmediateEnableConfigResult INTEGER {ok(0), resetIECNotSupported (1), undefinedError(127)} OPTIONAL }
-- Section 5.9.10 diff --git a/include/onomondo/ipa/ipad.h b/include/onomondo/ipa/ipad.h index 139ae21..defa530 100644 --- a/include/onomondo/ipa/ipad.h +++ b/include/onomondo/ipa/ipad.h @@ -92,8 +92,8 @@ int ipa_init(struct ipa_context *ctx); int eim_init(struct ipa_context *ctx); int ipa_add_init_eim_cfg(struct ipa_context *ctx, struct ipa_buf *cfg); -int ipa_euicc_mem_rst(struct ipa_context *ctx, bool operatnl_profiles, bool test_profiles, bool default_smdp_addr, - bool eim_cfg_data, bool immediate_enable_cfg); +int ipa_euicc_mem_rst(struct ipa_context *ctx, bool operatnl_profiles, bool field_test_profiles, bool default_smdp_addr, + bool pre_test_profiles, bool provisioning_profiles, bool eim_cfg_data, bool immediate_enable_cfg); int ipa_execute_fallback_mechanism(struct ipa_context *ctx, bool refresh_flag); int ipa_return_from_fallback(struct ipa_context *ctx, bool refresh_flag); int ipa_enable_emergency_profile(struct ipa_context *ctx, bool refresh_flag); diff --git a/src/ipa/libasn/EuiccMemoryResetRequest.h b/src/ipa/libasn/EuiccMemoryResetRequest.h index 8ff519a..cf550e5 100644 --- a/src/ipa/libasn/EuiccMemoryResetRequest.h +++ b/src/ipa/libasn/EuiccMemoryResetRequest.h @@ -23,7 +23,9 @@ typedef enum EuiccMemoryResetRequest__resetOptions { EuiccMemoryResetRequest__resetOptions_deleteOperationalProfiles = 0, EuiccMemoryResetRequest__resetOptions_deleteFieldLoadedTestProfiles = 1, - EuiccMemoryResetRequest__resetOptions_resetDefaultSmdpAddress = 2 + EuiccMemoryResetRequest__resetOptions_resetDefaultSmdpAddress = 2, + EuiccMemoryResetRequest__resetOptions_deletePreLoadedTestProfiles = 3, + EuiccMemoryResetRequest__resetOptions_deleteProvisioningProfiles = 4 } e_EuiccMemoryResetRequest__resetOptions;
/* EuiccMemoryResetRequest */ diff --git a/src/ipa/libasn/SGP32-EuiccMemoryResetRequest.h b/src/ipa/libasn/SGP32-EuiccMemoryResetRequest.h index 0761f51..3ab6e00 100644 --- a/src/ipa/libasn/SGP32-EuiccMemoryResetRequest.h +++ b/src/ipa/libasn/SGP32-EuiccMemoryResetRequest.h @@ -24,8 +24,10 @@ SGP32_EuiccMemoryResetRequest__resetOptions_deleteOperationalProfiles = 0, SGP32_EuiccMemoryResetRequest__resetOptions_deleteFieldLoadedTestProfiles = 1, SGP32_EuiccMemoryResetRequest__resetOptions_resetDefaultSmdpAddress = 2, - SGP32_EuiccMemoryResetRequest__resetOptions_resetEimConfigData = 3, - SGP32_EuiccMemoryResetRequest__resetOptions_resetImmediateEnableConfig = 4 + SGP32_EuiccMemoryResetRequest__resetOptions_deletePreLoadedTestProfiles = 3, + SGP32_EuiccMemoryResetRequest__resetOptions_deleteProvisioningProfiles = 4, + SGP32_EuiccMemoryResetRequest__resetOptions_resetEimConfigData = 5, + SGP32_EuiccMemoryResetRequest__resetOptions_resetImmediateEnableConfig = 6 } e_SGP32_EuiccMemoryResetRequest__resetOptions;
/* SGP32-EuiccMemoryResetRequest */ diff --git a/src/ipa/libasn/SGP32-EuiccMemoryResetResponse.c b/src/ipa/libasn/SGP32-EuiccMemoryResetResponse.c index cc66531..6fa2b83 100644 --- a/src/ipa/libasn/SGP32-EuiccMemoryResetResponse.c +++ b/src/ipa/libasn/SGP32-EuiccMemoryResetResponse.c @@ -9,8 +9,8 @@
static asn_TYPE_member_t asn_MBR_SGP32_EuiccMemoryResetResponse_1[] = { { ATF_NOFLAGS, 0, offsetof(struct SGP32_EuiccMemoryResetResponse, resetResult), - (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), - 0, + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, 0, { 0, 0, 0 }, @@ -38,11 +38,11 @@ }; static const int asn_MAP_SGP32_EuiccMemoryResetResponse_oms_1[] = { 1, 2 }; static const ber_tlv_tag_t asn_DEF_SGP32_EuiccMemoryResetResponse_tags_1[] = { - (ASN_TAG_CLASS_CONTEXT | (52 << 2)), + (ASN_TAG_CLASS_CONTEXT | (100 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static const asn_TYPE_tag2member_t asn_MAP_SGP32_EuiccMemoryResetResponse_tag2el_1[] = { - { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 0, 0, 0 }, /* resetResult */ + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* resetResult */ { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* resetEimResult */ { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* resetImmediateEnableConfigResult */ }; diff --git a/src/ipa/libasn/SGP32-EuiccMemoryResetResponse.h b/src/ipa/libasn/SGP32-EuiccMemoryResetResponse.h index da8bcb6..89b4b1a 100644 --- a/src/ipa/libasn/SGP32-EuiccMemoryResetResponse.h +++ b/src/ipa/libasn/SGP32-EuiccMemoryResetResponse.h @@ -24,6 +24,7 @@ SGP32_EuiccMemoryResetResponse__resetResult_ok = 0, SGP32_EuiccMemoryResetResponse__resetResult_nothingToDelete = 1, SGP32_EuiccMemoryResetResponse__resetResult_catBusy = 5, + SGP32_EuiccMemoryResetResponse__resetResult_ecallActive = 104, SGP32_EuiccMemoryResetResponse__resetResult_undefinedError = 127 } e_SGP32_EuiccMemoryResetResponse__resetResult; typedef enum SGP32_EuiccMemoryResetResponse__resetEimResult { @@ -34,7 +35,7 @@ } e_SGP32_EuiccMemoryResetResponse__resetEimResult; typedef enum SGP32_EuiccMemoryResetResponse__resetImmediateEnableConfigResult { SGP32_EuiccMemoryResetResponse__resetImmediateEnableConfigResult_ok = 0, - SGP32_EuiccMemoryResetResponse__resetImmediateEnableConfigResult_resetAECNotSupported = 1, + SGP32_EuiccMemoryResetResponse__resetImmediateEnableConfigResult_resetIECNotSupported = 1, SGP32_EuiccMemoryResetResponse__resetImmediateEnableConfigResult_undefinedError = 127 } e_SGP32_EuiccMemoryResetResponse__resetImmediateEnableConfigResult;
diff --git a/src/ipa/libipa/es10b_euicc_mem_rst.c b/src/ipa/libipa/es10b_euicc_mem_rst.c index 5b2040f..5c9d6d2 100644 --- a/src/ipa/libipa/es10b_euicc_mem_rst.c +++ b/src/ipa/libipa/es10b_euicc_mem_rst.c @@ -38,6 +38,7 @@ { SGP32_EuiccMemoryResetResponse__resetResult_ok, "ok" }, { SGP32_EuiccMemoryResetResponse__resetResult_nothingToDelete, "nothingToDelete" }, { SGP32_EuiccMemoryResetResponse__resetResult_catBusy, "catBusy" }, + { SGP32_EuiccMemoryResetResponse__resetResult_ecallActive, "ecallActive" }, { SGP32_EuiccMemoryResetResponse__resetResult_undefinedError, "undefinedError" }, { 0, NULL } }; @@ -52,8 +53,8 @@
static const struct num_str_map sgp32_error_code_strings_resetImmediateEnableConfigResult[] = { { SGP32_EuiccMemoryResetResponse__resetImmediateEnableConfigResult_ok, "ok" }, - { SGP32_EuiccMemoryResetResponse__resetImmediateEnableConfigResult_resetAECNotSupported, "nothingToDelete" }, - { SGP32_EuiccMemoryResetResponse__resetImmediateEnableConfigResult_undefinedError, "eimResetNotSupported" }, + { SGP32_EuiccMemoryResetResponse__resetImmediateEnableConfigResult_resetIECNotSupported, "resetIECNotSupported" }, + { SGP32_EuiccMemoryResetResponse__resetImmediateEnableConfigResult_undefinedError, "undefinedError" }, { 0, NULL } };
@@ -144,10 +145,14 @@
if (req->operatnl_profiles) rst_opt[0] |= (1 << (7 - SGP32_EuiccMemoryResetRequest__resetOptions_deleteOperationalProfiles)); - if (req->test_profiles) + if (req->field_test_profiles) rst_opt[0] |= (1 << (7 - SGP32_EuiccMemoryResetRequest__resetOptions_deleteFieldLoadedTestProfiles)); if (req->default_smdp_addr) rst_opt[0] |= (1 << (7 - SGP32_EuiccMemoryResetRequest__resetOptions_resetDefaultSmdpAddress)); + if (req->pre_test_profiles) + rst_opt[0] |= (1 << (7 - SGP32_EuiccMemoryResetRequest__resetOptions_deletePreLoadedTestProfiles)); + if (req->provisioning_profiles) + rst_opt[0] |= (1 << (7 - SGP32_EuiccMemoryResetRequest__resetOptions_deleteProvisioningProfiles)); if (req->eim_cfg_data) rst_opt[0] |= (1 << (7 - SGP32_EuiccMemoryResetRequest__resetOptions_resetEimConfigData)); if (req->immediate_enable_cfg) @@ -189,10 +194,14 @@
if (req->operatnl_profiles) rst_opt[0] |= (1 << (7 - EuiccMemoryResetRequest__resetOptions_deleteOperationalProfiles)); - if (req->test_profiles) + if (req->field_test_profiles) rst_opt[0] |= (1 << (7 - EuiccMemoryResetRequest__resetOptions_deleteFieldLoadedTestProfiles)); if (req->default_smdp_addr) rst_opt[0] |= (1 << (7 - EuiccMemoryResetRequest__resetOptions_resetDefaultSmdpAddress)); + if (req->pre_test_profiles) + rst_opt[0] |= (1 << (7 - EuiccMemoryResetRequest__resetOptions_deletePreLoadedTestProfiles)); + if (req->provisioning_profiles) + rst_opt[0] |= (1 << (7 - EuiccMemoryResetRequest__resetOptions_deleteProvisioningProfiles));
if (req->eim_cfg_data) { IPA_LOGP_ES10X("eUICCMemoryReset", LINFO, diff --git a/src/ipa/libipa/es10b_euicc_mem_rst.h b/src/ipa/libipa/es10b_euicc_mem_rst.h index 8f4d304..f8974f8 100644 --- a/src/ipa/libipa/es10b_euicc_mem_rst.h +++ b/src/ipa/libipa/es10b_euicc_mem_rst.h @@ -12,8 +12,10 @@ /* GSMA SGP.22, section 5.7.13 */ struct ipa_es10b_euicc_mem_rst { bool operatnl_profiles; - bool test_profiles; + bool field_test_profiles; bool default_smdp_addr; + bool pre_test_profiles; + bool provisioning_profiles; bool eim_cfg_data; bool immediate_enable_cfg; }; diff --git a/src/ipa/libipa/ipad.c b/src/ipa/libipa/ipad.c index 33e634d..00ab37d 100644 --- a/src/ipa/libipa/ipad.c +++ b/src/ipa/libipa/ipad.c @@ -255,13 +255,15 @@ * \param[inout] test_profiles apply reset option "deleteFieldLoadedTestProfiles". * \param[inout] default_smdp_addr apply reset option "resetDefaultSmdpAddress". * \returns 0 on success, negative on error. */ -int ipa_euicc_mem_rst(struct ipa_context *ctx, bool operatnl_profiles, bool test_profiles, bool default_smdp_addr, - bool eim_cfg_data, bool immediate_enable_cfg) +int ipa_euicc_mem_rst(struct ipa_context *ctx, bool operatnl_profiles, bool field_test_profiles, bool default_smdp_addr, + bool pre_test_profiles, bool provisioning_profiles, bool eim_cfg_data, bool immediate_enable_cfg) { struct ipa_es10b_euicc_mem_rst euicc_mem_rst = { 0 }; euicc_mem_rst.operatnl_profiles = operatnl_profiles; - euicc_mem_rst.test_profiles = test_profiles; + euicc_mem_rst.field_test_profiles = field_test_profiles; euicc_mem_rst.default_smdp_addr = default_smdp_addr; + euicc_mem_rst.pre_test_profiles = pre_test_profiles; + euicc_mem_rst.provisioning_profiles = provisioning_profiles; euicc_mem_rst.eim_cfg_data = eim_cfg_data; euicc_mem_rst.immediate_enable_cfg = immediate_enable_cfg; return ipa_es10b_euicc_mem_rst(ctx, &euicc_mem_rst); diff --git a/src/ipa/main.c b/src/ipa/main.c index 9ed5c36..4352ee6 100644 --- a/src/ipa/main.c +++ b/src/ipa/main.c @@ -309,7 +309,7 @@ IPA_FREE(eim_cfg); } else if (getopt_euicc_memory_reset) { /* Perform an eUICC memory reset */ - ipa_euicc_mem_rst(ctx, true, true, true, true, true); + ipa_euicc_mem_rst(ctx, true, true, true, true, true, true, true); } else if (getopt_execute_fallback_mechanism) { /* Trigger enabling of fallback profile */ ipa_execute_fallback_mechanism(ctx, getopt_refresh_flag);