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