Notes about BTS feature check code --- Feature reporting: - For most BTS we hardcode a list of assumed features in the BTS model's _init() function, e.g. bts_model_bs11_init(). These features get copied to bts->features once the BTS model is set. - nanobts and osmo-bts are special, they support reporting features during OML bring up (features_get_reported set in struct_gsm_bts_model): - For osmo-bts, we do not assume any features in the BTS model and just let it report all available features. - For nanobts, we wait for the reported features and then extend them with the features set in the bts model. This is needed because the features enum gets extended by us for osmo-bts, it may have features that nanobts does not report but has implemented. - Once features are available (either through feature reporting or copied from the bts model), features_known is true in struct gsm_bts. Implementing a feature check: - Check that features_known is true, in case the check may be done before the BTS is connected and has reported its features (e.g. in VTY config parsing) - Use osmo_bts_has_feature() - Example: if (bts->features_known && !osmo_bts_has_feature(&bts->features, BTS_FEAT_MULTI_TSC)) VTY and feature checks: - Some VTY commands only make sense if a BTS supports a certain feature - Implement the following checks: - In the VTY command, check if the BTS has the feature. - In gsm_bts_check_cfg() (or called funcs like trx_has_valid_pchan_config), check if the VTY command for the feature is set and if the BTS has the feature. - In both cases, do not fail the checks if bts->features_known is false. Resulting functionality: - For BTS that do not support feature reporting, the VTY config is checked against the hardcoded feature set as it gets parsed. - For BTS that do support feature reporting, the VTY config is checked when features get reported. The BTS gets rejected if the config is invalid for the available features. - Once a BTS is up and running, VTY commands changing the behavior check against the available feature sets.