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 <pes...@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanits...@sysmocom.de>
Gerrit-Reviewer: laforge <lafo...@osmocom.org>
Gerrit-Reviewer: neels <nhofm...@sysmocom.de>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>
Gerrit-MessageType: merged

Reply via email to