mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
synced 2025-11-02 13:03:33 +00:00
IuUP: always allow Initialization
Do not refuse IuUP Initialization messages coming in on an RTP port. If an IUFP conn is not yet configured (pre-Initialization), allow rx from any remote address. 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. Decided for now that it's not worth the extra effort to make this more restrictive; ideas would be: - actually verify the incoming packet to have a valid IuUP Init header before permitting it to be received. - as soon as the remote address is known, also validate the src for IuUP Initialization messages. This patch is nice and simple and does the job. Related: alternative patch Idd833997abce46886e9664505b2776fa5dadc8db Related: SYS#6657 Change-Id: I6c365559a7bd197349f0ea99f7a13b56a4bb580b
This commit is contained in:
@@ -834,6 +834,15 @@ static int check_rtp_origin(struct mgcp_conn_rtp *conn, struct osmo_sockaddr *ad
|
||||
{
|
||||
char ipbuf[INET6_ADDRSTRLEN];
|
||||
|
||||
/* Allow IuUP Initialization to get through even if we don't have a remote address set yet. */
|
||||
if (mgcp_conn_rtp_is_iuup(conn) && !conn->iuup.configured) {
|
||||
/* maybe todo: also verify that it is actually a valid IuUP Initialization header in the incoming msgb?
|
||||
* (though, why do we even care where the RTP is coming from) */
|
||||
LOGPCONN(conn->conn, DRTP, LOGL_INFO, "Rx RTP from %s: allowing unknown src for IuUP Initialization\n",
|
||||
osmo_sockaddr_to_str(addr));
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (osmo_sockaddr_is_any(&conn->end.addr) != 0) {
|
||||
switch (conn->conn->mode) {
|
||||
case MGCP_CONN_LOOPBACK:
|
||||
|
||||
Reference in New Issue
Block a user