On Wed, Jun 02, 2021 at 11:09:13AM +1000, David Gwynne wrote:
> if a bridge checked the ipv4 checksum and it was good, we can avoid
> checking it again in ip_input.
>
> ok?
>
ok mvs@
> 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. */
>