<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmo-sccp/+/15802">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ss7: Implement AS traffic mode loadshare using round robin ASP selection<br><br>Related: OS#4220<br>Change-Id: I98144dde237672df2e78c7c92923e6f4cb77a271<br>---<br>M TODO-RELEASE<br>M include/osmocom/sigtran/osmo_ss7.h<br>M src/xua_as_fsm.c<br>3 files changed, 46 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmo-sccp refs/changes/02/15802/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/TODO-RELEASE b/TODO-RELEASE</span><br><span>index 98b3b88..224f6bc 100644</span><br><span>--- a/TODO-RELEASE</span><br><span>+++ b/TODO-RELEASE</span><br><span>@@ -8,3 +8,4 @@</span><br><span> # If any interfaces have been removed or changed since the last public release: c:r:0.</span><br><span> #library     what            description / commit summary line</span><br><span> libosmo-sigtran osmo_ss7_asp_peer  ABI breakage (host is now an array of strings)</span><br><span style="color: hsl(120, 100%, 40%);">+libosmo-sigtran osmo_ss7_as             ABI breakage (added field last_asp_idx_sent)</span><br><span>diff --git a/include/osmocom/sigtran/osmo_ss7.h b/include/osmocom/sigtran/osmo_ss7.h</span><br><span>index f472b44..aa61d82 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,6 +316,7 @@</span><br><span>              } pc_override;</span><br><span> </span><br><span>           struct osmo_ss7_asp *asps[16];</span><br><span style="color: hsl(120, 100%, 40%);">+                uint8_t last_asp_idx_sent; /* used for load-sharing traffic mode (round robin implementation) */</span><br><span>     } cfg;</span><br><span> };</span><br><span> </span><br><span>diff --git a/src/xua_as_fsm.c b/src/xua_as_fsm.c</span><br><span>index 5757d63..925b851 100644</span><br><span>--- a/src/xua_as_fsm.c</span><br><span>+++ b/src/xua_as_fsm.c</span><br><span>@@ -71,14 +71,12 @@</span><br><span>  return sent;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* actually transmit a message through this AS */</span><br><span style="color: hsl(0, 100%, 40%);">-int xua_as_transmit_msg(struct osmo_ss7_as *as, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+static struct osmo_ss7_asp *xua_as_select_asp_override(struct osmo_ss7_as *as)</span><br><span> {</span><br><span>         struct osmo_ss7_asp *asp;</span><br><span>    unsigned int i;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     /* FIXME: proper selection of the ASP based on the SLS and the</span><br><span style="color: hsl(0, 100%, 40%);">-   * traffic mode type! */</span><br><span style="color: hsl(120, 100%, 40%);">+      /* FIXME: proper selection of the ASP based on the SLS! */</span><br><span>   for (i = 0; i < ARRAY_SIZE(as->cfg.asps); i++) {</span><br><span>               asp = as->cfg.asps[i];</span><br><span>            if (!asp)</span><br><span>@@ -86,6 +84,48 @@</span><br><span>               if (asp)</span><br><span>                     break;</span><br><span>       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return asp;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static struct osmo_ss7_asp *xua_as_select_asp_roundrobin(struct osmo_ss7_as *as)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct osmo_ss7_asp *asp;</span><br><span style="color: hsl(120, 100%, 40%);">+     unsigned int i;</span><br><span style="color: hsl(120, 100%, 40%);">+       unsigned int first_idx;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     first_idx = (as->cfg.last_asp_idx_sent + 1) % ARRAY_SIZE(as->cfg.asps);</span><br><span style="color: hsl(120, 100%, 40%);">+ i = first_idx;</span><br><span style="color: hsl(120, 100%, 40%);">+        do {</span><br><span style="color: hsl(120, 100%, 40%);">+          asp = as->cfg.asps[i];</span><br><span style="color: hsl(120, 100%, 40%);">+             if (asp)</span><br><span style="color: hsl(120, 100%, 40%);">+                      break;</span><br><span style="color: hsl(120, 100%, 40%);">+                i = (i + 1) % ARRAY_SIZE(as->cfg.asps);</span><br><span style="color: hsl(120, 100%, 40%);">+    } while (i != first_idx);</span><br><span style="color: hsl(120, 100%, 40%);">+     as->cfg.last_asp_idx_sent = i;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return asp;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* actually transmit a message through this AS */</span><br><span style="color: hsl(120, 100%, 40%);">+int xua_as_transmit_msg(struct osmo_ss7_as *as, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     struct osmo_ss7_asp *asp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   switch (as->cfg.mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+    case OSMO_SS7_AS_TMOD_OVERRIDE:</span><br><span style="color: hsl(120, 100%, 40%);">+               asp = xua_as_select_asp_override(as);</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case OSMO_SS7_AS_TMOD_LOADSHARE:</span><br><span style="color: hsl(120, 100%, 40%);">+      case OSMO_SS7_AS_TMOD_ROUNDROBIN:</span><br><span style="color: hsl(120, 100%, 40%);">+             asp = xua_as_select_asp_roundrobin(as);</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case OSMO_SS7_AS_TMOD_BCAST:</span><br><span style="color: hsl(120, 100%, 40%);">+          LOGPFSM(as->fi, "Traffic mode broadcast not implemented, dropping message\n");</span><br><span style="color: hsl(120, 100%, 40%);">+           msgb_free(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+               return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+    case _NUM_OSMO_SS7_ASP_TMOD:</span><br><span style="color: hsl(120, 100%, 40%);">+          OSMO_ASSERT(false);</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span> </span><br><span>        if (!asp) {</span><br><span>          LOGPFSM(as->fi, "No ASP in AS, dropping message\n");</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-sccp/+/15802">change 15802</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/+/15802"/><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: I98144dde237672df2e78c7c92923e6f4cb77a271 </div>
<div style="display:none"> Gerrit-Change-Number: 15802 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>