X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/39236c6e673c41db228275375ab7fdb0f837b292..5ba3f43ea354af8ad55bea84372a2bc834d8757c:/bsd/net/classq/classq_util.c diff --git a/bsd/net/classq/classq_util.c b/bsd/net/classq/classq_util.c index 9cc141265..56aa56eea 100644 --- a/bsd/net/classq/classq_util.c +++ b/bsd/net/classq/classq_util.c @@ -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;