Author: bz
Date: Fri Sep 10 00:00:06 2010
New Revision: 212403
URL: http://svn.freebsd.org/changeset/base/212403

Log:
  When using pf routing options, properly handle IP fragmentation
  for interfaces with TSO enabled, otherwise one would see an extra
  ICMP unreach, frag needed pre matching packet on lo0.
  This syncs pf code to ip_output.c r162084.
  
  PR:           kern/144311
  Submitted by: yongari via mlaier
  Reviewed by:  eri
  Tested by:    kib
  MFC after:    8 days

Modified:
  head/sys/contrib/pf/net/pf.c

Modified: head/sys/contrib/pf/net/pf.c
==============================================================================
--- head/sys/contrib/pf/net/pf.c        Thu Sep  9 23:45:59 2010        
(r212402)
+++ head/sys/contrib/pf/net/pf.c        Fri Sep 10 00:00:06 2010        
(r212403)
@@ -6375,6 +6375,7 @@ pf_route(struct mbuf **m, struct pf_rule
        m0->m_pkthdr.csum_flags &= ifp->if_hwassist;
 
        if (ntohs(ip->ip_len) <= ifp->if_mtu ||
+           (m0->m_pkthdr.csum_flags & ifp->if_hwassist & CSUM_TSO) != 0 ||
            (ifp->if_hwassist & CSUM_FRAGMENT &&
                ((ip->ip_off & htons(IP_DF)) == 0))) {
                /*
@@ -6449,7 +6450,7 @@ pf_route(struct mbuf **m, struct pf_rule
         * Too large for interface; fragment if possible.
         * Must be able to put at least 8 bytes per fragment.
         */
-       if (ip->ip_off & htons(IP_DF)) {
+       if (ip->ip_off & htons(IP_DF) || (m0->m_pkthdr.csum_flags & CSUM_TSO)) {
                KMOD_IPSTAT_INC(ips_cantfrag);
                if (r->rt != PF_DUPTO) {
 #ifdef __FreeBSD__
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to