From d4c29c1574435041f59f9e101f9285b8b335fc11 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Wed, 13 Jan 2010 16:37:32 +0100 Subject: [mgcp] Make it possible to not specify a bts ip This way the mgcp will allow anyone to be the BTS.. in the future we might need to communicate things properly between BSC and MGCP. --- openbsc/src/bsc_mgcp.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/openbsc/src/bsc_mgcp.c b/openbsc/src/bsc_mgcp.c index d5e53c565..760d8c912 100644 --- a/openbsc/src/bsc_mgcp.c +++ b/openbsc/src/bsc_mgcp.c @@ -109,6 +109,7 @@ struct mgcp_endpoint { struct bsc_fd local_rtcp; struct in_addr remote; + struct in_addr bts; /* in network byte order */ int rtp, rtcp; @@ -255,13 +256,14 @@ static int rtp_data_cb(struct bsc_fd *fd, unsigned int what) /* We have no idea who called us, maybe it is the BTS. */ if (dest == DEST_NETWORK && endp->bts_rtp == 0) { /* it was the BTS... */ - if (memcmp(&addr.sin_addr, &bts_in, sizeof(bts_in)) == 0) { + if (!bts_ip || memcmp(&addr.sin_addr, &bts_in, sizeof(bts_in)) == 0) { if (fd == &endp->local_rtp) { endp->bts_rtp = addr.sin_port; } else { endp->bts_rtcp = addr.sin_port; } + endp->bts = addr.sin_addr; DEBUGP(DMGCP, "Found BTS for endpoint: 0x%x on port: %d/%d\n", ENDPOINT_NUMBER(endp), ntohs(endp->bts_rtp), ntohs(endp->bts_rtcp)); } @@ -276,7 +278,7 @@ static int rtp_data_cb(struct bsc_fd *fd, unsigned int what) proto == PROTO_RTP ? endp->rtp : endp->rtcp, buf, rc); } else { - return _send(fd->fd, &bts_in, + return _send(fd->fd, &endp->bts, proto == PROTO_RTP ? endp->bts_rtp : endp->bts_rtcp, buf, rc); } @@ -902,7 +904,8 @@ static int config_write_mgcp(struct vty *vty) vty_out(vty, "mgcp%s", VTY_NEWLINE); if (local_ip) vty_out(vty, " local ip %s%s", local_ip, VTY_NEWLINE); - vty_out(vty, " bts ip %s%s", bts_ip, VTY_NEWLINE); + if (bts_ip) + vty_out(vty, " bts ip %s%s", bts_ip, VTY_NEWLINE); vty_out(vty, " bind ip %s%s", source_addr, VTY_NEWLINE); vty_out(vty, " bind port %u%s", source_port, VTY_NEWLINE); vty_out(vty, " bind early %u%s", !!early_bind, VTY_NEWLINE); @@ -1112,10 +1115,8 @@ int main(int argc, char** argv) } - if (!bts_ip) { - fprintf(stderr, "Need to specify the BTS ip address for RTP handling.\n"); - return -1; - } + if (!bts_ip) + fprintf(stderr, "No BTS ip address specified. This will allow everyone to connect.\n"); endpoints = _talloc_zero_array(tall_bsc_ctx, sizeof(struct mgcp_endpoint), -- cgit v1.2.3