[mgcp] Set the IP_TOS/DSCP on RTP/RTCP IP packets.
This commit is contained in:
parent
a19bdabf22
commit
75492e6e54
|
@ -93,6 +93,7 @@ struct mgcp_config {
|
||||||
int audio_loop;
|
int audio_loop;
|
||||||
int early_bind;
|
int early_bind;
|
||||||
int rtp_base_port;
|
int rtp_base_port;
|
||||||
|
int endp_tos;
|
||||||
|
|
||||||
char *forward_ip;
|
char *forward_ip;
|
||||||
int forward_port;
|
int forward_port;
|
||||||
|
|
|
@ -231,6 +231,14 @@ static int create_bind(const char *source_addr, struct bsc_fd *fd, int port)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int set_ip_tos(int fd, int tos)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
ret = setsockopt(fd, IPPROTO_IP, IP_TOS,
|
||||||
|
&tos, sizeof(tos));
|
||||||
|
return ret != 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int bind_rtp(struct mgcp_endpoint *endp)
|
static int bind_rtp(struct mgcp_endpoint *endp)
|
||||||
{
|
{
|
||||||
struct mgcp_config *cfg = endp->cfg;
|
struct mgcp_config *cfg = endp->cfg;
|
||||||
|
@ -247,6 +255,9 @@ static int bind_rtp(struct mgcp_endpoint *endp)
|
||||||
goto cleanup1;
|
goto cleanup1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_ip_tos(endp->local_rtp.fd, cfg->endp_tos);
|
||||||
|
set_ip_tos(endp->local_rtcp.fd, cfg->endp_tos);
|
||||||
|
|
||||||
endp->local_rtp.cb = rtp_data_cb;
|
endp->local_rtp.cb = rtp_data_cb;
|
||||||
endp->local_rtp.data = endp;
|
endp->local_rtp.data = endp;
|
||||||
endp->local_rtp.when = BSC_FD_READ;
|
endp->local_rtp.when = BSC_FD_READ;
|
||||||
|
|
|
@ -57,6 +57,7 @@ static int config_write_mgcp(struct vty *vty)
|
||||||
vty_out(vty, " bind port %u%s", g_cfg->source_port, VTY_NEWLINE);
|
vty_out(vty, " bind port %u%s", g_cfg->source_port, VTY_NEWLINE);
|
||||||
vty_out(vty, " bind early %u%s", !!g_cfg->early_bind, VTY_NEWLINE);
|
vty_out(vty, " bind early %u%s", !!g_cfg->early_bind, VTY_NEWLINE);
|
||||||
vty_out(vty, " rtp base %u%s", g_cfg->rtp_base_port, VTY_NEWLINE);
|
vty_out(vty, " rtp base %u%s", g_cfg->rtp_base_port, VTY_NEWLINE);
|
||||||
|
vty_out(vty, " rtp ip-tos %d%s", g_cfg->endp_tos, VTY_NEWLINE);
|
||||||
if (g_cfg->audio_payload != -1)
|
if (g_cfg->audio_payload != -1)
|
||||||
vty_out(vty, " sdp audio payload number %d%s", g_cfg->audio_payload, VTY_NEWLINE);
|
vty_out(vty, " sdp audio payload number %d%s", g_cfg->audio_payload, VTY_NEWLINE);
|
||||||
if (g_cfg->audio_name)
|
if (g_cfg->audio_name)
|
||||||
|
@ -165,6 +166,16 @@ DEFUN(cfg_mgcp_rtp_base_port,
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFUN(cfg_mgcp_rtp_ip_tos,
|
||||||
|
cfg_mgcp_rtp_ip_tos_cmd,
|
||||||
|
"rtp ip-tos <0-255>",
|
||||||
|
"Set the IP_TOS socket attribute on the RTP/RTCP sockets.\n" "The TOS value.")
|
||||||
|
{
|
||||||
|
int tos = atoi(argv[0]);
|
||||||
|
g_cfg->endp_tos = tos;
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
DEFUN(cfg_mgcp_sdp_payload_number,
|
DEFUN(cfg_mgcp_sdp_payload_number,
|
||||||
cfg_mgcp_sdp_payload_number_cmd,
|
cfg_mgcp_sdp_payload_number_cmd,
|
||||||
"sdp audio payload number <1-255>",
|
"sdp audio payload number <1-255>",
|
||||||
|
@ -249,6 +260,7 @@ int mgcp_vty_init(void)
|
||||||
install_element(MGCP_NODE, &cfg_mgcp_bind_port_cmd);
|
install_element(MGCP_NODE, &cfg_mgcp_bind_port_cmd);
|
||||||
install_element(MGCP_NODE, &cfg_mgcp_bind_early_cmd);
|
install_element(MGCP_NODE, &cfg_mgcp_bind_early_cmd);
|
||||||
install_element(MGCP_NODE, &cfg_mgcp_rtp_base_port_cmd);
|
install_element(MGCP_NODE, &cfg_mgcp_rtp_base_port_cmd);
|
||||||
|
install_element(MGCP_NODE, &cfg_mgcp_rtp_ip_tos_cmd);
|
||||||
install_element(MGCP_NODE, &cfg_mgcp_sdp_payload_number_cmd);
|
install_element(MGCP_NODE, &cfg_mgcp_sdp_payload_number_cmd);
|
||||||
install_element(MGCP_NODE, &cfg_mgcp_sdp_payload_name_cmd);
|
install_element(MGCP_NODE, &cfg_mgcp_sdp_payload_name_cmd);
|
||||||
install_element(MGCP_NODE, &cfg_mgcp_loop_cmd);
|
install_element(MGCP_NODE, &cfg_mgcp_loop_cmd);
|
||||||
|
|
Loading…
Reference in New Issue