Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 30 Aug 2013 21:31:45 -0400
From:      J David <j.david.lists@gmail.com>
To:        freebsd-pf@freebsd.org
Subject:   pf unconditionally disables TCP checksum offloading
Message-ID:  <CABXB=RQPqAQF3zLBdfoP4P5MVw97sbWdgag0nv8h=SGFFTY7SQ@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hello,

While testing 9.2, we discovered that merely having pf enabled (no
rules of any kind) was sufficient to completely, unconditionally
disables hardware checksum offloading.

If pf is disabled ("pfctl -d") then checksum offloading works fine.
If pf is merely enabled with no rules ("pfctl -e -F all"), checksum
offloading no longer works.

The culprit appears to be this code in pf_check_out:

        if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
                in_delayed_cksum(*m);
                (*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
        }

CSUM_DELAY_DATA is defined as (CSUM_TCP | CSUM_UDP) in sys/mbuf.h, so
this effectively clears (*m)->m_pkthdr.csum_flags and never puts it
back.

Is this behavior intentional?

Thanks!



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CABXB=RQPqAQF3zLBdfoP4P5MVw97sbWdgag0nv8h=SGFFTY7SQ>