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