diff options
author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2015-07-21 18:29:46 +0200 |
---|---|---|
committer | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2015-07-21 19:22:36 +0200 |
commit | 6eed1911fd619fb594a9d1a7fc734c1f62ff2f08 (patch) | |
tree | 2e192a178a7045fe19cbe053bf4d06a81156a4b1 /src | |
parent | b31f5ef69963c4e8139515368a3bf867a5d76b00 (diff) |
bssgp: Fix leak rate computation CS value
Currently the initial_cs_dl value is used to compute the maximum leak
rate. This can be too low if adaptive CS selection is used.
This commit changes gprs_bssgp_tx_fc_bvc to derive the max CS level
from the configuration.
Sponsored-by: On-Waves ehf
Diffstat (limited to 'src')
-rw-r--r-- | src/gprs_bssgp_pcu.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/gprs_bssgp_pcu.cpp b/src/gprs_bssgp_pcu.cpp index 02395a8c..7601b218 100644 --- a/src/gprs_bssgp_pcu.cpp +++ b/src/gprs_bssgp_pcu.cpp @@ -595,6 +595,7 @@ int gprs_bssgp_tx_fc_bvc(void) uint32_t ms_leak_rate; /* oct/s */ uint32_t avg_delay_ms; int num_pdch = -1; + int max_cs_dl; if (!the_pcu.bctx) { LOGP(DBSSGP, LOGL_ERROR, "No bctx\n"); @@ -602,6 +603,22 @@ int gprs_bssgp_tx_fc_bvc(void) } bts = bts_main_data(); + if (bts->cs_adj_enabled) { + max_cs_dl = bts->max_cs_dl; + if (!max_cs_dl) { + if (bts->cs4) + max_cs_dl = 4; + else if (bts->cs3) + max_cs_dl = 3; + else if (bts->cs2) + max_cs_dl = 2; + else + max_cs_dl = 1; + } + } else { + max_cs_dl = bts->initial_cs_dl; + } + bucket_size = bts->fc_bvc_bucket_size; leak_rate = bts->fc_bvc_leak_rate; ms_bucket_size = bts->fc_ms_bucket_size; @@ -611,11 +628,11 @@ int gprs_bssgp_tx_fc_bvc(void) if (num_pdch < 0) num_pdch = count_pdch(bts); - leak_rate = gprs_bssgp_max_leak_rate(bts->initial_cs_dl, num_pdch); + leak_rate = gprs_bssgp_max_leak_rate(max_cs_dl, num_pdch); LOGP(DBSSGP, LOGL_DEBUG, "Computed BVC leak rate = %d, num_pdch = %d, cs = %d\n", - leak_rate, num_pdch, bts->initial_cs_dl); + leak_rate, num_pdch, max_cs_dl); }; if (ms_leak_rate == 0) { @@ -631,15 +648,14 @@ int gprs_bssgp_tx_fc_bvc(void) if (ms_num_pdch > max_pdch) ms_num_pdch = max_pdch; - ms_leak_rate = gprs_bssgp_max_leak_rate(bts->initial_cs_dl, - ms_num_pdch); + ms_leak_rate = gprs_bssgp_max_leak_rate(max_cs_dl, ms_num_pdch); /* TODO: To properly support multiple TRX, the per MS leak rate * should be derived from the max number of PDCH TS per TRX. */ LOGP(DBSSGP, LOGL_DEBUG, "Computed MS default leak rate = %d, ms_num_pdch = %d, cs = %d\n", - ms_leak_rate, ms_num_pdch, bts->initial_cs_dl); + ms_leak_rate, ms_num_pdch, max_cs_dl); }; /* TODO: Force leak_rate to 0 on buffer bloat */ |