jolly has uploaded this change for review.

View Change

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);

To view, visit change 43046. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: onomondo-ipa
Gerrit-Branch: master
Gerrit-Change-Id: I8c683e93c2a10ff64c3ef14767000c59f81be090
Gerrit-Change-Number: 43046
Gerrit-PatchSet: 1
Gerrit-Owner: jolly <andreas@eversberg.eu>