aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/mgcp
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2010-08-05 03:08:35 +0800
committerHolger Hans Peter Freyther <zecke@selfish.org>2010-08-05 06:10:57 +0800
commit58ff219c856a4ad4648e4de06f90907d6964a251 (patch)
tree5914d714e5769268d4fc4087d5b158a1c39786f7 /openbsc/src/mgcp
parenta17d701a708c157f26b91c6ab8960fa7db33e7cd (diff)
mgcp: Attempt to separate the RTP/RTCP port for the Network and for the BTS
We plan to have two different ports for the network and for the BTS to avoid detecting the BTS and to dynamically allocate the port to have old data not go to a new socket.
Diffstat (limited to 'openbsc/src/mgcp')
-rw-r--r--openbsc/src/mgcp/mgcp_network.c15
-rw-r--r--openbsc/src/mgcp/mgcp_protocol.c20
2 files changed, 19 insertions, 16 deletions
diff --git a/openbsc/src/mgcp/mgcp_network.c b/openbsc/src/mgcp/mgcp_network.c
index 8ffc2660e..88a331c5b 100644
--- a/openbsc/src/mgcp/mgcp_network.c
+++ b/openbsc/src/mgcp/mgcp_network.c
@@ -290,15 +290,15 @@ static int bind_rtp(struct mgcp_endpoint *endp)
{
struct mgcp_config *cfg = endp->cfg;
- if (create_bind(cfg->source_addr, &endp->local_rtp, endp->rtp_port) != 0) {
+ if (create_bind(cfg->source_addr, &endp->local_rtp, endp->bts_end.local_port) != 0) {
LOGP(DMGCP, LOGL_ERROR, "Failed to create RTP port: %s:%d on 0x%x\n",
- cfg->source_addr, endp->rtp_port, ENDPOINT_NUMBER(endp));
+ cfg->source_addr, endp->bts_end.local_port, ENDPOINT_NUMBER(endp));
goto cleanup0;
}
- if (create_bind(cfg->source_addr, &endp->local_rtcp, endp->rtp_port + 1) != 0) {
+ if (create_bind(cfg->source_addr, &endp->local_rtcp, endp->bts_end.local_port + 1) != 0) {
LOGP(DMGCP, LOGL_ERROR, "Failed to create RTCP port: %s:%d on 0x%x\n",
- cfg->source_addr, endp->rtp_port + 1, ENDPOINT_NUMBER(endp));
+ cfg->source_addr, endp->bts_end.local_port + 1, ENDPOINT_NUMBER(endp));
goto cleanup1;
}
@@ -310,7 +310,7 @@ static int bind_rtp(struct mgcp_endpoint *endp)
endp->local_rtp.when = BSC_FD_READ;
if (bsc_register_fd(&endp->local_rtp) != 0) {
LOGP(DMGCP, LOGL_ERROR, "Failed to register RTP port %d on 0x%x\n",
- endp->rtp_port, ENDPOINT_NUMBER(endp));
+ endp->bts_end.local_port, ENDPOINT_NUMBER(endp));
goto cleanup2;
}
@@ -319,7 +319,7 @@ static int bind_rtp(struct mgcp_endpoint *endp)
endp->local_rtcp.when = BSC_FD_READ;
if (bsc_register_fd(&endp->local_rtcp) != 0) {
LOGP(DMGCP, LOGL_ERROR, "Failed to register RTCP port %d on 0x%x\n",
- endp->rtp_port + 1, ENDPOINT_NUMBER(endp));
+ endp->bts_end.local_port + 1, ENDPOINT_NUMBER(endp));
goto cleanup3;
}
@@ -339,6 +339,7 @@ cleanup0:
int mgcp_bind_rtp_port(struct mgcp_endpoint *endp, int rtp_port)
{
- endp->rtp_port = rtp_port;
+ endp->bts_end.local_port = rtp_port;
+ endp->net_end.local_port = rtp_port;
return bind_rtp(endp);
}
diff --git a/openbsc/src/mgcp/mgcp_protocol.c b/openbsc/src/mgcp/mgcp_protocol.c
index 5ef57ccd8..9bb315a49 100644
--- a/openbsc/src/mgcp/mgcp_protocol.c
+++ b/openbsc/src/mgcp/mgcp_protocol.c
@@ -174,7 +174,7 @@ static struct msgb *create_response_with_sdp(struct mgcp_endpoint *endp,
"c=IN IP4 %s\r\n"
"m=audio %d RTP/AVP %d\r\n"
"a=rtpmap:%d %s\r\n",
- endp->ci, addr, endp->rtp_port,
+ endp->ci, addr, endp->net_end.local_port,
endp->bts_end.payload_type, endp->bts_end.payload_type,
endp->cfg->audio_name);
return mgcp_create_response_with_data(200, msg, trans_id, sdp_record);
@@ -428,9 +428,10 @@ static struct msgb *handle_create_con(struct mgcp_config *cfg, struct msgb *msg)
/* bind to the port now */
port = rtp_calculate_port(ENDPOINT_NUMBER(endp), cfg->rtp_base_port);
- if (cfg->early_bind)
- endp->rtp_port = port;
- else if (mgcp_bind_rtp_port(endp, port) != 0)
+ if (cfg->early_bind) {
+ endp->bts_end.local_port = port;
+ endp->net_end.local_port = port;
+ } else if (mgcp_bind_rtp_port(endp, port) != 0)
goto error2;
/* assign a local call identifier or fail */
@@ -459,10 +460,11 @@ static struct msgb *handle_create_con(struct mgcp_config *cfg, struct msgb *msg)
}
}
- LOGP(DMGCP, LOGL_NOTICE, "Creating endpoint on: 0x%x CI: %u port: %u\n",
- ENDPOINT_NUMBER(endp), endp->ci, endp->rtp_port);
+ LOGP(DMGCP, LOGL_NOTICE, "Creating endpoint on: 0x%x CI: %u port: %u/%u\n",
+ ENDPOINT_NUMBER(endp), endp->ci,
+ endp->net_end.local_port, endp->bts_end.local_port);
if (cfg->change_cb)
- cfg->change_cb(cfg, ENDPOINT_NUMBER(endp), MGCP_ENDP_CRCX, endp->rtp_port);
+ cfg->change_cb(cfg, ENDPOINT_NUMBER(endp), MGCP_ENDP_CRCX);
return create_response_with_sdp(endp, "CRCX", trans_id);
error:
@@ -583,7 +585,7 @@ static struct msgb *handle_modify_con(struct mgcp_config *cfg, struct msgb *msg)
LOGP(DMGCP, LOGL_NOTICE, "Modified endpoint on: 0x%x Server: %s:%u\n",
ENDPOINT_NUMBER(endp), inet_ntoa(endp->net_end.addr), ntohs(endp->net_end.rtp_port));
if (cfg->change_cb)
- cfg->change_cb(cfg, ENDPOINT_NUMBER(endp), MGCP_ENDP_MDCX, endp->rtp_port);
+ cfg->change_cb(cfg, ENDPOINT_NUMBER(endp), MGCP_ENDP_MDCX);
if (silent)
goto out_silent;
@@ -669,7 +671,7 @@ static struct msgb *handle_delete_con(struct mgcp_config *cfg, struct msgb *msg)
ENDPOINT_NUMBER(endp), inet_ntoa(endp->net_end.addr), ntohs(endp->net_end.rtp_port));
mgcp_free_endp(endp);
if (cfg->change_cb)
- cfg->change_cb(cfg, ENDPOINT_NUMBER(endp), MGCP_ENDP_DLCX, endp->rtp_port);
+ cfg->change_cb(cfg, ENDPOINT_NUMBER(endp), MGCP_ENDP_DLCX);
if (silent)
goto out_silent;