pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/libosmo-sigtran/+/39637?usp=email )

Change subject: Use default_layer_manager for all ASPs in SCTP-mode=client & 
m3ua-mode=ASP
......................................................................

Use default_layer_manager for all ASPs in SCTP-mode=client & m3ua-mode=ASP

With previous behavior, only first ASP configured as SCTPmode=client and
m3ua-mode=ASP in osmo_sccp_simple_client_on_ss7_id() would be applied
the default_layer_manager.
AS a result, if a client app (eg. osmo-bsc) would manually configure 1 AS
with 2 ASPs (and leave it to dynamic RKM to setup everything at osmo-stp),
it would fail, since the default LM FSM (in charge of waiting for NTFY and
then sending REQ_REG) would only be
applied to the first ASP.
So one would see 1st ASP doing ASPUP+REG_REQ+ASPAC correctly, but the
second one would do ASPUP+ASPAC directly, which would be refused by
osmo-stp since it had no routing context configured for that ASP/AS.

Change-Id: I50f9a088c55ad103cc23758192773fc855747e12
---
M src/osmo_ss7_asp.c
M src/osmo_ss7_vty.c
M src/sccp_user.c
M src/ss7_asp.h
M src/xua_default_lm_fsm.c
5 files changed, 37 insertions(+), 12 deletions(-)

Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, approved




diff --git a/src/osmo_ss7_asp.c b/src/osmo_ss7_asp.c
index 503b31c..b766071 100644
--- a/src/osmo_ss7_asp.c
+++ b/src/osmo_ss7_asp.c
@@ -1291,3 +1291,22 @@
        }
        return -1;
 }
+
+/* Apply sane configs for unconfigured options and restart the ASP.  */
+void ss7_asp_restart_after_reconfigure(struct osmo_ss7_asp *asp)
+{
+       /* Make sure proper defaults values are applied if user didn't provide
+       * specific default values */
+       ss7_asp_set_default_peer_hosts(asp);
+
+       /* Apply default LM FSM for client ASP */
+       if (asp->cfg.proto != OSMO_SS7_ASP_PROT_IPA &&
+           asp->cfg.role == OSMO_SS7_ASP_ROLE_ASP &&
+           !asp->cfg.is_server) {
+               osmo_ss7_asp_use_default_lm(asp, LOGL_DEBUG);
+       } else {
+               osmo_ss7_asp_remove_default_lm(asp);
+       }
+
+       osmo_ss7_asp_restart(asp);
+}
diff --git a/src/osmo_ss7_vty.c b/src/osmo_ss7_vty.c
index 576ad7c..8365db2 100644
--- a/src/osmo_ss7_vty.c
+++ b/src/osmo_ss7_vty.c
@@ -3001,9 +3001,7 @@
        switch (vty->node) {
        case L_CS7_ASP_NODE:
                asp = vty->index;
-               /* Make sure proper defaults values are set */
-               ss7_asp_set_default_peer_hosts(asp);
-               osmo_ss7_asp_restart(asp);
+               ss7_asp_restart_after_reconfigure(asp);
                vty->node = L_CS7_NODE;
                vty->index = asp->inst;
                break;
diff --git a/src/sccp_user.c b/src/sccp_user.c
index d27d4bb..b5b6b4b 100644
--- a/src/sccp_user.c
+++ b/src/sccp_user.c
@@ -628,6 +628,7 @@
                        asp = asp_i;
                        LOGP(DLSCCP, LOGL_NOTICE, "%s: ASP %s for %s is not 
associated with any AS, using it\n",
                             name, asp->cfg.name, 
osmo_ss7_asp_protocol_name(prot));
+                       osmo_ss7_as_add_asp(as, asp->cfg.name);
                        break;
                }
                if (!asp) {
@@ -642,6 +643,7 @@
                        if (!asp)
                                goto out_rt;
                        asp_created = true;
+                       asp->simple_client_allocated = true;
                        /* Ensure that the ASP we use is set to operate as a 
client. */
                        asp->cfg.is_server = false;
                        /* Ensure that the ASP we use is set to role ASP. */
@@ -650,12 +652,10 @@
                                ss7_asp_peer_set_hosts(&asp->cfg.local, asp, 
&default_local_ip, 1);
                        if (default_remote_ip)
                                ss7_asp_peer_set_hosts(&asp->cfg.remote, asp, 
&default_remote_ip, 1);
-                       /* Make sure proper defaults are applied if app didn't 
provide specific default values */
-                       ss7_asp_set_default_peer_hosts(asp);
-                       asp->simple_client_allocated = true;
+                       /* Make sure proper defaults are applied if app didn't
+                       provide specific default values, then restart the ASP: 
*/
+                       ss7_asp_restart_after_reconfigure(asp);
                }
-
-               osmo_ss7_as_add_asp(as, asp->cfg.name);
        }

        /* Extra sanity checks if the ASP asp-clnt-* was pre-configured over 
VTY: */
@@ -696,12 +696,9 @@
                                goto out_asp;
                        }
                }
+               /* ASP was already started here previously by VTY go_parent. */
        }

-       /* Restart ASP */
-       if (prot != OSMO_SS7_ASP_PROT_IPA)
-               osmo_ss7_asp_use_default_lm(asp, LOGL_DEBUG);
-       osmo_ss7_asp_restart(asp);
        LOGP(DLSCCP, LOGL_NOTICE, "%s: Using ASP instance %s\n", name,
             asp->cfg.name);

diff --git a/src/ss7_asp.h b/src/ss7_asp.h
index 377274a..a05d870 100644
--- a/src/ss7_asp.h
+++ b/src/ss7_asp.h
@@ -110,5 +110,8 @@
 int ss7_asp_apply_new_local_address(const struct osmo_ss7_asp *asp, unsigned 
int loc_idx);
 int ss7_asp_apply_drop_local_address(const struct osmo_ss7_asp *asp, unsigned 
int loc_idx);

+void ss7_asp_restart_after_reconfigure(struct osmo_ss7_asp *asp);
+void osmo_ss7_asp_remove_default_lm(struct osmo_ss7_asp *asp);
+
 #define LOGPASP(asp, subsys, level, fmt, args ...) \
        _LOGSS7((asp)->inst, subsys, level, "asp-%s: " fmt, (asp)->cfg.name, ## 
args)
diff --git a/src/xua_default_lm_fsm.c b/src/xua_default_lm_fsm.c
index fc01605..0952c9e 100644
--- a/src/xua_default_lm_fsm.c
+++ b/src/xua_default_lm_fsm.c
@@ -413,6 +413,14 @@
        .prim_cb = default_lm_prim_cb,
 };

+void osmo_ss7_asp_remove_default_lm(struct osmo_ss7_asp *asp)
+{
+       if (!asp->lm_priv)
+               return;
+       osmo_fsm_inst_term(asp->lm_priv, OSMO_FSM_TERM_ERROR, NULL);
+       asp->lm_priv = NULL;
+}
+
 int osmo_ss7_asp_use_default_lm(struct osmo_ss7_asp *asp, int log_level)
 {
        struct lm_fsm_priv *lmp;

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

Gerrit-MessageType: merged
Gerrit-Project: libosmo-sigtran
Gerrit-Branch: master
Gerrit-Change-Id: I50f9a088c55ad103cc23758192773fc855747e12
Gerrit-Change-Number: 39637
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <pes...@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillm...@sysmocom.de>
Gerrit-Reviewer: fixeria <vyanits...@sysmocom.de>
Gerrit-Reviewer: laforge <lafo...@osmocom.org>
Gerrit-Reviewer: osmith <osm...@sysmocom.de>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>

Reply via email to