if a bridge checked the ipv4 checksum and it was good, we can avoid
checking it again in ip_input.

ok?

Index: ip_input.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_input.c,v
retrieving revision 1.361
diff -u -p -r1.361 ip_input.c
--- ip_input.c  2 Jun 2021 00:09:57 -0000       1.361
+++ ip_input.c  2 Jun 2021 01:07:35 -0000
@@ -287,8 +287,8 @@ ipv4_check(struct ifnet *ifp, struct mbu
                }
        }
 
-       if ((m->m_pkthdr.csum_flags & M_IPV4_CSUM_IN_OK) == 0) {
-               if (m->m_pkthdr.csum_flags & M_IPV4_CSUM_IN_BAD) {
+       if (!ISSET(m->m_pkthdr.csum_flags, M_IPV4_CSUM_IN_OK)) {
+               if (ISSET(m->m_pkthdr.csum_flags, M_IPV4_CSUM_IN_BAD)) {
                        ipstat_inc(ips_badsum);
                        goto bad;
                }
@@ -298,6 +298,8 @@ ipv4_check(struct ifnet *ifp, struct mbu
                        ipstat_inc(ips_badsum);
                        goto bad;
                }
+
+               SET(m->m_pkthdr.csum_flags, M_IPV4_CSUM_IN_OK);
        }
 
        /* Retrieve the packet length. */

Reply via email to