From afaa728e0b223e6359ebe12ef12b1f1e67d24f03 Mon Sep 17 00:00:00 2001 From: Alexander Chemeris Date: Tue, 11 Jul 2017 01:42:41 +0630 Subject: libcommon: Fix log output for bts>0. Fixes regression probably introduced in c696cc28. For bts>0 logging doesn't show bts number correctly when printing lchan identification string - it will always show it as "bts=0". The reason for this is that the identification string is cached before bts->nr value is set to a proper value. This patch sets bts->nr as part of the first step of the bts structure initialization, before caching happens thus making sure the cached identification string is cached with the correct values. Change-Id: I61c18a7f021fcb1ec00d34a745f4e3ab03416c2d --- openbsc/include/openbsc/gsm_data_shared.h | 2 +- openbsc/src/libcommon/gsm_data.c | 5 +++-- openbsc/src/libcommon/gsm_data_shared.c | 3 ++- openbsc/tests/channel/channel_test.c | 2 +- openbsc/tests/gsm0408/gsm0408_test.c | 8 ++++---- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/openbsc/include/openbsc/gsm_data_shared.h b/openbsc/include/openbsc/gsm_data_shared.h index 91bdfcef4..b44796163 100644 --- a/openbsc/include/openbsc/gsm_data_shared.h +++ b/openbsc/include/openbsc/gsm_data_shared.h @@ -828,7 +828,7 @@ struct gsm_bts { }; -struct gsm_bts *gsm_bts_alloc(void *talloc_ctx); +struct gsm_bts *gsm_bts_alloc(void *talloc_ctx, uint8_t bts_num); struct gsm_bts *gsm_bts_num(struct gsm_network *net, int num); struct gsm_bts_trx *gsm_bts_trx_alloc(struct gsm_bts *bts); diff --git a/openbsc/src/libcommon/gsm_data.c b/openbsc/src/libcommon/gsm_data.c index adbcb8041..75c87deef 100644 --- a/openbsc/src/libcommon/gsm_data.c +++ b/openbsc/src/libcommon/gsm_data.c @@ -306,12 +306,13 @@ struct gsm_bts *gsm_bts_alloc_register(struct gsm_network *net, enum gsm_bts_typ if (!model && type != GSM_BTS_TYPE_UNKNOWN) return NULL; - bts = gsm_bts_alloc(net); + bts = gsm_bts_alloc(net, net->num_bts); if (!bts) return NULL; + net->num_bts++; + bts->network = net; - bts->nr = net->num_bts++; bts->type = type; bts->model = model; bts->bsic = bsic; diff --git a/openbsc/src/libcommon/gsm_data_shared.c b/openbsc/src/libcommon/gsm_data_shared.c index 387af7068..9cf90f82b 100644 --- a/openbsc/src/libcommon/gsm_data_shared.c +++ b/openbsc/src/libcommon/gsm_data_shared.c @@ -233,7 +233,7 @@ static const struct gprs_rlc_cfg rlc_cfg_default = { .initial_mcs = 6, }; -struct gsm_bts *gsm_bts_alloc(void *ctx) +struct gsm_bts *gsm_bts_alloc(void *ctx, uint8_t bts_num) { struct gsm_bts *bts = talloc_zero(ctx, struct gsm_bts); int i; @@ -241,6 +241,7 @@ struct gsm_bts *gsm_bts_alloc(void *ctx) if (!bts) return NULL; + bts->nr = bts_num; bts->num_trx = 0; INIT_LLIST_HEAD(&bts->trx_list); bts->ms_max_power = 15; /* dBm */ diff --git a/openbsc/tests/channel/channel_test.c b/openbsc/tests/channel/channel_test.c index eb045adc9..6d12d2de4 100644 --- a/openbsc/tests/channel/channel_test.c +++ b/openbsc/tests/channel/channel_test.c @@ -70,7 +70,7 @@ void test_request_chan(void) network = bsc_network_init(tall_bsc_ctx, 1, 1, NULL); if (!network) exit(1); - bts = gsm_bts_alloc(network); + bts = gsm_bts_alloc(network, 0); bts->location_area_code = 23; /* Create a dummy subscriber */ diff --git a/openbsc/tests/gsm0408/gsm0408_test.c b/openbsc/tests/gsm0408/gsm0408_test.c index 08cf43f50..9c966a959 100644 --- a/openbsc/tests/gsm0408/gsm0408_test.c +++ b/openbsc/tests/gsm0408/gsm0408_test.c @@ -128,7 +128,7 @@ static inline void test_si2q_segfault(void) if (!network) exit(1); - bts = gsm_bts_alloc(network); + bts = gsm_bts_alloc(network, 0); _bts_uarfcn_add(bts, 10564, 319, 0); _bts_uarfcn_add(bts, 10612, 319, 0); @@ -143,7 +143,7 @@ static inline void test_si2q_mu(void) if (!network) exit(1); - bts = gsm_bts_alloc(network); + bts = gsm_bts_alloc(network, 0); _bts_uarfcn_add(bts, 10564, 318, 0); _bts_uarfcn_add(bts, 10612, 319, 0); @@ -163,7 +163,7 @@ static inline void test_si2q_u(void) if (!network) exit(1); - bts = gsm_bts_alloc(network); + bts = gsm_bts_alloc(network, 0); /* first generate invalid SI as no UARFCN added */ gen(bts); @@ -190,7 +190,7 @@ static inline void test_si2q_e(void) if (!network) exit(1); - bts = gsm_bts_alloc(network); + bts = gsm_bts_alloc(network, 0); bts->si_common.si2quater_neigh_list.arfcn = bts->si_common.data.earfcn_list; -- cgit v1.2.3