[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.
This commit is contained in:
Holger Hans Peter Freyther
2010-01-13 16:37:32 +01:00
parent 3d947e6d67
commit d4c29c1574

View File

@@ -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),