Index | Thread | Search

From:
David Hill <dhill@mindcry.org>
Subject:
Re: ntpd - use dscp (diff)
To:
tech@openbsd.org
Date:
Tue, 21 Oct 2025 21:00:54 +0000

Download raw body.

Thread
and now with breaks;

too much Go.

On 10/21/25 8:44 PM, David Hill wrote:
> Hello,
> 
> This diff adds DSCP EF for ipv6 ntp packets, and switches ipv4 to it as 
> well.  This also matches https://github.com/ntp-project/ntp/ 
> blob/8a37f9b66d374b164531f0189caba4cbfd68bb61/ntpd/ntp_io.c#L79
> 
> Thoughts?
> 
> Index: usr.sbin/ntpd/client.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ntpd/client.c,v
> diff -u -p -r1.118 client.c
> --- usr.sbin/ntpd/client.c    20 Dec 2023 15:36:36 -0000    1.118
> +++ usr.sbin/ntpd/client.c    21 Oct 2025 20:09:55 -0000
> @@ -181,10 +181,17 @@ client_query(struct ntp_peer *p)
>               } else
>                   fatal("client_query connect");
>           }
> -        val = IPTOS_LOWDELAY;
> -        if (p->addr->ss.ss_family == AF_INET && setsockopt(p->query.fd,
> -            IPPROTO_IP, IP_TOS, &val, sizeof(val)) == -1)
> -            log_warn("setsockopt IPTOS_LOWDELAY");
> +        val = IPTOS_DSCP_EF;
> +        switch (p->addr->ss.ss_family) {
> +        case AF_INET:
> +            if (setsockopt(p->query.fd, IPPROTO_IP, IP_TOS,
> +                &val, sizeof(val)) == -1)
> +                log_warn("setsockopt IPTOS_DSCP_EF");
> +        case AF_INET6:
> +            if (setsockopt(p->query.fd, IPPROTO_IPV6, IPV6_TCLASS,
> +                &val, sizeof(val)) == -1)
> +                log_warn("setsockopt IPTOS_DSCP_EF");
> +        }
>           val = 1;
>           if (setsockopt(p->query.fd, SOL_SOCKET, SO_TIMESTAMP,
>               &val, sizeof(val)) == -1)
> Index: usr.sbin/ntpd/server.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ntpd/server.c,v
> diff -u -p -r1.44 server.c
> --- usr.sbin/ntpd/server.c    3 Sep 2016 11:52:06 -0000    1.44
> +++ usr.sbin/ntpd/server.c    21 Oct 2025 20:09:55 -0000
> @@ -39,7 +39,7 @@ setup_listeners(struct servent *se, stru
>       u_int8_t        *a6;
>       size_t             sa6len = sizeof(struct in6_addr);
>       u_int             new_cnt = 0;
> -    int             tos = IPTOS_LOWDELAY, rdomain = 0;
> +    int             tos = IPTOS_DSCP_EF, rdomain = 0;
> 
>       TAILQ_FOREACH(lap, &lconf->listen_addrs, entry) {
>           switch (lap->sa.ss_family) {
> @@ -119,10 +119,16 @@ setup_listeners(struct servent *se, stru
>           if ((la->fd = socket(la->sa.ss_family, SOCK_DGRAM, 0)) == -1)
>               fatal("socket");
> 
> -        if (la->sa.ss_family == AF_INET && setsockopt(la->fd,
> -            IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) == -1)
> -            log_warn("setsockopt IPTOS_LOWDELAY");
> -
> +        switch (la->sa.ss_family) {
> +        case AF_INET:
> +            if (setsockopt(la->fd, IPPROTO_IP, IP_TOS,
> +                &tos, sizeof(tos)) == -1)
> +                log_warn("setsockopt IPTOS_DSCP_EF");
> +        case AF_INET6:
> +            if (setsockopt(la->fd, IPPROTO_IPV6, IPV6_TCLASS,
> +                &tos, sizeof(tos)) == -1)
> +                log_warn("setsockopt IPTOS_DSCP_EF");
> +        }
>           if (la->rtable != -1 &&
>               setsockopt(la->fd, SOL_SOCKET, SO_RTABLE, &la->rtable,
>               sizeof(la->rtable)) == -1)
> 

Index: usr.sbin/ntpd/client.c
===================================================================
RCS file: /cvs/src/usr.sbin/ntpd/client.c,v
diff -u -p -r1.118 client.c
--- usr.sbin/ntpd/client.c	20 Dec 2023 15:36:36 -0000	1.118
+++ usr.sbin/ntpd/client.c	21 Oct 2025 20:59:46 -0000
@@ -181,10 +181,19 @@ client_query(struct ntp_peer *p)
  			} else
  				fatal("client_query connect");
  		}
-		val = IPTOS_LOWDELAY;
-		if (p->addr->ss.ss_family == AF_INET && setsockopt(p->query.fd,
-		    IPPROTO_IP, IP_TOS, &val, sizeof(val)) == -1)
-			log_warn("setsockopt IPTOS_LOWDELAY");
+		val = IPTOS_DSCP_EF;
+		switch (p->addr->ss.ss_family) {
+		case AF_INET:
+			if (setsockopt(p->query.fd, IPPROTO_IP, IP_TOS,
+			    &val, sizeof(val)) == -1)
+				log_warn("setsockopt IPTOS_DSCP_EF");
+			break;
+		case AF_INET6:
+			if (setsockopt(p->query.fd, IPPROTO_IPV6, IPV6_TCLASS,
+			    &val, sizeof(val)) == -1)
+				log_warn("setsockopt IPTOS_DSCP_EF");
+			break;
+		}
  		val = 1;
  		if (setsockopt(p->query.fd, SOL_SOCKET, SO_TIMESTAMP,
  		    &val, sizeof(val)) == -1)
Index: usr.sbin/ntpd/server.c
===================================================================
RCS file: /cvs/src/usr.sbin/ntpd/server.c,v
diff -u -p -r1.44 server.c
--- usr.sbin/ntpd/server.c	3 Sep 2016 11:52:06 -0000	1.44
+++ usr.sbin/ntpd/server.c	21 Oct 2025 20:59:46 -0000
@@ -39,7 +39,7 @@ setup_listeners(struct servent *se, stru
  	u_int8_t		*a6;
  	size_t			 sa6len = sizeof(struct in6_addr);
  	u_int			 new_cnt = 0;
-	int			 tos = IPTOS_LOWDELAY, rdomain = 0;
+	int			 tos = IPTOS_DSCP_EF, rdomain = 0;

  	TAILQ_FOREACH(lap, &lconf->listen_addrs, entry) {
  		switch (lap->sa.ss_family) {
@@ -119,10 +119,18 @@ setup_listeners(struct servent *se, stru
  		if ((la->fd = socket(la->sa.ss_family, SOCK_DGRAM, 0)) == -1)
  			fatal("socket");

-		if (la->sa.ss_family == AF_INET && setsockopt(la->fd,
-		    IPPROTO_IP, IP_TOS, &tos, sizeof(tos)) == -1)
-			log_warn("setsockopt IPTOS_LOWDELAY");
-
+		switch (la->sa.ss_family) {
+		case AF_INET:
+			if (setsockopt(la->fd, IPPROTO_IP, IP_TOS,
+			    &tos, sizeof(tos)) == -1)
+				log_warn("setsockopt IPTOS_DSCP_EF");
+			break;
+		case AF_INET6:
+			if (setsockopt(la->fd, IPPROTO_IPV6, IPV6_TCLASS,
+			    &tos, sizeof(tos)) == -1)
+				log_warn("setsockopt IPTOS_DSCP_EF");
+			break;
+		}
  		if (la->rtable != -1 &&
  		    setsockopt(la->fd, SOL_SOCKET, SO_RTABLE, &la->rtable,
  		    sizeof(la->rtable)) == -1)