lynxis lazus has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-msc/+/15494


Change subject: Introduce multiple paging attempts
......................................................................

Introduce multiple paging attempts

Some MS/UE might not be reachable on the first attempt.
E.g. when the MS/UE is moving between channels it might not
respond to paging.

Change-Id: I32c47958939a4a29292832289f9d29905731d7f3
---
M include/osmocom/msc/gsm_data.h
M include/osmocom/msc/paging.h
M src/libmsc/msc_net_init.c
M src/libmsc/msc_vty.c
M src/libmsc/paging.c
5 files changed, 39 insertions(+), 2 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/94/15494/1

diff --git a/include/osmocom/msc/gsm_data.h b/include/osmocom/msc/gsm_data.h
index 11b6e82..faabb88 100644
--- a/include/osmocom/msc/gsm_data.h
+++ b/include/osmocom/msc/gsm_data.h
@@ -124,6 +124,7 @@
 };

 #define MSC_PAGING_RESPONSE_TIMER_DEFAULT 10
+#define MSC_PAGING_ATTEMPTS 3

 struct gsm_tz {
        int override; /* if 0, use system's time zone instead. */
@@ -171,6 +172,8 @@
        struct llist_head trans_list;

        unsigned int paging_response_timer;
+       /* how often a paging should be attempted */
+       unsigned int paging_attempts;

        /* Radio Resource Location Protocol (TS 04.31) */
        struct {
diff --git a/include/osmocom/msc/paging.h b/include/osmocom/msc/paging.h
index 4de679d..bbe455c 100644
--- a/include/osmocom/msc/paging.h
+++ b/include/osmocom/msc/paging.h
@@ -35,6 +35,7 @@
        /* the callback data */
        paging_cb_t paging_cb;
        struct gsm_trans *trans;
+       int attempts;
 };

 struct paging_request *paging_request_start(struct vlr_subscr *vsub, enum 
paging_cause cause,
diff --git a/src/libmsc/msc_net_init.c b/src/libmsc/msc_net_init.c
index 91b6165..4ab974c 100644
--- a/src/libmsc/msc_net_init.c
+++ b/src/libmsc/msc_net_init.c
@@ -58,6 +58,7 @@
        net->ncss_guard_timeout = 30;

        net->paging_response_timer = MSC_PAGING_RESPONSE_TIMER_DEFAULT;
+       net->paging_attempts = MSC_PAGING_RESPONSE_TIMER_DEFAULT;

        INIT_LLIST_HEAD(&net->trans_list);
        INIT_LLIST_HEAD(&net->upqueue);
diff --git a/src/libmsc/msc_vty.c b/src/libmsc/msc_vty.c
index 09aef91..6db2bb1 100644
--- a/src/libmsc/msc_vty.c
+++ b/src/libmsc/msc_vty.c
@@ -564,6 +564,21 @@
        return CMD_SUCCESS;
 }

+DEFUN(cfg_msc_paging_attempts, cfg_msc_paging_attempts_cmd,
+      "paging attempts (default|<1-10>)",
+      "Configure Paging\n"
+      "Set Paging attempts, how often the paging should be attempted before 
giving up"
+      " BSS or RNC\n"
+      "Set to default attempts (" OSMO_STRINGIFY_VAL(MSC_PAGING_ATTEMPTS) " 
seconds)\n"
+      "Set paging attempts\n")
+{
+       if (!strcmp(argv[1], "default"))
+               gsmnet->paging_attempts = MSC_PAGING_ATTEMPTS;
+       else
+               gsmnet->paging_attempts = atoi(argv[0]);
+       return CMD_SUCCESS;
+}
+
 DEFUN(cfg_msc_emergency_msisdn, cfg_msc_emergency_msisdn_cmd,
       "emergency-call route-to-msisdn MSISDN",
       "Configure Emergency Call Behaviour\n"
@@ -691,6 +706,9 @@
        if (gsmnet->paging_response_timer != MSC_PAGING_RESPONSE_TIMER_DEFAULT)
                vty_out(vty, " paging response-timer %u%s", 
gsmnet->paging_response_timer, VTY_NEWLINE);

+       if (gsmnet->paging_attempts != MSC_PAGING_ATTEMPTS)
+               vty_out(vty, " paging attempts %u%s", gsmnet->paging_attempts, 
VTY_NEWLINE);
+
        if (gsmnet->emergency.route_to_msisdn) {
                vty_out(vty, " emergency-call route-to-msisdn %s%s",
                        gsmnet->emergency.route_to_msisdn, VTY_NEWLINE);
@@ -1990,6 +2008,7 @@
        install_element(MSC_NODE, &cfg_msc_cs7_instance_a_cmd);
        install_element(MSC_NODE, &cfg_msc_cs7_instance_iu_cmd);
        install_element(MSC_NODE, &cfg_msc_paging_response_timer_cmd);
+       install_element(MSC_NODE, &cfg_msc_paging_attempts_cmd);
        install_element(MSC_NODE, &cfg_msc_emergency_msisdn_cmd);
        install_element(MSC_NODE, &cfg_msc_sms_over_gsup_cmd);
        install_element(MSC_NODE, &cfg_msc_no_sms_over_gsup_cmd);
diff --git a/src/libmsc/paging.c b/src/libmsc/paging.c
index 182b036..15481ff 100644
--- a/src/libmsc/paging.c
+++ b/src/libmsc/paging.c
@@ -89,6 +89,7 @@
                .cause = cause,
                .paging_cb = paging_cb,
                .trans = trans,
+               .attempts = 0,
        };

        if (vsub->cs.is_paging) {
@@ -130,6 +131,7 @@

 static void paging_concludes(struct vlr_subscr *vsub, struct msc_a *msc_a)
 {
+       struct gsm_network *net = vsub->vlr->user_ctx;
        struct paging_request *pr, *pr_next;
        struct paging_signal_data sig_data;

@@ -138,10 +140,21 @@
        llist_for_each_entry_safe(pr, pr_next, &vsub->cs.requests, entry) {
                struct gsm_trans *trans = pr->trans;
                paging_cb_t paging_cb = pr->paging_cb;
+               const char *retry_str = "";

-               LOG_PAGING(vsub, pr, LOGL_DEBUG, "Paging Response action 
(%s)%s\n",
+               pr->attempts++;
+               if (!msc_a && pr->attempts < net->paging_attempts)
+                       retry_str = "(retrying)";
+
+               LOG_PAGING(vsub, pr, LOGL_DEBUG, "Paging Response action 
(%s)%s%s\n",
                           msc_a ? "success" : "expired",
-                          paging_cb ? "" : " (no action defined)");
+                          paging_cb ? "" : " (no action defined)",
+                          retry_str);
+
+               if (!msc_a && pr->attempts < net->paging_attempts) {
+                       msc_paging_request(pr, vsub);
+                       continue;
+               }

                /* Remove the paging request before the paging_cb could 
deallocate e.g. the trans */
                paging_request_remove(pr);

--
To view, visit https://gerrit.osmocom.org/c/osmo-msc/+/15494
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Change-Id: I32c47958939a4a29292832289f9d29905731d7f3
Gerrit-Change-Number: 15494
Gerrit-PatchSet: 1
Gerrit-Owner: lynxis lazus <lyn...@fe80.eu>
Gerrit-MessageType: newchange

Reply via email to