]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/netinet/raw_ip.c
xnu-6153.41.3.tar.gz
[apple/xnu.git] / bsd / netinet / raw_ip.c
index 66b0102bbb7ecbcc3f1c0e1bcc386c07b273ed12..dc552d9e30ac30ffdf703082edbb0bafc1648b9c 100644 (file)
@@ -372,6 +372,7 @@ rip_output(
        int flags = (so->so_options & SO_DONTROUTE) | IP_ALLOWBROADCAST;
        struct ip_out_args ipoa;
        struct ip_moptions *imo;
+       int tos = IPTOS_UNSPEC;
        int error = 0;
 
        bzero(&ipoa, sizeof(ipoa));
@@ -383,6 +384,7 @@ rip_output(
 
 
        if (control != NULL) {
+               tos = so_tos_from_control(control);
                sotc = so_tc_from_control(control, &netsvctype);
 
                m_freem(control);
@@ -444,7 +446,11 @@ rip_output(
                        return ENOBUFS;
                }
                ip = mtod(m, struct ip *);
-               ip->ip_tos = inp->inp_ip_tos;
+               if (tos != IPTOS_UNSPEC) {
+                       ip->ip_tos = (uint8_t)(tos & IPTOS_MASK);
+               } else {
+                       ip->ip_tos = inp->inp_ip_tos;
+               }
                ip->ip_off = 0;
                ip->ip_p = inp->inp_ip_p;
                ip->ip_len = m->m_pkthdr.len;