def postprocess(self, mconfig: Any, service_cfg: Any, desired_cfg: EnodebConfiguration) -> None: """ Add some params to the desired config Args: mconfig (Any): mconfig service_cfg (Any): service config desired_cfg (EnodebConfiguration): desired config """ desired_cfg.set_parameter(ParameterName.SAS_ENABLED, 1) desired_cfg.set_parameter_for_object( ParameterName.PLMN_N_CELL_RESERVED % 1, True, # noqa: WPS345,WPS425 ParameterName.PLMN_N % 1, # noqa: WPS345 ) parameters_to_delete = [ ParameterName.RADIO_ENABLE, ParameterName.POWER_SPECTRAL_DENSITY, ParameterName.EARFCNDL, ParameterName.EARFCNUL, ParameterName.BAND, ParameterName.DL_BANDWIDTH, ParameterName.UL_BANDWIDTH, ParameterName.SAS_RADIO_ENABLE, ] for p in parameters_to_delete: if desired_cfg.has_parameter(p): desired_cfg.delete_parameter(p)
def postprocess( self, mconfig: Any, service_cfg: Any, desired_cfg: EnodebConfiguration, ) -> None: # TODO: Get this config from the domain proxy # TODO @amarpad, set these when DProxy integration is done. # For now the radio will directly talk to the SAS and get these # attributes. desired_cfg.delete_parameter(ParameterName.EARFCNDL) desired_cfg.delete_parameter(ParameterName.DL_BANDWIDTH) desired_cfg.delete_parameter(ParameterName.UL_BANDWIDTH) # go through misc parameters and set them to default. for name, val in FreedomFiOneMiscParameters.defaults.items(): desired_cfg.set_parameter(name, val) # Bump up the parameter key version self.acs.parameter_version_inc() # Workaround a bug in Sercomm firmware in release 3920, 3921 # where the meaning of CellReservedForOperatorUse is wrong. # Set to True to ensure the PLMN is not reserved num_plmns = self.acs.data_model.get_num_plmns() for i in range(1, num_plmns + 1): object_name = ParameterName.PLMN_N % i desired_cfg.set_parameter_for_object( param_name=ParameterName.PLMN_N_CELL_RESERVED % i, value=True, object_name=object_name, ) if self.WEB_UI_ENABLE_LIST_KEY in service_cfg: serial_nos = service_cfg.get(self.WEB_UI_ENABLE_LIST_KEY) if self.acs.device_cfg.has_parameter( ParameterName.SERIAL_NUMBER, ): if self.acs.get_parameter(ParameterName.SERIAL_NUMBER) in \ serial_nos: desired_cfg.set_parameter( FreedomFiOneMiscParameters.WEB_UI_ENABLE, True, ) else: # This should not happen EnodebdLogger.error("Serial number unknown for device") if self.SAS_KEY not in service_cfg: return sas_cfg = service_cfg[self.SAS_KEY] sas_param_names = self.acs.data_model.get_sas_param_names() for name, val in sas_cfg.items(): if name not in sas_param_names: EnodebdLogger.warning("Ignoring attribute %s", name) continue desired_cfg.set_parameter(name, val)
def _set_plmnids_tac( cfg: EnodebConfiguration, plmnids: Union[int, str], tac: Any, ) -> None: """ Set the following parameters: - PLMNID list (including all child parameters) Input 'plmnids' is comma-separated list of PLMNIDs """ # Convert int PLMNID to string if type(plmnids) == int: plmnid_str = str(plmnids) else: config_assert(type(plmnids) == str, 'PLMNID must be string') plmnid_str = plmnids # Multiple PLMNIDs will be supported using comma-separated list. # Currently, just one supported for char in plmnid_str: config_assert(char in '0123456789, ', 'Unhandled character (%s) in PLMNID' % char) plmnid_list = plmnid_str.split(',') # TODO - add support for multiple PLMNIDs config_assert(len(plmnid_list) == 1, 'Exactly one PLMNID must be configured') # Validate PLMNIDs plmnid_list[0] = plmnid_list[0].strip() config_assert(len(plmnid_list[0]) <= 6, 'PLMNID must be length <=6 (%s)' % plmnid_list[0]) # We just need one PLMN element in the config. Delete all others. for i in range(1, 2):#data_model.get_num_plmns() + 1): object_name = ParameterName.PLMN_N % i enable_plmn = i == 1 cfg.add_object(object_name) cfg.set_parameter_for_object(ParameterName.PLMN_N_ENABLE % i, enable_plmn, object_name) if enable_plmn: cfg.set_parameter_for_object( ParameterName.PLMN_N_CELL_RESERVED % i, False, object_name) cfg.set_parameter_for_object(ParameterName.PLMN_N_PRIMARY % i, enable_plmn, object_name) cfg.set_parameter_for_object(ParameterName.PLMN_N_PLMNID % i, plmnid_list[i - 1], object_name) cfg.set_parameter(ParameterName.TAC, tac)
def postprocess(self, mconfig: Any, service_cfg: Any, desired_cfg: EnodebConfiguration) -> None: """ Add some params to the desired config Args: mconfig (Any): mconfig service_cfg (Any): service config desired_cfg (EnodebConfiguration): desired config """ desired_cfg.set_parameter(ParameterName.SAS_ENABLED, 1) # Set Cell reservation for both cells desired_cfg.set_parameter_for_object( ParameterName.PLMN_N_CELL_RESERVED % 1, True, # noqa: WPS345,WPS425 ParameterName.PLMN_N % 1, # noqa: WPS345 ) desired_cfg.set_parameter( CarrierAggregationParameters.CA_PLMN_CELL_RESERVED, True, ) # Make sure FAPService.1. is Primary desired_cfg.set_parameter_for_object( ParameterName.PLMN_N_PRIMARY % 1, True, # noqa: WPS345,WPS425 ParameterName.PLMN_N % 1, # noqa: WPS345 ) desired_cfg.set_parameter( CarrierAggregationParameters.CA_PLMN_PRIMARY, False, ) # Enable both cells desired_cfg.set_parameter_for_object( ParameterName.PLMN_N_ENABLE % 1, True, # noqa: WPS345,WPS425 ParameterName.PLMN_N % 1, # noqa: WPS345 ) desired_cfg.set_parameter( CarrierAggregationParameters.CA_PLMN_ENABLE, True, ) parameters_to_delete = [ ParameterName.RADIO_ENABLE, ParameterName.POWER_SPECTRAL_DENSITY, ParameterName.EARFCNDL, ParameterName.EARFCNUL, ParameterName.BAND, ParameterName.DL_BANDWIDTH, ParameterName.UL_BANDWIDTH, ParameterName.SAS_RADIO_ENABLE, ] for p in parameters_to_delete: if desired_cfg.has_parameter(p): desired_cfg.delete_parameter(p)
class EnodebConfigurationTest(TestCase): def setUp(self): self.config = EnodebConfiguration(CaviumTrDataModel) def tearDown(self): self.config = None def test_data_model(self) -> None: data_model = self.config.data_model expected = CaviumTrDataModel self.assertEqual(data_model, expected, 'Data model fetch incorrect') def test_get_has_set_parameter(self) -> None: param = ParameterName.ADMIN_STATE self.config.set_parameter(param, True) self.assertTrue(self.config.has_parameter(param), 'Expected to have parameter') param_value = self.config.get_parameter(param) expected = True self.assertEqual(param_value, expected, 'Parameter value does not match what was set') def test_add_has_delete_object(self) -> None: object_name = ParameterName.PLMN_N % 1 self.assertFalse(self.config.has_object(object_name)) self.config.add_object(object_name) self.assertTrue(self.config.has_object(object_name)) self.config.delete_object(object_name) self.assertFalse(self.config.has_object(object_name)) def test_get_parameter_names(self) -> None: # Should start off as an empty list names_list = self.config.get_parameter_names() self.assertEqual(len(names_list), 0, 'Expected 0 names') # Should grow as we set parameters self.config.set_parameter(ParameterName.ADMIN_STATE, True) names_list = self.config.get_parameter_names() self.assertEqual(len(names_list), 1, 'Expected 1 name') # Parameter names should not include objects self.config.add_object(ParameterName.PLMN) names_list = self.config.get_parameter_names() self.assertEqual(len(names_list), 1, 'Expected 1 name') def test_get_object_names(self) -> None: # Should start off as an empty list obj_list = self.config.get_object_names() self.assertEqual(len(obj_list), 0, 'Expected 0 names') # Should grow as we set parameters self.config.add_object(ParameterName.PLMN) obj_list = self.config.get_object_names() self.assertEqual(len(obj_list), 1, 'Expected 1 names') def test_get_set_parameter_for_object(self) -> None: self.config.add_object(ParameterName.PLMN_N % 1) self.config.set_parameter_for_object( ParameterName.PLMN_N_CELL_RESERVED % 1, True, ParameterName.PLMN_N % 1) param_value = self.config.get_parameter_for_object( ParameterName.PLMN_N_CELL_RESERVED % 1, ParameterName.PLMN_N % 1) self.assertTrue( param_value, 'Expected that the param for object was set correctly') def test_get_parameter_names_for_object(self) -> None: # Should start off empty self.config.add_object(ParameterName.PLMN_N % 1) param_list = self.config.get_parameter_names_for_object( ParameterName.PLMN_N % 1) self.assertEqual(len(param_list), 0, 'Should be an empty param list') # Should increment as we set parameters self.config.set_parameter_for_object( ParameterName.PLMN_N_CELL_RESERVED % 1, True, ParameterName.PLMN_N % 1) param_list = self.config.get_parameter_names_for_object( ParameterName.PLMN_N % 1) self.assertEqual(len(param_list), 1, 'Should not be an empty list')