예제 #1
0
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
예제 #2
0
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
예제 #3
0
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()
예제 #4
0
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
예제 #5
0
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,
        ),
    }
예제 #6
0
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
    }
예제 #7
0
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])
예제 #8
0
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
예제 #9
0
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,
        ),
    }