X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/316670eb35587141e969394ae8537d66b9211e80..c18c124eaa464aaaa5549e99e5a70fc9cbb50944:/bsd/net/classq/classq_util.c?ds=inline diff --git a/bsd/net/classq/classq_util.c b/bsd/net/classq/classq_util.c index e8bf3d5bd..56aa56eea 100644 --- a/bsd/net/classq/classq_util.c +++ b/bsd/net/classq/classq_util.c @@ -82,6 +82,7 @@ #include +#if PF_ECN /* * read and write diffserv field in IPv4 or IPv6 header */ @@ -258,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; @@ -302,3 +306,4 @@ mark_ecn(struct mbuf *m, struct pf_mtag *t, int flags) /* not marked */ return (0); } +#endif /* PF_ECN */