diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-08-05 03:08:35 +0800 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-08-05 06:10:57 +0800 |
commit | 58ff219c856a4ad4648e4de06f90907d6964a251 (patch) | |
tree | 5914d714e5769268d4fc4087d5b158a1c39786f7 /openbsc/src/mgcp | |
parent | a17d701a708c157f26b91c6ab8960fa7db33e7cd (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.c | 15 | ||||
-rw-r--r-- | openbsc/src/mgcp/mgcp_protocol.c | 20 |
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; |