jolly has submitted this change. ( 
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, 52 insertions(+), 27 deletions(-)

Approvals:
  Jenkins Builder: Verified
  dexter: Looks good to me, approved




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 e34cae0..87ea24f 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 29bbd27..e356f45 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);
 int ipa_return_from_fallback(struct ipa_context *ctx);
 int ipa_enable_emerg_prfle(struct ipa_context *ctx);
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 a465444..730ff50 100644
--- a/src/ipa/libipa/ipad.c
+++ b/src/ipa/libipa/ipad.c
@@ -252,18 +252,22 @@
 /*! reset memory of the eUICC (eUICCMemoryReset).
  *  \param[inout] ctx pointer to ipa_context.
  *  \param[inout] operatnl_profiles apply reset option 
"deleteOperationalProfiles".
- *  \param[inout] test_profiles apply reset option 
"deleteFieldLoadedTestProfiles".
+ *  \param[inout] field_test_profiles apply reset option 
"deleteFieldLoadedTestProfiles".
  *  \param[inout] default_smdp_addr apply reset option 
"resetDefaultSmdpAddress".
+ *  \param[inout] pre_test_profiles apply reset option 
"deletePreLoadedTestProfiles".
+ *  \param[inout] provisioning_profiles apply reset option 
"deleteProvisioningProfiles".
  *  \param[inout] eim_cfg_data apply reset option "resetEimConfigData".
  *  \param[inout] immediate_enable_cfg apply reset option 
"resetImmediateEnableConfig".
  *  \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 d5ec942..4312a25 100644
--- a/src/ipa/main.c
+++ b/src/ipa/main.c
@@ -361,7 +361,7 @@
                break;
        case OPER_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);
                break;
        case OPER_EXEC_FALLBACK_MECH:
                /* Trigger enabling of fallback profile */

--
To view, visit https://gerrit.osmocom.org/c/onomondo-ipa/+/43046?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: onomondo-ipa
Gerrit-Branch: master
Gerrit-Change-Id: I8c683e93c2a10ff64c3ef14767000c59f81be090
Gerrit-Change-Number: 43046
Gerrit-PatchSet: 5
Gerrit-Owner: jolly <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <[email protected]>
Gerrit-Reviewer: jolly <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>

Reply via email to