<p>Pau Espin Pedrol has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/14041">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Request Osmux CID and forward it in Assign Req and Assign Compl<br><br>Related: OS#2551<br>Depends: osmo-mgw.git I73b4c62baf39050da81d65553cbea07bc51163de<br>Change-Id: I5b14e34481e890669c9ee02dba81eba84293cebb<br>---<br>M include/osmocom/msc/call_leg.h<br>M include/osmocom/msc/ran_msg.h<br>M include/osmocom/msc/rtp_stream.h<br>M src/libmsc/call_leg.c<br>M src/libmsc/msc_a.c<br>M src/libmsc/ran_msg_a.c<br>M src/libmsc/rtp_stream.c<br>7 files changed, 105 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/41/14041/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/msc/call_leg.h b/include/osmocom/msc/call_leg.h</span><br><span>index d8380f5..f35816c 100644</span><br><span>--- a/include/osmocom/msc/call_leg.h</span><br><span>+++ b/include/osmocom/msc/call_leg.h</span><br><span>@@ -44,6 +44,8 @@</span><br><span> </span><br><span> /* Prevent events from deallocating for certain release code paths, to prevent use-after-free problems. */</span><br><span> bool deallocating;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ bool ran_peer_supports_osmux;</span><br><span> };</span><br><span> </span><br><span> enum call_leg_event {</span><br><span>diff --git a/include/osmocom/msc/ran_msg.h b/include/osmocom/msc/ran_msg.h</span><br><span>index 4d0485d..af0822b 100644</span><br><span>--- a/include/osmocom/msc/ran_msg.h</span><br><span>+++ b/include/osmocom/msc/ran_msg.h</span><br><span>@@ -84,6 +84,8 @@</span><br><span> const struct osmo_sockaddr_str *cn_rtp;</span><br><span> const struct gsm0808_channel_type *channel_type;</span><br><span> enum nsap_addr_enc rab_assign_addr_enc;</span><br><span style="color: hsl(120, 100%, 40%);">+ bool osmux_present;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t osmux_cid;</span><br><span> };</span><br><span> </span><br><span> struct ran_cipher_mode_command {</span><br><span>@@ -223,6 +225,8 @@</span><br><span> struct osmo_sockaddr_str remote_rtp;</span><br><span> bool codec_present;</span><br><span> enum mgcp_codecs codec;</span><br><span style="color: hsl(120, 100%, 40%);">+ bool osmux_present;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t osmux_cid;</span><br><span> } assignment_complete;</span><br><span> struct {</span><br><span> enum gsm0808_cause bssap_cause;</span><br><span>diff --git a/include/osmocom/msc/rtp_stream.h b/include/osmocom/msc/rtp_stream.h</span><br><span>index 794e806..c53c4f1 100644</span><br><span>--- a/include/osmocom/msc/rtp_stream.h</span><br><span>+++ b/include/osmocom/msc/rtp_stream.h</span><br><span>@@ -44,6 +44,15 @@</span><br><span> struct osmo_mgcpc_ep_ci *ci;</span><br><span> </span><br><span> enum mgcp_connection_mode crcx_conn_mode;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* configured to use Osmux */</span><br><span style="color: hsl(120, 100%, 40%);">+ bool use_osmux;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Allocated by our MGW, negative means invalid, not yet known */</span><br><span style="color: hsl(120, 100%, 40%);">+ int local_osmux_cid;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Allocated by BSC MGW, negative means invalid, not yet known */</span><br><span style="color: hsl(120, 100%, 40%);">+ int remote_osmux_cid;</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Whether remote_osmux_cid has been communicated to MGW */</span><br><span style="color: hsl(120, 100%, 40%);">+ bool remote_osmux_cid_sent_to_mgw;</span><br><span> };</span><br><span> </span><br><span> #define RTP_STREAM_FMT "local=" RTP_IP_PORT_FMT ",remote=" RTP_IP_PORT_FMT</span><br><span>@@ -57,6 +66,7 @@</span><br><span> </span><br><span> void rtp_stream_set_codec(struct rtp_stream *rtps, enum mgcp_codecs codec);</span><br><span> void rtp_stream_set_remote_addr(struct rtp_stream *rtps, const struct osmo_sockaddr_str *r);</span><br><span style="color: hsl(120, 100%, 40%);">+void rtp_stream_set_remote_osmux_cid(struct rtp_stream *rtps, uint8_t osmux_cid);</span><br><span> int rtp_stream_commit(struct rtp_stream *rtps);</span><br><span> </span><br><span> void rtp_stream_release(struct rtp_stream *rtps);</span><br><span>diff --git a/src/libmsc/call_leg.c b/src/libmsc/call_leg.c</span><br><span>index 46405bc..794eda2 100644</span><br><span>--- a/src/libmsc/call_leg.c</span><br><span>+++ b/src/libmsc/call_leg.c</span><br><span>@@ -321,6 +321,10 @@</span><br><span> if (call_leg_ensure_rtp_alloc(cl, dir, call_id, for_trans))</span><br><span> return -EIO;</span><br><span> cl->rtp[dir]->crcx_conn_mode = cl->crcx_conn_mode[dir];</span><br><span style="color: hsl(120, 100%, 40%);">+ if (dir == RTP_TO_RAN && cl->ran_peer_supports_osmux) {</span><br><span style="color: hsl(120, 100%, 40%);">+ cl->rtp[dir]->use_osmux = true;</span><br><span style="color: hsl(120, 100%, 40%);">+ cl->rtp[dir]->remote_osmux_cid = -1; /* wildcard */</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> if (codec_if_known)</span><br><span> rtp_stream_set_codec(cl->rtp[dir], *codec_if_known);</span><br><span> if (remote_addr_if_known && osmo_sockaddr_str_is_set(remote_addr_if_known))</span><br><span>diff --git a/src/libmsc/msc_a.c b/src/libmsc/msc_a.c</span><br><span>index 5137e20..7a54375 100644</span><br><span>--- a/src/libmsc/msc_a.c</span><br><span>+++ b/src/libmsc/msc_a.c</span><br><span>@@ -509,6 +509,8 @@</span><br><span> .assignment_command = {</span><br><span> .cn_rtp = &msc_a->cc.call_leg->rtp[RTP_TO_RAN]->local,</span><br><span> .channel_type = &channel_type,</span><br><span style="color: hsl(120, 100%, 40%);">+ .osmux_present = msc_a->cc.call_leg->rtp[RTP_TO_RAN]->use_osmux,</span><br><span style="color: hsl(120, 100%, 40%);">+ .osmux_cid = msc_a->cc.call_leg->rtp[RTP_TO_RAN]->local_osmux_cid,</span><br><span> },</span><br><span> };</span><br><span> if (msc_a_ran_down(msc_a, MSC_ROLE_I, &msg)) {</span><br><span>@@ -602,8 +604,9 @@</span><br><span> return;</span><br><span> }</span><br><span> LOG_MSC_A(msc_a, LOGL_DEBUG,</span><br><span style="color: hsl(0, 100%, 40%);">- "MGW endpoint's RTP address available for the CI %s: " OSMO_SOCKADDR_STR_FMT "\n",</span><br><span style="color: hsl(0, 100%, 40%);">- rtp_direction_name(rtps->dir), OSMO_SOCKADDR_STR_FMT_ARGS(&rtps->local));</span><br><span style="color: hsl(120, 100%, 40%);">+ "MGW endpoint's RTP address available for the CI %s: " OSMO_SOCKADDR_STR_FMT " (osmux=%s:%d)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ rtp_direction_name(rtps->dir), OSMO_SOCKADDR_STR_FMT_ARGS(&rtps->local),</span><br><span style="color: hsl(120, 100%, 40%);">+ rtps->use_osmux ? "yes" : "no", rtps->local_osmux_cid);</span><br><span> switch (rtps->dir) {</span><br><span> case RTP_TO_RAN:</span><br><span> msc_a_call_leg_ran_local_addr_available(msc_a);</span><br><span>@@ -1239,9 +1242,20 @@</span><br><span> return;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (rtps_to_ran->use_osmux != ac->assignment_complete.osmux_present) {</span><br><span style="color: hsl(120, 100%, 40%);">+ LOG_MSC_A_CAT(msc_a, DCC, LOGL_ERROR, "Osmux usage ass request and complete don't match: %d vs %d",</span><br><span style="color: hsl(120, 100%, 40%);">+ rtps_to_ran->use_osmux, ac->assignment_complete.osmux_present);</span><br><span style="color: hsl(120, 100%, 40%);">+ call_leg_release(msc_a->cc.call_leg);</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Update RAN-side endpoint CI: */</span><br><span> rtp_stream_set_codec(rtps_to_ran, ac->assignment_complete.codec);</span><br><span> rtp_stream_set_remote_addr(rtps_to_ran, &ac->assignment_complete.remote_rtp);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rtps_to_ran->use_osmux)</span><br><span style="color: hsl(120, 100%, 40%);">+ rtp_stream_set_remote_osmux_cid(rtps_to_ran,</span><br><span style="color: hsl(120, 100%, 40%);">+ ac->assignment_complete.osmux_cid);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> rtp_stream_commit(rtps_to_ran);</span><br><span> </span><br><span> /* Setup CN side endpoint CI:</span><br><span>@@ -1574,6 +1588,8 @@</span><br><span> static int msc_a_start_assignment(struct msc_a *msc_a, struct gsm_trans *cc_trans)</span><br><span> {</span><br><span> struct call_leg *cl = msc_a->cc.call_leg;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct msc_i *msc_i = msc_a_msc_i(msc_a);</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_network *net = msc_a_net(msc_a);</span><br><span> </span><br><span> OSMO_ASSERT(!msc_a->cc.active_trans);</span><br><span> msc_a->cc.active_trans = cc_trans;</span><br><span>@@ -1594,6 +1610,16 @@</span><br><span> cl->crcx_conn_mode[RTP_TO_RAN] = MGCP_CONN_LOOPBACK;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (net->use_osmux != OSMUX_USAGE_OFF) {</span><br><span style="color: hsl(120, 100%, 40%);">+ msc_i = msc_a_msc_i(msc_a);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (msc_i->c.remote_to) {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* TODO: investigate what to do in this case */</span><br><span style="color: hsl(120, 100%, 40%);">+ LOG_MSC_A(msc_a, LOGL_ERROR, "Osmux not yet supported for inter-MSC");</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ cl->ran_peer_supports_osmux = msc_i->ran_conn->ran_peer->remote_supports_osmux;</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> /* This will lead to either MSC_EV_CALL_LEG_LOCAL_ADDR_AVAILABLE or MSC_EV_CALL_LEG_TERM.</span><br><span> * If the local address is already known, then immediately trigger. */</span><br><span> if (call_leg_local_ip(cl, RTP_TO_RAN))</span><br><span>diff --git a/src/libmsc/ran_msg_a.c b/src/libmsc/ran_msg_a.c</span><br><span>index 43923df..5194ee8 100644</span><br><span>--- a/src/libmsc/ran_msg_a.c</span><br><span>+++ b/src/libmsc/ran_msg_a.c</span><br><span>@@ -269,6 +269,7 @@</span><br><span> {</span><br><span> struct tlv_p_entry *ie_aoip_transp_addr = TLVP_GET(tp, GSM0808_IE_AOIP_TRASP_ADDR);</span><br><span> struct tlv_p_entry *ie_speech_codec = TLVP_GET(tp, GSM0808_IE_SPEECH_CODEC);</span><br><span style="color: hsl(120, 100%, 40%);">+ struct tlv_p_entry *ie_osmux_cid = TLVP_GET(tp, GSM0808_IE_OSMO_OSMUX_CID);</span><br><span> struct sockaddr_storage rtp_addr;</span><br><span> struct sockaddr_in *rtp_addr_in;</span><br><span> struct gsm0808_speech_codec sc;</span><br><span>@@ -286,6 +287,9 @@</span><br><span> return -EINVAL;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ rc = gsm0808_dec_osmux_cid(&ran_dec_msg.assignment_complete.osmux_cid, ie_osmux_cid->val, ie_osmux_cid->len);</span><br><span style="color: hsl(120, 100%, 40%);">+ ran_dec_msg.assignment_complete.osmux_present = rc < 0 ? false : true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> rtp_addr_in = (struct sockaddr_in*)&rtp_addr;</span><br><span> </span><br><span> if (rtp_addr.ss_family != AF_INET) {</span><br><span>@@ -909,6 +913,13 @@</span><br><span> return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void _gsm0808_assignment_extend_osmux(struct msgb *msg, uint8_t cid)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(msg->l3h[1] == msgb_l3len(msg) - 2); /*TL not in len */</span><br><span style="color: hsl(120, 100%, 40%);">+ msgb_tv_put(msg, GSM0808_IE_OSMO_OSMUX_CID, cid);</span><br><span style="color: hsl(120, 100%, 40%);">+ msg->l3h[1] = msgb_l3len(msg) - 2;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Compose a BSSAP Assignment Command.</span><br><span> * Passing an RTP address is optional.</span><br><span> * The msub is passed merely for error logging. */</span><br><span>@@ -919,6 +930,7 @@</span><br><span> struct gsm0808_speech_codec_list *use_scl = NULL;</span><br><span> struct sockaddr_storage rtp_addr;</span><br><span> struct sockaddr_storage *use_rtp_addr = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct msgb *msg;</span><br><span> int rc;</span><br><span> </span><br><span> if (!ac->channel_type) {</span><br><span>@@ -959,7 +971,10 @@</span><br><span> }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- return gsm0808_create_ass(ac->channel_type, NULL, use_rtp_addr, use_scl, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+ msg = gsm0808_create_ass(ac->channel_type, NULL, use_rtp_addr, use_scl, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ac->osmux_present)</span><br><span style="color: hsl(120, 100%, 40%);">+ _gsm0808_assignment_extend_osmux(msg, ac->osmux_cid);</span><br><span style="color: hsl(120, 100%, 40%);">+ return msg;</span><br><span> }</span><br><span> </span><br><span> /* For an A5/N number a5_n set dst to the matching GSM0808_ALG_ID_A5_<n>. */</span><br><span>diff --git a/src/libmsc/rtp_stream.c b/src/libmsc/rtp_stream.c</span><br><span>index 6163a98..5c71ffb 100644</span><br><span>--- a/src/libmsc/rtp_stream.c</span><br><span>+++ b/src/libmsc/rtp_stream.c</span><br><span>@@ -82,11 +82,19 @@</span><br><span> OSMO_STRBUF_PRINTF(sb, ":no-codec");</span><br><span> else if (!rtps->codec_sent_to_mgw)</span><br><span> OSMO_STRBUF_PRINTF(sb, ":codec-not-sent");</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rtps->use_osmux) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rtps->remote_osmux_cid < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_STRBUF_PRINTF(sb, ":no-remote-osmux-cid");</span><br><span style="color: hsl(120, 100%, 40%);">+ else if (!rtps->remote_osmux_cid_sent_to_mgw)</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_STRBUF_PRINTF(sb, ":remote-osmux-cid-not-sent");</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span> }</span><br><span> if (osmo_sockaddr_str_is_set(&rtps->local))</span><br><span> OSMO_STRBUF_PRINTF(sb, ":local-%s-%u", rtps->local.ip, rtps->local.port);</span><br><span> if (osmo_sockaddr_str_is_set(&rtps->remote))</span><br><span> OSMO_STRBUF_PRINTF(sb, ":remote-%s-%u", rtps->remote.ip, rtps->remote.port);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rtps->use_osmux)</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_STRBUF_PRINTF(sb, ":osmux-%d-%d", rtps->local_osmux_cid, rtps->remote_osmux_cid);</span><br><span> </span><br><span> /* Replace any dots in the IP address, dots not allowed as FSM instance name */</span><br><span> for (p = buf; *p; p++)</span><br><span>@@ -117,6 +125,8 @@</span><br><span> .call_id = call_id,</span><br><span> .for_trans = for_trans,</span><br><span> .dir = dir,</span><br><span style="color: hsl(120, 100%, 40%);">+ .local_osmux_cid = -2,</span><br><span style="color: hsl(120, 100%, 40%);">+ .remote_osmux_cid = -2,</span><br><span> };</span><br><span> </span><br><span> rtp_stream_update_id(rtps);</span><br><span>@@ -130,6 +140,7 @@</span><br><span> && osmo_sockaddr_str_is_set(&rtps->local)</span><br><span> && osmo_sockaddr_str_is_set(&rtps->remote)</span><br><span> && rtps->remote_sent_to_mgw</span><br><span style="color: hsl(120, 100%, 40%);">+ && (!rtps->use_osmux || rtps->remote_osmux_cid_sent_to_mgw)</span><br><span> && rtps->codec_known)</span><br><span> rtp_stream_state_chg(rtps, RTP_STREAM_ST_ESTABLISHED);</span><br><span> }</span><br><span>@@ -142,17 +153,27 @@</span><br><span> case RTP_STREAM_EV_CRCX_OK:</span><br><span> crcx_info = osmo_mgcpc_ep_ci_get_rtp_info(rtps->ci);</span><br><span> osmo_sockaddr_str_from_str(&rtps->local, crcx_info->addr, crcx_info->port);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rtps->use_osmux != crcx_info->x_osmo_osmux_use) {</span><br><span style="color: hsl(120, 100%, 40%);">+ LOG_RTPS(rtps, LOGL_ERROR, "Osmux usage request and response don't match: %d vs %d",</span><br><span style="color: hsl(120, 100%, 40%);">+ rtps->use_osmux, crcx_info->x_osmo_osmux_use);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* TODO: proper failure path */</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_ASSERT(rtps->use_osmux != crcx_info->x_osmo_osmux_use);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ if (crcx_info->x_osmo_osmux_use)</span><br><span style="color: hsl(120, 100%, 40%);">+ rtps->local_osmux_cid = crcx_info->x_osmo_osmux_cid;</span><br><span> rtp_stream_update_id(rtps);</span><br><span> osmo_fsm_inst_dispatch(fi->proc.parent, CALL_LEG_EV_RTP_STREAM_ADDR_AVAILABLE, rtps);</span><br><span> check_established(rtps);</span><br><span> </span><br><span> if ((!rtps->remote_sent_to_mgw || !rtps->codec_sent_to_mgw)</span><br><span> && osmo_sockaddr_str_is_set(&rtps->remote)</span><br><span style="color: hsl(120, 100%, 40%);">+ && (!rtps->use_osmux || rtps->remote_osmux_cid_sent_to_mgw)</span><br><span> && rtps->codec_known) {</span><br><span> LOG_RTPS(rtps, LOGL_DEBUG,</span><br><span style="color: hsl(0, 100%, 40%);">- "local ip:port set;%s%s triggering MDCX to send the new settings\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ "local ip:port set;%s%s%s triggering MDCX to send the new settings\n",</span><br><span> (!rtps->remote_sent_to_mgw)? " remote ip:port not yet sent," : "",</span><br><span style="color: hsl(0, 100%, 40%);">- (!rtps->codec_sent_to_mgw)? " codec not yet sent," : "");</span><br><span style="color: hsl(120, 100%, 40%);">+ (!rtps->codec_sent_to_mgw)? " codec not yet sent," : "",</span><br><span style="color: hsl(120, 100%, 40%);">+ (rtps->use_osmux && !rtps->remote_osmux_cid_sent_to_mgw) ? "Osmux CID not yet sent,": "");</span><br><span> rtp_stream_do_mdcx(rtps);</span><br><span> }</span><br><span> return;</span><br><span>@@ -166,6 +187,7 @@</span><br><span> case RTP_STREAM_EV_MDCX_FAIL:</span><br><span> rtps->remote_sent_to_mgw = false;</span><br><span> rtps->codec_sent_to_mgw = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ rtps->remote_osmux_cid_sent_to_mgw = false;</span><br><span> rtp_stream_update_id(rtps);</span><br><span> rtp_stream_state_chg(rtps, RTP_STREAM_ST_DISCARDING);</span><br><span> return;</span><br><span>@@ -274,6 +296,8 @@</span><br><span> verb_info = (struct mgcp_conn_peer){</span><br><span> .call_id = rtps->call_id,</span><br><span> .ptime = 20,</span><br><span style="color: hsl(120, 100%, 40%);">+ .x_osmo_osmux_use = rtps->use_osmux,</span><br><span style="color: hsl(120, 100%, 40%);">+ .x_osmo_osmux_cid = rtps->remote_osmux_cid,</span><br><span> };</span><br><span> </span><br><span> if (verb == MGCP_VERB_CRCX)</span><br><span>@@ -347,9 +371,10 @@</span><br><span> return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- LOG_RTPS(rtps, LOGL_DEBUG, "Committing: Tx MDCX to update the MGW: updating%s%s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ LOG_RTPS(rtps, LOGL_DEBUG, "Committing: Tx MDCX to update the MGW: updating%s%s%s\n",</span><br><span> rtps->remote_sent_to_mgw ? "" : " remote-RTP-IP-port",</span><br><span style="color: hsl(0, 100%, 40%);">- rtps->codec_sent_to_mgw ? "" : " codec");</span><br><span style="color: hsl(120, 100%, 40%);">+ rtps->codec_sent_to_mgw ? "" : " codec",</span><br><span style="color: hsl(120, 100%, 40%);">+ (!rtps->use_osmux || rtps->remote_osmux_cid_sent_to_mgw) ? "" : " remote-Osmux-CID");</span><br><span> return rtp_stream_do_mdcx(rtps);</span><br><span> }</span><br><span> </span><br><span>@@ -374,6 +399,16 @@</span><br><span> rtp_stream_update_id(rtps);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+void rtp_stream_set_remote_osmux_cid(struct rtp_stream *rtps, uint8_t osmux_cid)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rtps->fi->state == RTP_STREAM_ST_ESTABLISHED)</span><br><span style="color: hsl(120, 100%, 40%);">+ rtp_stream_state_chg(rtps, RTP_STREAM_ST_ESTABLISHING);</span><br><span style="color: hsl(120, 100%, 40%);">+ LOG_RTPS(rtps, LOGL_DEBUG, "setting remote Osmux CID to %u\n", osmux_cid);</span><br><span style="color: hsl(120, 100%, 40%);">+ rtps->remote_osmux_cid = osmux_cid;</span><br><span style="color: hsl(120, 100%, 40%);">+ rtps->remote_osmux_cid_sent_to_mgw = false;</span><br><span style="color: hsl(120, 100%, 40%);">+ rtp_stream_update_id(rtps);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> bool rtp_stream_is_established(struct rtp_stream *rtps)</span><br><span> {</span><br><span> if (!rtps)</span><br><span>@@ -383,7 +418,8 @@</span><br><span> if (rtps->fi->state != RTP_STREAM_ST_ESTABLISHED)</span><br><span> return false;</span><br><span> if (!rtps->remote_sent_to_mgw</span><br><span style="color: hsl(0, 100%, 40%);">- || !rtps->codec_sent_to_mgw)</span><br><span style="color: hsl(120, 100%, 40%);">+ || !rtps->codec_sent_to_mgw</span><br><span style="color: hsl(120, 100%, 40%);">+ || (rtps->use_osmux && !rtps->remote_osmux_cid_sent_to_mgw))</span><br><span> return false;</span><br><span> return true;</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/14041">change 14041</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/14041"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-msc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I5b14e34481e890669c9ee02dba81eba84293cebb </div>
<div style="display:none"> Gerrit-Change-Number: 14041 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>