]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/net/classq/classq_util.c
xnu-2782.1.97.tar.gz
[apple/xnu.git] / bsd / net / classq / classq_util.c
index 9cc141265c83a67000a6561de11a8a3ad7920d60..56aa56eea15a7affcb5cf7832e2e48920f64ca85 100644 (file)
@@ -259,14 +259,17 @@ mark_ecn(struct mbuf *m, struct pf_mtag *t, int flags)
                        otos = ip->ip_tos;
                        ip->ip_tos |= IPTOS_ECN_CE;
                        /*
-                        * update checksum (from RFC1624)
+                        * update checksum (from RFC1624) only if hw
+                        * checksum is not supported.
                         *         HC' = ~(~HC + ~m + m')
                         */
-                       sum = ~ntohs(ip->ip_sum) & 0xffff;
-                       sum += (~otos & 0xffff) + ip->ip_tos;
-                       sum = (sum >> 16) + (sum & 0xffff);
-                       sum += (sum >> 16);  /* add carry */
-                       ip->ip_sum = htons(~sum & 0xffff);
+                       if (!(m->m_pkthdr.csum_flags & CSUM_DELAY_IP)) {
+                               sum = ~ntohs(ip->ip_sum) & 0xffff;
+                               sum += (~otos & 0xffff) + ip->ip_tos;
+                               sum = (sum >> 16) + (sum & 0xffff);
+                               sum += (sum >> 16);  /* add carry */
+                               ip->ip_sum = htons(~sum & 0xffff);
+                       }
                        return (1);
                }
                break;