diff options
author | Alexander Chemeris <Alexander.Chemeris@gmail.com> | 2015-05-30 14:40:54 -0400 |
---|---|---|
committer | Ivan Kluchnikov <kluchnikovi@gmail.com> | 2015-05-30 23:31:53 +0300 |
commit | 3ec78f0d49513b78a0fca5a6861f34f638c4b5bf (patch) | |
tree | 3387316d5eba016e68dc7ee30ce6d58a7cd3b127 /openbsc | |
parent | a9c6d44035d91dab550912c244ecd317cb129347 (diff) |
libbsc: Abstract out SIs update/generation for a BTS into a separate function.
The code to do that doesn't belong to the control interface, so abstract it out
to a separate function gsm_bts_set_system_infos().
Diffstat (limited to 'openbsc')
-rw-r--r-- | openbsc/include/openbsc/gsm_data.h | 1 | ||||
-rw-r--r-- | openbsc/src/libbsc/bsc_ctrl_commands.c | 18 | ||||
-rw-r--r-- | openbsc/src/libbsc/bsc_init.c | 23 |
3 files changed, 28 insertions, 14 deletions
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h index 30a397cb9..6f7c8dd2a 100644 --- a/openbsc/include/openbsc/gsm_data.h +++ b/openbsc/include/openbsc/gsm_data.h @@ -438,6 +438,7 @@ void gsm_trx_lock_rf(struct gsm_bts_trx *trx, int locked); int gsm_bts_has_feature(struct gsm_bts *bts, enum gsm_bts_features feat); struct gsm_bts_trx *gsm_bts_trx_by_nr(struct gsm_bts *bts, int nr); int gsm_bts_trx_set_system_infos(struct gsm_bts_trx *trx); +int gsm_bts_set_system_infos(struct gsm_bts *bts); /* generic E1 line operations for all ISDN-based BTS. */ extern struct e1inp_line_ops bts_isdn_e1inp_line_ops; diff --git a/openbsc/src/libbsc/bsc_ctrl_commands.c b/openbsc/src/libbsc/bsc_ctrl_commands.c index 1d91c5fc2..b6b1c9a8b 100644 --- a/openbsc/src/libbsc/bsc_ctrl_commands.c +++ b/openbsc/src/libbsc/bsc_ctrl_commands.c @@ -202,20 +202,12 @@ static int get_bts_si(struct ctrl_cmd *cmd, void *data) static int set_bts_si(struct ctrl_cmd *cmd, void *data) { struct gsm_bts *bts = cmd->node; - struct gsm_bts_trx *trx; + int rc; - /* Generate a new ID */ - bts->bcch_change_mark += 1; - bts->bcch_change_mark %= 0x7; - - llist_for_each_entry(trx, &bts->trx_list, list) { - int rc; - - rc = gsm_bts_trx_set_system_infos(trx); - if (rc != 0) { - cmd->reply = "Failed to generate SI"; - return CTRL_CMD_ERROR; - } + rc = gsm_bts_set_system_infos(bts); + if (rc != 0) { + cmd->reply = "Failed to generate SI"; + return CTRL_CMD_ERROR; } cmd->reply = "Generated new System Information"; diff --git a/openbsc/src/libbsc/bsc_init.c b/openbsc/src/libbsc/bsc_init.c index dfe27976f..719e19d23 100644 --- a/openbsc/src/libbsc/bsc_init.c +++ b/openbsc/src/libbsc/bsc_init.c @@ -120,7 +120,7 @@ static int rsl_si(struct gsm_bts_trx *trx, enum osmo_sysinfo_type i, int si_len) return rc; } -/* set all system information types */ +/* set all system information types for a TRX */ int gsm_bts_trx_set_system_infos(struct gsm_bts_trx *trx) { int i, rc; @@ -197,6 +197,27 @@ err_out: return rc; } +/* set all system information types for a BTS */ +int gsm_bts_set_system_infos(struct gsm_bts *bts) +{ + struct gsm_bts_trx *trx; + + /* Generate a new ID */ + bts->bcch_change_mark += 1; + bts->bcch_change_mark %= 0x7; + + llist_for_each_entry(trx, &bts->trx_list, list) { + int rc; + + rc = gsm_bts_trx_set_system_infos(trx); + if (rc != 0) { + return rc; + } + } + + return 0; +} + /* Produce a MA as specified in 10.5.2.21 */ static int generate_ma_for_ts(struct gsm_bts_trx_ts *ts) { |