TOS bits != DSCP
We have VTY options that allow to set the DSCP value. However, we
then call a function to set the TOS bits in the kernel. This is
very wrong. The DSCP is only the upper 6 bits of the 8-bit TOS
value, and hence we are mussing that translation.
As libosmocore now has a helper function osmo_sock_set_dscp(),
let's make use of it and don't care about the low-level details.
However, this means we need to finally remove the deprecated
alias for "rtp ip-tos <0-255>".
Closes: OS#5137
Change-Id: I9c18c90273be97aedd2ad212b82f650e35c32851
Depends: libosmocore.git Ia4ba389a5b7e3e9d5f17a742a900d6fd68c08e40
diff --git a/TODO-RELEASE b/TODO-RELEASE
index c5a3b36..add44f1 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -24,3 +24,4 @@
# If any interfaces have been removed or changed since the last public release, a=0.
#
#library what description / commit summary line
+update dependency to libosmocore > 1.5.1 for our use of osmo_sock_set_dscp()
diff --git a/doc/examples/osmo-mgw/osmo-mgw-abis_e1.cfg b/doc/examples/osmo-mgw/osmo-mgw-abis_e1.cfg
index 6d369ef..bd948b8 100644
--- a/doc/examples/osmo-mgw/osmo-mgw-abis_e1.cfg
+++ b/doc/examples/osmo-mgw/osmo-mgw-abis_e1.cfg
@@ -9,7 +9,7 @@
rtp port-range 4002 16000
rtp bind-ip 127.0.0.1
rtp ip-probing
- rtp ip-tos 184
+ rtp ip-dscp 46
bind port 2427
sdp audio payload number 98
sdp audio payload name GSM
diff --git a/doc/examples/osmo-mgw/osmo-mgw.cfg b/doc/examples/osmo-mgw/osmo-mgw.cfg
index ea00f6c..320feae 100644
--- a/doc/examples/osmo-mgw/osmo-mgw.cfg
+++ b/doc/examples/osmo-mgw/osmo-mgw.cfg
@@ -6,7 +6,7 @@
rtp port-range 4002 16000
rtp bind-ip 127.0.0.1
rtp ip-probing
- rtp ip-tos 184
+ rtp ip-dscp 46
bind port 2427
sdp audio payload number 98
sdp audio payload name GSM
diff --git a/doc/manuals/chapters/configuration.adoc b/doc/manuals/chapters/configuration.adoc
index 2e2772e..177c096 100644
--- a/doc/manuals/chapters/configuration.adoc
+++ b/doc/manuals/chapters/configuration.adoc
@@ -101,7 +101,7 @@
rtp net-range 6000 6011
rtp net-bind-ip 192.168.100.130
rtp ip-probing
- rtp ip-tos 184
+ rtp ip-dscp 46
no rtp keep-alive
bind port 2428
number endpoints 30
diff --git a/include/osmocom/mgcp/mgcp_network.h b/include/osmocom/mgcp/mgcp_network.h
index 7dbf330..6e1e52c 100644
--- a/include/osmocom/mgcp/mgcp_network.h
+++ b/include/osmocom/mgcp/mgcp_network.h
@@ -148,7 +148,6 @@
struct mgcp_rtp_end *rtp_end,
struct osmo_sockaddr *addr, struct msgb *msg);
void mgcp_get_local_addr(char *addr, struct mgcp_conn_rtp *conn);
-int mgcp_set_ip_tos(int fd, int tos);
/* payload processing default functions */
int mgcp_rtp_processing_default(struct mgcp_endpoint *endp, struct mgcp_rtp_end *dst_end,
diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c
index 6b31f2b..675a0fc 100644
--- a/src/libosmo-mgcp/mgcp_network.c
+++ b/src/libosmo-mgcp/mgcp_network.c
@@ -1514,20 +1514,6 @@
return conn->endp->type->dispatch_rtp_cb(msg);
}
-/*! set IP Type of Service parameter.
- * \param[in] fd associated file descriptor.
- * \param[in] tos dscp value.
- * \returns 0 on success, -1 on ERROR. */
-int mgcp_set_ip_tos(int fd, int tos)
-{
- int ret;
- ret = setsockopt(fd, IPPROTO_IP, IP_TOS, &tos, sizeof(tos));
-
- if (ret < 0)
- return -1;
- return 0;
-}
-
/*! bind RTP port to osmo_fd.
* \param[in] source_addr source (local) address to bind on.
* \param[in] fd associated file descriptor.
@@ -1574,8 +1560,8 @@
}
/* Set Type of Service (DSCP-Value) as configured via VTY */
- mgcp_set_ip_tos(rtp_end->rtp.fd, cfg->endp_dscp);
- mgcp_set_ip_tos(rtp_end->rtcp.fd, cfg->endp_dscp);
+ osmo_sock_set_dscp(rtp_end->rtp.fd, cfg->endp_dscp);
+ osmo_sock_set_dscp(rtp_end->rtcp.fd, cfg->endp_dscp);
if (osmo_fd_register(&rtp_end->rtp) != 0) {
LOGPENDP(endp, DRTP, LOGL_ERROR,
diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c
index a7c0eef..6c40307 100644
--- a/src/libosmo-mgcp/mgcp_osmux.c
+++ b/src/libosmo-mgcp/mgcp_osmux.c
@@ -424,7 +424,7 @@
cfg->osmux_addr, cfg->osmux_port);
return ret;
}
- mgcp_set_ip_tos(osmux_fd.fd, cfg->endp_dscp);
+ osmo_sock_set_dscp(osmux_fd.fd, cfg->endp_dscp);
ret = osmo_fd_register(&osmux_fd);
if (ret < 0) {
diff --git a/src/libosmo-mgcp/mgcp_vty.c b/src/libosmo-mgcp/mgcp_vty.c
index 9ad8c24..6b180ef 100644
--- a/src/libosmo-mgcp/mgcp_vty.c
+++ b/src/libosmo-mgcp/mgcp_vty.c
@@ -579,19 +579,15 @@
DEFUN_USRATTR(cfg_mgcp_rtp_ip_dscp,
cfg_mgcp_rtp_ip_dscp_cmd,
X(MGW_CMD_ATTR_NEWCONN),
- "rtp ip-dscp <0-255>",
+ "rtp ip-dscp <0-63>",
RTP_STR
- "Apply IP_TOS to the audio stream (including Osmux)\n" "The DSCP value\n")
+ "Use specified DSCP for the audio stream (including Osmux)\n" "The DSCP value\n")
{
int dscp = atoi(argv[0]);
g_cfg->endp_dscp = dscp;
return CMD_SUCCESS;
}
-ALIAS_DEPRECATED(cfg_mgcp_rtp_ip_dscp, cfg_mgcp_rtp_ip_tos_cmd,
- "rtp ip-tos <0-255>",
- RTP_STR
- "Apply IP_TOS to the audio stream\n" "The DSCP value\n")
#define FORCE_PTIME_STR "Force a fixed ptime for packets sent"
DEFUN_USRATTR(cfg_mgcp_rtp_force_ptime,
cfg_mgcp_rtp_force_ptime_cmd,
@@ -1622,7 +1618,6 @@
install_element(MGCP_NODE, &cfg_mgcp_rtp_net_bind_ip_probing_cmd);
install_element(MGCP_NODE, &cfg_mgcp_rtp_no_net_bind_ip_probing_cmd);
install_element(MGCP_NODE, &cfg_mgcp_rtp_ip_dscp_cmd);
- install_element(MGCP_NODE, &cfg_mgcp_rtp_ip_tos_cmd);
install_element(MGCP_NODE, &cfg_mgcp_rtp_force_ptime_cmd);
install_element(MGCP_NODE, &cfg_mgcp_no_rtp_force_ptime_cmd);
install_element(MGCP_NODE, &cfg_mgcp_rtp_keepalive_cmd);