summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-09-25 17:01:20 +0200
committerHarald Welte <laforge@gnumonks.org>2016-09-28 00:28:01 +0000
commit2afffd5cf67ad84c4fd8e589798b8697b809ebc5 (patch)
tree882138c370c9aed6df6ef8c9824e9683361d8021
parente289a2a86a845759fe1ac75365a6dc54ee9671d3 (diff)
Revert "bts: extend bts_chan_load to allow counting tch only"
This reverts commit 308cb0719dca3ba8eed1eff2a2124d44f34d9a28. Problems in this commit: openbsc/src/libbsc/chan_alloc.c:523: case GSM_PCHAN_TCH_F_PDCH: This is actually wrong, GSM_PCHAN_TCH_F_PDCH use ts->flags, not ts->dyn below (due to historical reasons and could be unified). 560: if (only_count_tch && !chan_is_tch(ts)) This has exactly one effect: it excludes GSM_PCHAN_TCH_F_PDCH when in PDCH mode, because for all other PDCH (plain PDCH and TCH/F_TCH/H_PDCH in PDCH mode) below ts_subslots() returns 0 and skips the for() loop. I consider this a bug in TCH/F_PDCH, to be fixed in an upcoming commit. I don't see why we need the only_count_tch argument, because this should normally only count TCH, weren't it for the TCH/F_PDCH bug. If dyn TS should be counted differently, we should do this in a different way. Change-Id: I34dbbaf53a800115e3d03bd44028cad675f3b525
-rw-r--r--openbsc/include/openbsc/chan_alloc.h2
-rw-r--r--openbsc/src/libbsc/bsc_ctrl_commands.c2
-rw-r--r--openbsc/src/libbsc/bsc_vty.c2
-rw-r--r--openbsc/src/libbsc/chan_alloc.c29
-rw-r--r--openbsc/src/libbsc/paging.c2
5 files changed, 7 insertions, 30 deletions
diff --git a/openbsc/include/openbsc/chan_alloc.h b/openbsc/include/openbsc/chan_alloc.h
index d919b51..78242e5 100644
--- a/openbsc/include/openbsc/chan_alloc.h
+++ b/openbsc/include/openbsc/chan_alloc.h
@@ -46,7 +46,7 @@ struct pchan_load {
struct load_counter pchan[_GSM_PCHAN_MAX];
};
-void bts_chan_load(struct pchan_load *cl, const struct gsm_bts *bts, int only_count_tch);
+void bts_chan_load(struct pchan_load *cl, const struct gsm_bts *bts);
void network_chan_load(struct pchan_load *pl, struct gsm_network *net);
int trx_is_usable(struct gsm_bts_trx *trx);
diff --git a/openbsc/src/libbsc/bsc_ctrl_commands.c b/openbsc/src/libbsc/bsc_ctrl_commands.c
index 3f4fee2..7e84797 100644
--- a/openbsc/src/libbsc/bsc_ctrl_commands.c
+++ b/openbsc/src/libbsc/bsc_ctrl_commands.c
@@ -239,7 +239,7 @@ static int get_bts_chan_load(struct ctrl_cmd *cmd, void *data)
bts = cmd->node;
memset(&pl, 0, sizeof(pl));
- bts_chan_load(&pl, bts, 0);
+ bts_chan_load(&pl, bts);
cmd->reply = talloc_strdup(cmd, "");
diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c
index cdcc011..cb0b1d8 100644
--- a/openbsc/src/libbsc/bsc_vty.c
+++ b/openbsc/src/libbsc/bsc_vty.c
@@ -329,7 +329,7 @@ static void bts_dump_vty(struct vty *vty, struct gsm_bts *bts)
/* FIXME: chan_desc */
memset(&pl, 0, sizeof(pl));
- bts_chan_load(&pl, bts, 0);
+ bts_chan_load(&pl, bts);
vty_out(vty, " Current Channel Load:%s", VTY_NEWLINE);
dump_pchan_load_vty(vty, " ", &pl);
}
diff --git a/openbsc/src/libbsc/chan_alloc.c b/openbsc/src/libbsc/chan_alloc.c
index 03d44e0..7b0c3e6 100644
--- a/openbsc/src/libbsc/chan_alloc.c
+++ b/openbsc/src/libbsc/chan_alloc.c
@@ -514,28 +514,7 @@ struct gsm_subscriber_connection *connection_for_subscr(struct gsm_subscriber *s
return NULL;
}
-static int chan_is_tch(struct gsm_bts_trx_ts *ts)
-{
- switch (ts->pchan) {
- case GSM_PCHAN_TCH_F:
- case GSM_PCHAN_TCH_H:
- return 1;
- case GSM_PCHAN_TCH_F_PDCH:
- case GSM_PCHAN_TCH_F_TCH_H_PDCH:
- if (ts->dyn.pchan_is == GSM_PCHAN_TCH_F ||
- ts->dyn.pchan_is == GSM_PCHAN_TCH_H)
- return 1;
- else
- return 0;
- default:
- return 0;
- }
-}
-
-
-
-void bts_chan_load(struct pchan_load *cl, const struct gsm_bts *bts,
- int only_count_tch)
+void bts_chan_load(struct pchan_load *cl, const struct gsm_bts *bts)
{
struct gsm_bts_trx *trx;
@@ -557,9 +536,6 @@ void bts_chan_load(struct pchan_load *cl, const struct gsm_bts *bts,
if (!nm_is_running(&ts->mo.nm_state))
continue;
- if (only_count_tch && !chan_is_tch(ts))
- continue;
-
subslots = ts_subslots(ts);
for (j = 0; j < subslots; j++) {
struct gsm_lchan *lchan = &ts->lchan[j];
@@ -585,5 +561,6 @@ void network_chan_load(struct pchan_load *pl, struct gsm_network *net)
memset(pl, 0, sizeof(*pl));
llist_for_each_entry(bts, &net->bts_list, list)
- bts_chan_load(pl, bts, 0);
+ bts_chan_load(pl, bts);
}
+
diff --git a/openbsc/src/libbsc/paging.c b/openbsc/src/libbsc/paging.c
index e3795b3..fcb4deb 100644
--- a/openbsc/src/libbsc/paging.c
+++ b/openbsc/src/libbsc/paging.c
@@ -119,7 +119,7 @@ static int can_send_pag_req(struct gsm_bts *bts, int rsl_type)
int count;
memset(&pl, 0, sizeof(pl));
- bts_chan_load(&pl, bts, 0);
+ bts_chan_load(&pl, bts);
switch (rsl_type) {
case RSL_CHANNEED_TCH_F: