git: 54da44487a16 - releng/15.0 - udp: honor IPV6_TCLASS cmsg for UDP/IPv4 packets
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 30 Oct 2025 04:23:30 UTC
The branch releng/15.0 has been updated by cperciva:
URL: https://cgit.FreeBSD.org/src/commit/?id=54da44487a16215f2a03e158412b2c8dcc958e31
commit 54da44487a16215f2a03e158412b2c8dcc958e31
Author: Michael Tuexen <tuexen@FreeBSD.org>
AuthorDate: 2025-10-26 17:58:15 +0000
Commit: Colin Percival <cperciva@FreeBSD.org>
CommitDate: 2025-10-30 04:22:03 +0000
udp: honor IPV6_TCLASS cmsg for UDP/IPv4 packets
Honor the IPPROTO_IPV6-level cmsg of type IPV6_TCLASS when sending
an UDP/IPv4 packet on an AF_INET6 socket.
Approved by: re (cperciva)
Reviewed by: bz
Sponsored by: Netflix, Inc.
Differential Revision: https://reviews.freebsd.org/D53347
(cherry picked from commit d3a3854fdc6e8da3bc6c1c13aab8d371445d2914)
(cherry picked from commit e31ff080e5d55a0f4864177e9fc7b58e7083b095)
---
sys/netinet/udp_usrreq.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c
index 6ce1bcce6fc6..f1d952037d5a 100644
--- a/sys/netinet/udp_usrreq.c
+++ b/sys/netinet/udp_usrreq.c
@@ -1208,6 +1208,23 @@ udp_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *addr,
error = udp_v4mapped_pktinfo(cm, &src, inp, flags);
if (error != 0)
break;
+ if (((flags & PRUS_IPV6) != 0) &&
+ (cm->cmsg_level == IPPROTO_IPV6) &&
+ (cm->cmsg_type == IPV6_TCLASS)) {
+ int tclass;
+
+ if (cm->cmsg_len != CMSG_LEN(sizeof(int))) {
+ error = EINVAL;
+ break;
+ }
+ tclass = *(int *)CMSG_DATA(cm);
+ if (tclass < -1 || tclass > 255) {
+ error = EINVAL;
+ break;
+ }
+ if (tclass != -1)
+ tos = (u_char)tclass;
+ }
#endif
if (cm->cmsg_level != IPPROTO_IP)
continue;