diff options
author | Alexander Couzens <lynxis@fe80.eu> | 2016-08-23 06:27:19 +0200 |
---|---|---|
committer | Alexander Couzens <lynxis@fe80.eu> | 2016-10-04 00:55:05 +0200 |
commit | 38e9ea3f7f385c6660c5958970af5c71adc1682b (patch) | |
tree | d5df1bf0ec407a61cae384743ae5badb049edc91 /openbsc/src/libbsc | |
parent | a8f91df851846d4f61a426e113df52faa1fa0144 (diff) |
bsc: count the usage of codec by setting the lchan active
we count the codec when the channel was successful setted up
Change-Id: Ifc8a406a11dce16b9e7f3310841e470545550a2c
Diffstat (limited to 'openbsc/src/libbsc')
-rw-r--r-- | openbsc/src/libbsc/abis_rsl.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c index dc4ede294..ae88f8c1d 100644 --- a/openbsc/src/libbsc/abis_rsl.c +++ b/openbsc/src/libbsc/abis_rsl.c @@ -82,6 +82,39 @@ static void do_lchan_free(struct gsm_lchan *lchan) lchan_free(lchan); } +static void count_codecs(struct gsm_bts *bts, struct gsm_lchan *lchan) +{ + if (lchan->type == GSM_LCHAN_TCH_H) { + switch (lchan->tch_mode) { + case GSM48_CMODE_SPEECH_AMR: + rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_AMR_H]); + break; + case GSM48_CMODE_SPEECH_V1: + rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_V1_HR]); + break; + default: + break; + } + } else if (lchan->type == GSM_LCHAN_TCH_F) { + switch (lchan->tch_mode) { + case GSM48_CMODE_SPEECH_AMR: + rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_AMR_F]); + break; + case GSM48_CMODE_SPEECH_V1: + rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_V1_FR]); + break; + case GSM48_CMODE_SPEECH_EFR: + rate_ctr_inc(&bts->network->bsc_ctrs->ctr[BSC_CTR_CODEC_EFR]); + break; + default: + break; + } + } else { + LOGP(DRSL, LOGL_ERROR, "count_codecs unknown lchan->type %x on channel %s\n", + lchan->type, gsm_ts_and_pchan_name(lchan->ts)); + } +} + static uint8_t mdisc_by_msgtype(uint8_t msg_type) { /* mask off the transparent bit ? */ @@ -1170,6 +1203,7 @@ static int rsl_rx_chan_act_ack(struct msgb *msg) lchan->rqd_ta = 0; } + count_codecs(msg->trx->bts, lchan); send_lchan_signal(S_LCHAN_ACTIVATE_ACK, lchan, NULL); return 0; @@ -1479,6 +1513,7 @@ static int abis_rsl_rx_dchan(struct msgb *msg) rc = rsl_rx_rf_chan_rel_ack(msg->lchan); break; case RSL_MT_MODE_MODIFY_ACK: + count_codecs(msg->trx->bts, msg->lchan); DEBUGP(DRSL, "%s CHANNEL MODE MODIFY ACK\n", ts_name); break; case RSL_MT_MODE_MODIFY_NACK: |