From ea97fbf1a197b5ba8c37bca2add2d77dab1ae78f Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Thu, 5 Aug 2010 10:53:26 +0000 Subject: mgcp: Be more strict on the source addr/source port of the bts Once we have discovered the bts we will not accept data from anything else. The call will drop if the BTS is changing the ip address of the nat anyway. --- openbsc/src/mgcp/mgcp_network.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'openbsc') diff --git a/openbsc/src/mgcp/mgcp_network.c b/openbsc/src/mgcp/mgcp_network.c index f298ebbfc..a52e13573 100644 --- a/openbsc/src/mgcp/mgcp_network.c +++ b/openbsc/src/mgcp/mgcp_network.c @@ -285,6 +285,21 @@ static int rtp_data_bts(struct bsc_fd *fd, unsigned int what) inet_ntoa(addr.sin_addr)); } + if (memcmp(&endp->bts_end.addr, &addr.sin_addr, sizeof(addr.sin_addr)) != 0) { + LOGP(DMGCP, LOGL_ERROR, + "Data from wrong bts %s on 0x%x\n", + inet_ntoa(addr.sin_addr), ENDPOINT_NUMBER(endp)); + return -1; + } + + if (endp->bts_end.rtp_port != addr.sin_port && + endp->bts_end.rtcp_port != addr.sin_port) { + LOGP(DMGCP, LOGL_ERROR, + "Data from wrong bts source port %d on 0x%x\n", + ntohs(addr.sin_port), ENDPOINT_NUMBER(endp)); + return -1; + } + /* throw away the dummy message */ if (rc == 1 && buf[0] == DUMMY_LOAD) { LOGP(DMGCP, LOGL_NOTICE, "Filtered dummy from bts on 0x%x\n", -- cgit v1.2.3