laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/27182 )
Change subject: Improve IST/UST check documentation (for the user manual)
......................................................................
Improve IST/UST check documentation (for the user manual)
Change-Id: I18093d795721f2e729eff858c8922edde9e84451
---
M pySim/ts_31_102.py
M pySim/ts_31_103.py
2 files changed, 15 insertions(+), 10 deletions(-)
Approvals:
Jenkins Builder: Verified
fixeria: Looks good to me, approved
diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py
index 7d0eb28..3995dfa 100644
--- a/pySim/ts_31_102.py
+++ b/pySim/ts_31_102.py
@@ -644,7 +644,12 @@
self._cmd.card.update_ust(int(arg), 0)
def do_ust_service_check(self, arg):
- """Check consistency between services of this file and files present/activated"""
+ """Check consistency between services of this file and files present/activated.
+
+ Many services determine if one or multiple files shall be present/activated or if they shall be
+ absent/deactivated. This performs a consistency check to ensure that no services are activated
+ for files that are not - and vice-versa, no files are activated for services that are not. Error
+ messages are printed for every inconsistency found."""
selected_file = self._cmd.rs.selected_file
num_problems = selected_file.ust_service_check(self._cmd)
# obtain list of currently active services
@@ -802,13 +807,6 @@
"""Deactivate a service within EF.UST"""
self._cmd.card.update_est(int(arg), 0)
- def do_est_service_check(self, arg):
- """Check consistency between services of this file and files present/activated"""
- # obtain list of currently active services
- (service_data, sw) = self._cmd.rs.read_binary_dec()
- active_services = service_data.keys()
-
-
# TS 31.102 Section 4.2.48
class EF_ACL(TransparentEF):
def __init__(self, fid='6f57', sfid=None, name='EF.ACL', size={32, None},
diff --git a/pySim/ts_31_103.py b/pySim/ts_31_103.py
index f04f480..66124a8 100644
--- a/pySim/ts_31_103.py
+++ b/pySim/ts_31_103.py
@@ -125,9 +125,16 @@
self._cmd.card.update_ist(int(arg), 0)
def do_ist_service_check(self, arg):
- """Check consistency between services of this file and files present/activated"""
+ """Check consistency between services of this file and files present/activated.
+
+ Many services determine if one or multiple files shall be present/activated or if they shall be
+ absent/deactivated. This performs a consistency check to ensure that no services are activated
+ for files that are not - and vice-versa, no files are activated for services that are not. Error
+ messages are printed for every inconsistency found."""
selected_file = self._cmd.rs.selected_file
- selected_file.ust_service_check(self._cmd)
+ num_problems = selected_file.ust_service_check(self._cmd)
+ self._cmd.poutput("===> %u service / file inconsistencies detected" % num_problems)
+
# TS 31.103 Section 4.2.8
class EF_PCSCF(LinFixedEF):
1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/27182
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I18093d795721f2e729eff858c8922edde9e84451
Gerrit-Change-Number: 27182
Gerrit-PatchSet: 3
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: merged
laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/27177 )
Change subject: filesystem: Fix CardMF.get_app_names()
......................................................................
filesystem: Fix CardMF.get_app_names()
This function was not used and doesn't work without this patch.
Change-Id: Id3dad7d97fe29a25792d2f8f0e879666c1d9c136
---
M pySim/filesystem.py
1 file changed, 1 insertion(+), 1 deletion(-)
Approvals:
Jenkins Builder: Verified
fixeria: Looks good to me, approved
diff --git a/pySim/filesystem.py b/pySim/filesystem.py
index d52a16e..95f792a 100644
--- a/pySim/filesystem.py
+++ b/pySim/filesystem.py
@@ -384,7 +384,7 @@
def get_app_names(self):
"""Get list of completions (AID names)"""
- return [x.name for x in self.applications]
+ return list(self.applications.values())
def get_selectables(self, flags=[]) -> dict:
"""Return a dict of {'identifier': File} that is selectable from the current DF.
2 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/27177
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Id3dad7d97fe29a25792d2f8f0e879666c1d9c136
Gerrit-Change-Number: 27177
Gerrit-PatchSet: 3
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: merged
laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/27178 )
Change subject: ts_31_102: Add more EF.UST checks to 'ust_service_check' command
......................................................................
ts_31_102: Add more EF.UST checks to 'ust_service_check' command
* check for service dependencies listed in TS 31.102
* print number of errors encountered
Change-Id: Id47f8f2c8de299bbf91243d0c8900d22a7d35b10
---
M pySim/ts_31_102.py
1 file changed, 30 insertions(+), 3 deletions(-)
Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, approved
fixeria: Looks good to me, but someone else must approve
diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py
index 8e2d1c8..ce32b20 100644
--- a/pySim/ts_31_102.py
+++ b/pySim/ts_31_102.py
@@ -585,14 +585,20 @@
out[byte_offset] |= (bit) << bit_offset
return out
- def ust_service_check(self, cmd):
- """Check consistency between services of this file and files present/activated"""
+ def get_active_services(self, cmd):
# obtain list of currently active services
(service_data, sw) = cmd.rs.read_binary_dec()
active_services = []
for s in service_data.keys():
if service_data[s]['activated']:
active_services.append(s)
+ return active_services
+
+ def ust_service_check(self, cmd):
+ """Check consistency between services of this file and files present/activated"""
+ num_problems = 0
+ # obtain list of currently active services
+ active_services = self.get_active_services(cmd)
# iterate over all the service-constraints we know of
files_by_service = self.parent.files_by_service
try:
@@ -612,6 +618,7 @@
sw = str(e)
exists = False
if exists != should_exist:
+ num_problems += 1
if exists:
cmd.poutput(" ERROR: File %s is selectable but should not!" % f)
else:
@@ -619,6 +626,7 @@
finally:
# re-select the EF.UST
cmd.card._scc.select_file(self.fid)
+ return num_problems
class EF_UST(EF_UServiceTable):
def __init__(self, **kwargs):
@@ -642,7 +650,26 @@
def do_ust_service_check(self, arg):
"""Check consistency between services of this file and files present/activated"""
selected_file = self._cmd.rs.selected_file
- selected_file.ust_service_check(self._cmd)
+ num_problems = selected_file.ust_service_check(self._cmd)
+ # obtain list of currently active services
+ active_services = selected_file.get_active_services(self._cmd)
+ # Service n°46 can only be declared "available" if service n°45 is declared "available"
+ if 46 in active_services and not 45 in active_services:
+ self._cmd.poutput("ERROR: Service 46 available, but it requires Service 45")
+ num_problems += 1
+ # Service n°125 shall only be taken into account if Service n°124 is declared "available"
+ if 125 in active_services and not 124 in active_services:
+ self._cmd.poutput("ERROR: Service 125 is ignored as Service 124 not available")
+ num_problems += 1
+ # Service n°95, n°99 and n°115 shall not be declared "available" if an ISIM application is present on the UICC
+ non_isim_services = [95, 99, 115]
+ app_names = selected_file.get_mf().get_app_names()
+ if 'ADF.ISIM' in app_names:
+ for s in non_isim_services:
+ if s in active_services:
+ self._cmd.poutput("ERROR: Service %u shall not be available as ISIM application is present" % s)
+ num_problems += 1
+ self._cmd.poutput("===> %u service / file inconsistencies detected" % num_problems)
# TS 31.103 Section 4.2.7 - *not* the same as DF.GSM/EF.ECC!
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/27178
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Id47f8f2c8de299bbf91243d0c8900d22a7d35b10
Gerrit-Change-Number: 27178
Gerrit-PatchSet: 3
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: merged
laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/27179 )
Change subject: ts_31_102: Use perror() instead of poutput() for errors
......................................................................
ts_31_102: Use perror() instead of poutput() for errors
This adds colorization and ensures they go to stderr and not stdout
Change-Id: I34b8f974b4ff13002679c4700bdf604db7d7f3cd
---
M pySim/ts_31_102.py
1 file changed, 5 insertions(+), 5 deletions(-)
Approvals:
Jenkins Builder: Verified
fixeria: Looks good to me, approved
diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py
index ce32b20..7fcb08e 100644
--- a/pySim/ts_31_102.py
+++ b/pySim/ts_31_102.py
@@ -620,9 +620,9 @@
if exists != should_exist:
num_problems += 1
if exists:
- cmd.poutput(" ERROR: File %s is selectable but should not!" % f)
+ cmd.perror(" ERROR: File %s is selectable but should not!" % f)
else:
- cmd.poutput(" ERROR: File %s is not selectable (%s) but should!" % (f, sw))
+ cmd.perror(" ERROR: File %s is not selectable (%s) but should!" % (f, sw))
finally:
# re-select the EF.UST
cmd.card._scc.select_file(self.fid)
@@ -655,11 +655,11 @@
active_services = selected_file.get_active_services(self._cmd)
# Service n°46 can only be declared "available" if service n°45 is declared "available"
if 46 in active_services and not 45 in active_services:
- self._cmd.poutput("ERROR: Service 46 available, but it requires Service 45")
+ self._cmd.perror("ERROR: Service 46 available, but it requires Service 45")
num_problems += 1
# Service n°125 shall only be taken into account if Service n°124 is declared "available"
if 125 in active_services and not 124 in active_services:
- self._cmd.poutput("ERROR: Service 125 is ignored as Service 124 not available")
+ self._cmd.perror("ERROR: Service 125 is ignored as Service 124 not available")
num_problems += 1
# Service n°95, n°99 and n°115 shall not be declared "available" if an ISIM application is present on the UICC
non_isim_services = [95, 99, 115]
@@ -667,7 +667,7 @@
if 'ADF.ISIM' in app_names:
for s in non_isim_services:
if s in active_services:
- self._cmd.poutput("ERROR: Service %u shall not be available as ISIM application is present" % s)
+ self._cmd.perror("ERROR: Service %u shall not be available as ISIM application is present" % s)
num_problems += 1
self._cmd.poutput("===> %u service / file inconsistencies detected" % num_problems)
1 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/27179
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I34b8f974b4ff13002679c4700bdf604db7d7f3cd
Gerrit-Change-Number: 27179
Gerrit-PatchSet: 3
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: merged
laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/27175 )
Change subject: ts_31_102: Add "ust_service_check" command.
......................................................................
ts_31_102: Add "ust_service_check" command.
This command performs a consistency check between the services activated
in EF.UST/EF.IST and the files that should (or should not) be
active/selectable for the given service.
Produces output like:
Checking service No 48 (inactive)
ERROR: File EF(EF.MWIS) is selectable but should not!
Checking service No 49 (active)
ERROR: File EF(EF.CFIS) is not selectable (SW=6a82) but should!
Change-Id: Iea7166959e2015eb8fa34d86036560c9e42ce4d3
---
M pySim/ts_31_102.py
1 file changed, 36 insertions(+), 0 deletions(-)
Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, approved
fixeria: Looks good to me, but someone else must approve
diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py
index 17d865d..9105418 100644
--- a/pySim/ts_31_102.py
+++ b/pySim/ts_31_102.py
@@ -600,6 +600,42 @@
"""Deactivate a service within EF.UST"""
self._cmd.card.update_ust(int(arg), 0)
+ def do_ust_service_check(self, arg):
+ """Check consistency between services of this file and files present/activated"""
+ # obtain list of currently active services
+ (service_data, sw) = self._cmd.rs.read_binary_dec()
+ for s in service_data.keys():
+ if service_data[s]['activated']:
+ active_services.append(s)
+ # iterate over all the service-constraints we know of
+ selected_file = self._cmd.rs.selected_file
+ files_by_service = selected_file.parent.files_by_service
+ try:
+ for s in sorted(files_by_service.keys()):
+ active_str = 'active' if s in active_services else 'inactive'
+ self._cmd.poutput("Checking service No %u (%s)" % (s, active_str))
+ for f in files_by_service[s]:
+ should_exist = f.should_exist_for_services(active_services)
+ try:
+ (data, sw) = self._cmd.card._scc.select_file(f.fid)
+ exists = True
+ fcp = f.decode_select_response(data)
+ # if we just selected a directory, go back
+ if fcp['file_descriptor']['file_type'] == 'df':
+ self._cmd.card._scc.select_parent_df()
+ except SwMatchError as e:
+ sw = e.sw_actual
+ exists = False
+ if exists != should_exist:
+ if exists:
+ self._cmd.poutput(" ERROR: File %s is selectable but should not!" % f)
+ else:
+ self._cmd.poutput(" ERROR: File %s is not selectable (SW=%s) but should!" % (f, sw))
+ finally:
+ # re-select the EF.UST
+ self._cmd.card._scc.select_file(selected_file.fid)
+
+
# TS 31.103 Section 4.2.7 - *not* the same as DF.GSM/EF.ECC!
class EF_ECC(LinFixedEF):
cc_construct = Rpad(BcdAdapter(Rpad(Bytes(3))), pattern='f')
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/27175
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Iea7166959e2015eb8fa34d86036560c9e42ce4d3
Gerrit-Change-Number: 27175
Gerrit-PatchSet: 4
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: merged