<p>Harald Welte has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/9439">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Introduce osmo_ss7_asp_rx_unknown() for handling unknown PPID/StreamID<br><br>Applications may be interested in handling data for those SCTP PPID or<br>IPA StreamID which libosmo-sigtran doesn't implement<br>natively/internally.<br><br>Let's add a weak symbol osmo_ss7_asp_rx_unknown() which applications<br>can override to implement whatever behaviour they'd want for those<br>PPID/StreamIDs.<br><br>Change-Id: I8616f914192000df0ec6547ff4ada80e0f9042a2<br>---<br>M include/osmocom/sigtran/osmo_ss7.h<br>M src/ipa.c<br>M src/osmo_ss7.c<br>3 files changed, 30 insertions(+), 13 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/39/9439/1</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 fd3f103..89bf437 100644</span><br><span>--- a/include/osmocom/sigtran/osmo_ss7.h</span><br><span>+++ b/include/osmocom/sigtran/osmo_ss7.h</span><br><span>@@ -408,6 +408,8 @@</span><br><span> int osmo_ss7_asp_restart(struct osmo_ss7_asp *asp);</span><br><span> int osmo_ss7_asp_use_default_lm(struct osmo_ss7_asp *asp, int log_level);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_ss7_asp_rx_unknown(struct osmo_ss7_asp *asp, int ppid_mux, struct msgb *msg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define LOGPASP(asp, subsys, level, fmt, args ...)             \</span><br><span>    LOGP(subsys, level, "asp-%s: " fmt, (asp)->cfg.name, ## args)</span><br><span> </span><br><span>diff --git a/src/ipa.c b/src/ipa.c</span><br><span>index 9f04746..d81f56d 100644</span><br><span>--- a/src/ipa.c</span><br><span>+++ b/src/ipa.c</span><br><span>@@ -288,9 +288,7 @@</span><br><span>                rc = ipa_rx_msg_sccp(asp, msg);</span><br><span>              break;</span><br><span>       default:</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGPASP(asp, DLSS7, LOGL_DEBUG, "Unknown Stream ID 0x%02x: %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                     hh->proto, msgb_hexdump(msg));</span><br><span style="color: hsl(0, 100%, 40%);">-               rc = -1;</span><br><span style="color: hsl(120, 100%, 40%);">+              rc = osmo_ss7_asp_rx_unknown(asp, hh->proto, msg);</span><br><span>        }</span><br><span> </span><br><span>        return rc;</span><br><span>diff --git a/src/osmo_ss7.c b/src/osmo_ss7.c</span><br><span>index 275469e..1a554a8 100644</span><br><span>--- a/src/osmo_ss7.c</span><br><span>+++ b/src/osmo_ss7.c</span><br><span>@@ -1450,11 +1450,8 @@</span><br><span>             rc = sua_rx_msg(asp, msg);</span><br><span>   else if (ppid == M3UA_PPID && asp->cfg.proto == OSMO_SS7_ASP_PROT_M3UA)</span><br><span>           rc = m3ua_rx_msg(asp, msg);</span><br><span style="color: hsl(0, 100%, 40%);">-     else {</span><br><span style="color: hsl(0, 100%, 40%);">-          LOGPASP(asp, DLSS7, LOGL_NOTICE, "SCTP chunk for unknown PPID %u "</span><br><span style="color: hsl(0, 100%, 40%);">-                    "received\n", ppid);</span><br><span style="color: hsl(0, 100%, 40%);">-          rc = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(120, 100%, 40%);">+     else</span><br><span style="color: hsl(120, 100%, 40%);">+          rc = osmo_ss7_asp_rx_unknown(asp, ppid, msg);</span><br><span> </span><br><span> out:</span><br><span>    msgb_free(msg);</span><br><span>@@ -1591,11 +1588,8 @@</span><br><span>             rc = sua_rx_msg(asp, msg);</span><br><span>   else if (ppid == M3UA_PPID && asp->cfg.proto == OSMO_SS7_ASP_PROT_M3UA)</span><br><span>           rc = m3ua_rx_msg(asp, msg);</span><br><span style="color: hsl(0, 100%, 40%);">-     else {</span><br><span style="color: hsl(0, 100%, 40%);">-          LOGPASP(asp, DLSS7, LOGL_NOTICE, "SCTP chunk for unknown PPID %u "</span><br><span style="color: hsl(0, 100%, 40%);">-                    "received\n", ppid);</span><br><span style="color: hsl(0, 100%, 40%);">-          rc = 0;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(120, 100%, 40%);">+     else</span><br><span style="color: hsl(120, 100%, 40%);">+          rc = osmo_ss7_asp_rx_unknown(asp, ppid, msg);</span><br><span> </span><br><span> out:</span><br><span>    msgb_free(msg);</span><br><span>@@ -1918,3 +1912,26 @@</span><br><span>             return OSMO_SS7_AS_TMOD_BCAST;</span><br><span>       }</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Weak function to handle payload for unknown/unsupported PPID or IPA StreamID.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  This function can be overridden by application code to implement whatever handling</span><br><span style="color: hsl(120, 100%, 40%);">+ *  it wants for such additional payloads/streams.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] asp Application Server Process through which data was received</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] ppid_sid SCTP PPID (in sigtran case) or IPA Stream ID</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] msg Message buffer containing received data. Continues to be owned by caller!</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \return 0 on success; negative on error */</span><br><span style="color: hsl(120, 100%, 40%);">+__attribute__((weak))</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_ss7_asp_rx_unknown(struct osmo_ss7_asp *asp, int ppid_mux, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   switch(asp->cfg.proto) {</span><br><span style="color: hsl(120, 100%, 40%);">+   case OSMO_SS7_ASP_PROT_IPA:</span><br><span style="color: hsl(120, 100%, 40%);">+           LOGPASP(asp, DLSS7, LOGL_NOTICE, "Rx IPA for unknown Stream ID 0x%02x: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                       ppid_mux, msgb_hexdump(msg));</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%);">+              LOGPASP(asp, DLSS7, LOGL_NOTICE, "Rx SCTP chunk for unknown PPID %u: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                 ppid_mux, msgb_hexdump(msg));</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 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9439">change 9439</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/9439"/><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-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I8616f914192000df0ec6547ff4ada80e0f9042a2 </div>
<div style="display:none"> Gerrit-Change-Number: 9439 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>