laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/32966 )
Change subject: ts_31_102: Extend from Rel16 to Rel17 ...................................................................... ts_31_102: Extend from Rel16 to Rel17 This adds definitions for a variety of files which were added in Release 17 of 3GPP TS 31.102. Change-Id: I61badc1988b006a1065bdfdcc8a93b758e31f79b --- M pySim/ts_31_102.py 1 file changed, 305 insertions(+), 3 deletions(-) git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/66/32966/1 diff --git a/pySim/ts_31_102.py b/pySim/ts_31_102.py index dc2a4d8..a54d600 100644 --- a/pySim/ts_31_102.py +++ b/pySim/ts_31_102.py @@ -5,12 +5,12 @@ # pylint: disable=undefined-variable """ -Various constants from 3GPP TS 31.102 V16.6.0 +Various constants from 3GPP TS 31.102 V17.9.0 """ # # Copyright (C) 2020 Supreeth Herle <[email protected]> -# Copyright (C) 2021-2022 Harald Welte <[email protected]> +# Copyright (C) 2021-2023 Harald Welte <[email protected]> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -180,7 +180,26 @@ 132: 'Support for URSP by USIM', 133: '5G Security Parameters extended', 134: 'MuD and MiD configuration data', - 135: 'Support for Trusted non-3GPP access networks by USIM' + 135: 'Support for Trusted non-3GPP access networks by USIM', + 136: 'Support for multiple records of NAS security context storage for multiple registration', + 137: 'Pre-configured CAG information list', + 138: 'SOR-CMCI storage in USIM', + 139: '5G ProSe', + 140: 'Storage of disaster roaming information in USIM', + 141: 'Pre-configured eDRX parameters', + 142: '5G NSWO support', + 143: 'PWS configuration for SNPN in USIM', + 144: 'Multiplier Coefficient for Higher Priority PLMN search via NG-RAN satellite access', + 145: 'K_AUSF derivation configuration', + 146: 'Network Identifier for SNPN (NID)', +} + +EF_5G_PROSE_ST_map = { + 1: '5G ProSe configuration data for direct discovery', + 2: '5G ProSe configuration data for direct communication', + 3: '5G ProSe configuration data for UE-to-network relay UE', + 4: '5G ProSe configuration data for remote UE', + 5: '5G ProSe configuration data for usage information reporting', } # Mapping between USIM Enbled Service Number and its description @@ -979,6 +998,13 @@ super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs) self._construct = BitStruct('rfu'/BitsRFU(7), 'from_preferred'/Bit) +# TS 31.102 Section 4.2.114 +class EF_eAKA(TransparentEF): + def __init__(self, fid='6f01', sfid=None, name='EF.eAKA', size=(1, 1), + desc='enhanced AKA support', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, size=size, **kwargs) + self._construct = BitStruct('rfu'/BitsRFU(7), 'enhanced_sqn_calculation_supported'/Bit) + ###################################################################### # DF.GSM-ACCESS @@ -1055,6 +1081,7 @@ self._tlv = EF_SUPI_NAI.NAI_TLV_Collection +# TS 31.102 Section 4.4.11.13 class EF_TN3GPPSNN(TransparentEF): class ServingNetworkName(BER_TLV_IE, tag=0x80): _construct = GreedyString("utf8") @@ -1063,6 +1090,258 @@ super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) self._tlv = EF_TN3GPPSNN.ServingNetworkName +# TS 31.102 Section 4.4.11.14 (Rel 17) +class EF_CAG(TransparentEF): + def __init__(self, fid='4f0d', sfid=0x0d, name='EF.CAG', + desc='Pre-configured CAG information list EF', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._construct = HexAdapter(GreedyBytes) + +# TS 31.102 Section 4.4.11.15 (Rel 17) +class EF_SOR_CMCI(TransparentEF): + def __init__(self, fid='4f0e', sfid=0x0e, name='EF.SOR-CMCI', + desc='Steering Of Roaming - Connected Mode Control Information', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._construct = HexAdapter(GreedyBytes) + +# TS 31.102 Section 4.4.11.17 (Rel 17) +class EF_DRI(TransparentEF): + def __init__(self, fid='4f0f', sfid=0x0f, name='EF.DRI', + desc='Disaster roaming information EF', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._construct = Struct('disaster_roaming_enabled'/Byte, + 'parameters_indicator_status'/FlagsEnum(Byte, roaming_wait_range=1, + return_wait_range=2, + applicability_indicator=3), + 'roaming_wait_range'/HexAdapter(Bytes(2)), + 'return_wait_range'/HexAdapter(Bytes(2)), + 'applicability_indicator'/HexAdapter(Byte)) + +# TS 31.102 Section 4.4.12.2 (Rel 17) +class EF_PWS_SNPN(TransparentEF): + def __init__(self, fid='4f01', sfid=0x01, name='EF.PWS_SNPN', + desc='Public Warning System in SNPNs', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._construct = Struct('pws_config_in_snpns'/FlagsEnum(Byte, ignore_all_pws_in_subscribed=1, + ignore_all_pws_in_non_subscribed=2)) + +# TS 31.102 Section 4.4.12.2 (Rel 17) +class EF_NID(LinFixedEF): + def __init__(self, fid='4f02', sfid=0x02, name='EF.NID', + desc='Network Identifier for SNPN', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, rec_len=(6,6), **kwargs) + self._construct = Struct('assignment_mode'/Enum(Byte, coordinated_ass_opt1=0, + self_ass=1, + coordinated_ass_opt2=2), + 'network_identifier'/HexAdapter(Bytes(5))) + +# TS 31.102 Section 4.4.12 (Rel 17) +class DF_SNPN(CardDF): + def __init__(self, fid='5fe0', name='DF.SNPN', desc='Files for SNPN purpose', **kwargs): + super().__init__(fid=fid, name=name, desc=desc, **kwargs) + files = [ + EF_PWS_SNPN(service=143), + EF_NID(service=146), + ] + self.add_files(files) + +# TS 31.102 Section 4.4.13.2 (Rel 17) +class EF_5G_PROSE_ST(EF_UServiceTable): + def __init__(self, **kwargs): + super().__init__(fid='4f01', sfid=0x01, name='EF.5G_PROSE_ST', + desc='5G ProSe Service Table', size=(1,2), table=EF_5G_PROSE_ST_map, **kwargs) + # add those commands to the general commands of a TransparentEF + self.shell_commands += [self.AddlShellCommands()] + + @with_default_category('File-Specific Commands') + class AddlShellCommands(CommandSet): + def __init__(self): + super().__init__() + + def do_prose_service_activate(self, arg): + """Activate a service within EF.5G_PROSE_ST""" + self._cmd.card.update_ust(int(arg), 1) + + def do_prose_service_deactivate(self, arg): + """Deactivate a service within EF.5G_PROSE_ST""" + self._cmd.card.update_ust(int(arg), 0) + +# TS 31.102 Section 4.4.13.3 (Rel 17) +class EF_5G_PROSE_DD(TransparentEF): + class ServedByNgRan(BER_TLV_IE, tag=0x80): + pass + class NotServedByNgran(BER_TLV_IE, tag=0x81): + pass + class ProSeIdentifiers(BER_TLV_IE, tag=0x82): + pass + class ProSeIdToDefaultDestL2Id(BER_TLV_IE, tag=0x83): + pass + class GroupMemberDiscoveryParameters(BER_TLV_IE, tag=0x84): + pass + class ValidityTimer(BER_TLV_IE, tag=0x85): + pass + class ProSeDirectDiscoveryUeId(BER_TLV_IE, tag=0x86): + pass + class Hplmn5GDdnmfAddressInformation(BER_TLV_IE, tag=0x87): + pass + class ProSeConfigForDirectDiscovery(BER_TLV_IE, tag=0xA0, + nested=[ServedByNgRan, NotServedByNgran, ProSeIdentifiers, + ProSeIdToDefaultDestL2Id, GroupMemberDiscoveryParameters, + ValidityTimer, ProSeDirectDiscoveryUeId, + Hplmn5GDdnmfAddressInformation]): + pass + def __init__(self, fid='4f02', sfid=0x02, name='EF.5G_PROSE_DD', + desc='5G ProSe configuration data for direct discovery', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) + # contains TLV structure despite being TransparentEF, not BER-TLV ?!? + self._tlv = EF_5G_PROSE_DD.ProSeConfigForDirectDiscovery + +# TS 31.102 Section 4.4.13.4 (Rel 17) +class EF_5G_PROSE_DC(TransparentEF): + class PrivacyConfig(BER_TLV_IE, tag=0x87): + pass + class DirectCommInNrPc5(BER_TLV_IE, tag=0x88): + pass + class ApplicationToPathPreferenceMappingRules(BER_TLV_IE, tag=0x89): + pass + class ProSeIdToNrTxProfileForBroadcastAndGroupcastMappingRules(BER_TLV_IE, tag=0x91): + pass + class ProSeConfigForDirectCommunication(BER_TLV_IE, tag=0xA0, + nested=[EF_5G_PROSE_DD.ServedByNgRan, + EF_5G_PROSE_DD.NotServedByNgran, + PrivacyConfig, DirectCommInNrPc5, + ApplicationToPathPreferenceMappingRules, + EF_5G_PROSE_DD.ValidityTimer, + ProSeIdToNrTxProfileForBroadcastAndGroupcastMappingRules]): + pass + def __init__(self, fid='4f03', sfid=0x03, name='EF.5G_PROSE_DC', + desc='5G ProSe configuration data for direct communication', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) + # contains TLV structure despite being TransparentEF, not BER-TLV ?!? + self._tlv = EF_5G_PROSE_DC.ProSeConfigForDirectCommunication + +# TS 31.102 Section 4.4.13.5 (Rel 17) +class EF_5G_PROSE_U2NRU(TransparentEF): + class ProSeIdToDefaultDestL2Id(BER_TLV_IE, tag=0x8a): + pass + class RxcInfoList(BER_TLV_IE, tag=0x8b): + pass + class FiveQiToPc65QosParametersMappingRules(BER_TLV_IE, tag=0x8c): + pass + class ProSeIdToAppSrvAddrMappingRules(BER_TLV_IE, tag=0x8d): + pass + class UserInfoIdForDiscovery(BER_TLV_IE, tag=0x8e): + pass + class PrivacyTimer(BER_TLV_IE, tag=0x92): + pass + class FiveGPkkmfAddressInformation(BER_TLV_IE, tag=0x93): + pass + class ProSeConfigDataForUeToNetworkRelayUe(BER_TLV_IE, tag=0xA0, + nested=[EF_5G_PROSE_DD.ServedByNgRan, + EF_5G_PROSE_DD.NotServedByNgran, + ProSeIdToDefaultDestL2Id, + RxcInfoList, + FiveQiToPc65QosParametersMappingRules, + ProSeIdToAppSrvAddrMappingRules, + EF_5G_PROSE_DD.ValidityTimer, + UserInfoIdForDiscovery, + PrivacyTimer, + FiveGPkkmfAddressInformation]): + pass + def __init__(self, fid='4f04', sfid=0x04, name='EF.5G_PROSE_U2NRU', + desc='5G ProSe configuration data for UE-to-network relay UE', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) + # contains TLV structure despite being TransparentEF, not BER-TLV ?!? + self._tlv = EF_5G_PROSE_U2NRU.ProSeConfigDataForUeToNetworkRelayUe + +# TS 31.102 Section 4.4.13.6 (Rel 17) +class EF_5G_PROSE_RU(TransparentEF): + class DefaultDestL2Ids(BER_TLV_IE, tag=0x8f): + pass + class N3IwfSelectionInfoFor5GProSeL3RemoteUE(BER_TLV_IE, tag=0x90): + pass + class ProSeConfigDataForRemoteUe(BER_TLV_IE, tag=0xa0, + nested=[EF_5G_PROSE_DD.ServedByNgRan, + EF_5G_PROSE_DD.NotServedByNgran, + DefaultDestL2Ids, + EF_5G_PROSE_U2NRU.RxcInfoList, + N3IwfSelectionInfoFor5GProSeL3RemoteUE, + EF_5G_PROSE_DD.ValidityTimer, + EF_5G_PROSE_U2NRU.UserInfoIdForDiscovery, + EF_5G_PROSE_U2NRU.PrivacyTimer, + EF_5G_PROSE_U2NRU.FiveGPkkmfAddressInformation]): + pass + def __init__(self, fid='4f05', sfid=0x05, name='EF.5G_PROSE_RU', + desc='5G ProSe configuration data for remote UE', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) + # contains TLV structure despite being TransparentEF, not BER-TLV ?!? + self._tlv = EF_5G_PROSE_RU.ProSeConfigDataForRemoteUe + +# TS 31.102 Section 4.4.13.7 (Rel 17) +class EF_5G_PROSE_UIR(TransparentEF): + class CollectionPeriod(BER_TLV_IE, tag=0x94): + pass + class ReportingWindow(BER_TLV_IE, tag=0x95): + pass + class ReportingIndicators(BER_TLV_IE, tag=0x96): + pass + class FiveGDdnmfCtfAddrForUploading(BER_TLV_IE, tag=0x97): + pass + class ProSeConfigDataForUeToNetworkRelayUE(BER_TLV_IE, tag=0xa0, + nested=[EF_5G_PROSE_DD.ValidityTimer, + CollectionPeriod, ReportingWindow, + ReportingIndicators, + FiveGDdnmfCtfAddrForUploading]): + pass + def __init__(self, fid='4f06', sfid=0x06, name='EF.5G_PROSE_UIR', + desc='5G ProSe configuration data for usage information reporting', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) + # contains TLV structure despite being TransparentEF, not BER-TLV ?!? + self._tlv = EF_5G_PROSE_UIR.ProSeConfigDataForUeToNetworkRelayUE + +# 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): + super().__init__(fid=fid, name=name, desc=desc, **kwargs) + files = [ + EF_5G_PROSE_ST(), + EF_5G_PROSE_DD(service=1), + EF_5G_PROSE_DC(service=2), + EF_5G_PROSE_U2NRU(service=3), + EF_5G_PROSE_RU(service=4), + EF_5G_PROSE_UIR(service=5), + ] + 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', + desc='5GS eDRX Parameters', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._construct = Struct('5gs_rat_type'/FlagsEnum(Byte, ng_ran=1, sat_ng_ran=2), + 'edrx_cycle_length'/Int8ub) + +# TS 31.102 Section 4.4.11.19 (Rel 17) +class EF_5GNSWO_CONF(TransparentEF): + def __init__(self, fid='4f11', sfid=0x11, name='EF.5GNSWO_CONF', + desc='5G Non-Seamless WLAN Offload configuration', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._construct = Struct('5g_nswo_usage_ind'/Enum(Byte, disabled=0, enabled=1)) + +# TS 31.102 Section 4.4.11.20 (Rel 17) +class EF_MCHPPLMN(TransparentEF): + def __init__(self, fid='4f12', sfid=0x12, name='EF.MCHPPLMN', + desc='Multiplier Coefficient for Higher Priority PLMN search', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._construct = Struct('multiplier_coefficient'/Int8ub) + +# TS 31.102 Section 4.4.11.21 (Rel 17) +class EF_KAUSF_DERIVATION(TransparentEF): + def __init__(self, fid='4f16', sfid=0x16, name='EF.KAUSF_DERIVATION', + desc='K_AUSF derivation configuration', **kwargs): + super().__init__(fid, sfid=sfid, name=name, desc=desc, **kwargs) + self._construct = Struct('k_ausf_deriv_cfg'/FlagsEnum(Byte, use_msk=1), 'rfu'/HexAdapter(GreedyBytes)) + # TS 31.102 Section 4.4.5 class DF_WLAN(CardDF): def __init__(self, fid='5f40', name='DF.WLAN', desc='Files for WLAN purpose', **kwargs): @@ -1160,6 +1439,14 @@ TransparentEF('4F0B', 0x0b, 'EF.URSP', 'UE Route Selector Policies per PLMN', service=132), EF_TN3GPPSNN(service=133), + # Rel-17 additions below + EF_CAG(service=137), + EF_SOR_CMCI(service=138), + EF_DRI(service=140), + EF_5GSEDRX(service=141), + EF_5GNSWO_CONF(service=142), + EF_MCHPPLMN(service=144), + EF_KAUSF_DERIVATION(service=145), ] self.add_files(files) @@ -1277,6 +1564,7 @@ EF_ePDGId(service=(106, 107)), # FIXME: from EF_ePDGSelection onwards EF_FromPreferred(service=114), + EF_eAKA(), # FIXME: DF_SoLSA service=23 DF_PHONEBOOK(), DF_GSM_ACCESS(), @@ -1286,6 +1574,8 @@ # FIXME: DF_ACDC service=108 # FIXME: DF_TV service=116 DF_USIM_5GS(service=[122, 123, 124, 125, 126, 127, 129, 130]), + DF_SNPN(service=[143,146]), + DF_5G_ProSe(service=139), ] self.add_files(files) -- To view, visit https://gerrit.osmocom.org/c/pysim/+/32966 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: pysim Gerrit-Branch: master Gerrit-Change-Id: I61badc1988b006a1065bdfdcc8a93b758e31f79b Gerrit-Change-Number: 32966 Gerrit-PatchSet: 1 Gerrit-Owner: laforge <[email protected]> Gerrit-MessageType: newchange
