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)
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to