pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/30345 )
Change subject: paging: Introduce VTY configurable X3113 (Maximum Paging Request Transmit Delay Threshold) ...................................................................... paging: Introduce VTY configurable X3113 (Maximum Paging Request Transmit Delay Threshold) This allows configuring the maximum delay of paging requests to be queued according to other parameters, such as MSC paging request timeouts, etc. Related: OS#5552 Change-Id: Ia556ef4e474e6a2d0d1618bab680a3330a3c062b --- M include/osmocom/bsc/paging.h M src/osmo-bsc/net_init.c M src/osmo-bsc/paging.c M tests/timer.vty 4 files changed, 24 insertions(+), 9 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/45/30345/1 diff --git a/include/osmocom/bsc/paging.h b/include/osmocom/bsc/paging.h index 720ee1c..dd1bb9e 100644 --- a/include/osmocom/bsc/paging.h +++ b/include/osmocom/bsc/paging.h @@ -53,6 +53,14 @@ BSC_PAGING_FOR_LCS = 0x2, }; +/* OS#5552, OS#5553: Maximum allowed scheduling transmit delay in paging + * requests to be queued, in seconds. If calculated delay for requests to be + * queued goes over this threshold, they are discarded instead of inserted to + * the queue. This avoids keeping queueing requests which will be scheduled for + * transmission too late. + */ +#define PAGING_THRESHOLD_X3113_DEFAULT_SEC 60 + struct bsc_paging_params { enum bsc_paging_reason reason; struct bsc_msc_data *msc; diff --git a/src/osmo-bsc/net_init.c b/src/osmo-bsc/net_init.c index ad2f9bf..c7eda2c 100644 --- a/src/osmo-bsc/net_init.c +++ b/src/osmo-bsc/net_init.c @@ -26,6 +26,7 @@ #include <osmocom/bsc/chan_alloc.h> #include <osmocom/bsc/neighbor_ident.h> #include <osmocom/bsc/bts_setup_ramp.h> +#include <osmocom/bsc/paging.h> static struct osmo_tdef gsm_network_T_defs[] = { { .T = 4, .default_val = 5, .desc = "Timeout to receive BSSMAP RESET ACKNOWLEDGE from the MSC" }, @@ -74,6 +75,9 @@ " keep remainders. See also X16, X17." }, { .T = -25, .default_val = 5, .desc = "Timeout for initial user data after an MSC initiated an SCCP connection to the BSS" }, { .T = -3111, .default_val = 4, .desc = "Wait time after lchan was released in error (should be T3111 + 2s)" }, + { .T = -3113, .default_val = PAGING_THRESHOLD_X3113_DEFAULT_SEC, + .desc = "Maximum Paging Request Transmit Delay Threshold: " \ + "Drop new paging requests estimated to be scheduled too far in the future due to current queue length"}, { .T = -3210, .default_val = 20, .desc = "After L3 Complete, wait for MSC to confirm" }, {} }; diff --git a/src/osmo-bsc/paging.c b/src/osmo-bsc/paging.c index 0395c14..32ae627 100644 --- a/src/osmo-bsc/paging.c +++ b/src/osmo-bsc/paging.c @@ -61,8 +61,6 @@ /* How many paging requests to Tx on RSL at max before going back to main loop */ #define MAX_PAGE_REQ_PER_ITER 10 -#define MAX_TX_DELAY_TIME_SEC 60 - /* How often to attempt sending new paging requests (initial, not retrans): 250ms */ static const struct timespec initial_period = { .tv_sec = 0, @@ -355,7 +353,7 @@ unsigned int num_reqs_same_pgroup); static unsigned int calculate_timer_3113(struct gsm_paging_request *req, unsigned int reqs_before, - unsigned int reqs_before_same_pgroup) + unsigned int reqs_before_same_pgroup, unsigned int max_dynamic_value) { unsigned int to_us, estimated_to, to; struct gsm_bts *bts = req->bts; @@ -389,9 +387,9 @@ /* ceiling in seconds + extra time */ estimated_to = (to_us + 999999) / 1000000 + d->val; - /* upper bound: 60s (OS#5553) */ - if (estimated_to > MAX_TX_DELAY_TIME_SEC) - to = MAX_TX_DELAY_TIME_SEC; + /* upper bound: see X3113, PAGING_THRESHOLD_X3113_DEFAULT_SEC */ + if (estimated_to > max_dynamic_value) + to = max_dynamic_value; else to = estimated_to; @@ -414,14 +412,17 @@ struct gsm_bts_paging_state *bts_entry = &bts->paging; struct gsm_paging_request *req, *last_initial_req = NULL; unsigned int t3113_timeout_s; + struct osmo_tdef *td_x3113 = osmo_tdef_get_entry(bts->network->T_defs, -3113); unsigned int reqs_before = 0, reqs_before_same_pgroup = 0; uint8_t pgroup = gsm0502_calc_paging_group(&bts->si_common.chan_desc, str_to_imsi(params->bsub->imsi)); rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_PAGING_ATTEMPTED)); - /* don't try to queue more requests than we can realistically handle within MAX_TX_DELAY_TIME_SEC seconds */ - if (paging_pending_requests_nr(bts) > paging_estimate_available_slots(bts, MAX_TX_DELAY_TIME_SEC)) { + /* Don't try to queue more requests than we can realistically handle within X3113 seconds, + * see PAGING_THRESHOLD_X3113_DEFAULT_SEC. */ + OSMO_ASSERT(td_x3113); + if (paging_pending_requests_nr(bts) > paging_estimate_available_slots(bts, td_x3113->val)) { rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_PAGING_OVERLOAD)); return -ENOSPC; } @@ -484,7 +485,7 @@ else/* Add in the middle of the list after last_initial_req */ __llist_add(&req->entry, &last_initial_req->entry, last_initial_req->entry.next); - t3113_timeout_s = calculate_timer_3113(req, reqs_before, reqs_before_same_pgroup); + t3113_timeout_s = calculate_timer_3113(req, reqs_before, reqs_before_same_pgroup, td_x3113->val); osmo_timer_schedule(&req->T3113, t3113_timeout_s, 0); /* Trigger scheduler if needed: */ diff --git a/tests/timer.vty b/tests/timer.vty index 04c9872..4f1970d 100644 --- a/tests/timer.vty +++ b/tests/timer.vty @@ -35,6 +35,7 @@ net: X18 = 60000 ms Forget-sum period for all_allocated:* rate counters: after this amount of idle time, forget internally cumulated time remainders. Zero to always keep remainders. See also X16, X17. (default: 60000 ms) net: X25 = 5 s Timeout for initial user data after an MSC initiated an SCCP connection to the BSS (default: 5 s) net: X3111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s) +net: X3113 = 60 s Maximum Paging Request Transmit Delay Threshold: Drop new paging requests estimated to be scheduled too far in the future due to current queue length (default: 60 s) net: X3210 = 20 s After L3 Complete, wait for MSC to confirm (default: 20 s) mgw: X2427 = 5 s timeout for MGCP response from MGW (default: 5 s) @@ -89,6 +90,7 @@ net: X18 = 60000 ms Forget-sum period for all_allocated:* rate counters: after this amount of idle time, forget internally cumulated time remainders. Zero to always keep remainders. See also X16, X17. (default: 60000 ms) net: X25 = 5 s Timeout for initial user data after an MSC initiated an SCCP connection to the BSS (default: 5 s) net: X3111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s) +net: X3113 = 60 s Maximum Paging Request Transmit Delay Threshold: Drop new paging requests estimated to be scheduled too far in the future due to current queue length (default: 60 s) net: X3210 = 20 s After L3 Complete, wait for MSC to confirm (default: 20 s) mgw: X2427 = 5 s timeout for MGCP response from MGW (default: 5 s) -- To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/30345 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-Change-Id: Ia556ef4e474e6a2d0d1618bab680a3330a3c062b Gerrit-Change-Number: 30345 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pes...@sysmocom.de> Gerrit-MessageType: newchange