def get_mconfig( cls, device: EnodebDeviceName = EnodebDeviceName.BAICELLS, ) -> mconfigs_pb2.EnodebD: mconfig = mconfigs_pb2.EnodebD() mconfig.bandwidth_mhz = 20 # This earfcndl is actually unused, remove later mconfig.earfcndl = 44490 mconfig.log_level = 1 mconfig.plmnid_list = "00101" mconfig.pci = 260 mconfig.allow_enodeb_transmit = False mconfig.tac = 1 if device is EnodebDeviceName.BAICELLS_QAFB: # fdd config mconfig.fdd_config.earfcndl = 9211 elif device is EnodebDeviceName.CAVIUM: # fdd config mconfig.fdd_config.earfcndl = 2405 else: # tdd config mconfig.tdd_config.earfcndl = 39150 mconfig.tdd_config.subframe_assignment = 2 mconfig.tdd_config.special_subframe_pattern = 7 return mconfig
def main(): """ Top-level function for enodebd """ service = MagmaService('enodebd', mconfigs_pb2.EnodebD()) logger.init() # Optionally pipe errors to Sentry sentry_init(service_name=service.name, sentry_mconfig=service.shared_mconfig.sentry_config) # State machine manager for tracking multiple connected eNB devices. state_machine_manager = StateMachineManager(service) # Statistics manager stats_mgr = StatsManager(state_machine_manager) stats_mgr.run() # Start TR-069 thread server_thread = Thread( target=tr069_server, args=(state_machine_manager, ), daemon=True, ) server_thread.start() print_grpc_payload = service.config.get('print_grpc_payload', False) # Add all servicers to the server enodebd_servicer = EnodebdRpcServicer( state_machine_manager, print_grpc_payload, ) enodebd_servicer.add_to_server(service.rpc_server) # Register function to get service status def get_enodebd_status(): return get_service_status_old(state_machine_manager) service.register_get_status_callback(get_enodebd_status) # Register a callback function for GetOperationalStates service303 function def get_enodeb_operational_states() -> List[State]: return get_operational_states( state_machine_manager, service.mconfig, print_grpc_payload, ) service.register_operational_states_callback(get_enodeb_operational_states) # Set eNodeBD iptables rules due to exposing public IP to eNodeB service.loop.create_task(set_enodebd_iptables_rule()) # Run the service loop service.run() # Cleanup the service service.close()
def test_service_cfg_parsing(self): """ Test the parsing of the service config file for enodebd.yml""" service = MagmaService('enodebd', mconfigs_pb2.EnodebD()) service_cfg = service.config service_cfg_1 = self._get_service_config() service_cfg_1['web_ui_enable_list'] = [] service_cfg_1[FreedomFiOneConfigurationInitializer.SAS_KEY][ SASParameters.SAS_UID] = "INVALID_ID" service_cfg_1[FreedomFiOneConfigurationInitializer.SAS_KEY][ SASParameters.SAS_CERT_SUBJECT] = "INVALID_CERT_SUBJECT" self.assertEqual(service_cfg, service_cfg_1)
def test_service_cfg_parsing(self): """ Test the parsing of the service config file for enodebd.yml""" self.maxDiff = None service = MagmaService('enodebd', mconfigs_pb2.EnodebD()) service_cfg = service.config service_cfg_1 = get_service_config() service_cfg_1['web_ui_enable_list'] = [] service_cfg_1["prim_src"] = "GNSS" service_cfg_1[SAS_KEY][SASParameters.SAS_UID] = "INVALID_ID" service_cfg_1[SAS_KEY][ SASParameters.SAS_CERT_SUBJECT] = "INVALID_CERT_SUBJECT" self.assertDictEqual(service_cfg, service_cfg_1)
def test_service_cfg_parsing(self): """ Test the parsing of the service config file for enodebd.yml""" self.maxDiff = None service = MagmaService('enodebd', mconfigs_pb2.EnodebD()) service_cfg = service.config service_cfg["sas"]["sas_server_url"] = TEST_SAS_URL service_cfg1 = _get_service_config() service_cfg1['web_ui_enable_list'] = [] service_cfg1['prim_src'] = 'GNSS' service_cfg1[SAS_KEY][SASParameters.SAS_UID] = 'INVALID_ID' service_cfg1[SAS_KEY][ SASParameters.SAS_CERT_SUBJECT] = 'INVALID_CERT_SUBJECT' service_cfg1['print_grpc_payload'] = False self.assertDictEqual(service_cfg, service_cfg1)
def _get_mconfig(self) -> mconfigs_pb2.EnodebD: mconfig = mconfigs_pb2.EnodebD() mconfig.bandwidth_mhz = 20 mconfig.special_subframe_pattern = 7 mconfig.earfcndl = 44490 mconfig.log_level = 1 mconfig.plmnid_list = "00101" mconfig.pci = 260 mconfig.allow_enodeb_transmit = False mconfig.subframe_assignment = 2 mconfig.tac = 1 # tdd config mconfig.tdd_config.earfcndl = 39150 mconfig.tdd_config.subframe_assignment = 2 mconfig.tdd_config.special_subframe_pattern = 7 return mconfig
def get_multi_enb_mconfig( cls, ) -> mconfigs_pb2.EnodebD: mconfig = mconfigs_pb2.EnodebD() mconfig.bandwidth_mhz = 20 mconfig.special_subframe_pattern = 7 # This earfcndl is actually unused, remove later mconfig.earfcndl = 44490 mconfig.log_level = 1 mconfig.plmnid_list = "00101" mconfig.pci = 260 mconfig.allow_enodeb_transmit = False mconfig.subframe_assignment = 2 mconfig.tac = 1 # tdd config, unused because of multi-enb config mconfig.tdd_config.earfcndl = 39150 mconfig.tdd_config.subframe_assignment = 2 mconfig.tdd_config.special_subframe_pattern = 7 id1 = '120200002618AGP0003' #enb_conf_1 = mconfigs_pb2.EnodebD.EnodebConfig() mconfig.enb_configs_by_serial[id1]\ .earfcndl = 39151 mconfig.enb_configs_by_serial[id1]\ .subframe_assignment = 2 mconfig.enb_configs_by_serial[id1]\ .special_subframe_pattern = 7 mconfig.enb_configs_by_serial[id1]\ .pci = 259 mconfig.enb_configs_by_serial[id1]\ .bandwidth_mhz = 20 mconfig.enb_configs_by_serial[id1] \ .tac = 1 mconfig.enb_configs_by_serial[id1] \ .cell_id = 0 mconfig.enb_configs_by_serial[id1]\ .transmit_enabled = True mconfig.enb_configs_by_serial[id1]\ .device_class = 'Baicells Band 40' id2 = '120200002618AGP0004' #enb_conf_2 = mconfigs_pb2.EnodebD.EnodebConfig() mconfig.enb_configs_by_serial[id2]\ .earfcndl = 39151 mconfig.enb_configs_by_serial[id2]\ .subframe_assignment = 2 mconfig.enb_configs_by_serial[id2]\ .special_subframe_pattern = 7 mconfig.enb_configs_by_serial[id2]\ .pci = 261 mconfig.enb_configs_by_serial[id2] \ .bandwidth_mhz = 20 mconfig.enb_configs_by_serial[id2] \ .tac = 1 mconfig.enb_configs_by_serial[id2] \ .cell_id = 0 mconfig.enb_configs_by_serial[id2]\ .transmit_enabled = True mconfig.enb_configs_by_serial[id2]\ .device_class = 'Baicells Band 40' return mconfig