<p>Stefan Sperling has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11287">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">add support for ipaccess messages on the ctrl interface<br><br>In ctrl_handle_msg(), check for IPACCESS protocol messages and respond<br>to such messages in the same way as ipa_ccm_rcvmsg_base() does. This will<br>allow the TTCN3 IPA "chopped ping" test to pass on control interfaces.<br><br>Change-Id: I9d7137c830981ccad03806b30b776e2b1f1b4699<br>Related: OS#2010<br>---<br>M src/ctrl/control_if.c<br>1 file changed, 32 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/87/11287/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/ctrl/control_if.c b/src/ctrl/control_if.c</span><br><span>index 5962f7e..ed18a2f 100644</span><br><span>--- a/src/ctrl/control_if.c</span><br><span>+++ b/src/ctrl/control_if.c</span><br><span>@@ -389,20 +389,44 @@</span><br><span>   struct ipaccess_head_ext *iph_ext;</span><br><span>   int result;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       if (msg->len < sizeof(*iph)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          LOGP(DLCTRL, LOGL_ERROR, "The message is too short.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+            return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     iph = (struct ipaccess_head *) msg->data;</span><br><span style="color: hsl(120, 100%, 40%);">+  if (iph->proto == IPAC_PROTO_IPACCESS) {</span><br><span style="color: hsl(120, 100%, 40%);">+           uint8_t msg_type = *(msg->l2h);</span><br><span style="color: hsl(120, 100%, 40%);">+            switch (msg_type) {</span><br><span style="color: hsl(120, 100%, 40%);">+           case IPAC_MSGT_PING:</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (ipa_ccm_send_pong(ccon->write_queue.bfd.fd) < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                            LOGP(DLINP, LOGL_ERROR, "Cannot send PONG message. Reason: %s\n", strerror(errno));</span><br><span style="color: hsl(120, 100%, 40%);">+                 break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case IPAC_MSGT_PONG:</span><br><span style="color: hsl(120, 100%, 40%);">+                  break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case IPAC_MSGT_ID_ACK:</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (ipa_ccm_send_id_ack(ccon->write_queue.bfd.fd) < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                          LOGP(DLINP, LOGL_ERROR, "Cannot send ID_ACK message. Reason: %s\n", strerror(errno));</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%);">+                      LOGP(DLCTRL, LOGL_DEBUG, "Received unhandled IPACCESS protocol message of type 0x%x: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                      msg_type, 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 style="color: hsl(120, 100%, 40%);">+     if (iph->proto != IPAC_PROTO_OSMO) {</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGP(DLCTRL, LOGL_ERROR, "Protocol mismatch. Received protocol 0x%x message: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+              iph->proto, msgb_hexdump(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+               return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span>    if (msg->len < sizeof(*iph) + sizeof(*iph_ext)) {</span><br><span>              LOGP(DLCTRL, LOGL_ERROR, "The message is too short.\n");</span><br><span>           return -EINVAL;</span><br><span>      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       iph = (struct ipaccess_head *) msg->data;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (iph->proto != IPAC_PROTO_OSMO) {</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGP(DLCTRL, LOGL_ERROR, "Protocol mismatch. We got 0x%x\n", iph->proto);</span><br><span style="color: hsl(0, 100%, 40%);">-          return -EINVAL;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    iph_ext = (struct ipaccess_head_ext *) iph->data;</span><br><span>         if (iph_ext->proto != IPAC_PROTO_EXT_CTRL) {</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGP(DLCTRL, LOGL_ERROR, "Extended protocol mismatch. We got 0x%x\n", iph_ext->proto);</span><br><span style="color: hsl(120, 100%, 40%);">+           LOGP(DLCTRL, LOGL_ERROR, "Extended protocol mismatch. Received protocol 0x%x message: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                     iph_ext->proto, msgb_hexdump(msg));</span><br><span>          return -EINVAL;</span><br><span>      }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11287">change 11287</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/11287"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I9d7137c830981ccad03806b30b776e2b1f1b4699 </div>
<div style="display:none"> Gerrit-Change-Number: 11287 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Stefan Sperling <ssperling@sysmocom.de> </div>