laforge submitted this change.

View Change

Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved fixeria: Looks good to me, but someone else must approve
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(-)

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 change 27175. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Iea7166959e2015eb8fa34d86036560c9e42ce4d3
Gerrit-Change-Number: 27175
Gerrit-PatchSet: 4
Gerrit-Owner: laforge <laforge@osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <pmaier@sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de>
Gerrit-Reviewer: laforge <laforge@osmocom.org>
Gerrit-MessageType: merged