pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-mgw/+/35205?usp=email )
Change subject: IuUP: allow Initialization from any address if not yet set ......................................................................
IuUP: allow Initialization from any address if not yet set
Do not refuse IuUP Initialization messages coming in on an RTP port if the remote IP address is not yet known. If an IUFP conn is not yet configured (pre-Initialization), allow rx from any remote address if the remote IP address is not yet known.
If we refuse the IuUP Initialization, a 3G RNC may fail to set up a RAB. We will know the remote address only *after* assigning a RAB succeeded. So the IuUP Initialization must be allowed before knowing all addresses.
At the time of writing, CRCX for IUFP are sent to osmo-mgw in either LOOPBACK or in RECVONLY mode: - current osmo-msc: recvonly - osmo-msc <= v1.10.0: loopback - osmo-hnbgw: loopback IuUP Initialization should work regardless of that. See also next patch I158dd046fdfcb10392cde3de8cc88dd095a05b40
IuUP is one layer below the loopback/send/recv decision for RTP; IuUP is always terminated at the MGW, while the AMR payload carries through.
Related: alternative patch Idd833997abce46886e9664505b2776fa5dadc8db Related: SYS#6657 Change-Id: I6c365559a7bd197349f0ea99f7a13b56a4bb580b --- M src/libosmo-mgcp/mgcp_network.c 1 file changed, 43 insertions(+), 0 deletions(-)
Approvals: neels: Looks good to me, but someone else must approve Jenkins Builder: Verified osmith: Looks good to me, but someone else must approve pespin: Looks good to me, approved
diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c index b1bce97..6a726d4 100644 --- a/src/libosmo-mgcp/mgcp_network.c +++ b/src/libosmo-mgcp/mgcp_network.c @@ -835,6 +835,18 @@ char ipbuf[INET6_ADDRSTRLEN];
if (osmo_sockaddr_is_any(&conn->end.addr) != 0) { + if (mgcp_conn_rtp_is_iuup(conn) && !conn->iuup.configured) { + /* Allow IuUP Initialization to get through even if we don't have a remote address set yet. + * This is needed because hNodeB doesn't announce its IuUP remote IP addr to the MGCP client + * (RAB Assignment Response at HNBGW) until it has gone through IuUP Initialization against + * this MGW here. Hence the MGW may not yet know the remote IuUP address and port at the time + * of receiving IuUP Initialization from the hNodeB. + */ + LOGPCONN(conn->conn, DRTP, LOGL_INFO, + "Rx RTP from %s: allowing unknown src for IuUP Initialization\n", + osmo_sockaddr_to_str(addr)); + return 0; + } switch (conn->conn->mode) { case MGCP_CONN_LOOPBACK: /* HACK: for IuUP, we want to reply with an IuUP Initialization ACK upon the first RTP