<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/10585">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">add X-Osmo-IGN MGCP header to ignore CallID<br><br>The format is<br><br>  CRCX ...<br>  C: ...<br>  M: ...<br>  X-Osmo-IGN: C<br><br>So far the only ignorable element is C, i.e. the CallID. Any other items may be<br>added in the future.<br><br>(I initially intended to also add '@' to ignore the endpoint name's domain<br>part, but in the osmo-mgw code base the domain part is verified long before any<br>additional headers are even parsed, so sparing that refactoring for now.)<br><br>The intention is that osmo-bsc will issue "X-Osmo-IGN: C" for all SCCPlite<br>calls, because we are unable to retrieve the CallID that the MSC sends to<br>osmo-mgw for the network side of the endpoint.<br><br>Testing with a specific SCCPlite MSC, I actually observe that all CallIDs are<br>1, even for concurrent calls. So, an alternative hacky solution would have been<br>to always pass CallID == 1 for SCCPlite connections from osmo-bsc.<br><br>Related: I257ad574d8060fef19afce9798bd8a5a7f8c99fe (osmo-bsc)<br>Change-Id: Id7ae275ffde8ea9389270cfe3db087ee8db00b51<br>---<br>M include/osmocom/mgcp/mgcp_common.h<br>M include/osmocom/mgcp/mgcp_endp.h<br>M include/osmocom/mgcp_client/mgcp_client.h<br>M include/osmocom/mgcp_client/mgcp_client_fsm.h<br>M src/libosmo-mgcp-client/mgcp_client.c<br>M src/libosmo-mgcp-client/mgcp_client_fsm.c<br>M src/libosmo-mgcp-client/mgcp_client_vty.c<br>M src/libosmo-mgcp/mgcp_msg.c<br>M src/libosmo-mgcp/mgcp_protocol.c<br>M tests/mgcp/mgcp_test.c<br>M tests/mgcp/mgcp_test.ok<br>M tests/mgcp_client/mgcp_client_test.c<br>M tests/mgcp_client/mgcp_client_test.ok<br>13 files changed, 132 insertions(+), 7 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/mgcp/mgcp_common.h b/include/osmocom/mgcp/mgcp_common.h</span><br><span>index eb6564f..b2c7370 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp_common.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp_common.h</span><br><span>@@ -49,6 +49,14 @@</span><br><span>      MGCP_CONN_LOOPBACK  = 4 | MGCP_CONN_RECV_SEND,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define MGCP_X_OSMO_IGN_HEADER "X-Osmo-IGN:"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Values should be bitwise-OR-able */</span><br><span style="color: hsl(120, 100%, 40%);">+enum mgcp_x_osmo_ign {</span><br><span style="color: hsl(120, 100%, 40%);">+    MGCP_X_OSMO_IGN_NONE = 0,</span><br><span style="color: hsl(120, 100%, 40%);">+     MGCP_X_OSMO_IGN_CALLID = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Ensure that the msg->l2h is NUL terminated. */</span><br><span> static inline int mgcp_msg_terminate_nul(struct msgb *msg)</span><br><span> {</span><br><span>diff --git a/include/osmocom/mgcp/mgcp_endp.h b/include/osmocom/mgcp/mgcp_endp.h</span><br><span>index 3876794..d834c09 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp_endp.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp_endp.h</span><br><span>@@ -90,6 +90,9 @@</span><br><span>        /*! Memorize if this endpoint was choosen by the MGW (wildcarded, true)</span><br><span>       *   or if the user has choosen the particular endpoint explicitly. */</span><br><span>       bool wildcarded_req;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        /*! MGCP_X_OSMO_IGN_* flags from 'X-Osmo-IGN:' header */</span><br><span style="color: hsl(120, 100%, 40%);">+      uint32_t x_osmo_ign;</span><br><span> };</span><br><span> </span><br><span> /*! Extract endpoint number for a given endpoint */</span><br><span>diff --git a/include/osmocom/mgcp_client/mgcp_client.h b/include/osmocom/mgcp_client/mgcp_client.h</span><br><span>index ed2dfb0..6c478e8 100644</span><br><span>--- a/include/osmocom/mgcp_client/mgcp_client.h</span><br><span>+++ b/include/osmocom/mgcp_client/mgcp_client.h</span><br><span>@@ -11,6 +11,8 @@</span><br><span> #define MGCP_CLIENT_REMOTE_ADDR_DEFAULT "127.0.0.1"</span><br><span> #define MGCP_CLIENT_REMOTE_PORT_DEFAULT 2427</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define MGCP_CLIENT_MGW_STR "Configure MGCP connection to Media Gateway\n"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> struct msgb;</span><br><span> struct vty;</span><br><span> struct mgcp_client;</span><br><span>@@ -88,6 +90,7 @@</span><br><span> #define MGCP_MSG_PRESENCE_AUDIO_IP 0x0008</span><br><span> #define MGCP_MSG_PRESENCE_AUDIO_PORT  0x0010</span><br><span> #define MGCP_MSG_PRESENCE_CONN_MODE   0x0020</span><br><span style="color: hsl(120, 100%, 40%);">+#define MGCP_MSG_PRESENCE_X_OSMO_IGN    0x8000</span><br><span> </span><br><span> struct mgcp_msg {</span><br><span>      enum mgcp_verb verb;</span><br><span>@@ -104,6 +107,7 @@</span><br><span>   unsigned int codecs_len;</span><br><span>     struct ptmap ptmap[MGCP_MAX_CODECS];</span><br><span>         unsigned int ptmap_len;</span><br><span style="color: hsl(120, 100%, 40%);">+       uint32_t x_osmo_ign;</span><br><span> };</span><br><span> </span><br><span> void mgcp_client_conf_init(struct mgcp_client_conf *conf);</span><br><span>diff --git a/include/osmocom/mgcp_client/mgcp_client_fsm.h b/include/osmocom/mgcp_client/mgcp_client_fsm.h</span><br><span>index 81d3dea..bb07872 100644</span><br><span>--- a/include/osmocom/mgcp_client/mgcp_client_fsm.h</span><br><span>+++ b/include/osmocom/mgcp_client/mgcp_client_fsm.h</span><br><span>@@ -42,6 +42,11 @@</span><br><span>   /*! RTP payload type map length (optional, only needed when payload</span><br><span>   * types are used that differ from what IANA/3GPP defines) */</span><br><span>        unsigned int ptmap_len;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /*! If nonzero, send 'X-Osmo-IGN:' header. This is useful e.g. for SCCPlite MSCs where the MSC is</span><br><span style="color: hsl(120, 100%, 40%);">+      * known to issue incoherent or unknown CallIDs / to issue CRCX commands with a different domain</span><br><span style="color: hsl(120, 100%, 40%);">+       * name than the BSC. An OsmoMGW will then ignore these and not fail on mismatches. */</span><br><span style="color: hsl(120, 100%, 40%);">+        uint32_t x_osmo_ign;</span><br><span> };</span><br><span> </span><br><span> struct osmo_fsm_inst *mgcp_conn_create(struct mgcp_client *mgcp, struct osmo_fsm_inst *parent_fi, uint32_t parent_term_evt,</span><br><span>diff --git a/src/libosmo-mgcp-client/mgcp_client.c b/src/libosmo-mgcp-client/mgcp_client.c</span><br><span>index c10abc9..e9d7b3f 100644</span><br><span>--- a/src/libosmo-mgcp-client/mgcp_client.c</span><br><span>+++ b/src/libosmo-mgcp-client/mgcp_client.c</span><br><span>@@ -1313,6 +1313,13 @@</span><br><span>                  msgb_printf(msg, "M: %s\r\n",</span><br><span>                          mgcp_client_cmode_name(mgcp_msg->conn_mode));</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  /* Add X-Osmo-IGN */</span><br><span style="color: hsl(120, 100%, 40%);">+  if ((mgcp_msg->presence & MGCP_MSG_PRESENCE_X_OSMO_IGN)</span><br><span style="color: hsl(120, 100%, 40%);">+            && (mgcp_msg->x_osmo_ign != 0))</span><br><span style="color: hsl(120, 100%, 40%);">+                rc +=</span><br><span style="color: hsl(120, 100%, 40%);">+             msgb_printf(msg, MGCP_X_OSMO_IGN_HEADER "%s\r\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                               mgcp_msg->x_osmo_ign & MGCP_X_OSMO_IGN_CALLID ? " C": "");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      /* Add session description protocol (SDP) */</span><br><span>         if (use_sdp</span><br><span>      && (mgcp_msg->verb == MGCP_VERB_CRCX</span><br><span>diff --git a/src/libosmo-mgcp-client/mgcp_client_fsm.c b/src/libosmo-mgcp-client/mgcp_client_fsm.c</span><br><span>index 770db5e..0b5a251 100644</span><br><span>--- a/src/libosmo-mgcp-client/mgcp_client_fsm.c</span><br><span>+++ b/src/libosmo-mgcp-client/mgcp_client_fsm.c</span><br><span>@@ -119,6 +119,11 @@</span><br><span>  osmo_strlcpy(mgcp_msg->endpoint, info->endpoint, MGCP_ENDPOINT_MAXLEN);</span><br><span>        memcpy(mgcp_msg->codecs, info->codecs, sizeof(mgcp_msg->codecs));</span><br><span>   memcpy(mgcp_msg->ptmap, info->ptmap, sizeof(mgcp_msg->ptmap));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     if (info->x_osmo_ign) {</span><br><span style="color: hsl(120, 100%, 40%);">+            mgcp_msg->x_osmo_ign = info->x_osmo_ign;</span><br><span style="color: hsl(120, 100%, 40%);">+                mgcp_msg->presence |= MGCP_MSG_PRESENCE_X_OSMO_IGN;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> }</span><br><span> </span><br><span> static void add_audio(struct mgcp_msg *mgcp_msg, struct mgcp_conn_peer *info)</span><br><span>diff --git a/src/libosmo-mgcp-client/mgcp_client_vty.c b/src/libosmo-mgcp-client/mgcp_client_vty.c</span><br><span>index 10d078a..48fcd70 100644</span><br><span>--- a/src/libosmo-mgcp-client/mgcp_client_vty.c</span><br><span>+++ b/src/libosmo-mgcp-client/mgcp_client_vty.c</span><br><span>@@ -30,7 +30,7 @@</span><br><span> </span><br><span> #include <osmocom/mgcp_client/mgcp_client.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define MGW_STR "Configure MGCP connection to Media Gateway\n"</span><br><span style="color: hsl(120, 100%, 40%);">+#define MGW_STR MGCP_CLIENT_MGW_STR</span><br><span> </span><br><span> void *global_mgcp_client_ctx = NULL;</span><br><span> struct mgcp_client_conf *global_mgcp_client_conf = NULL;</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_msg.c b/src/libosmo-mgcp/mgcp_msg.c</span><br><span>index a5bef7b..a7c8b47 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_msg.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_msg.c</span><br><span>@@ -407,6 +407,11 @@</span><br><span> </span><br><span>      if (!endp)</span><br><span>           return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Accept any CallID for "X-Osmo-IGN: C" */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (endp->x_osmo_ign & MGCP_X_OSMO_IGN_CALLID)</span><br><span style="color: hsl(120, 100%, 40%);">+         return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  if (!callid)</span><br><span>                 return -1;</span><br><span>   if (!endp->callid)</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>index ea80907..cb2c965 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>@@ -715,12 +715,31 @@</span><br><span>                   mode = (const char *)line + 3;</span><br><span>                       break;</span><br><span>               case 'X':</span><br><span style="color: hsl(0, 100%, 40%);">-                       /* If osmoux is disabled, just skip setting it up */</span><br><span style="color: hsl(0, 100%, 40%);">-                    if (!p->endp->cfg->osmux)</span><br><span style="color: hsl(0, 100%, 40%);">-                              break;</span><br><span style="color: hsl(0, 100%, 40%);">-                  if (strncmp("Osmux: ", line + 2, strlen("Osmux: ")) ==</span><br><span style="color: hsl(0, 100%, 40%);">-                          0)</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (strncmp("Osmux: ", line + 2, strlen("Osmux: ")) == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               /* If osmux is disabled, just skip setting it up */</span><br><span style="color: hsl(120, 100%, 40%);">+                           if (!p->endp->cfg->osmux)</span><br><span style="color: hsl(120, 100%, 40%);">+                                    break;</span><br><span>                               osmux_cid = mgcp_osmux_setup(endp, line);</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                   /* Parse X-Osmo-IGN header */</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (!strncmp(line, MGCP_X_OSMO_IGN_HEADER,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        strlen(MGCP_X_OSMO_IGN_HEADER))) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                int i;</span><br><span style="color: hsl(120, 100%, 40%);">+                                int line_len = strlen(line);</span><br><span style="color: hsl(120, 100%, 40%);">+                          for (i = strlen(MGCP_X_OSMO_IGN_HEADER); i < line_len; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                      switch (line[i]) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                    case 'C':</span><br><span style="color: hsl(120, 100%, 40%);">+                                             endp->x_osmo_ign |= MGCP_X_OSMO_IGN_CALLID;</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%);">+                             }</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%);">+                     /* Ignore unknown X-headers */</span><br><span>                       break;</span><br><span>               case '\0':</span><br><span>                   have_sdp = 1;</span><br><span>diff --git a/tests/mgcp/mgcp_test.c b/tests/mgcp/mgcp_test.c</span><br><span>index ea79485..2d1e28a 100644</span><br><span>--- a/tests/mgcp/mgcp_test.c</span><br><span>+++ b/tests/mgcp/mgcp_test.c</span><br><span>@@ -309,6 +309,32 @@</span><br><span>    "a=rtpmap:97 GSM-EFR/8000\r\n" \</span><br><span>   "a=ptime:20\r\n"</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define CRCX_X_OSMO_IGN \</span><br><span style="color: hsl(120, 100%, 40%);">+     "CRCX 2 1@mgw MGCP 1.0\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+       "M: recvonly\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+ "C: 2\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+        "L: p:20\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+     "X-Osmo-IGN: C\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+       "\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+    "v=0\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+ "c=IN IP4 123.12.12.123\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+      "m=audio 5904 RTP/AVP 97\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+     "a=rtpmap:97 GSM-EFR/8000\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+    "a=ptime:40\r\n"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define CRCX_X_OSMO_IGN_RET \</span><br><span style="color: hsl(120, 100%, 40%);">+   "200 2 OK\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+    "I: %s\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+       "\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+    "v=0\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+ "o=- %s 23 IN IP4 0.0.0.0\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+    "s=-\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+ "c=IN IP4 0.0.0.0\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+    "t=0 0\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+       "m=audio 16010 RTP/AVP 97\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+    "a=rtpmap:97 GSM-EFR/8000\r\n" \</span><br><span style="color: hsl(120, 100%, 40%);">+    "a=ptime:40\r\n"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #define DLCX \</span><br><span>       "DLCX 7 1@mgw MGCP 1.0\r\n" \</span><br><span>      "I: %s\r\n" \</span><br><span>@@ -482,6 +508,7 @@</span><br><span>         "a=fmtp:126 0/1/2"},</span><br><span>      {"DLCX", DLCX, DLCX_RET, PTYPE_IGNORE,.extra_fmtp = "a=fmtp:126 0/1/2"},</span><br><span>         {"CRCX", CRCX_NO_LCO_NO_SDP, CRCX_NO_LCO_NO_SDP_RET, 97},</span><br><span style="color: hsl(120, 100%, 40%);">+   {"CRCX", CRCX_X_OSMO_IGN, CRCX_X_OSMO_IGN_RET, 97},</span><br><span> };</span><br><span> </span><br><span> static const struct mgcp_test retransmit[] = {</span><br><span>diff --git a/tests/mgcp/mgcp_test.ok b/tests/mgcp/mgcp_test.ok</span><br><span>index 9838f4d..bdaf5d7 100644</span><br><span>--- a/tests/mgcp/mgcp_test.ok</span><br><span>+++ b/tests/mgcp/mgcp_test.ok</span><br><span>@@ -427,6 +427,29 @@</span><br><span> M: recvonly </span><br><span> C: 2 </span><br><span> L: p:20 </span><br><span style="color: hsl(120, 100%, 40%);">+X-Osmo-IGN: C </span><br><span style="color: hsl(120, 100%, 40%);">+ </span><br><span style="color: hsl(120, 100%, 40%);">+v=0 </span><br><span style="color: hsl(120, 100%, 40%);">+c=IN IP4 123.12.12.123 </span><br><span style="color: hsl(120, 100%, 40%);">+m=audio 5904 RTP/AVP 97 </span><br><span style="color: hsl(120, 100%, 40%);">+a=rtpmap:97 GSM-EFR/8000 </span><br><span style="color: hsl(120, 100%, 40%);">+a=ptime:40 </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+---------8<---------</span><br><span style="color: hsl(120, 100%, 40%);">+checking response:</span><br><span style="color: hsl(120, 100%, 40%);">+using message with patched conn_id for comparison</span><br><span style="color: hsl(120, 100%, 40%);">+Response matches our expectations.</span><br><span style="color: hsl(120, 100%, 40%);">+(response does not contain a connection id)</span><br><span style="color: hsl(120, 100%, 40%);">+Dummy packets: 2</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%);">+Testing CRCX</span><br><span style="color: hsl(120, 100%, 40%);">+creating message from statically defined input:</span><br><span style="color: hsl(120, 100%, 40%);">+---------8<---------</span><br><span style="color: hsl(120, 100%, 40%);">+CRCX 2 1@mgw MGCP 1.0 </span><br><span style="color: hsl(120, 100%, 40%);">+M: recvonly </span><br><span style="color: hsl(120, 100%, 40%);">+C: 2 </span><br><span style="color: hsl(120, 100%, 40%);">+L: p:20 </span><br><span> </span><br><span> v=0 </span><br><span> c=IN IP4 123.12.12.123 </span><br><span>diff --git a/tests/mgcp_client/mgcp_client_test.c b/tests/mgcp_client/mgcp_client_test.c</span><br><span>index 9978f79..2662fc1 100644</span><br><span>--- a/tests/mgcp_client/mgcp_client_test.c</span><br><span>+++ b/tests/mgcp_client/mgcp_client_test.c</span><br><span>@@ -180,7 +180,8 @@</span><br><span>          .codecs_len = 1,</span><br><span>             .ptmap[0].codec = CODEC_GSMEFR_8000_1,</span><br><span>               .ptmap[0].pt = 96,</span><br><span style="color: hsl(0, 100%, 40%);">-              .ptmap_len = 1</span><br><span style="color: hsl(120, 100%, 40%);">+                .ptmap_len = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+               .x_osmo_ign = MGCP_X_OSMO_IGN_CALLID,</span><br><span>        };</span><br><span> </span><br><span>       if (mgcp)</span><br><span>@@ -268,6 +269,16 @@</span><br><span>     msg = mgcp_msg_gen(mgcp, &mgcp_msg);</span><br><span>     printf("%s\n", (char *)msg->data);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+   printf("Generate X-Osmo-IGN message:\n");</span><br><span style="color: hsl(120, 100%, 40%);">+   msg = mgcp_msg_gen(mgcp, &mgcp_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+      mgcp_msg.verb = MGCP_VERB_CRCX;</span><br><span style="color: hsl(120, 100%, 40%);">+       mgcp_msg.presence =</span><br><span style="color: hsl(120, 100%, 40%);">+       (MGCP_MSG_PRESENCE_ENDPOINT | MGCP_MSG_PRESENCE_CALL_ID |</span><br><span style="color: hsl(120, 100%, 40%);">+      MGCP_MSG_PRESENCE_CONN_ID | MGCP_MSG_PRESENCE_CONN_MODE</span><br><span style="color: hsl(120, 100%, 40%);">+       | MGCP_MSG_PRESENCE_X_OSMO_IGN);</span><br><span style="color: hsl(120, 100%, 40%);">+ msg = mgcp_msg_gen(mgcp, &mgcp_msg);</span><br><span style="color: hsl(120, 100%, 40%);">+      printf("%s\n", (char *)msg->data);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    printf("Overfolow test:\n");</span><br><span>       mgcp_msg.verb = MGCP_VERB_MDCX;</span><br><span>      mgcp_msg.presence =</span><br><span>diff --git a/tests/mgcp_client/mgcp_client_test.ok b/tests/mgcp_client/mgcp_client_test.ok</span><br><span>index 454ee3d..58c4b82 100644</span><br><span>--- a/tests/mgcp_client/mgcp_client_test.ok</span><br><span>+++ b/tests/mgcp_client/mgcp_client_test.ok</span><br><span>@@ -117,6 +117,14 @@</span><br><span> Generated RSIP message:</span><br><span> RSIP 9 23@mgw MGCP 1.0 </span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+Generate X-Osmo-IGN message:</span><br><span style="color: hsl(120, 100%, 40%);">+CRCX 11 23@mgw MGCP 1.0 </span><br><span style="color: hsl(120, 100%, 40%);">+C: 2f </span><br><span style="color: hsl(120, 100%, 40%);">+I: 11 </span><br><span style="color: hsl(120, 100%, 40%);">+L: p:20, a:GSM, nt:IN </span><br><span style="color: hsl(120, 100%, 40%);">+M: sendrecv </span><br><span style="color: hsl(120, 100%, 40%);">+X-Osmo-IGN: C </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> Overfolow test:</span><br><span> </span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10585">change 10585</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/10585"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-mgw </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Id7ae275ffde8ea9389270cfe3db087ee8db00b51 </div>
<div style="display:none"> Gerrit-Change-Number: 10585 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Neels Hofmeyr <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>