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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gscon: pick suitable payload type / encoding name for MGCP<br><br>The GSCON FSM does not care about the codec information when performing<br>interactions with the MGW. Before upgrading the client the codec<br>information was hardcoded to AMR inside the client. Now the client<br>offers APIs to set the codec information. Since this feature is new,<br>osmo-bsc does not set any codec information yet, which causes many of<br>the TTCN3 tests to fail. So lets add some logic to pick suitable codec<br>info.<br><br>- Hardcode ptime to 20 (is the same for all possible codecs)<br>- Select a codec according to the flags in userplane<br><br>Change-Id: Ibddc3492572b39f166e3a1b8b8120813ce2dadc2<br>Related: OS#2728<br>---<br>M src/osmo-bsc/bsc_subscr_conn_fsm.c<br>1 file changed, 34 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo-bsc/bsc_subscr_conn_fsm.c b/src/osmo-bsc/bsc_subscr_conn_fsm.c</span><br><span>index 4f09ae6..0f3d9d2 100644</span><br><span>--- a/src/osmo-bsc/bsc_subscr_conn_fsm.c</span><br><span>+++ b/src/osmo-bsc/bsc_subscr_conn_fsm.c</span><br><span>@@ -120,6 +120,32 @@</span><br><span>    {0, NULL}</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Depending on the channel mode and rate, set the codec type that is signalled</span><br><span style="color: hsl(120, 100%, 40%);">+ * towards the MGW. */</span><br><span style="color: hsl(120, 100%, 40%);">+static void mgcp_pick_codec(struct gsm_subscriber_connection *conn,</span><br><span style="color: hsl(120, 100%, 40%);">+                         struct mgcp_conn_peer *conn_peer)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      switch (conn->user_plane.chan_mode) {</span><br><span style="color: hsl(120, 100%, 40%);">+      case GSM48_CMODE_SPEECH_V1:</span><br><span style="color: hsl(120, 100%, 40%);">+           if (conn->user_plane.full_rate)</span><br><span style="color: hsl(120, 100%, 40%);">+                    conn_peer->codecs[0] = CODEC_GSM_8000_1;</span><br><span style="color: hsl(120, 100%, 40%);">+           else</span><br><span style="color: hsl(120, 100%, 40%);">+                  conn_peer->codecs[0] = CODEC_GSMHR_8000_1;</span><br><span style="color: hsl(120, 100%, 40%);">+         conn_peer->codecs_len = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case GSM48_CMODE_SPEECH_EFR:</span><br><span style="color: hsl(120, 100%, 40%);">+          conn_peer->codecs[0] = CODEC_GSMEFR_8000_1;</span><br><span style="color: hsl(120, 100%, 40%);">+                conn_peer->codecs_len = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case GSM48_CMODE_SPEECH_AMR:</span><br><span style="color: hsl(120, 100%, 40%);">+          conn_peer->codecs[0] = CODEC_AMR_8000_1;</span><br><span style="color: hsl(120, 100%, 40%);">+           conn_peer->codecs_len = 1;</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%);">+              conn_peer->codecs_len = 0;</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> /* Send data SCCP message through SCCP connection. All sigtran messages</span><br><span>  * that are send from this FSM must use this function. Never use</span><br><span>  * osmo_bsc_sigtran_send() directly since this would defeat the checks</span><br><span>@@ -414,7 +440,9 @@</span><br><span>                        /* A voice channel is requested, so we run down the</span><br><span>                   * mgcp-ass-mgcp state-chain (see FIXME above) */</span><br><span>                    memset(&conn_peer, 0, sizeof(conn_peer));</span><br><span style="color: hsl(120, 100%, 40%);">+                 mgcp_pick_codec(conn, &conn_peer);</span><br><span>                       conn_peer.call_id = conn->sccp.conn_id;</span><br><span style="color: hsl(120, 100%, 40%);">+                    conn_peer.ptime = 20;</span><br><span>                        osmo_strlcpy(conn_peer.endpoint, get_mgw_ep_name(conn), sizeof(conn_peer.endpoint));</span><br><span> </span><br><span>                     /* (Pre)Change state and create the connection */</span><br><span>@@ -572,9 +600,11 @@</span><br><span> </span><br><span>                         /* Prepare parameters with the information we got during the assignment */</span><br><span>                   memset(&conn_peer, 0, sizeof(conn_peer));</span><br><span style="color: hsl(120, 100%, 40%);">+                 mgcp_pick_codec(conn, &conn_peer);</span><br><span>                       addr.s_addr = osmo_ntohl(lchan->abis_ip.bound_ip);</span><br><span>                        osmo_strlcpy(conn_peer.addr, inet_ntoa(addr), sizeof(conn_peer.addr));</span><br><span>                       conn_peer.port = lchan->abis_ip.bound_port;</span><br><span style="color: hsl(120, 100%, 40%);">+                        conn_peer.ptime = 20;</span><br><span> </span><br><span>                    /* (Pre)Change state and modify the connection */</span><br><span>                    osmo_fsm_inst_state_chg(fi, ST_WAIT_MDCX_BTS, MGCP_MGW_TIMEOUT, MGCP_MGW_TIMEOUT_TIMER_NR);</span><br><span>@@ -637,10 +667,12 @@</span><br><span>          /* Prepare parameters with the connection information we got</span><br><span>                  * with the assignment command */</span><br><span>            memset(&conn_peer, 0, sizeof(conn_peer));</span><br><span style="color: hsl(120, 100%, 40%);">+         mgcp_pick_codec(conn, &conn_peer);</span><br><span>               conn_peer.call_id = conn->sccp.conn_id;</span><br><span>           sin = (struct sockaddr_in *)&conn->user_plane.aoip_rtp_addr_remote;</span><br><span>           conn_peer.port = osmo_ntohs(sin->sin_port);</span><br><span>               osmo_strlcpy(conn_peer.addr, inet_ntoa(sin->sin_addr), sizeof(conn_peer.addr));</span><br><span style="color: hsl(120, 100%, 40%);">+            conn_peer.ptime = 20;</span><br><span> </span><br><span>            /* Make sure we use the same endpoint where we created the</span><br><span>            * BTS connection. */</span><br><span>@@ -760,9 +792,11 @@</span><br><span>                 /* Prepare parameters with the information we got during the</span><br><span>                  * handover procedure (via IPACC) */</span><br><span>                 memset(&conn_peer, 0, sizeof(conn_peer));</span><br><span style="color: hsl(120, 100%, 40%);">+         mgcp_pick_codec(conn, &conn_peer);</span><br><span>               addr.s_addr = osmo_ntohl(lchan->abis_ip.bound_ip);</span><br><span>                osmo_strlcpy(conn_peer.addr, inet_ntoa(addr), sizeof(conn_peer.addr));</span><br><span>               conn_peer.port = lchan->abis_ip.bound_port;</span><br><span style="color: hsl(120, 100%, 40%);">+                conn_peer.ptime = 20;</span><br><span> </span><br><span>            /* (Pre)Change state and modify the connection */</span><br><span>            osmo_fsm_inst_state_chg(fi, ST_WAIT_MDCX_BTS_HO, MGCP_MGW_TIMEOUT, MGCP_MGW_HO_TIMEOUT_TIMER_NR);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9738">change 9738</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/9738"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Ibddc3492572b39f166e3a1b8b8120813ce2dadc2 </div>
<div style="display:none"> Gerrit-Change-Number: 9738 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>