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
This commit is contained in:
parent
8ff2931862
commit
671811f4fc
|
@ -53,6 +53,14 @@ enum bsc_paging_reason {
|
|||
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;
|
||||
|
|
|
@ -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,11 @@ static struct osmo_tdef gsm_network_T_defs[] = {
|
|||
" 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: " \
|
||||
"If the estimated transmit delay of the messages of the paging queue surpasses this threshold, new incoming "
|
||||
"paging requests are discarded, hence limiting the size of the queue and maximum delay of its scheduled requests. "
|
||||
"X3113 also serves as the upper boundary for dynamic T3113 when estimating the expected maximum delay to get a response" },
|
||||
{ .T = -3210, .default_val = 20, .desc = "After L3 Complete, wait for MSC to confirm" },
|
||||
{}
|
||||
};
|
||||
|
|
|
@ -61,8 +61,6 @@ void *tall_paging_ctx = NULL;
|
|||
/* 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 @@ static unsigned int paging_estimate_delay_us(struct gsm_bts *bts, unsigned int n
|
|||
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 @@ static unsigned int calculate_timer_3113(struct gsm_paging_request *req, unsigne
|
|||
/* 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,16 @@ static int _paging_request(const struct bsc_paging_params *params, struct gsm_bt
|
|||
struct gsm_bts_paging_state *bts_entry = &bts->paging;
|
||||
struct gsm_paging_request *req, *last_initial_req = NULL;
|
||||
unsigned int t3113_timeout_s;
|
||||
unsigned int x3113_s = osmo_tdef_get(bts->network->T_defs, -3113, OSMO_TDEF_S, -1);
|
||||
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. */
|
||||
if (paging_pending_requests_nr(bts) > paging_estimate_available_slots(bts, x3113_s)) {
|
||||
rate_ctr_inc(rate_ctr_group_get_ctr(bts->bts_ctrs, BTS_CTR_PAGING_OVERLOAD));
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
@ -484,7 +484,7 @@ static int _paging_request(const struct bsc_paging_params *params, struct gsm_bt
|
|||
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, x3113_s);
|
||||
osmo_timer_schedule(&req->T3113, t3113_timeout_s, 0);
|
||||
|
||||
/* Trigger scheduler if needed: */
|
||||
|
|
|
@ -35,6 +35,7 @@ net: X17 = 0 ms Rounding threshold for all_allocated:* rate counters: round up t
|
|||
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: If the estimated transmit delay of the messages of the paging queue surpasses this threshold, new incoming paging requests are discarded, hence limiting the size of the queue and maximum delay of its scheduled requests. X3113 also serves as the upper boundary for dynamic T3113 when estimating the expected maximum delay to get a response (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: X17 = 0 ms Rounding threshold for all_allocated:* rate counters: round up t
|
|||
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: If the estimated transmit delay of the messages of the paging queue surpasses this threshold, new incoming paging requests are discarded, hence limiting the size of the queue and maximum delay of its scheduled requests. X3113 also serves as the upper boundary for dynamic T3113 when estimating the expected maximum delay to get a response (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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue