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
This commit is contained in:
Harald Welte
2023-05-23 20:29:49 +02:00
committed by laforge
parent c224b3b5f1
commit fc67de2219

View File

@@ -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 <herlesupreeth@gmail.com>
# Copyright (C) 2021-2022 Harald Welte <laforge@osmocom.org>
# Copyright (C) 2021-2023 Harald Welte <laforge@osmocom.org>
#
# 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 @@ EF_UST_map = {
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 @@ class EF_FromPreferred(TransparentEF):
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 @@ class EF_SUPI_NAI(TransparentEF):
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 @@ class EF_TN3GPPSNN(TransparentEF):
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 @@ class DF_USIM_5GS(CardDF):
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 @@ class ADF_USIM(CardADF):
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 @@ class ADF_USIM(CardADF):
# 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)