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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">M3UA: Reject ASP activation + RKM registration for incompatible traffic-mode<br><br>If the AS is e.g. configured as broadcast, then individual ASPs cannot<br>be activated in loadshare or override.  Everyone must agree.<br><br>Change-Id: Ic73410fbc88d50710202453f759fa132ce14db4c<br>---<br>M include/osmocom/sigtran/osmo_ss7.h<br>M src/osmo_ss7.c<br>M src/xua_asp_fsm.c<br>M src/xua_rkm.c<br>4 files changed, 30 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 4f20d81..04058c2 100644</span><br><span>--- a/include/osmocom/sigtran/osmo_ss7.h</span><br><span>+++ b/include/osmocom/sigtran/osmo_ss7.h</span><br><span>@@ -316,7 +316,7 @@</span><br><span>               enum osmo_ss7_as_traffic_mode mode;</span><br><span>          /* traffic mode was configured by VTY / config file */</span><br><span>               bool mode_set_by_vty;</span><br><span style="color: hsl(0, 100%, 40%);">-           /* traffic mode was configured by RKM (routing key management) or ASPAC */</span><br><span style="color: hsl(120, 100%, 40%);">+            /* traffic mode was configured by RKM (routing key management) or first ASPAC */</span><br><span>             bool mode_set_by_peer;</span><br><span>               uint32_t recovery_timeout_msec;</span><br><span>              uint8_t qos_class;</span><br><span>@@ -346,6 +346,7 @@</span><br><span> void osmo_ss7_as_destroy(struct osmo_ss7_as *as);</span><br><span> bool osmo_ss7_as_has_asp(struct osmo_ss7_as *as,</span><br><span>                     struct osmo_ss7_asp *asp);</span><br><span style="color: hsl(120, 100%, 40%);">+bool osmo_ss7_as_tmode_compatible_xua(struct osmo_ss7_as *as, uint32_t m3ua_tmt);</span><br><span> void osmo_ss7_asp_disconnect(struct osmo_ss7_asp *asp);</span><br><span> </span><br><span> </span><br><span>diff --git a/src/osmo_ss7.c b/src/osmo_ss7.c</span><br><span>index efbceb8..87f1245 100644</span><br><span>--- a/src/osmo_ss7.c</span><br><span>+++ b/src/osmo_ss7.c</span><br><span>@@ -2059,6 +2059,31 @@</span><br><span>      }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+bool osmo_ss7_as_tmode_compatible_xua(struct osmo_ss7_as *as, uint32_t m3ua_tmt)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       if (!as->cfg.mode_set_by_vty && !as->cfg.mode_set_by_peer)</span><br><span style="color: hsl(120, 100%, 40%);">+              return true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        switch (m3ua_tmt) {</span><br><span style="color: hsl(120, 100%, 40%);">+   case M3UA_TMOD_OVERRIDE:</span><br><span style="color: hsl(120, 100%, 40%);">+              if (as->cfg.mode == OSMO_SS7_AS_TMOD_OVERRIDE)</span><br><span style="color: hsl(120, 100%, 40%);">+                     return true;</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case M3UA_TMOD_LOADSHARE:</span><br><span style="color: hsl(120, 100%, 40%);">+             if (as->cfg.mode == OSMO_SS7_AS_TMOD_LOADSHARE ||</span><br><span style="color: hsl(120, 100%, 40%);">+              as->cfg.mode == OSMO_SS7_AS_TMOD_ROUNDROBIN)</span><br><span style="color: hsl(120, 100%, 40%);">+                   return true;</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case M3UA_TMOD_BCAST:</span><br><span style="color: hsl(120, 100%, 40%);">+         if (as->cfg.mode == OSMO_SS7_AS_TMOD_BCAST)</span><br><span style="color: hsl(120, 100%, 40%);">+                        return true;</span><br><span style="color: hsl(120, 100%, 40%);">+          break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     return false;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static osmo_ss7_asp_rx_unknown_cb *g_osmo_ss7_asp_rx_unknown_cb;</span><br><span> </span><br><span> int ss7_asp_rx_unknown(struct osmo_ss7_asp *asp, int ppid_mux, struct msgb *msg)</span><br><span>diff --git a/src/xua_asp_fsm.c b/src/xua_asp_fsm.c</span><br><span>index 5814532..16c06d6 100644</span><br><span>--- a/src/xua_asp_fsm.c</span><br><span>+++ b/src/xua_asp_fsm.c</span><br><span>@@ -483,10 +483,7 @@</span><br><span>                                       LOGPAS(as, DLSS7, LOGL_INFO,</span><br><span>                                                 "ASPAC: Traffic mode set dynamically by peer to %s\n",</span><br><span>                                             osmo_ss7_as_traffic_mode_name(as->cfg.mode));</span><br><span style="color: hsl(0, 100%, 40%);">-                                } else if (as->cfg.mode != tmode) {</span><br><span style="color: hsl(0, 100%, 40%);">-                                  /*FIXME: ^ properly check if tmode is</span><br><span style="color: hsl(0, 100%, 40%);">-                                     compatible with already set</span><br><span style="color: hsl(0, 100%, 40%);">-                                     as->cfg.mode */</span><br><span style="color: hsl(120, 100%, 40%);">+                          } else if (!osmo_ss7_as_tmode_compatible_xua(as, traf_mode)) {</span><br><span>                                       peer_send_error(fi, M3UA_ERR_UNSUPP_TRAF_MOD_TYP);</span><br><span>                                   return;</span><br><span>                              }</span><br><span>diff --git a/src/xua_rkm.c b/src/xua_rkm.c</span><br><span>index a61ac31..10335ea 100644</span><br><span>--- a/src/xua_rkm.c</span><br><span>+++ b/src/xua_rkm.c</span><br><span>@@ -225,9 +225,8 @@</span><br><span>                             LOGPAS(as, DLSS7, LOGL_INFO,</span><br><span>                                         "RKM: Traffic mode set dynamically by peer to %s\n",</span><br><span>                                       osmo_ss7_as_traffic_mode_name(as->cfg.mode));</span><br><span style="color: hsl(0, 100%, 40%);">-                        } else if (as->cfg.mode != tmode) {</span><br><span style="color: hsl(0, 100%, 40%);">-                          /*FIXME: ^ properly check if tmode is</span><br><span style="color: hsl(0, 100%, 40%);">-                             compatible with already set as->cfg.mode */</span><br><span style="color: hsl(120, 100%, 40%);">+                      /* verify if existing AS has same traffic-mode as new request (if any) */</span><br><span style="color: hsl(120, 100%, 40%);">+                     } else if (!osmo_ss7_as_tmode_compatible_xua(as, _tmode)) {</span><br><span>                          LOGPASP(asp, DLSS7, LOGL_NOTICE, "RKM: Non-matching Traffic Mode %s\n",</span><br><span>                                    osmo_ss7_as_traffic_mode_name(tmode));</span><br><span>                               msgb_append_reg_res(resp, rk_id, M3UA_RKM_REG_ERR_UNSUPP_TRAF_MODE, 0);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-sccp/+/15885">change 15885</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/+/15885"/><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: Ic73410fbc88d50710202453f759fa132ce14db4c </div>
<div style="display:none"> Gerrit-Change-Number: 15885 </div>
<div style="display:none"> Gerrit-PatchSet: 7 </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: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>