class CaviumTrDataModel(DataModel): """ Class to represent relevant data model parameters from TR-196/TR-098/TR-181. This class is effectively read-only """ # Mapping of TR parameter paths to aliases DEVICE_PATH = 'Device.' FAPSERVICE_PATH = DEVICE_PATH + 'Services.FAPService.1.' PARAMETERS = { # Top-level objects ParameterName.DEVICE: TrParam(DEVICE_PATH, True, TrParameterType.OBJECT, False), ParameterName.FAP_SERVICE: TrParam(FAPSERVICE_PATH, True, TrParameterType.OBJECT, False), # Device info parameters ParameterName.GPS_STATUS: TrParam(DEVICE_PATH + 'FAP.GPS.ContinuousGPSStatus.GotFix', True, TrParameterType.BOOLEAN, False), ParameterName.GPS_LAT: TrParam(DEVICE_PATH + 'FAP.GPS.LockedLatitude', True, TrParameterType.INT, False), ParameterName.GPS_LONG: TrParam(DEVICE_PATH + 'FAP.GPS.LockedLongitude', True, TrParameterType.INT, False), ParameterName.SW_VERSION: TrParam(DEVICE_PATH + 'DeviceInfo.SoftwareVersion', True, TrParameterType.STRING, False), ParameterName.SERIAL_NUMBER: TrParam(DEVICE_PATH + 'DeviceInfo.SerialNumber', True, TrParameterType.STRING, False), # Capabilities ParameterName.DUPLEX_MODE_CAPABILITY: TrParam( FAPSERVICE_PATH + 'Capabilities.LTE.DuplexMode', True, TrParameterType.STRING, False, ), ParameterName.BAND_CAPABILITY: TrParam(FAPSERVICE_PATH + 'Capabilities.LTE.BandsSupported', True, TrParameterType.UNSIGNED_INT, False), # RF-related parameters ParameterName.EARFCNDL: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.EARFCNDL', True, TrParameterType.UNSIGNED_INT, False), ParameterName.EARFCNUL: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.EARFCNUL', True, TrParameterType.UNSIGNED_INT, False), ParameterName.BAND: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.FreqBandIndicator', True, TrParameterType.UNSIGNED_INT, False), ParameterName.PCI: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.PhyCellID', True, TrParameterType.STRING, False), ParameterName.DL_BANDWIDTH: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.DLBandwidth', True, TrParameterType.STRING, False), ParameterName.UL_BANDWIDTH: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.ULBandwidth', True, TrParameterType.STRING, False), ParameterName.CELL_ID: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.Common.CellIdentity', True, TrParameterType.UNSIGNED_INT, False), # Other LTE parameters ParameterName.ADMIN_STATE: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.AdminState', False, TrParameterType.BOOLEAN, False), ParameterName.OP_STATE: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.OpState', True, TrParameterType.BOOLEAN, False), ParameterName.RF_TX_STATUS: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.RFTxStatus', True, TrParameterType.BOOLEAN, False), # RAN parameters ParameterName.CELL_RESERVED: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.CellRestriction.CellReservedForOperatorUse', True, TrParameterType.BOOLEAN, False, ), ParameterName.CELL_BARRED: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.CellRestriction.CellBarred', True, TrParameterType.BOOLEAN, False, ), # Core network parameters ParameterName.MME_IP: TrParam( FAPSERVICE_PATH + 'FAPControl.LTE.Gateway.S1SigLinkServerList', True, TrParameterType.STRING, False, ), ParameterName.MME_PORT: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.Gateway.S1SigLinkPort', True, TrParameterType.UNSIGNED_INT, False), ParameterName.NUM_PLMNS: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNListNumberOfEntries', True, TrParameterType.UNSIGNED_INT, False, ), ParameterName.PLMN: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.', True, TrParameterType.OBJECT, False), # PLMN arrays are added below ParameterName.TAC: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.EPC.TAC', True, TrParameterType.UNSIGNED_INT, False), ParameterName.IP_SEC_ENABLE: TrParam( DEVICE_PATH + 'IPsec.Enable', False, TrParameterType.BOOLEAN, False, ), ParameterName.PERIODIC_INFORM_INTERVAL: TrParam(DEVICE_PATH + 'ManagementServer.PeriodicInformInterval', False, TrParameterType.UNSIGNED_INT, False), # Management server parameters ParameterName.PERIODIC_INFORM_ENABLE: TrParam( DEVICE_PATH + 'ManagementServer.PeriodicInformEnable', False, TrParameterType.BOOLEAN, False, ), ParameterName.PERIODIC_INFORM_INTERVAL: TrParam( DEVICE_PATH + 'ManagementServer.PeriodicInformInterval', False, TrParameterType.UNSIGNED_INT, False, ), # Performance management parameters ParameterName.PERF_MGMT_ENABLE: TrParam( FAPSERVICE_PATH + 'PerfMgmt.Config.1.Enable', False, TrParameterType.BOOLEAN, False, ), ParameterName.PERF_MGMT_UPLOAD_INTERVAL: TrParam( FAPSERVICE_PATH + 'PerfMgmt.Config.1.PeriodicUploadInterval', False, TrParameterType.UNSIGNED_INT, False, ), ParameterName.PERF_MGMT_UPLOAD_URL: TrParam( FAPSERVICE_PATH + 'PerfMgmt.Config.1.URL', False, TrParameterType.STRING, False, ), ParameterName.PERF_MGMT_USER: TrParam( FAPSERVICE_PATH + 'PerfMgmt.Config.1.Username', False, TrParameterType.STRING, False, ), ParameterName.PERF_MGMT_PASSWORD: TrParam( FAPSERVICE_PATH + 'PerfMgmt.Config.1.Password', False, TrParameterType.STRING, False, ), # PLMN Info ParameterName.PLMN_LIST: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.', False, TrParameterType.OBJECT, False, ), } NUM_PLMNS_IN_CONFIG = 6 for i in range(1, NUM_PLMNS_IN_CONFIG + 1): PARAMETERS[ParameterName.PLMN_N % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.' % i, True, TrParameterType.OBJECT, False, ) PARAMETERS[ParameterName.PLMN_N_CELL_RESERVED % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.CellReservedForOperatorUse' % i, True, TrParameterType.BOOLEAN, False, ) PARAMETERS[ParameterName.PLMN_N_ENABLE % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.Enable' % i, True, TrParameterType.BOOLEAN, False, ) PARAMETERS[ParameterName.PLMN_N_PRIMARY % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.IsPrimary' % i, True, TrParameterType.BOOLEAN, False, ) PARAMETERS[ParameterName.PLMN_N_PLMNID % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.PLMNID' % i, True, TrParameterType.STRING, False, ) TRANSFORMS_FOR_ENB = { ParameterName.DL_BANDWIDTH: transform_for_enb.bandwidth, ParameterName.UL_BANDWIDTH: transform_for_enb.bandwidth, } TRANSFORMS_FOR_MAGMA = { ParameterName.DL_BANDWIDTH: transform_for_magma.bandwidth, ParameterName.UL_BANDWIDTH: transform_for_magma.bandwidth, # We don't set GPS, so we don't need transform for enb ParameterName.GPS_LAT: transform_for_magma.gps_tr181, ParameterName.GPS_LONG: transform_for_magma.gps_tr181, } @classmethod def get_parameter(cls, param_name: ParameterName) -> Optional[TrParam]: return cls.PARAMETERS.get(param_name) @classmethod def _get_magma_transforms( cls, ) -> Dict[ParameterName, Callable[[Any], Any]]: return cls.TRANSFORMS_FOR_MAGMA @classmethod def _get_enb_transforms(cls) -> Dict[ParameterName, Callable[[Any], Any]]: return cls.TRANSFORMS_FOR_ENB @classmethod def get_load_parameters(cls) -> List[ParameterName]: """ Load all the parameters instead of a subset. """ return [ParameterName.DEVICE] @classmethod def get_num_plmns(cls) -> int: return cls.NUM_PLMNS_IN_CONFIG @classmethod def get_parameter_names(cls) -> List[ParameterName]: excluded_params = [ str(ParameterName.DEVICE), str(ParameterName.FAP_SERVICE), ] names = list( filter( lambda x: (not str(x).startswith('PLMN')) and (str(x) not in excluded_params), cls.PARAMETERS.keys(), ), ) return names @classmethod def get_numbered_param_names( cls, ) -> Dict[ParameterName, List[ParameterName]]: names = {} for i in range(1, cls.NUM_PLMNS_IN_CONFIG + 1): params = [] params.append(ParameterName.PLMN_N_CELL_RESERVED % i) params.append(ParameterName.PLMN_N_ENABLE % i) params.append(ParameterName.PLMN_N_PRIMARY % i) params.append(ParameterName.PLMN_N_PLMNID % i) names[ParameterName.PLMN_N % i] = params return names
class BaicellsRTSTrDataModel(DataModel): """ Class to represent relevant data model parameters from TR-196/TR-098/TR-181. This class is effectively read-only This is for any version beginning with BaiBS_ or after """ # Parameters to query when reading eNodeB config LOAD_PARAMETERS = [ParameterName.DEVICE] # Mapping of TR parameter paths to aliases DEVICE_PATH = 'Device.' FAPSERVICE_PATH = DEVICE_PATH + 'Services.FAPService.1.' PARAMETERS = { # Top-level objects ParameterName.DEVICE: TrParam(DEVICE_PATH, True, TrParameterType.OBJECT, False), ParameterName.FAP_SERVICE: TrParam(FAPSERVICE_PATH, True, TrParameterType.OBJECT, False), # Device info parameters ParameterName.GPS_STATUS: TrParam(DEVICE_PATH + 'DeviceInfo.X_BAICELLS_COM_GPS_Status', True, TrParameterType.BOOLEAN, False), ParameterName.PTP_STATUS: TrParam(DEVICE_PATH + 'DeviceInfo.X_BAICELLS_COM_1588_Status', True, TrParameterType.BOOLEAN, False), ParameterName.MME_STATUS: TrParam(DEVICE_PATH + 'DeviceInfo.X_BAICELLS_COM_MME_Status', True, TrParameterType.BOOLEAN, False), ParameterName.REM_STATUS: TrParam(FAPSERVICE_PATH + 'REM.X_BAICELLS_COM_REM_Status', True, TrParameterType.BOOLEAN, False), ParameterName.LOCAL_GATEWAY_ENABLE: TrParam(DEVICE_PATH + 'DeviceInfo.X_BAICELLS_COM_LTE_LGW_Switch', False, TrParameterType.BOOLEAN, False), # Tested Baicells devices were missing this parameter ParameterName.GPS_ENABLE: TrParam(DEVICE_PATH + 'X_BAICELLS_COM_GpsSyncEnable', False, TrParameterType.BOOLEAN, True), ParameterName.GPS_LAT: TrParam(DEVICE_PATH + 'FAP.GPS.LockedLatitude', True, TrParameterType.INT, True), ParameterName.GPS_LONG: TrParam(DEVICE_PATH + 'FAP.GPS.LockedLongitude', True, TrParameterType.INT, True), ParameterName.SW_VERSION: TrParam(DEVICE_PATH + 'DeviceInfo.SoftwareVersion', True, TrParameterType.STRING, False), ParameterName.SERIAL_NUMBER: TrParam(DEVICE_PATH + 'DeviceInfo.SerialNumber', True, TrParameterType.STRING, False), # Capabilities ParameterName.DUPLEX_MODE_CAPABILITY: TrParam( FAPSERVICE_PATH + 'Capabilities.LTE.DuplexMode', True, TrParameterType.STRING, False, ), ParameterName.BAND_CAPABILITY: TrParam(FAPSERVICE_PATH + 'Capabilities.LTE.BandsSupported', True, TrParameterType.STRING, False), # RF-related parameters ParameterName.EARFCNDL: TrParam(FAPSERVICE_PATH + 'X_BAICELLS_COM_LTE.EARFCNDLInUse', True, TrParameterType.INT, False), ParameterName.EARFCNUL: TrParam(FAPSERVICE_PATH + 'X_BAICELLS_COM_LTE.EARFCNULInUse', True, TrParameterType.INT, False), ParameterName.BAND: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.FreqBandIndicator', True, TrParameterType.INT, False), ParameterName.PCI: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.PhyCellID', False, TrParameterType.INT, False), ParameterName.DL_BANDWIDTH: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.DLBandwidth', True, TrParameterType.STRING, False), ParameterName.UL_BANDWIDTH: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.ULBandwidth', True, TrParameterType.STRING, False), ParameterName.SUBFRAME_ASSIGNMENT: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.PHY.TDDFrame.SubFrameAssignment', True, TrParameterType.INT, False, ), ParameterName.SPECIAL_SUBFRAME_PATTERN: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.PHY.TDDFrame.SpecialSubframePatterns', True, TrParameterType.INT, False, ), ParameterName.CELL_ID: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.Common.CellIdentity', True, TrParameterType.UNSIGNED_INT, False), # Other LTE parameters ParameterName.ADMIN_STATE: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.AdminState', False, TrParameterType.BOOLEAN, False), ParameterName.OP_STATE: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.OpState', True, TrParameterType.BOOLEAN, False), ParameterName.RF_TX_STATUS: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.RFTxStatus', True, TrParameterType.BOOLEAN, False), # RAN parameters ParameterName.CELL_RESERVED: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.CellRestriction.CellReservedForOperatorUse', True, TrParameterType.BOOLEAN, False, ), ParameterName.CELL_BARRED: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.CellRestriction.CellBarred', True, TrParameterType.BOOLEAN, False, ), # Core network parameters ParameterName.MME_IP: TrParam( FAPSERVICE_PATH + 'FAPControl.LTE.Gateway.S1SigLinkServerList', True, TrParameterType.STRING, False, ), ParameterName.MME_PORT: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.Gateway.S1SigLinkPort', True, TrParameterType.INT, False), ParameterName.NUM_PLMNS: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNListNumberOfEntries', True, TrParameterType.INT, False, ), ParameterName.PLMN: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.', True, TrParameterType.STRING, False), # PLMN arrays are added below ParameterName.TAC: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.EPC.TAC', True, TrParameterType.INT, False), ParameterName.IP_SEC_ENABLE: TrParam( DEVICE_PATH + 'Services.FAPService.Ipsec.IPSEC_ENABLE', False, TrParameterType.BOOLEAN, False, ), ParameterName.MME_POOL_ENABLE: TrParam( FAPSERVICE_PATH + 'FAPControl.LTE.Gateway.X_BAICELLS_COM_MmePool.Enable', True, TrParameterType.BOOLEAN, False, ), # Management server parameters ParameterName.PERIODIC_INFORM_ENABLE: TrParam(DEVICE_PATH + 'ManagementServer.PeriodicInformEnable', False, TrParameterType.BOOLEAN, False), ParameterName.PERIODIC_INFORM_INTERVAL: TrParam(DEVICE_PATH + 'ManagementServer.PeriodicInformInterval', False, TrParameterType.INT, False), # Performance management parameters ParameterName.PERF_MGMT_ENABLE: TrParam( DEVICE_PATH + 'FAP.PerfMgmt.Config.1.Enable', False, TrParameterType.BOOLEAN, False, ), ParameterName.PERF_MGMT_UPLOAD_INTERVAL: TrParam( DEVICE_PATH + 'FAP.PerfMgmt.Config.1.PeriodicUploadInterval', False, TrParameterType.INT, False, ), ParameterName.PERF_MGMT_UPLOAD_URL: TrParam( DEVICE_PATH + 'FAP.PerfMgmt.Config.1.URL', False, TrParameterType.STRING, False, ), } NUM_PLMNS_IN_CONFIG = 6 for i in range(1, NUM_PLMNS_IN_CONFIG + 1): PARAMETERS[(ParameterName.PLMN_N) % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.' % i, True, TrParameterType.STRING, False, ) PARAMETERS[ParameterName.PLMN_N_CELL_RESERVED % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.CellReservedForOperatorUse' % i, True, TrParameterType.BOOLEAN, False, ) PARAMETERS[ParameterName.PLMN_N_ENABLE % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.Enable' % i, True, TrParameterType.BOOLEAN, False, ) PARAMETERS[ParameterName.PLMN_N_PRIMARY % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.IsPrimary' % i, True, TrParameterType.BOOLEAN, False, ) PARAMETERS[ParameterName.PLMN_N_PLMNID % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.PLMNID' % i, True, TrParameterType.STRING, False, ) TRANSFORMS_FOR_ENB = { ParameterName.DL_BANDWIDTH: transform_for_enb.bandwidth, ParameterName.UL_BANDWIDTH: transform_for_enb.bandwidth, } TRANSFORMS_FOR_MAGMA = { ParameterName.DL_BANDWIDTH: transform_for_magma.bandwidth, ParameterName.UL_BANDWIDTH: transform_for_magma.bandwidth, # We don't set GPS, so we don't need transform for enb ParameterName.GPS_LAT: transform_for_magma.gps_tr181, ParameterName.GPS_LONG: transform_for_magma.gps_tr181, } @classmethod def get_parameter(cls, param_name: ParameterName) -> Optional[TrParam]: return cls.PARAMETERS.get(param_name) @classmethod def _get_magma_transforms( cls, ) -> Dict[ParameterName, Callable[[Any], Any]]: return cls.TRANSFORMS_FOR_MAGMA @classmethod def _get_enb_transforms(cls) -> Dict[ParameterName, Callable[[Any], Any]]: return cls.TRANSFORMS_FOR_ENB @classmethod def get_load_parameters(cls) -> List[ParameterName]: return cls.LOAD_PARAMETERS @classmethod def get_num_plmns(cls) -> int: return cls.NUM_PLMNS_IN_CONFIG @classmethod def get_parameter_names(cls) -> List[ParameterName]: excluded_params = [ str(ParameterName.DEVICE), str(ParameterName.FAP_SERVICE), ] names = list( filter( lambda x: (not str(x).startswith('PLMN')) and (str(x) not in excluded_params), cls.PARAMETERS.keys(), ), ) return names @classmethod def get_numbered_param_names( cls) -> Dict[ParameterName, List[ParameterName]]: names = {} for i in range(1, cls.NUM_PLMNS_IN_CONFIG + 1): params = [] params.append(ParameterName.PLMN_N_CELL_RESERVED % i) params.append(ParameterName.PLMN_N_ENABLE % i) params.append(ParameterName.PLMN_N_PRIMARY % i) params.append(ParameterName.PLMN_N_PLMNID % i) names[ParameterName.PLMN_N % i] = params return names
class FreedomFiOneTrDataModel(DataModel): """ Class to represent relevant data model parameters from TR-196/TR-098. This class is effectively read-only. These models have these idiosyncrasies (on account of running TR098): - Parameter content root is different (InternetGatewayDevice) - GetParameter queries with a wildcard e.g. InternetGatewayDevice. do not respond with the full tree (we have to query all parameters) - MME status is not exposed - we assume the MME is connected if the eNodeB is transmitting (OpState=true) - Parameters such as band capability/duplex config are rooted under `boardconf.` and not the device config root - Num PLMNs is not reported by these units """ # Mapping of TR parameter paths to aliases DEVICE_PATH = 'Device.' FAPSERVICE_PATH = DEVICE_PATH + 'Services.FAPService.1.' FAP_CONTROL = FAPSERVICE_PATH + 'FAPControl.' BCCH = FAPSERVICE_PATH + 'REM.LTE.Cell.1.BCCH.' PARAMETERS = { # Top-level objects ParameterName.DEVICE: TrParam( DEVICE_PATH, is_invasive=False, type=TrParameterType.OBJECT, is_optional=False, ), ParameterName.FAP_SERVICE: TrParam( FAP_CONTROL, is_invasive=False, type=TrParameterType.OBJECT, is_optional=False, ), # Device info ParameterName.SW_VERSION: TrParam( DEVICE_PATH + 'DeviceInfo.SoftwareVersion', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), ParameterName.SERIAL_NUMBER: TrParam( DEVICE_PATH + 'DeviceInfo.SerialNumber', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), # RF-related parameters ParameterName.EARFCNDL: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.EARFCNDL', is_invasive=False, type=TrParameterType.INT, is_optional=False, ), ParameterName.DL_BANDWIDTH: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.DLBandwidth', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), ParameterName.UL_BANDWIDTH: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.ULBandwidth', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), ParameterName.PCI: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.PhyCellID', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), ParameterName.SUBFRAME_ASSIGNMENT: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.PHY.TDDFrame.SubFrameAssignment', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.SPECIAL_SUBFRAME_PATTERN: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.PHY.TDDFrame.SpecialSubframePatterns', is_invasive=False, type=TrParameterType.INT, is_optional=False, ), ParameterName.CELL_ID: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.Common.CellIdentity', is_invasive=False, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), # Readonly LTE state ParameterName.ADMIN_STATE: TrParam( FAP_CONTROL + 'LTE.AdminState', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.GPS_ENABLE: TrParam( DEVICE_PATH + 'FAP.GPS.ScanOnBoot', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), # Core network parameters ParameterName.MME_IP: TrParam( FAP_CONTROL + 'LTE.Gateway.S1SigLinkServerList', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), ParameterName.MME_PORT: TrParam( FAP_CONTROL + 'LTE.Gateway.S1SigLinkPort', is_invasive=False, type=TrParameterType.INT, is_optional=False, ), ParameterName.NUM_PLMNS: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNListNumberOfEntries', is_invasive=False, type=TrParameterType.INT, is_optional=False, ), ParameterName.TAC: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.TAC', is_invasive=False, type=TrParameterType.INT, is_optional=False, ), # Management server parameters ParameterName.PERIODIC_INFORM_ENABLE: TrParam( DEVICE_PATH + 'ManagementServer.PeriodicInformEnable', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.PERIODIC_INFORM_INTERVAL: TrParam( DEVICE_PATH + 'ManagementServer.PeriodicInformInterval', is_invasive=False, type=TrParameterType.INT, is_optional=False, ), # Performance management parameters ParameterName.PERF_MGMT_ENABLE: TrParam( DEVICE_PATH + 'FAP.PerfMgmt.Config.1.Enable', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.PERF_MGMT_UPLOAD_INTERVAL: TrParam( DEVICE_PATH + 'FAP.PerfMgmt.Config.1.PeriodicUploadInterval', is_invasive=False, type=TrParameterType.INT, is_optional=False, ), ParameterName.PERF_MGMT_UPLOAD_URL: TrParam( DEVICE_PATH + 'FAP.PerfMgmt.Config.1.URL', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), } TRANSFORMS_FOR_ENB = {} NUM_PLMNS_IN_CONFIG = 1 for i in range(1, NUM_PLMNS_IN_CONFIG + 1): PARAMETERS[ParameterName.PLMN_N % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.' % i, is_invasive=False, type=TrParameterType.STRING, is_optional=False, ) PARAMETERS[ParameterName.PLMN_N_CELL_RESERVED % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.CellReservedForOperatorUse' % i, is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ) PARAMETERS[ParameterName.PLMN_N_ENABLE % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.Enable' % i, is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ) PARAMETERS[ParameterName.PLMN_N_PRIMARY % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.IsPrimary' % i, is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ) PARAMETERS[ParameterName.PLMN_N_PLMNID % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.PLMNID' % i, is_invasive=False, type=TrParameterType.STRING, is_optional=False, ) PARAMETERS.update(SASParameters.SAS_PARAMETERS) PARAMETERS.update(FreedomFiOneMiscParameters.MISC_PARAMETERS) PARAMETERS.update(StatusParameters.STATUS_PARAMETERS) # These are stateful parameters that have no tr-69 representation PARAMETERS.update(StatusParameters.DERIVED_STATUS_PARAMETERS) TRANSFORMS_FOR_MAGMA = { # We don't set these parameters ParameterName.BAND_CAPABILITY: transform_for_magma.band_capability, ParameterName.DUPLEX_MODE_CAPABILITY: transform_for_magma.duplex_mode, } @classmethod def get_parameter(cls, param_name: ParameterName) -> Optional[TrParam]: return cls.PARAMETERS.get(param_name) @classmethod def _get_magma_transforms( cls, ) -> Dict[ParameterName, Callable[[Any], Any]]: return cls.TRANSFORMS_FOR_MAGMA @classmethod def _get_enb_transforms(cls) -> Dict[ParameterName, Callable[[Any], Any]]: return cls.TRANSFORMS_FOR_ENB @classmethod def get_load_parameters(cls) -> List[ParameterName]: """ Load all the parameters instead of a subset. """ return list(cls.PARAMETERS.keys()) @classmethod def get_num_plmns(cls) -> int: return cls.NUM_PLMNS_IN_CONFIG @classmethod def get_parameter_names(cls) -> List[ParameterName]: excluded_params = [ str(ParameterName.DEVICE), str(ParameterName.FAP_SERVICE), ] names = list( filter( lambda x: (not str(x).startswith('PLMN')) and (str(x) not in excluded_params), cls.PARAMETERS.keys(), ), ) return names @classmethod def get_numbered_param_names( cls, ) -> Dict[ParameterName, List[ParameterName]]: names = {} for i in range(1, cls.NUM_PLMNS_IN_CONFIG + 1): params = [ ParameterName.PLMN_N_CELL_RESERVED % i, ParameterName.PLMN_N_ENABLE % i, ParameterName.PLMN_N_PRIMARY % i, ParameterName.PLMN_N_PLMNID % i, ] names[ParameterName.PLMN_N % i] = params return names @classmethod def get_sas_param_names(cls) -> List[ParameterName]: return SASParameters.SAS_PARAMETERS.keys()
class BaicellsQAFATrDataModel(DataModel): """ Class to represent relevant data model parameters from TR-196/TR-098. This class is effectively read-only. This model specifically targets Qualcomm-based BaiCells units running QAFA firmware. These models have these idiosyncrasies (on account of running TR098): - Parameter content root is different (InternetGatewayDevice) - GetParameter queries with a wildcard e.g. InternetGatewayDevice. do not respond with the full tree (we have to query all parameters) - MME status is not exposed - we assume the MME is connected if the eNodeB is transmitting (OpState=true) - Parameters such as band capability/duplex config are rooted under `boardconf.` and not the device config root - Parameters like Admin state, CellReservedForOperatorUse, Duplex mode, DL bandwidth and Band capability have different formats from Intel-based Baicells units, necessitating, formatting before configuration and transforming values read from eNodeB state. - Num PLMNs is not reported by these units """ # Mapping of TR parameter paths to aliases DEVICE_PATH = 'InternetGatewayDevice.' FAPSERVICE_PATH = DEVICE_PATH + 'Services.FAPService.1.' EEPROM_PATH = 'boardconf.status.eepromInfo.' PARAMETERS = { # Top-level objects ParameterName.DEVICE: TrParam(DEVICE_PATH, True, TrParameterType.OBJECT, False), ParameterName.FAP_SERVICE: TrParam(FAPSERVICE_PATH, True, TrParameterType.OBJECT, False), # Qualcomm units do not expose MME_Status (We assume that the eNB is broadcasting state is connected to the MME) ParameterName.MME_STATUS: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.OpState', True, TrParameterType.BOOLEAN, False), ParameterName.GPS_LAT: TrParam(DEVICE_PATH + 'FAP.GPS.latitude', True, TrParameterType.STRING, False), ParameterName.GPS_LONG: TrParam(DEVICE_PATH + 'FAP.GPS.longitude', True, TrParameterType.STRING, False), ParameterName.SW_VERSION: TrParam(DEVICE_PATH + 'DeviceInfo.SoftwareVersion', True, TrParameterType.STRING, False), ParameterName.SERIAL_NUMBER: TrParam(DEVICE_PATH + 'DeviceInfo.SerialNumber', True, TrParameterType.STRING, False), # Capabilities ParameterName.DUPLEX_MODE_CAPABILITY: TrParam(EEPROM_PATH + 'div_multiple', True, TrParameterType.STRING, False), ParameterName.BAND_CAPABILITY: TrParam(EEPROM_PATH + 'work_mode', True, TrParameterType.STRING, False), # RF-related parameters ParameterName.EARFCNDL: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.EARFCNDL', True, TrParameterType.INT, False), ParameterName.PCI: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.PhyCellID', True, TrParameterType.INT, False), ParameterName.DL_BANDWIDTH: TrParam( DEVICE_PATH + 'Services.RfConfig.1.RfCarrierCommon.carrierBwMhz', True, TrParameterType.INT, False), ParameterName.SUBFRAME_ASSIGNMENT: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.PHY.TDDFrame.SubFrameAssignment', True, 'bool', False), ParameterName.SPECIAL_SUBFRAME_PATTERN: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.PHY.TDDFrame.SpecialSubframePatterns', True, TrParameterType.INT, False), ParameterName.CELL_ID: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.RAN.Common.CellIdentity', True, TrParameterType.UNSIGNED_INT, False), # Other LTE parameters ParameterName.ADMIN_STATE: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.AdminState', False, TrParameterType.STRING, False), ParameterName.OP_STATE: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.OpState', True, TrParameterType.BOOLEAN, False), ParameterName.RF_TX_STATUS: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.OpState', True, TrParameterType.BOOLEAN, False), # Core network parameters ParameterName.MME_IP: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.Gateway.S1SigLinkServerList', True, TrParameterType.STRING, False), ParameterName.MME_PORT: TrParam(FAPSERVICE_PATH + 'FAPControl.LTE.Gateway.S1SigLinkPort', True, TrParameterType.INT, False), # This parameter is standard but doesn't exist # ParameterName.NUM_PLMNS: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNListNumberOfEntries', True, TrParameterType.INT, False), ParameterName.TAC: TrParam(FAPSERVICE_PATH + 'CellConfig.LTE.EPC.TAC', True, TrParameterType.INT, False), ParameterName.IP_SEC_ENABLE: TrParam('boardconf.ipsec.ipsecConfig.onBoot', False, TrParameterType.BOOLEAN, False), # Management server parameters ParameterName.PERIODIC_INFORM_ENABLE: TrParam(DEVICE_PATH + 'ManagementServer.PeriodicInformEnable', False, TrParameterType.BOOLEAN, False), ParameterName.PERIODIC_INFORM_INTERVAL: TrParam(DEVICE_PATH + 'ManagementServer.PeriodicInformInterval', False, TrParameterType.INT, False), # Performance management parameters ParameterName.PERF_MGMT_ENABLE: TrParam(DEVICE_PATH + 'FAP.PerfMgmt.Config.Enable', False, TrParameterType.BOOLEAN, False), ParameterName.PERF_MGMT_UPLOAD_INTERVAL: TrParam(DEVICE_PATH + 'FAP.PerfMgmt.Config.PeriodicUploadInterval', False, TrParameterType.INT, False), ParameterName.PERF_MGMT_UPLOAD_URL: TrParam(DEVICE_PATH + 'FAP.PerfMgmt.Config.URL', False, TrParameterType.STRING, False), } NUM_PLMNS_IN_CONFIG = 6 TRANSFORMS_FOR_ENB = { ParameterName.CELL_BARRED: transform_for_enb.invert_cell_barred, } for i in range(1, NUM_PLMNS_IN_CONFIG + 1): TRANSFORMS_FOR_ENB[ParameterName.PLMN_N_CELL_RESERVED % i] = transform_for_enb.cell_reserved PARAMETERS[ParameterName.PLMN_N % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.' % i, True, TrParameterType.STRING, False) PARAMETERS[ParameterName.PLMN_N_CELL_RESERVED % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.CellReservedForOperatorUse' % i, True, TrParameterType.STRING, False) PARAMETERS[ParameterName.PLMN_N_ENABLE % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.Enable' % i, True, TrParameterType.BOOLEAN, False) PARAMETERS[ParameterName.PLMN_N_PRIMARY % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.IsPrimary' % i, True, TrParameterType.BOOLEAN, False) PARAMETERS[ParameterName.PLMN_N_PLMNID % i] = TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.PLMNID' % i, True, TrParameterType.STRING, False) TRANSFORMS_FOR_ENB[ ParameterName.ADMIN_STATE] = transform_for_enb.admin_state TRANSFORMS_FOR_MAGMA = { # We don't set these parameters ParameterName.BAND_CAPABILITY: transform_for_magma.band_capability, ParameterName.DUPLEX_MODE_CAPABILITY: transform_for_magma.duplex_mode, } @classmethod def get_parameter(cls, param_name: ParameterName) -> Optional[TrParam]: return cls.PARAMETERS.get(param_name) @classmethod def _get_magma_transforms( cls, ) -> Dict[ParameterName, Callable[[Any], Any]]: return cls.TRANSFORMS_FOR_MAGMA @classmethod def _get_enb_transforms(cls) -> Dict[ParameterName, Callable[[Any], Any]]: return cls.TRANSFORMS_FOR_ENB @classmethod def get_load_parameters(cls) -> List[ParameterName]: """ Load all the parameters instead of a subset. """ return list(cls.PARAMETERS.keys()) @classmethod def get_num_plmns(cls) -> int: return cls.NUM_PLMNS_IN_CONFIG @classmethod def get_parameter_names(cls) -> List[ParameterName]: excluded_params = [ str(ParameterName.DEVICE), str(ParameterName.FAP_SERVICE), ] names = list( filter( lambda x: (not str(x).startswith('PLMN')) and (str(x) not in excluded_params), cls.PARAMETERS.keys(), ), ) return names @classmethod def get_numbered_param_names( cls, ) -> Dict[ParameterName, List[ParameterName]]: names = {} for i in range(1, cls.NUM_PLMNS_IN_CONFIG + 1): params = [] params.append(ParameterName.PLMN_N_CELL_RESERVED % i) params.append(ParameterName.PLMN_N_ENABLE % i) params.append(ParameterName.PLMN_N_PRIMARY % i) params.append(ParameterName.PLMN_N_PLMNID % i) names[ParameterName.PLMN_N % i] = params return names
class SASParameters(object): """ Class modeling the SAS parameters and their TR path""" # SAS parameters for FreedomFiOne FAP_CONTROL = 'Device.Services.FAPService.1.FAPControl.' FAPSERVICE_PATH = 'Device.Services.FAPService.1.' # Sas management parameters SAS_ENABLE = "sas_enabled" SAS_SERVER_URL = "sas_server_url" SAS_UID = "sas_uid" SAS_CATEGORY = "sas_category" SAS_CHANNEL_TYPE = "sas_channel_type" SAS_CERT_SUBJECT = "sas_cert_subject" SAS_IC_GROUP_ID = "sas_icg_group_id" SAS_LOCATION = "sas_location" SAS_HEIGHT_TYPE = "sas_height_type" SAS_CPI_ENABLE = "sas_cpi_enable" SAS_CPI_IPE = "sas_cpi_ipe" # Install param supplied enable FREQ_BAND_1 = "freq_band_1" FREQ_BAND_2 = "freq_band_2" # For CBRS radios we set this to the limit and the SAS can reduce the # power if needed. TX_POWER_CONFIG = "tx_power_config" SAS_PARAMETERS = { SAS_ENABLE: TrParam( FAP_CONTROL + 'LTE.X_000E8F_SAS.Enable', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), SAS_SERVER_URL: TrParam( FAP_CONTROL + 'LTE.X_000E8F_SAS.Server', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), SAS_UID: TrParam( FAP_CONTROL + 'LTE.X_000E8F_SAS.UserContactInformation', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), SAS_CATEGORY: TrParam( FAP_CONTROL + 'LTE.X_000E8F_SAS.Category', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), SAS_CHANNEL_TYPE: TrParam( FAP_CONTROL + 'LTE.X_000E8F_SAS.ProtectionLevel', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), SAS_CERT_SUBJECT: TrParam( FAP_CONTROL + 'LTE.X_000E8F_SAS.CertSubject', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), # SAS_IC_GROUP_ID: TrParam( # FAP_CONTROL + 'LTE.X_000E8F_SAS.ICGGroupId', is_invasive=False, # type=TrParameterType.STRING, False), SAS_LOCATION: TrParam( FAP_CONTROL + 'LTE.X_000E8F_SAS.Location', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), SAS_HEIGHT_TYPE: TrParam( FAP_CONTROL + 'LTE.X_000E8F_SAS.HeightType', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), SAS_CPI_ENABLE: TrParam( FAP_CONTROL + 'LTE.X_000E8F_SAS.CPIEnable', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), SAS_CPI_IPE: TrParam( FAP_CONTROL + 'LTE.X_000E8F_SAS.CPIInstallParamSuppliedEnable', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), FREQ_BAND_1: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.FreqBandIndicator', is_invasive=False, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), FREQ_BAND_2: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.X_000E8F_FreqBandIndicator2', is_invasive=False, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), TX_POWER_CONFIG: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.X_000E8F_TxPowerConfig', is_invasive=True, type=TrParameterType.INT, is_optional=False, ), }
class FreedomFiOneMiscParameters(object): """ Default set of parameters that enable carrier aggregation and other miscellaneous properties """ FAP_CONTROL = 'Device.Services.FAPService.1.FAPControl.' FAPSERVICE_PATH = 'Device.Services.FAPService.1.' # Tunnel ref format clobber it to non IPSEC as we don't support # IPSEC TUNNEL_REF = "tunnel_ref" PRIM_SOURCE = "prim_src" # Carrier aggregation CARRIER_AGG_ENABLE = "carrier_agg_enable" CARRIER_NUMBER = "carrier_number" # Carrier aggregation params CONTIGUOUS_CC = "contiguous_cc" WEB_UI_ENABLE = "web_ui_enable" # Enable or disable local enb UI MISC_PARAMETERS = { WEB_UI_ENABLE: TrParam( 'Device.X_000E8F_DeviceFeature.X_000E8F_WebServerEnable', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), CARRIER_AGG_ENABLE: TrParam( FAP_CONTROL + 'LTE.X_000E8F_RRMConfig.X_000E8F_CA_Enable', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), CARRIER_NUMBER: TrParam( FAP_CONTROL + 'LTE.X_000E8F_RRMConfig.X_000E8F_Cell_Number', is_invasive=False, type=TrParameterType.INT, is_optional=False, ), CONTIGUOUS_CC: TrParam( FAP_CONTROL + 'LTE.X_000E8F_RRMConfig.X_000E8F_CELL_Freq_Contiguous', is_invasive=False, type=TrParameterType.INT, is_optional=False, ), TUNNEL_REF: TrParam( FAPSERVICE_PATH + 'CellConfig.LTE.Tunnel.1.TunnelRef', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), PRIM_SOURCE: TrParam( FAPSERVICE_PATH + 'REM.X_000E8F_tfcsManagerConfig.primSrc', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), } # Hardcoded defaults defaults = { # Use IPV4 only TUNNEL_REF: "Device.IP.Interface.1.IPv4Address.1.", # Only synchronize with GPS PRIM_SOURCE: "GNSS", # Always enable carrier aggregation for the CBRS bands CARRIER_AGG_ENABLE: True, CARRIER_NUMBER: 2, # CBRS has two carriers CONTIGUOUS_CC: 0, # Its not contiguous carrier WEB_UI_ENABLE: False, # Disable WebUI by default }
class StatusParameters(object): """ Stateful class that converts eNB status to Magma understood status. FreedomFiOne has many status params that interact with each other. This class maintains the business logic of parsing these status params and converting it to Magma understood fields. """ STATUS_PATH = "Device.X_000E8F_DeviceFeature.X_000E8F_NEStatus." # Status parameters DEFAULT_GW = 'defaultGW' SYNC_STATUS = 'syncStatus' SAS_STATUS = 'sasStatus' ENB_STATUS = 'enbStatus' GPS_SCAN_STATUS = 'gpsScanStatus' STATUS_PARAMETERS = { # Status nodes DEFAULT_GW: TrParam( STATUS_PATH + 'X_000E8F_DEFGW_Status', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), SYNC_STATUS: TrParam( STATUS_PATH + 'X_000E8F_Sync_Status', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), SAS_STATUS: TrParam( STATUS_PATH + 'X_000E8F_SAS_Status', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), ENB_STATUS: TrParam( STATUS_PATH + 'X_000E8F_eNB_Status', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), # GPS status, lat, long GPS_SCAN_STATUS: TrParam( 'Device.FAP.GPS.ScanStatus', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), ParameterName.GPS_LAT: TrParam( 'Device.FAP.GPS.LockedLatitude', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), ParameterName.GPS_LONG: TrParam( 'Device.FAP.GPS.LockedLongitude', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), } # Derived status params that don't have tr69 representation. DERIVED_STATUS_PARAMETERS = { ParameterName.RF_TX_STATUS: TrParam( InvalidTrParamPath, is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.GPS_STATUS: TrParam( InvalidTrParamPath, is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.PTP_STATUS: TrParam( InvalidTrParamPath, is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.MME_STATUS: TrParam( InvalidTrParamPath, is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.OP_STATE: TrParam( InvalidTrParamPath, is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), } @classmethod def set_magma_device_cfg( cls, name_to_val: Dict, device_cfg: EnodebConfiguration, ): """ Convert FreedomFiOne name_to_val representation to magma device_cfg """ success_str = "SUCCESS" # String constant returned by radio insync_str = "INSYNC" if (name_to_val.get(cls.DEFAULT_GW) and name_to_val[cls.DEFAULT_GW].upper() != success_str): # Nothing will proceed if the eNB doesn't have an IP on the WAN serial_num = "unknown" if device_cfg.has_parameter(ParameterName.SERIAL_NUMBER): serial_num = device_cfg.get_parameter( ParameterName.SERIAL_NUMBER, ) EnodebdLogger.error( "Radio with serial number %s doesn't have IP address " "on WAN", serial_num, ) device_cfg.set_parameter( param_name=ParameterName.RF_TX_STATUS, value=False, ) device_cfg.set_parameter( param_name=ParameterName.GPS_STATUS, value=False, ) device_cfg.set_parameter( param_name=ParameterName.PTP_STATUS, value=False, ) device_cfg.set_parameter( param_name=ParameterName.MME_STATUS, value=False, ) device_cfg.set_parameter( param_name=ParameterName.OP_STATE, value=False, ) return if (name_to_val.get(cls.SAS_STATUS) and name_to_val[cls.SAS_STATUS].upper() == success_str): device_cfg.set_parameter( param_name=ParameterName.RF_TX_STATUS, value=True, ) else: # No sas grant so not transmitting. There is no explicit node for Tx # in FreedomFiOne device_cfg.set_parameter( param_name=ParameterName.RF_TX_STATUS, value=False, ) if (name_to_val.get(cls.GPS_SCAN_STATUS) and name_to_val[cls.GPS_SCAN_STATUS].upper() == success_str): device_cfg.set_parameter( param_name=ParameterName.GPS_STATUS, value=True, ) # Time comes through GPS so can only be insync with GPS is # in sync, we use PTP_STATUS field to overload timer is in Sync. if (name_to_val.get(cls.SYNC_STATUS) and name_to_val[cls.SYNC_STATUS].upper() == insync_str): device_cfg.set_parameter( param_name=ParameterName.PTP_STATUS, value=True, ) else: device_cfg.set_parameter( param_name=ParameterName.PTP_STATUS, value=False, ) else: device_cfg.set_parameter( param_name=ParameterName.GPS_STATUS, value=False, ) device_cfg.set_parameter( param_name=ParameterName.PTP_STATUS, value=False, ) if (name_to_val.get(cls.DEFAULT_GW) and name_to_val[cls.DEFAULT_GW].upper() == success_str): device_cfg.set_parameter( param_name=ParameterName.MME_STATUS, value=True, ) else: device_cfg.set_parameter( param_name=ParameterName.MME_STATUS, value=False, ) if (name_to_val.get(cls.ENB_STATUS) and name_to_val[cls.ENB_STATUS].upper() == success_str): device_cfg.set_parameter( param_name=ParameterName.OP_STATE, value=True, ) else: device_cfg.set_parameter( param_name=ParameterName.OP_STATE, value=False, ) pass_through_params = [ParameterName.GPS_LAT, ParameterName.GPS_LONG] for name in pass_through_params: device_cfg.set_parameter(name, name_to_val[name])
class BaicellsQRTBTrDataModel(DataModel): """ Class to represent relevant data model parameters from TR-196/TR-098/TR-181. This class is effectively read-only This is for Baicells QRTB based on software BaiBS_QRTB_2.6.2. Tested on hw version E01 and A01 """ # Parameters to query when reading eNodeB config LOAD_PARAMETERS = [ParameterName.DEVICE] # Mapping of TR parameter paths to aliases DEVICE_PATH = 'Device.' FAPSERVICE_PATH = DEVICE_PATH + 'Services.FAPService.1.' PARAMETERS = { # Top-level objects ParameterName.DEVICE: TrParam( path=DEVICE_PATH, is_invasive=True, type=TrParameterType.OBJECT, is_optional=False, ), ParameterName.FAP_SERVICE: TrParam( path=FAPSERVICE_PATH, is_invasive=True, type=TrParameterType.OBJECT, is_optional=False, ), # Device info parameters ParameterName.GPS_STATUS: TrParam( path=DEVICE_PATH + 'DeviceInfo.X_COM_GPS_Status', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.PTP_STATUS: TrParam( path=DEVICE_PATH + 'DeviceInfo.X_COM_1588_Status', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.MME_STATUS: TrParam( path=DEVICE_PATH + 'DeviceInfo.X_COM_MME_Status', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.REM_STATUS: TrParam( path=DEVICE_PATH + 'DeviceInfo.X_COM_REM_Status', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.LOCAL_GATEWAY_ENABLE: TrParam( path=DEVICE_PATH + 'DeviceInfo.X_COM_LTE_LGW_Switch', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.GPS_ENABLE: TrParam( path=DEVICE_PATH + 'DeviceInfo.X_COM_GpsSyncEnable', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.GPS_LAT: TrParam( path=DEVICE_PATH + 'FAP.GPS.LockedLatitude', is_invasive=True, type=TrParameterType.INT, is_optional=False, ), ParameterName.GPS_LONG: TrParam( path=DEVICE_PATH + 'FAP.GPS.LockedLongitude', is_invasive=True, type=TrParameterType.INT, is_optional=False, ), ParameterName.SW_VERSION: TrParam( path=DEVICE_PATH + 'DeviceInfo.SoftwareVersion', is_invasive=True, type=TrParameterType.STRING, is_optional=False, ), ParameterName.SERIAL_NUMBER: TrParam( path=DEVICE_PATH + 'DeviceInfo.SerialNumber', is_invasive=True, type=TrParameterType.STRING, is_optional=False, ), ParameterName.INDOOR_DEPLOYMENT: TrParam( path=DEVICE_PATH + 'DeviceInfo.indoorDeployment', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.ANTENNA_HEIGHT: TrParam( path=DEVICE_PATH + 'DeviceInfo.AntennaInfo.Height', is_invasive=True, type=TrParameterType.INT, is_optional=False, ), ParameterName.ANTENNA_HEIGHT_TYPE: TrParam( path=DEVICE_PATH + 'DeviceInfo.AntennaInfo.HeightType', is_invasive=True, type=TrParameterType.STRING, is_optional=False, ), ParameterName.ANTENNA_GAIN: TrParam( path=DEVICE_PATH + 'DeviceInfo.AntennaInfo.Gain', is_invasive=True, type=TrParameterType.INT, is_optional=False, ), ParameterName.CBSD_CATEGORY: TrParam( path=DEVICE_PATH + 'DeviceInfo.cbsdCategory', is_invasive=True, type=TrParameterType.STRING, is_optional=False, ), # Capabilities ParameterName.DUPLEX_MODE_CAPABILITY: TrParam( path=FAPSERVICE_PATH + 'Capabilities.LTE.DuplexMode', is_invasive=True, type=TrParameterType.STRING, is_optional=False, ), ParameterName.BAND_CAPABILITY: TrParam( path=FAPSERVICE_PATH + 'Capabilities.LTE.BandsSupported', is_invasive=True, type=TrParameterType.STRING, is_optional=False, ), # RF-related parameters ParameterName.EARFCNDL: TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.EARFCNDL', is_invasive=True, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), ParameterName.EARFCNUL: TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.EARFCNUL', is_invasive=True, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), ParameterName.BAND: TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.FreqBandIndicator', is_invasive=True, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), ParameterName.PCI: TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.PhyCellID', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), ParameterName.DL_BANDWIDTH: TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.DLBandwidth', is_invasive=True, type=TrParameterType.STRING, is_optional=False, ), ParameterName.UL_BANDWIDTH: TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.ULBandwidth', is_invasive=True, type=TrParameterType.STRING, is_optional=False, ), ParameterName.RADIO_ENABLE: TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.RAN.RF.X_COM_RadioEnable', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.SUBFRAME_ASSIGNMENT: TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.RAN.PHY.TDDFrame.SubFrameAssignment', is_invasive=True, type=TrParameterType.INT, is_optional=False, ), ParameterName.SPECIAL_SUBFRAME_PATTERN: TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.RAN.PHY.TDDFrame.SpecialSubframePatterns', is_invasive=True, type=TrParameterType.INT, is_optional=False, ), ParameterName.CELL_ID: TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.RAN.Common.CellIdentity', is_invasive=True, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), ParameterName.POWER_SPECTRAL_DENSITY: TrParam( path=DEVICE_PATH + 'DeviceInfo.PowerSpectralDensity', is_invasive=False, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), # Other LTE parameters ParameterName.ADMIN_STATE: TrParam( path=FAPSERVICE_PATH + 'FAPControl.LTE.AdminState', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.OP_STATE: TrParam( path=FAPSERVICE_PATH + 'FAPControl.LTE.OpState', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.RF_TX_STATUS: TrParam( path=FAPSERVICE_PATH + 'FAPControl.LTE.RFTxStatus', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), # Core network parameters ParameterName.MME_IP: TrParam( path=FAPSERVICE_PATH + 'FAPControl.LTE.Gateway.S1SigLinkServerList', is_invasive=True, type=TrParameterType.STRING, is_optional=False, ), ParameterName.MME_PORT: TrParam( path=FAPSERVICE_PATH + 'FAPControl.LTE.Gateway.S1SigLinkPort', is_invasive=True, type=TrParameterType.INT, is_optional=False, ), ParameterName.NUM_PLMNS: TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNListNumberOfEntries', is_invasive=True, type=TrParameterType.INT, is_optional=False, ), # PLMN arrays are added below ParameterName.PLMN: TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.', is_invasive=True, type=TrParameterType.STRING, is_optional=False, ), ParameterName.TAC: TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.EPC.TAC', is_invasive=True, type=TrParameterType.INT, is_optional=False, ), ParameterName.IP_SEC_ENABLE: TrParam( path=DEVICE_PATH + 'Services.FAPService.Ipsec.IPSEC_ENABLE', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.MME_POOL_ENABLE: TrParam( path=FAPSERVICE_PATH + 'FAPControl.LTE.Gateway.X_COM_MmePool.Enable', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), # Management server parameters ParameterName.PERIODIC_INFORM_ENABLE: TrParam( path=DEVICE_PATH + 'ManagementServer.PeriodicInformEnable', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.PERIODIC_INFORM_INTERVAL: TrParam( path=DEVICE_PATH + 'ManagementServer.PeriodicInformInterval', is_invasive=True, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), # Performance management parameters ParameterName.PERF_MGMT_ENABLE: TrParam( path=DEVICE_PATH + 'FAP.PerfMgmt.Config.1.Enable', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), ParameterName.PERF_MGMT_UPLOAD_INTERVAL: TrParam( path=DEVICE_PATH + 'FAP.PerfMgmt.Config.1.PeriodicUploadInterval', is_invasive=False, type=TrParameterType.INT, is_optional=False, ), ParameterName.PERF_MGMT_UPLOAD_URL: TrParam( path=DEVICE_PATH + 'FAP.PerfMgmt.Config.1.URL', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), # SAS parameters ParameterName.SAS_FCC_ID: TrParam( path=DEVICE_PATH + 'DeviceInfo.SAS.FccId', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), ParameterName.SAS_USER_ID: TrParam( path=DEVICE_PATH + 'DeviceInfo.SAS.UserId', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), ParameterName.SAS_ENABLED: TrParam( path=DEVICE_PATH + 'DeviceInfo.SAS.enableMode', is_invasive=False, type=TrParameterType.INT, is_optional=False, ), ParameterName.SAS_RADIO_ENABLE: TrParam( path=DEVICE_PATH + 'DeviceInfo.SAS.RadioEnable', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), } NUM_PLMNS_IN_CONFIG = 6 for i in range(1, NUM_PLMNS_IN_CONFIG + 1): # noqa: WPS604 PARAMETERS[(ParameterName.PLMN_N) % i] = TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.' % i, is_invasive=True, type=TrParameterType.STRING, is_optional=False, ) PARAMETERS[ParameterName.PLMN_N_CELL_RESERVED % i] = TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.CellReservedForOperatorUse' % i, is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ) PARAMETERS[ParameterName.PLMN_N_ENABLE % i] = TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.Enable' % i, is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ) PARAMETERS[ParameterName.PLMN_N_PRIMARY % i] = TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.IsPrimary' % i, is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ) PARAMETERS[ParameterName.PLMN_N_PLMNID % i] = TrParam( path=FAPSERVICE_PATH + 'CellConfig.LTE.EPC.PLMNList.%d.PLMNID' % i, is_invasive=True, type=TrParameterType.STRING, is_optional=False, ) TRANSFORMS_FOR_MAGMA = { # We don't set GPS, so we don't need transform for enb ParameterName.GPS_LAT: transform_for_magma.gps_tr181, ParameterName.GPS_LONG: transform_for_magma.gps_tr181, } PARAMETERS.update(CarrierAggregationParameters.CA_PARAMETERS) # noqa: WPS604 @classmethod def get_parameter(cls, param_name: ParameterName) -> Optional[TrParam]: """ Retrieve parameter by its name Args: param_name (ParameterName): parameter name to retrieve Returns: Optional[TrParam] """ return cls.PARAMETERS.get(param_name) @classmethod def _get_magma_transforms( cls, ) -> Dict[ParameterName, Callable[[Any], Any]]: return cls.TRANSFORMS_FOR_MAGMA @classmethod def _get_enb_transforms(cls) -> Dict[ParameterName, Callable[[Any], Any]]: return {} @classmethod def get_load_parameters(cls) -> List[ParameterName]: """ Retrieve all load parameters Returns: List[ParameterName] """ return cls.LOAD_PARAMETERS @classmethod def get_num_plmns(cls) -> int: """ Retrieve the number of all PLMN parameters Returns: int """ return cls.NUM_PLMNS_IN_CONFIG @classmethod def get_parameter_names(cls) -> List[ParameterName]: """ Retrieve all parameter names Returns: List[ParameterName] """ excluded_params = [ str(ParameterName.DEVICE), str(ParameterName.FAP_SERVICE), ] names = list( filter( lambda x: (not str(x).startswith('PLMN')) and (str(x) not in excluded_params), cls.PARAMETERS.keys(), ), ) return names @classmethod def get_numbered_param_names(cls) -> Dict[ParameterName, List[ParameterName]]: """ Retrieve parameter names of all objects Returns: Dict[ParameterName, List[ParameterName]] """ names = {} for i in range(1, cls.NUM_PLMNS_IN_CONFIG + 1): params = [] params.append(ParameterName.PLMN_N_CELL_RESERVED % i) params.append(ParameterName.PLMN_N_ENABLE % i) params.append(ParameterName.PLMN_N_PRIMARY % i) params.append(ParameterName.PLMN_N_PLMNID % i) names[ParameterName.PLMN_N % i] = params return names
class CarrierAggregationParameters: """ Class defines additional TR parameters used to configure Carrier Aggregation Currently there is no good way of achieving parameter extensions in data models. Idea taken from FreedomFi one model, where data model PARAMETERS is updated on the class definition level (bad). """ FAPSERVICE2_PATH = "Device.Services.FAPService.2." CA_ENABLE = 'Carrier Aggregation Enabled' CA_NUM_OF_CELLS = 'CA Number of Cells' CA_CELL_ID = 'CA Cell ID' CA_BAND = 'CA Band' CA_DL_BANDWIDTH = 'CA DL bandwidth' CA_UL_BANDWIDTH = 'CA UL bandwidth' CA_PCI = 'CA PCI' CA_EARFCNDL = 'CA EARFCNDL' CA_EARFCNUL = 'CA EARFCNUL' CA_ADMIN_STATE = 'CA Admin State' CA_OP_STATE = 'CA Op State' CA_RF_TX_STATUS = 'CA RF TX status' CA_RADIO_ENABLE = 'CA Radio Enable' CA_PLMN_CELL_RESERVED = 'CA PLMN 1 cell reserved' CA_PLMN_ENABLE = 'CA PLMN 1 enable' CA_PLMN_PRIMARY = 'CA PLMN 1 primary' CA_PLMN_PLMNID = 'CA PLMN 1 PLMNID' CA_PARAMETERS = { CA_ENABLE: TrParam( path='Device.Services.FAPService.1.CellConfig.LTE.RAN.CA.CaEnable', is_invasive=False, type=TrParameterType.INT, is_optional=False, ), CA_NUM_OF_CELLS: TrParam( path='FAPService.1.CellConfig.LTE.RAN.CA.PARAMS.NumOfCells', is_invasive=False, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), CA_CELL_ID: TrParam( path=FAPSERVICE2_PATH + 'CellConfig.LTE.RAN.Common.CellIdentity', is_invasive=True, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), CA_BAND: TrParam( path=FAPSERVICE2_PATH + 'CellConfig.LTE.RAN.RF.FreqBandIndicator', is_invasive=True, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), CA_DL_BANDWIDTH: TrParam( path=FAPSERVICE2_PATH + 'CellConfig.LTE.RAN.RF.DLBandwidth', is_invasive=True, type=TrParameterType.STRING, is_optional=False, ), CA_UL_BANDWIDTH: TrParam( path=FAPSERVICE2_PATH + 'CellConfig.LTE.RAN.RF.ULBandwidth', is_invasive=True, type=TrParameterType.STRING, is_optional=False, ), CA_PCI: TrParam( path=FAPSERVICE2_PATH + 'CellConfig.LTE.RAN.RF.PhyCellID', is_invasive=False, type=TrParameterType.STRING, is_optional=False, ), CA_EARFCNDL: TrParam( path=FAPSERVICE2_PATH + 'CellConfig.LTE.RAN.RF.EARFCNDL', is_invasive=True, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), CA_EARFCNUL: TrParam( path=FAPSERVICE2_PATH + 'CellConfig.LTE.RAN.RF.EARFCNUL', is_invasive=True, type=TrParameterType.UNSIGNED_INT, is_optional=False, ), CA_ADMIN_STATE: TrParam( path=FAPSERVICE2_PATH + 'FAPControl.LTE.AdminState', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), CA_OP_STATE: TrParam( path=FAPSERVICE2_PATH + 'FAPControl.LTE.OpState', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), CA_RF_TX_STATUS: TrParam( path=FAPSERVICE2_PATH + 'FAPControl.LTE.RFTxStatus', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), # X_COM_RadioEnable is invasive in Single Carrier for FAPService.1 # But for Carrier Aggregation in FAPService.2 it appears to take effect # immediately - and so we set it as non-invasive CA_RADIO_ENABLE: TrParam( path=FAPSERVICE2_PATH + 'CellConfig.LTE.RAN.RF.X_COM_RadioEnable', is_invasive=False, type=TrParameterType.BOOLEAN, is_optional=False, ), CA_PLMN_CELL_RESERVED: TrParam( path=FAPSERVICE2_PATH + 'CellConfig.LTE.EPC.PLMNList.1.CellReservedForOperatorUse', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), CA_PLMN_ENABLE: TrParam( path=FAPSERVICE2_PATH + 'CellConfig.LTE.EPC.PLMNList.1.Enable', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), CA_PLMN_PRIMARY: TrParam( path=FAPSERVICE2_PATH + 'CellConfig.LTE.EPC.PLMNList.1.IsPrimary', is_invasive=True, type=TrParameterType.BOOLEAN, is_optional=False, ), CA_PLMN_PLMNID: TrParam( path=FAPSERVICE2_PATH + 'CellConfig.LTE.EPC.PLMNList.1.PLMNID', is_invasive=True, type=TrParameterType.STRING, is_optional=False, ), }