laforge has uploaded this change for review. (
https://gerrit.osmocom.org/c/pysim/+/28709
)
Change subject: filesystem: Use Tuple for transparent file size
......................................................................
filesystem: Use Tuple for transparent file size
As the documentation strings say: The size should be a *tuple*. In
reality we so far passed a set. The problem with the set is that
ordering is not guaranteed, and hence we cannot assume the first and
second item have meaning (minimum vs. default size).
While at it, use a type annotation to catch such bugs easily.
Change-Id: I553616f8c6c4aaa8f635b3d7d94e8e8f49ed5a56
---
M pySim/filesystem.py
M pySim/gsm_r.py
M pySim/ts_102_221.py
M pySim/ts_31_102.py
M pySim/ts_31_102_telecom.py
M pySim/ts_51_011.py
6 files changed, 71 insertions(+), 69 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/09/28709/1
diff --git a/pySim/filesystem.py b/pySim/filesystem.py
index 182889b..73da0b6 100644
--- a/pySim/filesystem.py
+++ b/pySim/filesystem.py
@@ -49,6 +49,8 @@
# tuple: logical-and of the listed services requires this file
CardFileService = Union[int, List[int], Tuple[int, ...]]
+Size = Tuple[int, None | int]
+
def lchan_nr_from_cla(cla: int) -> int:
"""Resolve the logical channel number from the CLA
byte."""
# TS 102 221 10.1.1 Coding of Class Byte
@@ -642,7 +644,7 @@
self._cmd.poutput_json(data)
def __init__(self, fid: str, sfid: str = None, name: str = None, desc: str = None,
parent: CardDF = None,
- size={1, None}, **kwargs):
+ size: Size = (1, None), **kwargs):
"""
Args:
fid : File Identifier (4 hex digits)
@@ -1057,7 +1059,7 @@
"""
def __init__(self, fid: str, rec_len: int, sfid: str = None, name: str = None, desc:
str = None,
- parent: Optional[CardDF] = None, size={1, None}, **kwargs):
+ parent: Optional[CardDF] = None, size: Size = (1, None), **kwargs):
"""
Args:
fid : File Identifier (4 hex digits)
@@ -1245,7 +1247,7 @@
self._cmd.poutput(data)
def __init__(self, fid: str, sfid: str = None, name: str = None, desc: str = None,
parent: CardDF = None,
- size={1, None}, **kwargs):
+ size: Size = (1, None), **kwargs):
"""
Args:
fid : File Identifier (4 hex digits)
diff --git a/pySim/gsm_r.py b/pySim/gsm_r.py
index b48469e..ccab87f 100644
--- a/pySim/gsm_r.py
+++ b/pySim/gsm_r.py
@@ -149,7 +149,7 @@
"""Section 7.3"""
def __init__(self):
- super().__init__(fid='6ff2', sfid=None, name='EF.CallconfC',
size={24, 24},
+ super().__init__(fid='6ff2', sfid=None, name='EF.CallconfC',
size=(24, 24),
desc='Call Configuration of emergency calls
Configuration')
self._construct = Struct('pl_conf'/PlConfAdapter(Int8ub),
'conf_nr'/BcdAdapter(Bytes(8)),
@@ -183,7 +183,7 @@
def __init__(self):
super().__init__(fid='6ff4', sfid=None,
- name='EF.Shunting', desc='Shunting', size={8,
8})
+ name='EF.Shunting', desc='Shunting', size=(8,
8))
self._construct = Struct('common_gid'/Int8ub,
'shunting_gid'/HexAdapter(Bytes(7)))
@@ -253,7 +253,7 @@
"""Section 8.6"""
def __init__(self, fid, name, desc):
- super().__init__(fid=fid, sfid=None, name=name, desc=desc, size={4, 4})
+ super().__init__(fid=fid, sfid=None, name=name, desc=desc, size=(4, 4))
self._construct = Struct('next_table_type'/NextTableType,
'id_of_next_table'/HexAdapter(Bytes(2)),
'dialed_digits'/BcdAdapter(Bytes(1)))
diff --git a/pySim/ts_102_221.py b/pySim/ts_102_221.py
index 8578f68..6e04e96 100644
--- a/pySim/ts_102_221.py
+++ b/pySim/ts_102_221.py
@@ -594,7 +594,7 @@
# TS 102 221 Section 13.2
class EF_ICCID(TransparentEF):
def __init__(self, fid='2fe2', sfid=0x02, name='EF.ICCID',
desc='ICC Identification'):
- super().__init__(fid, sfid=sfid, name=name, desc=desc, size={10, 10})
+ super().__init__(fid, sfid=sfid, name=name, desc=desc, size=(10, 10))
def _decode_hex(self, raw_hex):
return {'iccid': dec_iccid(raw_hex)}
@@ -606,7 +606,7 @@
class EF_PL(TransRecEF):
def __init__(self, fid='2f05', sfid=0x05, name='EF.PL',
desc='Preferred Languages'):
super().__init__(fid, sfid=sfid, name=name,
- desc=desc, rec_len=2, size={2, None})
+ desc=desc, rec_len=2, size=(2, None))
def _decode_record_bin(self, bin_data):
if bin_data == b'\xff\xff':
@@ -706,7 +706,7 @@
# TS 102 221 Section 13.6
class EF_UMPC(TransparentEF):
def __init__(self, fid='2f08', sfid=0x08, name='EF.UMPC',
desc='UICC Maximum Power Consumption'):
- super().__init__(fid, sfid=sfid, name=name, desc=desc, size={5, 5})
+ super().__init__(fid, sfid=sfid, name=name, desc=desc, size=(5, 5))
addl_info = FlagsEnum(Byte, req_inc_idle_current=1,
support_uicc_suspend=2)
self._construct = Struct(
diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py
index 066ee88..b8a33e7 100644
--- a/pySim/ts_31_102.py
+++ b/pySim/ts_31_102.py
@@ -349,7 +349,7 @@
class FiveGAuthKeys(TLV_IE_Collection, nested=[K_AUSF, K_SEAF]):
pass
- def __init__(self, fid='4f05', sfid=0x05, name='EF.5GAUTHKEYS',
size={68, None},
+ def __init__(self, fid='4f05', sfid=0x05, name='EF.5GAUTHKEYS',
size=(68, None),
desc='5G authentication keys', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._tlv = EF_5GAUTHKEYS.FiveGAuthKeys
@@ -383,7 +383,7 @@
# TS 31.102 4.4.11.8
class EF_SUCI_Calc_Info(TransparentEF):
- def __init__(self, fid="4f07", sfid=0x07, name='EF.SUCI_Calc_Info',
size={2, None},
+ def __init__(self, fid="4f07", sfid=0x07, name='EF.SUCI_Calc_Info',
size=(2, None),
desc='SUCI Calc Info', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
@@ -506,7 +506,7 @@
class EF_LI(TransRecEF):
- def __init__(self, fid='6f05', sfid=None, name='EF.LI', size={2,
None}, rec_len=2,
+ def __init__(self, fid='6f05', sfid=None, name='EF.LI', size=(2,
None), rec_len=2,
desc='Language Indication'):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size,
rec_len=rec_len)
@@ -526,7 +526,7 @@
class EF_Keys(TransparentEF):
- def __init__(self, fid='6f08', sfid=0x08, name='EF.Keys', size={33,
33},
+ def __init__(self, fid='6f08', sfid=0x08, name='EF.Keys', size=(33,
33),
desc='Ciphering and Integrity Keys'):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
self._construct = Struct(
@@ -534,14 +534,14 @@
# TS 31.102 Section 4.2.6
class EF_HPPLMN(TransparentEF):
- def __init__(self, fid='6f31', sfid=0x12, name='EF.HPPLMN', size={1,
1},
+ def __init__(self, fid='6f31', sfid=0x12, name='EF.HPPLMN', size=(1,
1),
desc='Higher Priority PLMN search period'):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
self._construct = Int8ub
class EF_UST(EF_UServiceTable):
def __init__(self, **kwargs):
- super().__init__(fid='6f38', sfid=0x04, name='EF.UST',
desc='USIM Service Table', size={1,17}, table=EF_UST_map, **kwargs)
+ super().__init__(fid='6f38', sfid=0x04, name='EF.UST',
desc='USIM Service Table', size=(1,17), table=EF_UST_map, **kwargs)
# add those commands to the general commands of a TransparentEF
self.shell_commands += [self.AddlShellCommands()]
@@ -625,7 +625,7 @@
# TS 31.102 Section 4.2.17
class EF_LOCI(TransparentEF):
- def __init__(self, fid='6f7e', sfid=0x0b, name='EF.LOCI',
desc='Location information', size={11, 11}):
+ def __init__(self, fid='6f7e', sfid=0x0b, name='EF.LOCI',
desc='Location information', size=(11, 11)):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
Lai = Struct('mcc_mnc'/BcdAdapter(Bytes(3)),
'lac'/HexAdapter(Bytes(2)))
self._construct = Struct('tmsi'/HexAdapter(Bytes(4)), 'lai'/Lai,
'rfu'/Int8ub, 'lu_status'/Int8ub)
@@ -639,7 +639,7 @@
maintenance_off_line = 0x02
cell_test = 0x04
- def __init__(self, fid='6fad', sfid=0x03, name='EF.AD',
desc='Administrative Data', size={4, 6}):
+ def __init__(self, fid='6fad', sfid=0x03, name='EF.AD',
desc='Administrative Data', size=(4, 6)):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
self._construct = BitStruct(
# Byte 1
@@ -654,7 +654,7 @@
# TS 31.102 Section 4.2.23
class EF_PSLOCI(TransparentEF):
- def __init__(self, fid='6f73', sfid=0x0c, name='EF.PSLOCI',
desc='PS Location information', size={14, 14}):
+ def __init__(self, fid='6f73', sfid=0x0c, name='EF.PSLOCI',
desc='PS Location information', size=(14, 14)):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
self._construct = Struct('ptmsi'/HexAdapter(Bytes(4)),
'ptmsi_sig'/HexAdapter(Bytes(3)),
'rai'/HexAdapter(Bytes(6)),
'rau_status'/Int8ub)
@@ -705,7 +705,7 @@
# TS 31.102 Section 4.2.47
class EF_EST(EF_UServiceTable):
def __init__(self, **kwargs):
- super().__init__(fid='6f56', sfid=0x05, name='EF.EST',
desc='Enabled Services Table', size={1,None}, table=EF_EST_map, **kwargs)
+ super().__init__(fid='6f56', sfid=0x05, name='EF.EST',
desc='Enabled Services Table', size=(1,None), table=EF_EST_map, **kwargs)
# add those commands to the general commands of a TransparentEF
self.shell_commands += [self.AddlShellCommands()]
@@ -724,28 +724,28 @@
# TS 31.102 Section 4.2.48
class EF_ACL(TransparentEF):
- def __init__(self, fid='6f57', sfid=None, name='EF.ACL', size={32,
None},
+ def __init__(self, fid='6f57', sfid=None, name='EF.ACL', size=(32,
None),
desc='Access Point Name Control List', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = Struct('num_of_apns'/Int8ub,
'tlvs'/HexAdapter(GreedyBytes))
# TS 31.102 Section 4.2.51
class EF_START_HFN(TransparentEF):
- def __init__(self, fid='6f5b', sfid=0x0f, name='EF.START-HFN',
size={6, 6},
+ def __init__(self, fid='6f5b', sfid=0x0f, name='EF.START-HFN',
size=(6, 6),
desc='Initialisation values for Hyperframe number', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = Struct('start_cs'/Int24ub, 'start_ps'/Int24ub)
# TS 31.102 Section 4.2.52
class EF_THRESHOLD(TransparentEF):
- def __init__(self, fid='6f5c', sfid=0x10, name='EF.THRESHOLD',
size={3, 3},
+ def __init__(self, fid='6f5c', sfid=0x10, name='EF.THRESHOLD',
size=(3, 3),
desc='Maximum value of START', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = Struct('max_start'/Int24ub)
# TS 31.102 (old releases like 3.8.0) Section 4.2.56
class EF_RPLMNAcT(TransRecEF):
- def __init__(self, fid='6f65', sfid=None, name='EF.RPLMNAcTD',
size={2, 4}, rec_len=2,
+ def __init__(self, fid='6f65', sfid=None, name='EF.RPLMNAcTD',
size=(2, 4), rec_len=2,
desc='RPLMN Last used Access Technology', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size,
rec_len=rec_len, **kwargs)
def _decode_record_hex(self, in_hex):
@@ -754,14 +754,14 @@
# TS 31.102 Section 4.2.77
class EF_VGCSCA(TransRecEF):
- def __init__(self, fid='6fd4', sfid=None, name='EF.VGCSCA', size={2,
100}, rec_len=2,
+ def __init__(self, fid='6fd4', sfid=None, name='EF.VGCSCA', size=(2,
100), rec_len=2,
desc='Voice Group Call Service Ciphering Algorithm', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size,
rec_len=rec_len, **kwargs)
self._construct = Struct('alg_v_ki_1'/Int8ub,
'alg_v_ki_2'/Int8ub)
# TS 31.102 Section 4.2.79
class EF_GBABP(TransparentEF):
- def __init__(self, fid='6fd6', sfid=None, name='EF.GBABP', size={3,
50},
+ def __init__(self, fid='6fd6', sfid=None, name='EF.GBABP', size=(3,
50),
desc='GBA Bootstrapping parameters', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = Struct('rand'/LV, 'b_tid'/LV,
'key_lifetime'/LV)
@@ -812,7 +812,7 @@
# TS 31.102 Section 4.2.85
class EF_EHPLMNPI(TransparentEF):
- def __init__(self, fid='6fdb', sfid=None, name='EF.EHPLMNPI',
size={1, 1},
+ def __init__(self, fid='6fdb', sfid=None, name='EF.EHPLMNPI',
size=(1, 1),
desc='Equivalent HPLMN Presentation Indication', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = Struct('presentation_ind' /
@@ -860,7 +860,7 @@
# TS 31.102 Section 4.2.91
class EF_EPSLOCI(TransparentEF):
- def __init__(self, fid='6fe3', sfid=0x1e, name='EF.EPSLOCI',
size={18, 18},
+ def __init__(self, fid='6fe3', sfid=0x1e, name='EF.EPSLOCI',
size=(18, 18),
desc='EPS Location Information', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
upd_status_constr = Enum(
@@ -897,7 +897,7 @@
# TS 31.102 Section 4.2.96
class EF_PWS(TransparentEF):
- def __init__(self, fid='6fec', sfid=None, name='EF.PWS',
desc='Public Warning System', size={1, 1}, **kwargs):
+ def __init__(self, fid='6fec', sfid=None, name='EF.PWS',
desc='Public Warning System', size=(1, 1), **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
pws_config = FlagsEnum(
Byte, ignore_pws_in_hplmn_and_equivalent=1, ignore_pws_in_vplmn=2)
@@ -926,7 +926,7 @@
# TS 31.102 Section 4.2.106
class EF_FromPreferred(TransparentEF):
- def __init__(self, fid='6ff7', sfid=None, name='EF.FromPreferred',
size={1, 1},
+ def __init__(self, fid='6ff7', sfid=None, name='EF.FromPreferred',
size=(1, 1),
desc='From Preferred', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = BitStruct('rfu'/BitsRFU(7),
'from_preferred'/Bit)
@@ -954,7 +954,7 @@
# TS 31.102 Section 4.4.11.2
class EF_5GS3GPPLOCI(TransparentEF):
- def __init__(self, fid='4f01', sfid=0x01, name='EF.5GS3GPPLOCI',
size={20, 20},
+ def __init__(self, fid='4f01', sfid=0x01, name='EF.5GS3GPPLOCI',
size=(20, 20),
desc='5S 3GP location information', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
upd_status_constr = Enum(
@@ -965,7 +965,7 @@
# TS 31.102 Section 4.4.11.7
class EF_UAC_AIC(TransparentEF):
- def __init__(self, fid='4f06', sfid=0x06, name='EF.UAC_AIC', size={4,
4},
+ def __init__(self, fid='4f06', sfid=0x06, name='EF.UAC_AIC', size=(4,
4),
desc='UAC Access Identities Configuration', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
cfg_constr = FlagsEnum(Byte, multimedia_priority_service=1,
@@ -1104,7 +1104,7 @@
EF_OPL5G(service=129),
EF_SUPI_NAI(service=130),
TransparentEF('4F0A', 0x0a, 'EF.Routing_Indicator',
- 'Routing Indicator', size={4, 4}, service=124),
+ 'Routing Indicator', size=(4, 4), service=124),
TransparentEF('4F0B', 0x0b, 'EF.URSP',
'UE Route Selector Policies per PLMN', service=132),
EF_TN3GPPSNN(service=133),
@@ -1136,11 +1136,11 @@
TransparentEF('6f3f', None, 'EF.GID2', 'Group Identifier
Level 2', service=18),
EF_SPN(service=19),
TransparentEF('6f41', None, 'EF.PUCT',
- 'Price per unit and currency table', size={5, 5},
service=13),
+ 'Price per unit and currency table', size=(5, 5),
service=13),
EF_CBMI(service=15),
EF_ACC(sfid=0x06),
EF_PLMNsel('6f7b', 0x0d, 'EF.FPLMN',
- 'Forbidden PLMNs', size={12, None}),
+ 'Forbidden PLMNs', size=(12, None)),
EF_LOCI(),
EF_AD(),
EF_CBMID(sfid=0x0e, service=29),
@@ -1204,7 +1204,7 @@
EF_MSK(service=69),
EF_MUK(service=69),
EF_GBANL(service=68),
- EF_PLMNsel('6fd9', 0x1d, 'EF.EHPLMN', 'Equivalent
HPLMN', size={12, None}, service=71),
+ EF_PLMNsel('6fd9', 0x1d, 'EF.EHPLMN', 'Equivalent
HPLMN', size=(12, None), service=71),
EF_EHPLMNPI(service=(71, 73)),
# EF_LRPLMNSI ('6fdc', service=74)
EF_NAFKCA(service=(68, 76)),
@@ -1213,7 +1213,7 @@
EF_NCP_IP(service=80),
EF_EPSLOCI('6fe3', 0x1e, 'EF.EPSLOCI', 'EPS location
information', service=85),
EF_EPSNSC(service=85),
- TransparentEF('6fe6', None, 'EF.UFC', 'USAT Facility
Control', size={1, 16}),
+ TransparentEF('6fe6', None, 'EF.UFC', 'USAT Facility
Control', size=(1, 16)),
TransparentEF('6fe8', None, 'EF.NASCONFIG', 'Non Access
Stratum Configuration', service=96),
# UICC IARI (only in cards that have no ISIM) service=95
EF_PWS(service=97),
diff --git a/pySim/ts_31_102_telecom.py b/pySim/ts_31_102_telecom.py
index c020a07..06317b9 100644
--- a/pySim/ts_31_102_telecom.py
+++ b/pySim/ts_31_102_telecom.py
@@ -234,7 +234,7 @@
# TS 31.102 Section 4.6.4.1
class EF_MST(EF_UServiceTable):
- def __init__(self, fid='4F01', sfid=0x01, name='EF.MST',
desc='MCS Service Table', size={2,2},
+ def __init__(self, fid='4F01', sfid=0x01, name='EF.MST',
desc='MCS Service Table', size=(2,2),
table=EF_MST_map, **kwargs):
super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, size=size,
table=table)
@@ -265,7 +265,7 @@
# TS 31.102 Section 4.6.5.2
class EF_VST(EF_UServiceTable):
- def __init__(self, fid='4F01', sfid=0x01, name='EF.VST',
desc='V2X Service Table', size={2,2},
+ def __init__(self, fid='4F01', sfid=0x01, name='EF.VST',
desc='V2X Service Table', size=(2,2),
table=EF_VST_map, **kwargs):
super().__init__(fid=fid, sfid=sfid, name=name, desc=desc, size=size,
table=table)
diff --git a/pySim/ts_51_011.py b/pySim/ts_51_011.py
index c6bb194..68b32ce 100644
--- a/pySim/ts_51_011.py
+++ b/pySim/ts_51_011.py
@@ -448,7 +448,7 @@
def _encode(self, obj, context, path):
return 0 if obj else 1
- def __init__(self, fid='6f43', sfid=None, name='EF.SMSS',
desc='SMS status', size={2, 8}, **kwargs):
+ def __init__(self, fid='6f43', sfid=None, name='EF.SMSS',
desc='SMS status', size=(2, 8), **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = Struct(
'last_used_tpmr'/Int8ub,
'memory_capacity_exceeded'/self.MemCapAdapter(Int8ub))
@@ -512,7 +512,7 @@
# TS 51.011 Section 10.3.1
class EF_LP(TransRecEF):
- def __init__(self, fid='6f05', sfid=None, name='EF.LP', size={1,
None}, rec_len=1,
+ def __init__(self, fid='6f05', sfid=None, name='EF.LP', size=(1,
None), rec_len=1,
desc='Language Preference'):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size,
rec_len=rec_len)
@@ -524,7 +524,7 @@
# TS 51.011 Section 10.3.2
class EF_IMSI(TransparentEF):
- def __init__(self, fid='6f07', sfid=None, name='EF.IMSI',
desc='IMSI', size={9, 9}):
+ def __init__(self, fid='6f07', sfid=None, name='EF.IMSI',
desc='IMSI', size=(9, 9)):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
# add those commands to the general commands of a TransparentEF
self.shell_commands += [self.AddlShellCommands(self)]
@@ -563,7 +563,7 @@
# TS 51.011 Section 10.3.4
class EF_PLMNsel(TransRecEF):
def __init__(self, fid='6f30', sfid=None, name='EF.PLMNsel',
desc='PLMN selector',
- size={24, None}, rec_len=3, **kwargs):
+ size=(24, None), rec_len=3, **kwargs):
super().__init__(fid, name=name, sfid=sfid, desc=desc, size=size,
rec_len=rec_len, **kwargs)
def _decode_record_hex(self, in_hex):
@@ -580,7 +580,7 @@
# TS 51.011 Section 10.3.6
class EF_ACMmax(TransparentEF):
- def __init__(self, fid='6f37', sfid=None, name='EF.ACMmax', size={3,
3},
+ def __init__(self, fid='6f37', sfid=None, name='EF.ACMmax', size=(3,
3),
desc='ACM maximum value', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = Struct('acm_max'/Int24ub)
@@ -638,7 +638,7 @@
# TS 51.011 Section 10.3.11
class EF_SPN(TransparentEF):
def __init__(self, fid='6f46', sfid=None, name='EF.SPN',
- desc='Service Provider Name', size={17, 17}, **kwargs):
+ desc='Service Provider Name', size=(17, 17), **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = BitStruct(
# Byte 1
@@ -651,7 +651,7 @@
# TS 51.011 Section 10.3.13
class EF_CBMI(TransRecEF):
- def __init__(self, fid='6f45', sfid=None, name='EF.CBMI', size={2,
None}, rec_len=2,
+ def __init__(self, fid='6f45', sfid=None, name='EF.CBMI', size=(2,
None), rec_len=2,
desc='Cell Broadcast message identifier selection', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size,
rec_len=rec_len, **kwargs)
self._construct = GreedyRange(Int16ub)
@@ -659,13 +659,13 @@
# TS 51.011 Section 10.3.15
class EF_ACC(TransparentEF):
def __init__(self, fid='6f78', sfid=None, name='EF.ACC',
- desc='Access Control Class', size={2, 2}, **kwargs):
+ desc='Access Control Class', size=(2, 2), **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = HexAdapter(Bytes(2))
# TS 51.011 Section 10.3.16
class EF_LOCI(TransparentEF):
- def __init__(self, fid='6f7e', sfid=None, name='EF.LOCI',
desc='Location Information', size={11, 11}):
+ def __init__(self, fid='6f7e', sfid=None, name='EF.LOCI',
desc='Location Information', size=(11, 11)):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
self._construct = Struct('tmsi'/HexAdapter(Bytes(4)),
'lai'/HexAdapter(Bytes(5)), 'tmsi_time'/Int8ub,
'lu_status'/Enum(Byte, updated=0, not_updated=1,
plmn_not_allowed=2,
@@ -683,7 +683,7 @@
#OP_MODE_DICT = {int(v) : str(v) for v in EF_AD.OP_MODE}
#OP_MODE_DICT_REVERSED = {str(v) : int(v) for v in EF_AD.OP_MODE}
- def __init__(self, fid='6fad', sfid=None, name='EF.AD',
desc='Administrative Data', size={3, 4}):
+ def __init__(self, fid='6fad', sfid=None, name='EF.AD',
desc='Administrative Data', size=(3, 4)):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
self._construct = BitStruct(
# Byte 1
@@ -704,14 +704,14 @@
# TS 51.011 Section 10.3.20 / 10.3.22
class EF_VGCS(TransRecEF):
- def __init__(self, fid='6fb1', sfid=None, name='EF.VGCS', size={4,
200}, rec_len=4,
+ def __init__(self, fid='6fb1', sfid=None, name='EF.VGCS', size=(4,
200), rec_len=4,
desc='Voice Group Call Service', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size,
rec_len=rec_len, **kwargs)
self._construct = BcdAdapter(Bytes(4))
# TS 51.011 Section 10.3.21 / 10.3.23
class EF_VGCSS(TransparentEF):
- def __init__(self, fid='6fb2', sfid=None, name='EF.VGCSS', size={7,
7},
+ def __init__(self, fid='6fb2', sfid=None, name='EF.VGCSS', size=(7,
7),
desc='Voice Group Call Service Status', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = BitStruct(
@@ -719,7 +719,7 @@
# TS 51.011 Section 10.3.24
class EF_eMLPP(TransparentEF):
- def __init__(self, fid='6fb5', sfid=None, name='EF.eMLPP', size={2,
2},
+ def __init__(self, fid='6fb5', sfid=None, name='EF.eMLPP', size=(2,
2),
desc='enhanced Multi Level Pre-emption and Priority',
**kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
FlagsConstruct = FlagsEnum(
@@ -729,7 +729,7 @@
# TS 51.011 Section 10.3.25
class EF_AAeM(TransparentEF):
- def __init__(self, fid='6fb6', sfid=None, name='EF.AAeM', size={1,
1},
+ def __init__(self, fid='6fb6', sfid=None, name='EF.AAeM', size=(1,
1),
desc='Automatic Answer for eMLPP Service', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
FlagsConstruct = FlagsEnum(
@@ -738,28 +738,28 @@
# TS 51.011 Section 10.3.26
class EF_CBMID(EF_CBMI):
- def __init__(self, fid='6f48', sfid=None, name='EF.CBMID', size={2,
None}, rec_len=2,
+ def __init__(self, fid='6f48', sfid=None, name='EF.CBMID', size=(2,
None), rec_len=2,
desc='Cell Broadcast Message Identifier for Data Download',
**kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size,
rec_len=rec_len, **kwargs)
self._construct = GreedyRange(Int16ub)
# TS 51.011 Section 10.3.27
class EF_ECC(TransRecEF):
- def __init__(self, fid='6fb7', sfid=None, name='EF.ECC', size={3,
15}, rec_len=3,
+ def __init__(self, fid='6fb7', sfid=None, name='EF.ECC', size=(3,
15), rec_len=3,
desc='Emergency Call Codes', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size,
rec_len=rec_len, **kwargs)
self._construct = GreedyRange(BcdAdapter(Bytes(3)))
# TS 51.011 Section 10.3.28
class EF_CBMIR(TransRecEF):
- def __init__(self, fid='6f50', sfid=None, name='EF.CBMIR', size={4,
None}, rec_len=4,
+ def __init__(self, fid='6f50', sfid=None, name='EF.CBMIR', size=(4,
None), rec_len=4,
desc='Cell Broadcast message identifier range selection',
**kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size,
rec_len=rec_len, **kwargs)
self._construct = GreedyRange(Struct('lower'/Int16ub,
'upper'/Int16ub))
# TS 51.011 Section 10.3.29
class EF_DCK(TransparentEF):
- def __init__(self, fid='6f2c', sfid=None, name='EF.DCK', size={16,
16},
+ def __init__(self, fid='6f2c', sfid=None, name='EF.DCK', size=(16,
16),
desc='Depersonalisation Control Keys', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = Struct('network'/BcdAdapter(Bytes(4)),
@@ -768,7 +768,7 @@
'corporate'/BcdAdapter(Bytes(4)))
# TS 51.011 Section 10.3.30
class EF_CNL(TransRecEF):
- def __init__(self, fid='6f32', sfid=None, name='EF.CNL', size={6,
None}, rec_len=6,
+ def __init__(self, fid='6f32', sfid=None, name='EF.CNL', size=(6,
None), rec_len=6,
desc='Co-operative Network List', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size,
rec_len=rec_len, **kwargs)
@@ -798,13 +798,13 @@
# TS 51.011 Section 10.3.32
class EF_Kc(TransparentEF):
- def __init__(self, fid='6f20', sfid=None, name='EF.Kc',
desc='Ciphering key Kc', size={9, 9}, **kwargs):
+ def __init__(self, fid='6f20', sfid=None, name='EF.Kc',
desc='Ciphering key Kc', size=(9, 9), **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = Struct('kc'/HexAdapter(Bytes(8)),
'cksn'/Int8ub)
# TS 51.011 Section 10.3.33
class EF_LOCIGPRS(TransparentEF):
- def __init__(self, fid='6f53', sfid=None, name='EF.LOCIGPRS',
desc='GPRS Location Information', size={14, 14}):
+ def __init__(self, fid='6f53', sfid=None, name='EF.LOCIGPRS',
desc='GPRS Location Information', size=(14, 14)):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size)
self._construct = Struct('ptmsi'/HexAdapter(Bytes(4)),
'ptmsi_sig'/Int8ub, 'rai'/HexAdapter(Bytes(6)),
'rau_status'/Enum(Byte, updated=0,
not_updated=1, plmn_not_allowed=2,
@@ -812,7 +812,7 @@
# TS 51.011 Section 10.3.35..37
class EF_xPLMNwAcT(TransRecEF):
- def __init__(self, fid, sfid=None, name=None, desc=None, size={40, None}, rec_len=5,
**kwargs):
+ def __init__(self, fid, sfid=None, name=None, desc=None, size=(40, None), rec_len=5,
**kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size,
rec_len=rec_len, **kwargs)
def _decode_record_hex(self, in_hex):
@@ -861,14 +861,14 @@
# TS 51.011 Section 10.3.38
class EF_CPBCCH(TransRecEF):
- def __init__(self, fid='6f63', sfid=None, name='EF.CPBCCH', size={2,
14}, rec_len=2,
+ def __init__(self, fid='6f63', sfid=None, name='EF.CPBCCH', size=(2,
14), rec_len=2,
desc='CPBCCH Information', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size,
rec_len=rec_len, **kwargs)
self._construct = Struct('cpbcch'/Int16ub)
# TS 51.011 Section 10.3.39
class EF_InvScan(TransparentEF):
- def __init__(self, fid='6f64', sfid=None, name='EF.InvScan', size={1,
1},
+ def __init__(self, fid='6f64', sfid=None, name='EF.InvScan', size=(1,
1),
desc='IOnvestigation Scan', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = FlagsEnum(
@@ -958,7 +958,7 @@
class MMS_ConnectivityParamters(TLV_IE_Collection,
nested=[MMS_Implementation, MMS_Relay_Server,
Interface_to_CN, Gateway]):
pass
- def __init__(self, fid='6fd0', sfid=None, name='EF.MMSICP', size={1,
None},
+ def __init__(self, fid='6fd0', sfid=None, name='EF.MMSICP', size=(1,
None),
desc='MMS Issuer Connectivity Parameters', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._tlv = EF_MMSICP.MMS_ConnectivityParamters
@@ -981,7 +981,7 @@
# TS 51.011 Section 10.3.55
class EF_MMSUCP(TransparentEF):
- def __init__(self, fid='6fd2', sfid=None, name='EF.MMSUCP', size={1,
None},
+ def __init__(self, fid='6fd2', sfid=None, name='EF.MMSUCP', size=(1,
None),
desc='MMS User Connectivity Parameters', **kwargs):
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
@@ -998,24 +998,24 @@
'Higher Priority PLMN search period'),
EF_ACMmax(),
EF_ServiceTable('6f38', None, 'EF.SST',
- 'SIM service table', table=EF_SST_map, size={2,
16}),
+ 'SIM service table', table=EF_SST_map, size=(2,
16)),
CyclicEF('6f39', None, 'EF.ACM',
'Accumulated call meter', rec_len={3, 3}),
TransparentEF('6f3e', None, 'EF.GID1', 'Group Identifier
Level 1'),
TransparentEF('6f3f', None, 'EF.GID2', 'Group Identifier
Level 2'),
EF_SPN(),
TransparentEF('6f41', None, 'EF.PUCT',
- 'Price per unit and currency table', size={5, 5}),
+ 'Price per unit and currency table', size=(5, 5)),
EF_CBMI(),
TransparentEF('6f7f', None, 'EF.BCCH',
- 'Broadcast control channels', size={16, 16}),
+ 'Broadcast control channels', size=(16, 16)),
EF_ACC(),
EF_PLMNsel('6f7b', None, 'EF.FPLMN',
- 'Forbidden PLMNs', size={12, 12}),
+ 'Forbidden PLMNs', size=(12, 12)),
EF_LOCI(),
EF_AD(),
TransparentEF('6fa3', None, 'EF.Phase',
- 'Phase identification', size={1, 1}),
+ 'Phase identification', size=(1, 1)),
EF_VGCS(),
EF_VGCSS(),
EF_VGCS('6fb3', None, 'EF.VBS', 'Voice Broadcast
Service'),
--
To view, visit
https://gerrit.osmocom.org/c/pysim/+/28709
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I553616f8c6c4aaa8f635b3d7d94e8e8f49ed5a56
Gerrit-Change-Number: 28709
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: newchange