<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
Hello!<br>
I can confirm a compatiblity issue with LibORTP >= 0.24.0.<br>
<br>
Here are some of my findings:<br>
<br>
In /osmo-bts/src/common/rsl.c in <i>rsl_rx_ipac_XXcx</i> there is a call to libosmo-abis function:<i> osmo_rtp_socket_bind(lchan->abis_ip.rtp_socket, ipstr, -1).</i> I assume, that last argument "-1" means that the random udp port should be selected for socket.<br>
<br>
in /libosmo-abis/src/trau/osmo-rtp.c in a function <i>int osmo_rtp_socket_bind(struct osmo_rtp_socket *rs, const char *ip, int port)</i> there is a call to LibORTP
<i>rtp_session_set_local_addr(rs->sess, ip, port, port+1)</i>. So as result this function calls rtp_session_set_local_addr with last arguments being equal to "-1" and "0".<br>
<i><br>
</i>The LibORTP function<i> </i><i>int rtp_session_set_local_addr (RtpSession * session, const char * addr, int rtp_port, int rtcp_port)</i> has a folollowing description:<i><br>
/**<br>
 *rtp_session_set_local_addr:<br>
 *@session:        a rtp session freshly created.<br>
 *@addr:        a local IP address in the xxx.xxx.xxx.xxx form.<br>
 *@rtp_port:        a local port or -1 to let oRTP choose the port randomly<br>
 *@rtcp_port:        a local port or -1 to let oRTP choose the port randomly<br>
 *<br>
  ...<br>
**/<br>
<br>
</i>So this results in calling<i> </i><i><i>osmo_rtp_socket_bind</i>(...,-1) </i><i> ->
</i><i><i>rtp_session_set_local_addr(...,-1,0) </i></i>what tries to bind rtp to random udp port and rtcp to 0th udp port, but not to random port.<i><br>
</i>I guess that rtcp socket is never created regardless of LibORTP version. (there are periodic osmo-ortp(): network_error osmo-bts log messages due to ICMP port unreachable messages received, besides those mentioned in
<a class="moz-txt-link-freetext" href="https://osmocom.org/issues/1662">https://osmocom.org/issues/1662</a>). So I suppose the correct code should check port value and either calling
<i>rtp_session_set_local_addr(rs->sess, ip, port, port+1) </i>if port >0 or else<br>
calling <i>rtp_session_set_local_addr(rs->sess, ip, port, port) </i>?<br>
<i><br>
</i>Also, after inspecting  sources of LibORTP it seems that the implementation<i>
</i>of <i>rtp_session_set_local_addr</i> has changed for LibORTP >= 0.24.0<i>.</i> As I understand the functionality of selecting a random UDP port is broken.<br>
What results is one way audio.<br>
<br>
Regards,<br>
Pavel.<br>
</body>
</html>