From f38c6b35d58411309f9449eb7c844081a5981c1f 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 --- include/osmo-bts/gsm_data_shared.h | 1 + src/common/rsl.c | 5 ++++- src/common/vty.c | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/include/osmo-bts/gsm_data_shared.h b/include/osmo-bts/gsm_data_shared.h index e0d70b0b..33166700 100644 --- a/include/osmo-bts/gsm_data_shared.h +++ b/include/osmo-bts/gsm_data_shared.h @@ -741,6 +741,7 @@ struct gsm_bts { uint16_t rtp_port_range_start; uint16_t rtp_port_range_end; uint16_t rtp_port_range_next; + int rtp_ip_dscp; struct { uint8_t ciphers; /* flags A5/1==0x1, A5/2==0x2, A5/3==0x4 */ diff --git a/src/common/rsl.c b/src/common/rsl.c index 10fb95e9..6140a143 100644 --- a/src/common/rsl.c +++ b/src/common/rsl.c @@ -2009,8 +2009,11 @@ static int bind_rtp(struct gsm_bts *bts, struct osmo_rtp_socket *rs, const char bts->rtp_port_range_next += 2; - if (rc == 0) + if (rc == 0) { + if (osmo_rtp_socket_set_dscp(rs, bts->rtp_ip_dscp)) + LOGP(DRSL, LOGL_ERROR, "failed to set DSCP=%i\n", bts->rtp_ip_dscp); return 0; + } } return -1; diff --git a/src/common/vty.c b/src/common/vty.c index c03f0d42..68b65f4d 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) + 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-255>", + RTP_STR "Apply IP_TOS to the audio stream\n" "The DSCP value\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