<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/14025">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;">mgcp-cli: Allow submitting X-Osmux on CRCX request<br><br>Change-Id: I73b4c62baf39050da81d65553cbea07bc51163de<br>---<br>M TODO-RELEASE<br>M include/osmocom/mgcp/mgcp_common.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 tests/mgcp_client/mgcp_client_test.c<br>M tests/mgcp_client/mgcp_client_test.ok<br>8 files changed, 64 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/TODO-RELEASE b/TODO-RELEASE</span><br><span>index 67a1b21..8fa535c 100644</span><br><span>--- a/TODO-RELEASE</span><br><span>+++ b/TODO-RELEASE</span><br><span>@@ -24,4 +24,5 @@</span><br><span> # If any interfaces have been removed or changed since the last public release, a=0.</span><br><span> #</span><br><span> #library         what            description / commit summary line</span><br><span style="color: hsl(0, 100%, 40%);">-libosmo-mgcp-client    add struct members          AMR SDP/fmtp parameter generation</span><br><span>\ No newline at end of file</span><br><span style="color: hsl(120, 100%, 40%);">+libosmo-mgcp-client        add struct members          AMR SDP/fmtp parameter generation</span><br><span style="color: hsl(120, 100%, 40%);">+libosmo-mgcp-client     add struct members           Osmux use+cid fields to struct mgcp_msg and mgcp_conn_peer</span><br><span>diff --git a/include/osmocom/mgcp/mgcp_common.h b/include/osmocom/mgcp/mgcp_common.h</span><br><span>index 75d5a37..a1bbb19 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp_common.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp_common.h</span><br><span>@@ -50,6 +50,7 @@</span><br><span> };</span><br><span> </span><br><span> #define MGCP_X_OSMO_IGN_HEADER "X-Osmo-IGN:"</span><br><span style="color: hsl(120, 100%, 40%);">+#define MGCP_X_OSMO_OSMUX_HEADER "X-Osmux:"</span><br><span> </span><br><span> /* Values should be bitwise-OR-able */</span><br><span> enum mgcp_x_osmo_ign {</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 9b57f10..be84356 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>@@ -95,6 +95,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_OSMUX_CID 0x4000</span><br><span> #define MGCP_MSG_PRESENCE_X_OSMO_IGN       0x8000</span><br><span> </span><br><span> struct mgcp_msg {</span><br><span>@@ -113,6 +114,8 @@</span><br><span>        struct ptmap ptmap[MGCP_MAX_CODECS];</span><br><span>         unsigned int ptmap_len;</span><br><span>      uint32_t x_osmo_ign;</span><br><span style="color: hsl(120, 100%, 40%);">+  bool x_osmo_osmux_use;</span><br><span style="color: hsl(120, 100%, 40%);">+        int x_osmo_osmux_cid; /* -1 is wildcard */</span><br><span>   bool param_present;</span><br><span>  struct mgcp_codec_param param;</span><br><span> };</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 e170a25..c763d74 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>@@ -48,6 +48,11 @@</span><br><span>    * name than the BSC. An OsmoMGW will then ignore these and not fail on mismatches. */</span><br><span>       uint32_t x_osmo_ign;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+      /*! send 'X-Osmux: %d' header (or "*" as wildcard). */</span><br><span style="color: hsl(120, 100%, 40%);">+      bool x_osmo_osmux_use;</span><br><span style="color: hsl(120, 100%, 40%);">+        /*! -1 means send wildcard. */</span><br><span style="color: hsl(120, 100%, 40%);">+        int x_osmo_osmux_cid;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      /*! If left MGCP_CONN_NONE, use MGCP_CONN_RECV_ONLY or MGCP_CONN_RECV_SEND, depending on whether an audio RTP</span><br><span>         * address is set. If != MGCP_CONN_NONE, force this conn mode. */</span><br><span>    enum mgcp_connection_mode conn_mode;</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 c28f5d2..bbef9ef 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>@@ -1104,6 +1104,7 @@</span><br><span>        int rc = 0;</span><br><span>  int rc_sdp;</span><br><span>  bool use_sdp = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ char buf[32];</span><br><span> </span><br><span>    msg->l2h = msg->data;</span><br><span>  msg->cb[MSGB_CB_MGCP_TRANS_ID] = trans_id;</span><br><span>@@ -1207,6 +1208,15 @@</span><br><span>                   msgb_printf(msg, MGCP_X_OSMO_IGN_HEADER "%s\r\n",</span><br><span>                              mgcp_msg->x_osmo_ign & MGCP_X_OSMO_IGN_CALLID ? " C": "");</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+     /* Add X-Osmo-Osmux */</span><br><span style="color: hsl(120, 100%, 40%);">+        if ((mgcp_msg->presence & MGCP_MSG_PRESENCE_X_OSMO_OSMUX_CID)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               snprintf(buf, sizeof(buf), " %d", mgcp_msg->x_osmo_osmux_cid);</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_OSMUX_HEADER "%s\r\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                             mgcp_msg->x_osmo_osmux_cid == -1 ? " *": buf);</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%);">+</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 75d583b..0d16720 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>@@ -126,6 +126,11 @@</span><br><span>          mgcp_msg->x_osmo_ign = info->x_osmo_ign;</span><br><span>               mgcp_msg->presence |= MGCP_MSG_PRESENCE_X_OSMO_IGN;</span><br><span>       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (info->x_osmo_osmux_use) {</span><br><span style="color: hsl(120, 100%, 40%);">+              mgcp_msg->x_osmo_osmux_cid = info->x_osmo_osmux_cid;</span><br><span style="color: hsl(120, 100%, 40%);">+            mgcp_msg->presence |= MGCP_MSG_PRESENCE_X_OSMO_OSMUX_CID;</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/tests/mgcp_client/mgcp_client_test.c b/tests/mgcp_client/mgcp_client_test.c</span><br><span>index d610783..432a09c 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>@@ -157,6 +157,7 @@</span><br><span>               .ptmap[0].pt = 96,</span><br><span>           .ptmap_len = 1,</span><br><span>              .x_osmo_ign = MGCP_X_OSMO_IGN_CALLID,</span><br><span style="color: hsl(120, 100%, 40%);">+         .x_osmo_osmux_cid = -1, /* wildcard */</span><br><span>       };</span><br><span> </span><br><span>       if (mgcp)</span><br><span>@@ -254,6 +255,27 @@</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-Osmux 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_OSMUX_CID);</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 style="color: hsl(120, 100%, 40%);">+     printf("Generate X-Osmo-Osmux message (fixed CID 2):\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.x_osmo_osmux_cid = 2;</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_OSMUX_CID);</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 65b5298..8fbe3ae 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>@@ -84,6 +84,22 @@</span><br><span> M: sendrecv </span><br><span> X-Osmo-IGN: C </span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+Generate X-Osmo-Osmux message:</span><br><span style="color: hsl(120, 100%, 40%);">+CRCX 13 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-Osmux: * </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Generate X-Osmo-Osmux message (fixed CID 2):</span><br><span style="color: hsl(120, 100%, 40%);">+CRCX 15 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-Osmux: 2 </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/14025">change 14025</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/14025"/><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: I73b4c62baf39050da81d65553cbea07bc51163de </div>
<div style="display:none"> Gerrit-Change-Number: 14025 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@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>