diff options
author | Harald Welte <laforge@osmocom.org> | 2021-04-27 21:56:25 +0200 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2021-04-27 21:57:52 +0200 |
commit | c96d716606b958f67c9cbcaa8f2e660042b233cc (patch) | |
tree | c6f31cd4c3948da4958531a7fe7559c78952fc3c | |
parent | ce53e03dc9ee231103c2ac1d3f2cb52515bbce0e (diff) |
ns2: Fix setting the DSCP value.
DSCP is a 6-bit value (0..63) stored in the upper 6 bits of what was
formerly known as TOS bits. We must
* make sure the user can only specify 0..63
* shift the value by two bits when using the IP_TOS socket option
We achieve the latter by using the recently-added osmo_sock_set_dscp()
helper.
Change-Id: I64fee56b04d0ecd128bf661699d5071817ea96ec
Closes: OS#5136
-rw-r--r-- | src/gb/gprs_ns2_udp.c | 6 | ||||
-rw-r--r-- | src/gb/gprs_ns2_vty.c | 2 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/gb/gprs_ns2_udp.c b/src/gb/gprs_ns2_udp.c index 8350ad83..eb7d37b4 100644 --- a/src/gb/gprs_ns2_udp.c +++ b/src/gb/gprs_ns2_udp.c @@ -320,6 +320,9 @@ int gprs_ns2_ip_bind(struct gprs_ns2_inst *nsi, if (local->u.sa.sa_family != AF_INET && local->u.sa.sa_family != AF_INET6) return -EINVAL; + if (dscp < 0 || dscp > 63) + return -EINVAL; + bind = gprs_ns2_ip_bind_by_sockaddr(nsi, local); if (bind) { if (result) @@ -361,8 +364,7 @@ int gprs_ns2_ip_bind(struct gprs_ns2_inst *nsi, if (dscp > 0) { priv->dscp = dscp; - rc = setsockopt(priv->fd.fd, IPPROTO_IP, IP_TOS, - &dscp, sizeof(dscp)); + rc = osmo_sock_set_dscp(priv->fd.fd, dscp); if (rc < 0) LOGBIND(bind, LOGL_ERROR, "Failed to set the DSCP to %d with ret(%d) errno(%d)\n", dscp, rc, errno); diff --git a/src/gb/gprs_ns2_vty.c b/src/gb/gprs_ns2_vty.c index 1ef22f5e..c390423e 100644 --- a/src/gb/gprs_ns2_vty.c +++ b/src/gb/gprs_ns2_vty.c @@ -679,7 +679,7 @@ DEFUN(cfg_no_ns_bind_listen, cfg_no_ns_bind_listen_cmd, } DEFUN(cfg_ns_bind_dscp, cfg_ns_bind_dscp_cmd, - "dscp <0-255>", + "dscp <0-63>", "Set DSCP/TOS on the UDP socket\n" "DSCP Value\n") { struct vty_bind *vbind = vty->index; |