aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Smith <osmith@sysmocom.de>2020-03-06 11:28:40 +0100
committerHarald Welte <laforge@osmocom.org>2020-03-08 17:56:52 +0100
commitcb4340b8a443811a7bfa281a32937663b51c8d62 (patch)
tree5168afaef67ea1327f1033b2d0e2e906165a9731
parent58d79e88ad58887c92ecc98024f537e3efbb9469 (diff)
rsl: make IP DSCP configurable
-rw-r--r--include/osmo-bts/gsm_data_shared.h1
-rw-r--r--src/common/bts.c1
-rw-r--r--src/common/rsl.c11
-rw-r--r--src/common/vty.c16
4 files changed, 27 insertions, 2 deletions
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/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);