laforge has submitted this change. (
https://gerrit.osmocom.org/c/pysim/+/37526?usp=email
)
Change subject: ts_31_102: Make use of ts_31_103_shared and add Rel 18 files
......................................................................
ts_31_102: Make use of ts_31_103_shared and add Rel 18 files
Change-Id: I68ca15084f9654468bd37526c02a66322085b25b
---
M pySim/ts_31_102.py
1 file changed, 134 insertions(+), 1 deletion(-)
Approvals:
laforge: Looks good to me, approved
Jenkins Builder: Verified
diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py
index f160d8e..497044f 100644
--- a/pySim/ts_31_102.py
+++ b/pySim/ts_31_102.py
@@ -30,7 +30,7 @@
from construct import Optional as COptional
from construct import Int32ub, Nibble, GreedyRange, Struct, FlagsEnum, Switch, this,
Int16ub, Padding
-from construct import Bytewise, Int24ub, PaddedString
+from construct import Bytewise, Int24ub, PaddedString, PrefixedArray, If
import pySim.ts_102_221
from pySim.ts_51_011 import EF_ACMmax, EF_AAeM, EF_eMLPP, EF_CMI, EF_PNN
@@ -43,6 +43,8 @@
from pySim.tlv import *
from pySim.filesystem import *
from pySim.ts_31_102_telecom import DF_PHONEBOOK, EF_UServiceTable
+from pySim.ts_31_103_shared import EF_IMSConfigData, EF_XCAPConfigData,
EF_MuDMiDConfigData
+from pySim.ts_31_103_shared import EF_AC_GBAUAPI, EF_IMSDCI
from pySim.construct import *
from pySim.utils import is_hexstr
from pySim.cat import SMS_TPDU, DeviceIdentities, SMSPPDownload
@@ -897,6 +899,14 @@
super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
self._construct = BitStruct('rfu'/BitsRFU(7),
'enhanced_sqn_calculation_supported'/Flag)
+# TS 31.102 Section 4.2.115 (Rel 18)
+class EF_OCST(TransparentEF):
+ def __init__(self, fid='6f02', sfid=None, name='EF.OCST', size=(2,
100),
+ desc='Operator controlled signal threshold per access
technology', **kwargs):
+ super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs)
+ self._construct = Struct('sense'/FlagsEnum(Byte, sense_enabled=1),
+ 'ocst_tlv'/GreedyBytes)
+
######################################################################
# DF.GSM-ACCESS
@@ -1278,6 +1288,56 @@
# contains TLV structure despite being TransparentEF, not BER-TLV ?!?
self._tlv = EF_5G_PROSE_UIR.ProSeConfigDataForUeToNetworkRelayUE
+# TS 31.102 Section 4.4.13.8 (Rel 18)
+class EF_5G_PROSE_U2URU(TransparentEF):
+ class ValidityTimer(BER_TLV_IE, tag=0x85):
+ _construct = Bytes(5)
+ class ServedByNGRAN(BER_TLV_IE, tag=0x80):
+ _construct = GreedyBytes
+ class NotServedByNGRAN(BER_TLV_IE, tag=0x81):
+ _construct = GreedyBytes
+ class DefaultDstL2IdsForRxDisc(BER_TLV_IE, tag=0x99):
+ _construct = GreedyBytes
+ class UserInforIdForDiscovery(BER_TLV_IE, tag=0x8e):
+ _construct = GreedyBytes
+ class RSCInfoList(BER_TLV_IE, tag=0x8b):
+ _construct = GreedyBytes
+ class DefaultDstL2IdsForTxRxDirect(BER_TLV_IE, tag=0x9a):
+ _construct = GreedyBytes
+ class ProSeConfigDataForU2URelayUE(BER_TLV_IE, tag=0xa0,
+ nested=[ValidityTimer, ServedByNGRAN,
NotServedByNGRAN,
+ DefaultDstL2IdsForRxDisc,
UserInforIdForDiscovery,
+ RSCInfoList,
DefaultDstL2IdsForTxRxDirect]):
+ pass
+ def __init__(self, fid='4f07', sfid=0x07, name='EF.5G_PROSE_U2URU',
+ desc='5G ProSe configuration data for UE-to-UE relay UE',
**kwargs):
+ super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs)
+ self._tlv = EF_5G_PROSE_U2URU.ProSeConfigDataForU2URelayUE
+
+# TS 31.102 Section 4.4.13.9 (Rel 18)
+class EF_5G_PROSE_EU(TransparentEF):
+ class PKMFAddressInformation(BER_TLV_IE, tag=0x93):
+ Ipv4AddrList = PrefixedArray(Int8ub, Int32ub)
+ Ipv6AddrList = PrefixedArray(Int8ub, Bytes(16))
+ _construct = Struct('flags'/FlagsEnum(Byte, ipv4=1, ipv6=2, fqdn=4),
+ 'ipv4_addr_list'/If(this.flags.ipv4, Ipv4AddrList),
+ 'ipv6_addr_list'/If(this.flags.ipv6, Ipv6AddrList),
+ 'fqdn'/Prefixed(Int8ub, Utf8Adapter(GreedyBytes)))
+ class ProSeConfigDataForEndUE(BER_TLV_IE, tag=0xa0,
+ nested=[EF_5G_PROSE_U2URU.ValidityTimer,
+ EF_5G_PROSE_U2URU.ServedByNGRAN,
+ EF_5G_PROSE_U2URU.NotServedByNGRAN,
+ EF_5G_PROSE_U2URU.DefaultDstL2IdsForRxDisc,
+ EF_5G_PROSE_U2URU.UserInforIdForDiscovery,
+ EF_5G_PROSE_U2URU.RSCInfoList,
+
EF_5G_PROSE_U2URU.DefaultDstL2IdsForTxRxDirect,
+ PKMFAddressInformation]):
+ pass
+ def __init__(self, fid='4f08', sfid=0x08, name='EF.5G_PROSE_EU',
+ desc='5G ProSe configuration data for end UE', **kwargs):
+ super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs)
+ self._tlv = EF_5G_PROSE_EU.ProSeConfigDataForEndUE
+
# TS 31.102 Section 4.4.13 (Rel 17)
class DF_5G_ProSe(CardDF):
def __init__(self, fid='5ff0', name='DF.5G_ProSe', desc='Files
for 5G ProSe purpose', **kwargs):
@@ -1289,9 +1349,62 @@
EF_5G_PROSE_U2NRU(service=3),
EF_5G_PROSE_RU(service=4),
EF_5G_PROSE_UIR(service=5),
+ # Rel 18 additions
+ EF_5G_PROSE_U2URU(service=6),
+ EF_5G_PROSE_EU(service=7),
]
self.add_files(files)
+# TS 31.102 Section 4.4.14.2 (Rel 18)
+class EF_5MBSUECONFIG(TransparentEF):
+
+ class Plmn(BER_TLV_IE, tag=0x80):
+ _construct = Struct('plmn'/PlmnAdapter(Bytes(3)),
+ 'nid'/COptional(Bytes(6)))
+ class Tmgi(BER_TLV_IE, tag=0x81):
+ TmgiEntry = Struct('tmgi'/Bytes(6),
+ 'usd_fid'/HexAdapter(Bytes(2)),
+ 'service_type'/FlagsEnum(Byte,
mbs_service_announcement=1, mbs_user_service=2))
+ _construct = GreedyRange(TmgiEntry)
+ class NrArfcnList(BER_TLV_IE, tag=0x82):
+ _construct = GreedyRange(Bytes(4))
+ class DNN(BER_TLV_IE, tag=0x83):
+ _construct = GreedyBytes
+ class SNSSAI(BER_TLV_IE, tag=0x84):
+ _construct = GreedyBytes
+ class PduInfoList(BER_TLV_IE, tag=0xa1, nested=[DNN, SNSSAI]):
+ pass
+ class Plmn5mbsPreconfiguration(BER_TLV_IE, tag=0xa0,
+ nested=[Plmn, Tmgi, NrArfcnList, PduInfoList]):
+ pass
+ def __init__(self, fid='4f01', sfid=None, name='EF.5MBSUECONFIG',
+ desc='5MBS UE pre-configuration', **kwargs):
+ super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs)
+ self._tlv = EF_5MBSUECONFIG.Plmn5mbsPreconfiguration
+
+# TS 31.102 Section 4.4.14.3 (Rel 18)
+class EF_5MBSUSD(TransparentEF):
+ """There can be any number of these files with undefined FID; the FIDs
are contained
+ in EF.5BMSUECONFIG. FID range is 4f08...4fff"""
+ class USD(BER_TLV_IE, tag=0x80):
+ _construct = GreedyBytes
+ def __init__(self, fid, sfid=None, name='EF.5MBSUSD',
+ desc='5MBS User Service Description', **kwargs):
+ super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs)
+ self._tlv = USD
+
+
+# TS 31.102 Section 4.4.14 (Rel 18)
+class DF_5MBSUECONFIG(CardDF):
+ def __init__(self, fid='5ff1', name='DF.5MBSUECONFIG',
desc='', **kwargs):
+ super().__init__(fid=fid, name=name, desc=desc, **kwargs)
+ files = [
+ EF_5MBSUECONFIG(),
+ # EF_5MBSUSD() wouild have to be dynamically registered based on
EF_5MBSUECONFIG content
+ ]
+ self.add_files(files)
+
+
# TS 31.102 Section 4.4.11.18 (Rel 17)
class EF_5GSEDRX(TransparentEF):
def __init__(self, fid='4f10', sfid=0x10, name='EF.5GSEDRX',
@@ -1556,7 +1669,17 @@
EF_ePDGSelection('6ff6', None, 'EF.ePDGSelectionEm',
desc='ePDG Selection Information for Emergency
Services', service=(110, 111)),
EF_FromPreferred(service=114),
+ EF_IMSConfigData(service=115),
+ # TODO: EF.TVCONFIG
+ # TODO: EF.3GPPPSDATAOFF
+ # TODO: EF.3GPPPSDATAOFFservicelist
+ EF_XCAPConfigData(service=120),
+ # TODO: EF.EARFCNList
+ EF_MuDMiDConfigData(service=134),
EF_eAKA(),
+ EF_OCST(service=148),
+ EF_AC_GBAUAPI(service=68),
+ EF_IMSDCI(service=150),
# FIXME: DF_SoLSA service=23
DF_PHONEBOOK(),
DF_GSM_ACCESS(),
@@ -1569,6 +1692,7 @@
DF_SNPN(service=[143,146]),
DF_5G_ProSe(service=139),
DF_SAIP(),
+ DF_5MBSUECONFIG(service=147),
]
if has_imsi:
--
To view, visit
https://gerrit.osmocom.org/c/pysim/+/37526?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I68ca15084f9654468bd37526c02a66322085b25b
Gerrit-Change-Number: 37526
Gerrit-PatchSet: 3
Gerrit-Owner: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-MessageType: merged