aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/include
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2017-05-31 12:15:54 +0200
committerMax <msuraev@sysmocom.de>2017-05-31 12:15:54 +0200
commitaef68387ae6d78df948a6b2b3a61050c4f192c5e (patch)
tree0283039df254655af5b961184800ebb2494618e1 /openbsc/include
parent71d082bec770b9664be5cf59e2723db09a645902 (diff)
Add remote BTS feature storage and helpers
In addition to compile-time defined BTS model features we also need run-time BTS features reported by BTS via OML. This should be shared by BSC and BTS. To accommodate for this, add following: * features bitvec to gsm_bts struct * features descriptions * comments to avoid confusion between 2 feature sets * helper functions to set/query particular feature * upper boundary on number of supported features and assertion for it Change-Id: I02bd317097ba66585c50ebd4e8fc348f6dc3dad9 Related: OS#1614
Diffstat (limited to 'openbsc/include')
-rw-r--r--openbsc/include/openbsc/gsm_data_shared.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/openbsc/include/openbsc/gsm_data_shared.h b/openbsc/include/openbsc/gsm_data_shared.h
index 1380a6cba..b920e3be0 100644
--- a/openbsc/include/openbsc/gsm_data_shared.h
+++ b/openbsc/include/openbsc/gsm_data_shared.h
@@ -535,10 +535,13 @@ struct gsm_bts_model {
struct tlv_definition nm_att_tlvdef;
+ /* features of a given BTS model set via gsm_bts_model_register() locally */
struct bitvec features;
uint8_t _features_data[MAX_BTS_FEATURES/8];
};
+/* N. B: always add new features to the end of the list (right before _NUM_BTS_FEAT) to avoid breaking compatibility
+ with BTS compiled against earlier version of this header */
enum gsm_bts_features {
BTS_FEAT_HSCSD,
BTS_FEAT_GPRS,
@@ -549,8 +552,11 @@ enum gsm_bts_features {
BTS_FEAT_OML_ALERTS,
BTS_FEAT_AGCH_PCH_PROP,
BTS_FEAT_CBCH,
+ _NUM_BTS_FEAT
};
+extern const struct value_string gsm_bts_features_descs[];
+
/*
* This keeps track of the paging status of one BTS. It
* includes a number of pending requests, a back pointer
@@ -682,6 +688,10 @@ struct gsm_bts {
char version[MAX_VERSION_LENGTH];
char sub_model[MAX_VERSION_LENGTH];
+ /* features of a given BTS set/reported via OML */
+ struct bitvec features;
+ uint8_t _features_data[MAX_BTS_FEATURES/8];
+
/* Connected PCU version (if any) */
char pcu_version[MAX_VERSION_LENGTH];
@@ -911,6 +921,18 @@ static inline char *gsm_lchan_name(const struct gsm_lchan *lchan)
return lchan->name;
}
+static inline int gsm_bts_set_feature(struct gsm_bts *bts, enum gsm_bts_features feat)
+{
+ OSMO_ASSERT(_NUM_BTS_FEAT < MAX_BTS_FEATURES);
+ return bitvec_set_bit_pos(&bts->features, feat, 1);
+}
+
+static inline bool gsm_bts_has_feature(const struct gsm_bts *bts, enum gsm_bts_features feat)
+{
+ OSMO_ASSERT(_NUM_BTS_FEAT < MAX_BTS_FEATURES);
+ return bitvec_get_bit_pos(&bts->features, feat);
+}
+
void gsm_abis_mo_reset(struct gsm_abis_mo *mo);
struct gsm_abis_mo *