pespin has submitted this change. (
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, 25 insertions(+), 9 deletions(-)
Approvals:
Jenkins Builder: Verified
neels: Looks good to me, but someone else must approve
laforge: Looks good to me, but someone else must approve
pespin: Looks good to me, approved
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..75dcbf3 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,11 @@
" 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" },
{}
};
diff --git a/src/osmo-bsc/paging.c b/src/osmo-bsc/paging.c
index 0395c14..a3f4e84 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,16 @@
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 @@
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: */
diff --git a/tests/timer.vty b/tests/timer.vty
index 04c9872..731d134 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: 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: 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)
--
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: 2
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged