fixeria has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-msc/+/36760?usp=email )


Change subject: libmsc: add X5 timer for delaying LU transactions
......................................................................

libmsc: add X5 timer for delaying LU transactions

Change-Id: Ic519cab55d65e47b2636124427dab1a1d80fab78
Related: SYS#6913
---
M include/osmocom/msc/msc_a.h
M src/libmsc/msc_a.c
M src/libmsc/ran_infra.c
3 files changed, 48 insertions(+), 1 deletion(-)



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

diff --git a/include/osmocom/msc/msc_a.h b/include/osmocom/msc/msc_a.h
index 4099d4c..09d0750 100644
--- a/include/osmocom/msc/msc_a.h
+++ b/include/osmocom/msc/msc_a.h
@@ -144,6 +144,9 @@
        struct osmo_use_count use_count;
        struct osmo_use_count_entry use_count_buf[8];
        int32_t max_total_use_count;
+
+       /* Additional delay for Location Updating */
+       struct osmo_timer_list lu_delay_timer;
 };

 osmo_static_assert(offsetof(struct msc_a, c) == 0, 
msc_role_common_first_member_of_msc_a);
diff --git a/src/libmsc/msc_a.c b/src/libmsc/msc_a.c
index db1d998..7cb895c 100644
--- a/src/libmsc/msc_a.c
+++ b/src/libmsc/msc_a.c
@@ -155,6 +155,39 @@
        }
 }

+static void lu_delay_timer_cb(void *data)
+{
+       struct msc_a *msc_a = (struct msc_a *)data;
+       msc_a_put(msc_a, MSC_A_USE_LOCATION_UPDATING);
+}
+
+static void msc_a_put_use_lu(struct msc_a *msc_a)
+{
+       unsigned long Tval;
+
+       switch (msc_a->c.ran->type) {
+       case OSMO_RAT_GERAN_A:
+               Tval = osmo_tdef_get(msc_tdefs_geran, -5, OSMO_TDEF_S, 0);
+               break;
+       case OSMO_RAT_UTRAN_IU:
+               Tval = osmo_tdef_get(msc_tdefs_utran, -5, OSMO_TDEF_S, 0);
+               break;
+       default:
+               Tval = 0;
+               break;
+       }
+
+       if (Tval == 0) {
+               /* no delay, put LU token immediately */
+               msc_a_put(msc_a, MSC_A_USE_LOCATION_UPDATING);
+               return;
+       }
+
+       LOG_MSC_A(msc_a, LOGL_INFO, "Keeping LU token for +%lu seconds\n", 
Tval);
+       osmo_timer_setup(&msc_a->lu_delay_timer, &lu_delay_timer_cb, msc_a);
+       osmo_timer_schedule(&msc_a->lu_delay_timer, Tval, 0);
+}
+
 static void evaluate_acceptance_outcome(struct osmo_fsm_inst *fi, bool 
conn_accepted)
 {
        struct msc_a *msc_a = fi->priv;
@@ -180,7 +213,7 @@
                osmo_signal_dispatch(SS_SUBSCR, S_SUBSCR_ATTACHED, 
msc_a_vsub(msc_a));

        if (msc_a->complete_layer3_type == COMPLETE_LAYER3_LU)
-               msc_a_put(msc_a, MSC_A_USE_LOCATION_UPDATING);
+               msc_a_put_use_lu(msc_a);

        if (conn_accepted && msc_a->complete_layer3_type == 
COMPLETE_LAYER3_CM_RE_ESTABLISH_REQ) {
                /* Trigger new Assignment to recommence the voice call. A 
little dance here because normally we verify
diff --git a/src/libmsc/ran_infra.c b/src/libmsc/ran_infra.c
index 6a17840..04c0c62 100644
--- a/src/libmsc/ran_infra.c
+++ b/src/libmsc/ran_infra.c
@@ -44,6 +44,7 @@
        { .T = -2, .default_val = 30, .desc = "RAN connection release sanity 
timeout" }, \
        { .T = -3, .default_val = 10, .desc = "Timeout to find a target BSS 
after Handover Required" }, \
        { .T = -4, .default_val = 10, .desc = "Paging response timeout" }, \
+       { .T = -5, .default_val = 0, .desc = "Additional delay for LU 
transactions" }, \

 struct osmo_tdef msc_tdefs_geran[] = {
        RAN_TDEFS

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

Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Change-Id: Ic519cab55d65e47b2636124427dab1a1d80fab78
Gerrit-Change-Number: 36760
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <[email protected]>
Gerrit-MessageType: newchange

Reply via email to