From cb4340b8a443811a7bfa281a32937663b51c8d62 Mon Sep 17 00:00:00 2001 From: Oliver Smith Date: Fri, 6 Mar 2020 11:28:40 +0100 Subject: rsl: make IP DSCP configurable Related: OS#4438 Depends: libosmo-abis I41603db8c1286660ad57ac1c78a8fb393a2b080b Change-Id: Icdef5d40243fefdeae23f3bcf9c6702e8487928a --- src/common/bts.c | 1 + src/common/rsl.c | 11 +++++++++-- src/common/vty.c | 16 ++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/common/bts.c b/src/common/bts.c index da411761..22006156 100644 --- a/src/common/bts.c +++ b/src/common/bts.c @@ -159,6 +159,7 @@ int bts_init(struct gsm_bts *bts) bts->rtp_port_range_start = 16384; bts->rtp_port_range_end = 17407; bts->rtp_port_range_next = bts->rtp_port_range_start; + bts->rtp_ip_dscp = -1; /* configurable via OML */ bts->load.ccch.load_ind_period = 112; diff --git a/src/common/rsl.c b/src/common/rsl.c index 10fb95e9..41dd2434 100644 --- a/src/common/rsl.c +++ b/src/common/rsl.c @@ -2009,8 +2009,15 @@ static int bind_rtp(struct gsm_bts *bts, struct osmo_rtp_socket *rs, const char bts->rtp_port_range_next += 2; - if (rc == 0) - return 0; + if (rc != 0) + continue; + + if (bts->rtp_ip_dscp != -1) { + if (osmo_rtp_socket_set_dscp(rs, bts->rtp_ip_dscp)) + LOGP(DRSL, LOGL_ERROR, "failed to set DSCP=%i: %s\n", + bts->rtp_ip_dscp, strerror(errno)); + } + return 0; } return -1; diff --git a/src/common/vty.c b/src/common/vty.c index c03f0d42..ab38dc19 100644 --- a/src/common/vty.c +++ b/src/common/vty.c @@ -237,6 +237,8 @@ static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts) vty_out(vty, "%s", VTY_NEWLINE); vty_out(vty, " rtp port-range %u %u%s", bts->rtp_port_range_start, bts->rtp_port_range_end, VTY_NEWLINE); + if (bts->rtp_ip_dscp != -1) + vty_out(vty, " rtp ip-dscp %i%s", bts->rtp_ip_dscp, VTY_NEWLINE); vty_out(vty, " paging queue-size %u%s", paging_get_queue_max(bts->paging_state), VTY_NEWLINE); vty_out(vty, " paging lifetime %u%s", paging_get_lifetime(bts->paging_state), @@ -501,6 +503,19 @@ DEFUN(cfg_bts_rtp_port_range, return CMD_SUCCESS; } +DEFUN(cfg_bts_rtp_ip_dscp, + cfg_bts_rtp_ip_dscp_cmd, + "rtp ip-dscp <0-63>", + RTP_STR "Specify DSCP for RTP/IP packets\n" "The DSCP value (upper 6 bits of TOS)\n") +{ + struct gsm_bts *bts = vty->index; + int dscp = atoi(argv[0]); + + bts->rtp_ip_dscp = dscp; + + return CMD_SUCCESS; +} + #define PAG_STR "Paging related parameters\n" DEFUN(cfg_bts_paging_queue_size, @@ -1665,6 +1680,7 @@ int bts_vty_init(struct gsm_bts *bts) install_element(BTS_NODE, &cfg_bts_rtp_bind_ip_cmd); install_element(BTS_NODE, &cfg_bts_rtp_jitbuf_cmd); install_element(BTS_NODE, &cfg_bts_rtp_port_range_cmd); + install_element(BTS_NODE, &cfg_bts_rtp_ip_dscp_cmd); install_element(BTS_NODE, &cfg_bts_band_cmd); install_element(BTS_NODE, &cfg_description_cmd); install_element(BTS_NODE, &cfg_no_description_cmd); -- cgit v1.2.3