svn commit: r237911 - stable/9/sys/netinet

Michael Tuexen tuexen at FreeBSD.org
Sun Jul 1 08:53:56 UTC 2012


Author: tuexen
Date: Sun Jul  1 08:53:55 2012
New Revision: 237911
URL: http://svn.freebsd.org/changeset/base/237911

Log:
  MFC r236961:
  Add a cmsg of type IP_TOS for UDP/IPv4 sockets to specify the TOS byte.

Modified:
  stable/9/sys/netinet/udp_usrreq.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/netinet/udp_usrreq.c
==============================================================================
--- stable/9/sys/netinet/udp_usrreq.c	Sun Jul  1 08:47:15 2012	(r237910)
+++ stable/9/sys/netinet/udp_usrreq.c	Sun Jul  1 08:53:55 2012	(r237911)
@@ -956,6 +956,7 @@ udp_output(struct inpcb *inp, struct mbu
 	int ipflags;
 	u_short fport, lport;
 	int unlock_udbinfo;
+	u_char tos;
 
 	/*
 	 * udp_output() may need to temporarily bind or connect the current
@@ -971,6 +972,7 @@ udp_output(struct inpcb *inp, struct mbu
 	}
 
 	src.sin_family = 0;
+	tos = inp->inp_ip_tos;
 	if (control != NULL) {
 		/*
 		 * XXX: Currently, we assume all the optional information is
@@ -1008,6 +1010,14 @@ udp_output(struct inpcb *inp, struct mbu
 				    *(struct in_addr *)CMSG_DATA(cm);
 				break;
 
+			case IP_TOS:
+				if (cm->cmsg_len != CMSG_LEN(sizeof(u_char))) {
+					error = EINVAL;
+					break;
+				}
+				tos = *(u_char *)CMSG_DATA(cm);
+				break;
+
 			default:
 				error = ENOPROTOOPT;
 				break;
@@ -1223,7 +1233,7 @@ udp_output(struct inpcb *inp, struct mbu
 		ui->ui_sum = 0;
 	((struct ip *)ui)->ip_len = sizeof (struct udpiphdr) + len;
 	((struct ip *)ui)->ip_ttl = inp->inp_ip_ttl;	/* XXX */
-	((struct ip *)ui)->ip_tos = inp->inp_ip_tos;	/* XXX */
+	((struct ip *)ui)->ip_tos = tos;		/* XXX */
 	UDPSTAT_INC(udps_opackets);
 
 	if (unlock_udbinfo == UH_WLOCKED)


More information about the svn-src-all mailing list