<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmo-sccp/+/24216">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  fixeria: Looks good to me, but someone else must approve
  osmith: Looks good to me, but someone else must approve
  pespin: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">m3ua/sua: Add new snm_inactive quirk<br><br>This quirk allows the M3UA + SUA code to accept SSNM/SNM traffic despite<br>being in AS-INACTIVE state.  This is forbidden by the RFCs but there<br>are some implementations that apparently just don't care what is<br>specified.<br><br>Change-Id: I193dd546b3e3c00e29f192d0d1bf7819b3e194be<br>Closes: OS#5148<br>---<br>M include/osmocom/sigtran/osmo_ss7.h<br>M src/m3ua.c<br>M src/osmo_ss7_vty.c<br>M src/sua.c<br>4 files changed, 23 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/sigtran/osmo_ss7.h b/include/osmocom/sigtran/osmo_ss7.h</span><br><span>index a799b04..3d13b6a 100644</span><br><span>--- a/include/osmocom/sigtran/osmo_ss7.h</span><br><span>+++ b/include/osmocom/sigtran/osmo_ss7.h</span><br><span>@@ -432,9 +432,11 @@</span><br><span> };</span><br><span> </span><br><span> /*! Peer SG doesn't send NTFY(AS-INACTIVE) after ASP-UP procedure */</span><br><span style="color: hsl(0, 100%, 40%);">-#define OSMO_SS7_ASP_QUIRK_NO_NOTIFY 0x00000001</span><br><span style="color: hsl(120, 100%, 40%);">+#define OSMO_SS7_ASP_QUIRK_NO_NOTIFY                0x00000001</span><br><span> /*! Accept DAUD in ASP role (RFC states only permitted in ASP->SG role) */</span><br><span style="color: hsl(0, 100%, 40%);">-#define OSMO_SS7_ASP_QUIRK_DAUD_IN_ASP       0x00000002</span><br><span style="color: hsl(120, 100%, 40%);">+#define OSMO_SS7_ASP_QUIRK_DAUD_IN_ASP              0x00000002</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Accept SSNM even if ASP is in AS-INACTIVE state */</span><br><span style="color: hsl(120, 100%, 40%);">+#define OSMO_SS7_ASP_QUIRK_SNM_INACTIVE             0x00000004</span><br><span> </span><br><span> int osmo_ss7_asp_peer_snprintf(char* buf, size_t buf_len, struct osmo_ss7_asp_peer *peer);</span><br><span> int osmo_ss7_asp_peer_set_hosts(struct osmo_ss7_asp_peer *peer, void *talloc_ctx,</span><br><span>diff --git a/src/m3ua.c b/src/m3ua.c</span><br><span>index 9fe17ad..e2db6c1 100644</span><br><span>--- a/src/m3ua.c</span><br><span>+++ b/src/m3ua.c</span><br><span>@@ -938,9 +938,15 @@</span><br><span> {</span><br><span>   /* SNM only permitted in ACTIVE state */</span><br><span>     if (asp->fi->state != XUA_ASP_S_ACTIVE) {</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGPASP(asp, DLM3UA, LOGL_NOTICE, "Received M3UA SNM while ASP in state %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                        osmo_fsm_inst_state_name(asp->fi));</span><br><span style="color: hsl(0, 100%, 40%);">-          return M3UA_ERR_UNEXPECTED_MSG;</span><br><span style="color: hsl(120, 100%, 40%);">+               if (asp->fi->state == XUA_ASP_S_INACTIVE &&</span><br><span style="color: hsl(120, 100%, 40%);">+                 asp->cfg.quirks & OSMO_SS7_ASP_QUIRK_SNM_INACTIVE) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       LOGPASP(asp, DLM3UA, LOGL_NOTICE, "quirk snm_inactive active: "</span><br><span style="color: hsl(120, 100%, 40%);">+                             "Accepting SNM in state %s\n", osmo_fsm_inst_state_name(asp->fi));</span><br><span style="color: hsl(120, 100%, 40%);">+               } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      LOGPASP(asp, DLM3UA, LOGL_ERROR, "Rx M3UA SNM not permitted "</span><br><span style="color: hsl(120, 100%, 40%);">+                               "while ASP in state %s\n", osmo_fsm_inst_state_name(asp->fi));</span><br><span style="color: hsl(120, 100%, 40%);">+                   return M3UA_ERR_UNEXPECTED_MSG;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span>    }</span><br><span> </span><br><span>        switch (asp->cfg.role) {</span><br><span>diff --git a/src/osmo_ss7_vty.c b/src/osmo_ss7_vty.c</span><br><span>index b2e3192..dcbe9b2 100644</span><br><span>--- a/src/osmo_ss7_vty.c</span><br><span>+++ b/src/osmo_ss7_vty.c</span><br><span>@@ -58,12 +58,14 @@</span><br><span> static const struct value_string asp_quirk_names[] = {</span><br><span>     { OSMO_SS7_ASP_QUIRK_NO_NOTIFY,         "no_notify" },</span><br><span>     { OSMO_SS7_ASP_QUIRK_DAUD_IN_ASP,       "daud_in_asp" },</span><br><span style="color: hsl(120, 100%, 40%);">+    { OSMO_SS7_ASP_QUIRK_SNM_INACTIVE,      "snm_inactive" },</span><br><span>  { 0, NULL }</span><br><span> };</span><br><span> </span><br><span> static const struct value_string asp_quirk_descs[] = {</span><br><span>      { OSMO_SS7_ASP_QUIRK_NO_NOTIFY, "Peer SG doesn't send NTFY(AS-INACTIVE) after ASP-UP" },</span><br><span>       { OSMO_SS7_ASP_QUIRK_DAUD_IN_ASP, "Allow Rx of DAUD in ASP role" },</span><br><span style="color: hsl(120, 100%, 40%);">+ { OSMO_SS7_ASP_QUIRK_SNM_INACTIVE, "Allow Rx of [S]SNM in AS-INACTIVE state" },</span><br><span>    { 0, NULL }</span><br><span> };</span><br><span> </span><br><span>diff --git a/src/sua.c b/src/sua.c</span><br><span>index 997b511..8415fa3 100644</span><br><span>--- a/src/sua.c</span><br><span>+++ b/src/sua.c</span><br><span>@@ -949,9 +949,14 @@</span><br><span> {</span><br><span>   /* SNM only permitted in ACTIVE state */</span><br><span>     if (asp->fi->state != XUA_ASP_S_ACTIVE) {</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGPASP(asp, DLSUA, LOGL_NOTICE, "Received M3UA SNM while ASP in state %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                 osmo_fsm_inst_state_name(asp->fi));</span><br><span style="color: hsl(0, 100%, 40%);">-          return SUA_ERR_UNEXPECTED_MSG;</span><br><span style="color: hsl(120, 100%, 40%);">+                if (asp->fi->state == XUA_ASP_S_INACTIVE && asp->cfg.quirks & OSMO_SS7_ASP_QUIRK_SNM_INACTIVE) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 LOGPASP(asp, DLSUA, LOGL_NOTICE, "quirk snm_inactive active: "</span><br><span style="color: hsl(120, 100%, 40%);">+                              "Accepting SSNM in state %s\n", osmo_fsm_inst_state_name(asp->fi));</span><br><span style="color: hsl(120, 100%, 40%);">+              } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      LOGPASP(asp, DLM3UA, LOGL_ERROR, "Rx SUA SSNM not permitted "</span><br><span style="color: hsl(120, 100%, 40%);">+                               "while ASP in state %s\n", osmo_fsm_inst_state_name(asp->fi));</span><br><span style="color: hsl(120, 100%, 40%);">+                   return SUA_ERR_UNEXPECTED_MSG;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span>    }</span><br><span> </span><br><span>        switch (asp->cfg.role) {</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-sccp/+/24216">change 24216</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/libosmo-sccp/+/24216"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmo-sccp </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I193dd546b3e3c00e29f192d0d1bf7819b3e194be </div>
<div style="display:none"> Gerrit-Change-Number: 24216 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>