<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>