On Mon, Feb 01, 2021 at 08:08:56AM +1300, Richard Procter wrote:
> - Might the rule disabling checksum offload for broadcasts on IFF_SIMPLEX 
>   interfaces be weakened to disable checksum offload for all broadcast 
>   packets instead?

I just copied the condition from ether_resolve():

                /* If broadcasting on a simplex interface, loopback a copy */
                if (ISSET(m->m_flags, M_BCAST) &&
                    ISSET(ifp->if_flags, IFF_SIMPLEX) &&
                    !m->m_pkthdr.pf.routed) {
                        struct mbuf *mcopy;

                        /* XXX Should we input an unencrypted IPsec packet? */
                        mcopy = m_copym(m, 0, M_COPYALL, M_NOWAIT);
                        if (mcopy != NULL)
                                if_input_local(ifp, mcopy, af);
                }

The bug is triggered when the packet is processed by if_input_local().

> This simplifies the logic, and shouldn???t impact performance as 

Yes, performance does not matter.  I just wanted to show that the
code is necessary for simplex interfaces.

> (I wonder if IFF_SIMPLEX is a relic of another age and deserves to be removed
> at some point;

Then remove the IFF_SIMPLEX in ether_resolve() and in in_ifcap_cksum()
simultaneously.  Currently I think it makes sense in both places.

> - what motivates the new '!m->m_pkthdr.pf.routed??? term?

Just copied from ether_resolve().  It looks strange I don't know
why it is there.  I can leave it out in my check if you think this
is clearer.

bluhm

Reply via email to