Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Nov 2012 18:09:00 +0000 (UTC)
From:      Andre Oppermann <andre@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r243292 - in user/andre/tcp_workqueue/sys/dev: age ale bce bge bxe cas cxgb cxgbe cxgbe/tom e1000 fxp gem hme if_ndis ixgb ixgbe jme lge mge msk mxge nfe nge nxge oce qlxgb re rt sf sfx...
Message-ID:  <201211191809.qAJI90Vb015606@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: andre
Date: Mon Nov 19 18:09:00 2012
New Revision: 243292
URL: http://svnweb.freebsd.org/changeset/base/243292

Log:
  Convert the NIC drivers to the new checksum offloading semantics on
  the inbound path in a first step.
  
  This is a mostly mechanical conversion and the new semantics are
  not introduced.
  
  In short for inbound there are two levels the offloading NIC can
  set:
  
   CSUM_L3_CALC	for an IP layer 3 checksum calculated by the NIC;
   CSUM_L3_VALID	set when the calculated checksum matches the one
  		in the packet;
   CSUM_L4_CALC	for an UDP/TCP/SCTP layer 4 checksum calculated by
  		the NIC;
   CSUM_L4_VALID	set when the calculated checksum matche the one
  		in the packet.
  
  From this follows that a packet failed checksum verification when
  only *_CALC is set but not *_VALID.  The NIC is expected to deliver
  a failed packet up the stack anyways for capture by BPF and to
  record protocol specific checksum mismatch statistics.
  
  Please note that many NIC's do not or only partially follow these
  semantics.  Some drop all packets with a failed checksum and most
  do not report a L4 failure but pass it on without any checksum flags
  set.  They will have to be cleaned up later.

Modified:
  user/andre/tcp_workqueue/sys/dev/age/if_age.c
  user/andre/tcp_workqueue/sys/dev/ale/if_ale.c
  user/andre/tcp_workqueue/sys/dev/bce/if_bce.c
  user/andre/tcp_workqueue/sys/dev/bge/if_bge.c
  user/andre/tcp_workqueue/sys/dev/bxe/if_bxe.c
  user/andre/tcp_workqueue/sys/dev/cas/if_cas.c
  user/andre/tcp_workqueue/sys/dev/cxgb/cxgb_sge.c
  user/andre/tcp_workqueue/sys/dev/cxgbe/t4_sge.c
  user/andre/tcp_workqueue/sys/dev/cxgbe/tom/t4_listen.c
  user/andre/tcp_workqueue/sys/dev/e1000/if_em.c
  user/andre/tcp_workqueue/sys/dev/e1000/if_igb.c
  user/andre/tcp_workqueue/sys/dev/e1000/if_lem.c
  user/andre/tcp_workqueue/sys/dev/fxp/if_fxp.c
  user/andre/tcp_workqueue/sys/dev/gem/if_gem.c
  user/andre/tcp_workqueue/sys/dev/hme/if_hme.c
  user/andre/tcp_workqueue/sys/dev/if_ndis/if_ndis.c
  user/andre/tcp_workqueue/sys/dev/ixgb/if_ixgb.c
  user/andre/tcp_workqueue/sys/dev/ixgbe/ixgbe.c
  user/andre/tcp_workqueue/sys/dev/ixgbe/ixv.c
  user/andre/tcp_workqueue/sys/dev/jme/if_jme.c
  user/andre/tcp_workqueue/sys/dev/lge/if_lge.c
  user/andre/tcp_workqueue/sys/dev/mge/if_mge.c
  user/andre/tcp_workqueue/sys/dev/msk/if_msk.c
  user/andre/tcp_workqueue/sys/dev/mxge/if_mxge.c
  user/andre/tcp_workqueue/sys/dev/mxge/mxge_lro.c
  user/andre/tcp_workqueue/sys/dev/nfe/if_nfe.c
  user/andre/tcp_workqueue/sys/dev/nge/if_nge.c
  user/andre/tcp_workqueue/sys/dev/nxge/if_nxge.c
  user/andre/tcp_workqueue/sys/dev/oce/oce_if.c
  user/andre/tcp_workqueue/sys/dev/qlxgb/qla_isr.c
  user/andre/tcp_workqueue/sys/dev/re/if_re.c
  user/andre/tcp_workqueue/sys/dev/rt/if_rt.c
  user/andre/tcp_workqueue/sys/dev/sf/if_sf.c
  user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_rx.c
  user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_tx.c
  user/andre/tcp_workqueue/sys/dev/sge/if_sge.c
  user/andre/tcp_workqueue/sys/dev/sk/if_sk.c
  user/andre/tcp_workqueue/sys/dev/stge/if_stge.c
  user/andre/tcp_workqueue/sys/dev/ti/if_ti.c
  user/andre/tcp_workqueue/sys/dev/tsec/if_tsec.c
  user/andre/tcp_workqueue/sys/dev/txp/if_txp.c
  user/andre/tcp_workqueue/sys/dev/usb/net/if_axe.c
  user/andre/tcp_workqueue/sys/dev/vge/if_vge.c
  user/andre/tcp_workqueue/sys/dev/virtio/network/if_vtnet.c
  user/andre/tcp_workqueue/sys/dev/vr/if_vr.c
  user/andre/tcp_workqueue/sys/dev/vxge/vxge.c
  user/andre/tcp_workqueue/sys/dev/xen/netback/netback.c
  user/andre/tcp_workqueue/sys/dev/xen/netback/netback_unit_tests.c
  user/andre/tcp_workqueue/sys/dev/xen/netfront/netfront.c
  user/andre/tcp_workqueue/sys/dev/xl/if_xl.c

Modified: user/andre/tcp_workqueue/sys/dev/age/if_age.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/age/if_age.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/age/if_age.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -2383,13 +2383,13 @@ age_rxeof(struct age_softc *sc, struct r
 			 */
 			if ((ifp->if_capenable & IFCAP_RXCSUM) != 0 &&
 			    (status & AGE_RRD_IPV4) != 0) {
-				m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
+				m->m_pkthdr.csum_flags |= CSUM_L3_CALC;
 				if ((status & AGE_RRD_IPCSUM_NOK) == 0)
-					m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+					m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 				if ((status & (AGE_RRD_TCP | AGE_RRD_UDP)) &&
 				    (status & AGE_RRD_TCP_UDPCSUM_NOK) == 0) {
 					m->m_pkthdr.csum_flags |=
-					    CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+					    CSUM_L4_CALC | CSUM_L4_VALID;
 					m->m_pkthdr.csum_data = 0xffff;
 				}
 				/*

Modified: user/andre/tcp_workqueue/sys/dev/ale/if_ale.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/ale/if_ale.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/ale/if_ale.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -2429,16 +2429,16 @@ ale_rxcsum(struct ale_softc *sc, struct 
 	char *p;
 
 	ifp = sc->ale_ifp;
-	m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
+	m->m_pkthdr.csum_flags |= CSUM_L3_CALC;
 	if ((status & ALE_RD_IPCSUM_NOK) == 0)
-		m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+		m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 
 	if ((sc->ale_flags & ALE_FLAG_RXCSUM_BUG) == 0) {
 		if (((status & ALE_RD_IPV4_FRAG) == 0) &&
 		    ((status & (ALE_RD_TCP | ALE_RD_UDP)) != 0) &&
 		    ((status & ALE_RD_TCP_UDPCSUM_NOK) == 0)) {
 			m->m_pkthdr.csum_flags |=
-			    CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+			    CSUM_L4_CALC | CSUM_L4_VALID;
 			m->m_pkthdr.csum_data = 0xffff;
 		}
 	} else {
@@ -2454,8 +2454,8 @@ ale_rxcsum(struct ale_softc *sc, struct 
 			ip = (struct ip *)p;
 			if (ip->ip_off != 0 && (status & ALE_RD_IPV4_DF) == 0)
 				return;
-			m->m_pkthdr.csum_flags |= CSUM_DATA_VALID |
-			    CSUM_PSEUDO_HDR;
+			m->m_pkthdr.csum_flags |= CSUM_L4_CALC |
+			    CSUM_L4_VALID;
 			m->m_pkthdr.csum_data = 0xffff;
 		}
 	}

Modified: user/andre/tcp_workqueue/sys/dev/bce/if_bce.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/bce/if_bce.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/bce/if_bce.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -6825,12 +6825,12 @@ bce_rx_intr(struct bce_softc *sc)
 			/* Check for an IP datagram. */
 		 	if (!(status & L2_FHDR_STATUS_SPLIT) &&
 			    (status & L2_FHDR_STATUS_IP_DATAGRAM)) {
-				m0->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
+				m0->m_pkthdr.csum_flags |= CSUM_L3_CALC;
 				DBRUN(sc->csum_offload_ip++);
 				/* Check if the IP checksum is valid. */
 				if ((l2fhdr->l2_fhdr_ip_xsum ^ 0xffff) == 0)
 					m0->m_pkthdr.csum_flags |=
-					    CSUM_IP_VALID;
+					    CSUM_L3_VALID;
 			}
 
 			/* Check for a valid TCP/UDP frame. */
@@ -6844,8 +6844,7 @@ bce_rx_intr(struct bce_softc *sc)
 					m0->m_pkthdr.csum_data =
 					    l2fhdr->l2_fhdr_tcp_udp_xsum;
 					m0->m_pkthdr.csum_flags |=
-					    (CSUM_DATA_VALID
-					    | CSUM_PSEUDO_HDR);
+					    (CSUM_L4_CALC | CSUM_L4_VALID);
 				}
 			}
 		}

Modified: user/andre/tcp_workqueue/sys/dev/bge/if_bge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/bge/if_bge.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/bge/if_bge.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -120,7 +120,7 @@ __FBSDID("$FreeBSD$");
 
 #include <dev/bge/if_bgereg.h>
 
-#define	BGE_CSUM_FEATURES	(CSUM_IP | CSUM_TCP)
+#define	BGE_CSUM_FEATURES	(CSUM_IP | CSUM_IP_TCP)
 #define	ETHER_MIN_NOPAD		(ETHER_MIN_LEN - ETHER_CRC_LEN) /* i.e., 60 */
 
 MODULE_DEPEND(bge, pci, 1, 1, 1);
@@ -3647,7 +3647,7 @@ bge_attach(device_t dev)
 	/* Initialize checksum features to use. */
 	sc->bge_csum_features = BGE_CSUM_FEATURES;
 	if (sc->bge_forced_udpcsum != 0)
-		sc->bge_csum_features |= CSUM_UDP;
+		sc->bge_csum_features |= CSUM_IP_UDP;
 
 	/* Set up ifnet structure */
 	ifp = sc->bge_ifp = if_alloc(IFT_ETHER);
@@ -3669,7 +3669,7 @@ bge_attach(device_t dev)
 	ifp->if_capabilities = IFCAP_HWCSUM | IFCAP_VLAN_HWTAGGING |
 	    IFCAP_VLAN_MTU;
 	if ((sc->bge_flags & (BGE_FLAG_TSO | BGE_FLAG_TSO3)) != 0) {
-		ifp->if_hwassist |= CSUM_TSO;
+		ifp->if_hwassist |= CSUM_IP_TSO;
 		ifp->if_capabilities |= IFCAP_TSO4 | IFCAP_VLAN_HWTSO;
 	}
 #ifdef IFCAP_VLAN_HWCSUM
@@ -4222,30 +4222,30 @@ bge_rx_packet(struct bge_softc *sc, stru
 	    BGE_IS_5717_PLUS(sc)) {
 		if ((rx->bge_flags & BGE_RXBDFLAG_IPV6) == 0) {
 			if (rx->bge_flags & BGE_RXBDFLAG_IP_CSUM) {
-				m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
+				m->m_pkthdr.csum_flags |= CSUM_L3_CALC;
 				if ((rx->bge_error_flag &
 				    BGE_RXERRFLAG_IP_CSUM_NOK) == 0)
-					m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+					m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 			}
 			if (rx->bge_flags & BGE_RXBDFLAG_TCP_UDP_CSUM) {
 				m->m_pkthdr.csum_data =
 				    rx->bge_tcp_udp_csum;
-				m->m_pkthdr.csum_flags |= CSUM_DATA_VALID |
-				    CSUM_PSEUDO_HDR;
+				m->m_pkthdr.csum_flags |= CSUM_L4_CALC |
+				    CSUM_L4_VALID;
 			}
 		}
 	} else if (ifp->if_capenable & IFCAP_RXCSUM) {
 		if (rx->bge_flags & BGE_RXBDFLAG_IP_CSUM) {
-			m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
+			m->m_pkthdr.csum_flags |= CSUM_L3_CALC;
 			if ((rx->bge_ip_csum ^ 0xFFFF) == 0)
-				m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+				m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 		}
 		if (rx->bge_flags & BGE_RXBDFLAG_TCP_UDP_CSUM &&
 		    m->m_pkthdr.len >= ETHER_MIN_NOPAD) {
 			m->m_pkthdr.csum_data =
 			    rx->bge_tcp_udp_csum;
-			m->m_pkthdr.csum_flags |= CSUM_DATA_VALID |
-			    CSUM_PSEUDO_HDR;
+			m->m_pkthdr.csum_flags |= CSUM_L4_CALC |
+			    CSUM_L4_VALID;
 		}
 	}
 

Modified: user/andre/tcp_workqueue/sys/dev/bxe/if_bxe.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/bxe/if_bxe.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/bxe/if_bxe.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -14753,8 +14753,9 @@ bxe_tpa_stop(struct bxe_softc *sc, struc
 	m->m_pkthdr.len = m->m_len = len;
 
 	/* Mark the checksums valid (taken care of by firmware). */
-	m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED | CSUM_IP_VALID |
-	    CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+	/* XXXAO: Is this really unconditionally true? */
+	m->m_pkthdr.csum_flags |= CSUM_L3_CALC | CSUM_L3_VALID |
+	    CSUM_L4_CALC | CSUM_L4_VALID;
 	m->m_pkthdr.csum_data = 0xffff;
 
 	/* Aggregate all of the SGEs into a single mbuf. */
@@ -15002,7 +15003,7 @@ bxe_rxeof(struct bxe_fastpath *fp)
 				    !(cqe->fast_path_cqe.status_flags &
 				    ETH_FAST_PATH_RX_CQE_IP_XSUM_NO_VALIDATION_FLG)) {
 					m->m_pkthdr.csum_flags |=
-					    CSUM_IP_CHECKED;
+					    CSUM_L3_CALC;
 					if (__predict_false(cqe_fp_flags &
 					    ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG)) {
 						DBPRINT(sc, BXE_WARN_SEND,
@@ -15010,7 +15011,7 @@ bxe_rxeof(struct bxe_fastpath *fp)
 						    __FUNCTION__);
 					} else
 						m->m_pkthdr.csum_flags |=
-						    CSUM_IP_VALID;
+						    CSUM_L3_VALID;
 				}
 
 				/* Check for a valid TCP/UDP frame. */
@@ -15026,8 +15027,8 @@ bxe_rxeof(struct bxe_fastpath *fp)
 					} else {
 						m->m_pkthdr.csum_data = 0xFFFF;
 						m->m_pkthdr.csum_flags |=
-						    (CSUM_DATA_VALID |
-						    CSUM_PSEUDO_HDR);
+						    (CSUM_L4_CALC |
+						     CSUM_L4_VALID);
 					}
 				}
 			}

Modified: user/andre/tcp_workqueue/sys/dev/cas/if_cas.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/cas/if_cas.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/cas/if_cas.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -592,7 +592,7 @@ cas_rxcksum(struct mbuf *m, uint16_t cks
 			cksum = temp32 & 65535;
 		}
 	}
-	m->m_pkthdr.csum_flags |= CSUM_DATA_VALID;
+	m->m_pkthdr.csum_flags |= CSUM_L4_CALC | CSUM_L4_VALID;
 	m->m_pkthdr.csum_data = cksum;
 }
 

Modified: user/andre/tcp_workqueue/sys/dev/cxgb/cxgb_sge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/cxgb/cxgb_sge.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/cxgb/cxgb_sge.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -2655,13 +2655,13 @@ t3_rx_eth(struct adapter *adap, struct m
 
 		if (ifp->if_capenable & IFCAP_RXCSUM &&
 		    eh_type == htons(ETHERTYPE_IP)) {
-			m->m_pkthdr.csum_flags = (CSUM_IP_CHECKED |
-			    CSUM_IP_VALID | CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
+			/* XXXAO: Is this really unconditionally true? */
+			m->m_pkthdr.csum_flags = (CSUM_L3_CALC | CSUM_L3_VALID |
+			    CSUM_L4_CALC | CSUM_L4_VALID);
 			m->m_pkthdr.csum_data = 0xffff;
 		} else if (ifp->if_capenable & IFCAP_RXCSUM_IPV6 &&
 		    eh_type == htons(ETHERTYPE_IPV6)) {
-			m->m_pkthdr.csum_flags = (CSUM_DATA_VALID_IPV6 |
-			    CSUM_PSEUDO_HDR);
+			m->m_pkthdr.csum_flags = (CSUM_L4_CALC | CSUM_L4_VALID);
 			m->m_pkthdr.csum_data = 0xffff;
 		}
 	}

Modified: user/andre/tcp_workqueue/sys/dev/cxgbe/t4_sge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/cxgbe/t4_sge.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/cxgbe/t4_sge.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -1128,13 +1128,13 @@ t4_eth_rx(struct sge_iq *iq, const struc
 	if (cpl->csum_calc && !cpl->err_vec) {
 		if (ifp->if_capenable & IFCAP_RXCSUM &&
 		    cpl->l2info & htobe32(F_RXF_IP)) {
-			m0->m_pkthdr.csum_flags = (CSUM_IP_CHECKED |
-			    CSUM_IP_VALID | CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
+			/* XXXAO: Is the really unconditionally true? */
+			m0->m_pkthdr.csum_flags = (CSUM_L3_CALC |
+			    CSUM_L3_VALID | CSUM_L4_CALC | CSUM_L4_VALID);
 			rxq->rxcsum++;
 		} else if (ifp->if_capenable & IFCAP_RXCSUM_IPV6 &&
 		    cpl->l2info & htobe32(F_RXF_IP6)) {
-			m0->m_pkthdr.csum_flags = (CSUM_DATA_VALID_IPV6 |
-			    CSUM_PSEUDO_HDR);
+			m0->m_pkthdr.csum_flags = (CSUM_L4_CALC|CSUM_L4_VALID);
 			rxq->rxcsum++;
 		}
 

Modified: user/andre/tcp_workqueue/sys/dev/cxgbe/tom/t4_listen.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/cxgbe/tom/t4_listen.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/cxgbe/tom/t4_listen.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -1221,8 +1221,8 @@ reject:
 
 	if (__predict_true(m != NULL)) {
 		m_adj(m, sizeof(*cpl));
-		m->m_pkthdr.csum_flags |= (CSUM_IP_CHECKED | CSUM_IP_VALID |
-		    CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
+		m->m_pkthdr.csum_flags |= (CSUM_L3_CALC | CSUM_L3_VALID |
+		    CSUM_L4_CALC | CSUM_L4_VALID);
 		m->m_pkthdr.csum_data = 0xffff;
 		ifp->if_input(ifp, m);
 	}

Modified: user/andre/tcp_workqueue/sys/dev/e1000/if_em.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/e1000/if_em.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/e1000/if_em.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -4520,8 +4520,8 @@ em_receive_checksum(struct e1000_rx_desc
 		/* Did it pass? */
 		if (!(rx_desc->errors & E1000_RXD_ERR_IPE)) {
 			/* IP Checksum Good */
-			mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
-			mp->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+			mp->m_pkthdr.csum_flags |= CSUM_L3_CALC;
+			mp->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 
 		} else {
 			mp->m_pkthdr.csum_flags = 0;
@@ -4531,8 +4531,8 @@ em_receive_checksum(struct e1000_rx_desc
 	if (rx_desc->status & E1000_RXD_STAT_TCPCS) {
 		/* Did it pass? */
 		if (!(rx_desc->errors & E1000_RXD_ERR_TCPE)) {
-			mp->m_pkthdr.csum_flags |=
-			(CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
+			mp->m_pkthdr.csum_flags |= CSUM_L4_CALC;
+			mp->m_pkthdr.csum_flags |= CSUM_L4_VALID;
 			mp->m_pkthdr.csum_data = htons(0xffff);
 		}
 	}

Modified: user/andre/tcp_workqueue/sys/dev/e1000/if_igb.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/e1000/if_igb.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/e1000/if_igb.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -4672,8 +4672,8 @@ igb_rx_input(struct rx_ring *rxr, struct
 	    (ptype & E1000_RXDADV_PKTTYPE_ETQF) == 0 &&
 	    (ptype & (E1000_RXDADV_PKTTYPE_IPV4 | E1000_RXDADV_PKTTYPE_TCP)) ==
 	    (E1000_RXDADV_PKTTYPE_IPV4 | E1000_RXDADV_PKTTYPE_TCP) &&
-	    (m->m_pkthdr.csum_flags & (CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) == 
-	    (CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) {
+	    (m->m_pkthdr.csum_flags & (CSUM_L4_CALC | CSUM_L4_VALID)) == 
+	    (CSUM_L4_CALC | CSUM_L4_VALID)) {
 		/*
 		 * Send to the stack if:
 		 **  - LRO not enabled, or
@@ -4938,23 +4938,18 @@ igb_rx_checksum(u32 staterr, struct mbuf
 		/* Did it pass? */
 		if (!(errors & E1000_RXD_ERR_IPE)) {
 			/* IP Checksum Good */
-			mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
-			mp->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+			mp->m_pkthdr.csum_flags |= CSUM_L3_CALC;
+			mp->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 		} else
 			mp->m_pkthdr.csum_flags = 0;
 	}
 
 	if (status & (E1000_RXD_STAT_TCPCS | E1000_RXD_STAT_UDPCS)) {
-		u32 type = (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
-#if __FreeBSD_version >= 800000
-		if (sctp) /* reassign */
-			type = CSUM_SCTP_VALID;
-#endif
 		/* Did it pass? */
 		if (!(errors & E1000_RXD_ERR_TCPE)) {
-			mp->m_pkthdr.csum_flags |= type;
-			if (sctp == 0)
-				mp->m_pkthdr.csum_data = htons(0xffff);
+			mp->m_pkthdr.csum_flags |= CSUM_L4_CALC;
+			mp->m_pkthdr.csum_flags |= CSUM_L4_VALID;
+			mp->m_pkthdr.csum_data = htons(0xffff);
 		}
 	}
 	return;

Modified: user/andre/tcp_workqueue/sys/dev/e1000/if_lem.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/e1000/if_lem.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/e1000/if_lem.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -3677,8 +3677,8 @@ lem_receive_checksum(struct adapter *ada
 		/* Did it pass? */
 		if (!(rx_desc->errors & E1000_RXD_ERR_IPE)) {
 			/* IP Checksum Good */
-			mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
-			mp->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+			mp->m_pkthdr.csum_flags |= CSUM_L3_CALC;
+			mp->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 
 		} else {
 			mp->m_pkthdr.csum_flags = 0;
@@ -3688,8 +3688,8 @@ lem_receive_checksum(struct adapter *ada
 	if (rx_desc->status & E1000_RXD_STAT_TCPCS) {
 		/* Did it pass? */
 		if (!(rx_desc->errors & E1000_RXD_ERR_TCPE)) {
-			mp->m_pkthdr.csum_flags |=
-			(CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
+			mp->m_pkthdr.csum_flags |= CSUM_L4_CALC;
+			mp->m_pkthdr.csum_flags |= CSUM_L4_VALID;
 			mp->m_pkthdr.csum_data = htons(0xffff);
 		}
 	}

Modified: user/andre/tcp_workqueue/sys/dev/fxp/if_fxp.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/fxp/if_fxp.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/fxp/if_fxp.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -1690,13 +1690,13 @@ fxp_rxcsum(struct fxp_softc *sc, struct 
 	if (!(sc->flags & FXP_FLAG_82559_RXCSUM)) {
 		if (status & FXP_RFA_STATUS_PARSE) {
 			if (status & FXP_RFDX_CS_IP_CSUM_BIT_VALID)
-				m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
+				m->m_pkthdr.csum_flags |= CSUM_L3_CALC;
 			if (status & FXP_RFDX_CS_IP_CSUM_VALID)
-				m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+				m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 			if ((status & FXP_RFDX_CS_TCPUDP_CSUM_BIT_VALID) &&
 			    (status & FXP_RFDX_CS_TCPUDP_CSUM_VALID)) {
-				m->m_pkthdr.csum_flags |= CSUM_DATA_VALID |
-				    CSUM_PSEUDO_HDR;
+				m->m_pkthdr.csum_flags |= CSUM_L4_CALC;
+				m->m_pkthdr.csum_flags |= CSUM_L4_VALID;
 				m->m_pkthdr.csum_data = 0xffff;
 			}
 		}

Modified: user/andre/tcp_workqueue/sys/dev/gem/if_gem.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/gem/if_gem.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/gem/if_gem.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -539,7 +539,7 @@ gem_rxcksum(struct mbuf *m, uint64_t fla
 			cksum = temp32 & 65535;
 		}
 	}
-	m->m_pkthdr.csum_flags |= CSUM_DATA_VALID;
+	m->m_pkthdr.csum_flags |= CSUM_L4_CALC | CSUM_L4_VALID;
 	m->m_pkthdr.csum_data = cksum;
 }
 

Modified: user/andre/tcp_workqueue/sys/dev/hme/if_hme.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/hme/if_hme.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/hme/if_hme.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -1264,7 +1264,7 @@ hme_rxcksum(struct mbuf *m, u_int32_t fl
 			cksum = temp32 & 65535;
 		}
 	}
-	m->m_pkthdr.csum_flags |= CSUM_DATA_VALID;
+	m->m_pkthdr.csum_flags |= CSUM_L4_CALC | CSUM_L4_VALID;
 	m->m_pkthdr.csum_data = cksum;
 }
 

Modified: user/andre/tcp_workqueue/sys/dev/if_ndis/if_ndis.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/if_ndis/if_ndis.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/if_ndis/if_ndis.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -1459,12 +1459,12 @@ ndis_rxeof(adapter, packets, pktcnt)
 				if (csum->u.ntc_rxflags &
 				    NDIS_RXCSUM_IP_PASSED)
 					m0->m_pkthdr.csum_flags |=
-					    CSUM_IP_CHECKED|CSUM_IP_VALID;
+					    CSUM_L3_CALC|CSUM_L3_VALID;
 				if (csum->u.ntc_rxflags &
 				    (NDIS_RXCSUM_TCP_PASSED |
 				    NDIS_RXCSUM_UDP_PASSED)) {
 					m0->m_pkthdr.csum_flags |=
-					    CSUM_DATA_VALID|CSUM_PSEUDO_HDR;
+					    CSUM_L4_CALC|CSUM_L4_VALID;
 					m0->m_pkthdr.csum_data = 0xFFFF;
 				}
 			}

Modified: user/andre/tcp_workqueue/sys/dev/ixgb/if_ixgb.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/ixgb/if_ixgb.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/ixgb/if_ixgb.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -2268,8 +2268,8 @@ ixgb_receive_checksum(struct adapter * a
 		/* Did it pass? */
 		if (!(rx_desc->errors & IXGB_RX_DESC_ERRORS_IPE)) {
 			/* IP Checksum Good */
-			mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
-			mp->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+			mp->m_pkthdr.csum_flags |= CSUM_L3_CALC;
+			mp->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 
 		} else {
 			mp->m_pkthdr.csum_flags = 0;
@@ -2278,8 +2278,8 @@ ixgb_receive_checksum(struct adapter * a
 	if (rx_desc->status & IXGB_RX_DESC_STATUS_TCPCS) {
 		/* Did it pass? */
 		if (!(rx_desc->errors & IXGB_RX_DESC_ERRORS_TCPE)) {
-			mp->m_pkthdr.csum_flags |=
-				(CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
+			mp->m_pkthdr.csum_flags |= CSUM_L4_CALC;
+			mp->m_pkthdr.csum_flags |= CSUM_L4_VALID;
 			mp->m_pkthdr.csum_data = htons(0xffff);
 		}
 	}

Modified: user/andre/tcp_workqueue/sys/dev/ixgbe/ixgbe.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/ixgbe/ixgbe.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/ixgbe/ixgbe.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -4331,8 +4331,8 @@ ixgbe_rx_input(struct rx_ring *rxr, stru
             (IXGBE_RXDADV_PKTTYPE_IPV4 | IXGBE_RXDADV_PKTTYPE_TCP) ||
             (ptype & (IXGBE_RXDADV_PKTTYPE_IPV6 | IXGBE_RXDADV_PKTTYPE_TCP)) ==
             (IXGBE_RXDADV_PKTTYPE_IPV6 | IXGBE_RXDADV_PKTTYPE_TCP)) &&
-            (m->m_pkthdr.csum_flags & (CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) ==
-            (CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) {
+            (m->m_pkthdr.csum_flags & (CSUM_L4_CALC | CSUM_L4_VALID)) ==
+            (CSUM_L4_CALC | CSUM_L4_VALID)) {
                 /*
                  * Send to the stack if:
                  **  - LRO not enabled, or
@@ -4715,22 +4715,17 @@ ixgbe_rx_checksum(u32 staterr, struct mb
 	if (status & IXGBE_RXD_STAT_IPCS) {
 		if (!(errors & IXGBE_RXD_ERR_IPE)) {
 			/* IP Checksum Good */
-			mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
-			mp->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+			mp->m_pkthdr.csum_flags |= CSUM_L3_CALC;
+			mp->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 
 		} else
 			mp->m_pkthdr.csum_flags = 0;
 	}
 	if (status & IXGBE_RXD_STAT_L4CS) {
-		u32 type = (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
-#if __FreeBSD_version >= 800000
-		if (sctp)
-			type = CSUM_SCTP_VALID;
-#endif
 		if (!(errors & IXGBE_RXD_ERR_TCPE)) {
-			mp->m_pkthdr.csum_flags |= type;
-			if (!sctp)
-				mp->m_pkthdr.csum_data = htons(0xffff);
+			mp->m_pkthdr.csum_flags |= CSUM_L4_CALC;
+			mp->m_pkthdr.csum_flags |= CSUM_L4_VALID;
+			mp->m_pkthdr.csum_data = htons(0xffff);
 		} 
 	}
 	return;

Modified: user/andre/tcp_workqueue/sys/dev/ixgbe/ixv.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/ixgbe/ixv.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/ixgbe/ixv.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -3238,8 +3238,8 @@ ixv_rx_input(struct rx_ring *rxr, struct
             (ptype & IXGBE_RXDADV_PKTTYPE_ETQF) == 0 &&
             (ptype & (IXGBE_RXDADV_PKTTYPE_IPV4 | IXGBE_RXDADV_PKTTYPE_TCP)) ==
             (IXGBE_RXDADV_PKTTYPE_IPV4 | IXGBE_RXDADV_PKTTYPE_TCP) &&
-            (m->m_pkthdr.csum_flags & (CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) ==
-            (CSUM_DATA_VALID | CSUM_PSEUDO_HDR)) {
+            (m->m_pkthdr.csum_flags & (CSUM_L4_CALC | CSUM_L4_VALID)) ==
+            (CSUM_L4_CALC | CSUM_L4_VALID)) {
                 /*
                  * Send to the stack if:
                  **  - LRO not enabled, or
@@ -3547,22 +3547,17 @@ ixv_rx_checksum(u32 staterr, struct mbuf
 	if (status & IXGBE_RXD_STAT_IPCS) {
 		if (!(errors & IXGBE_RXD_ERR_IPE)) {
 			/* IP Checksum Good */
-			mp->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
-			mp->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+			mp->m_pkthdr.csum_flags |= CSUM_L3_CALC;
+			mp->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 
 		} else
 			mp->m_pkthdr.csum_flags = 0;
 	}
 	if (status & IXGBE_RXD_STAT_L4CS) {
-		u32 type = (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
-#if __FreeBSD_version >= 800000
-		if (sctp)
-			type = CSUM_SCTP_VALID;
-#endif
 		if (!(errors & IXGBE_RXD_ERR_TCPE)) {
-			mp->m_pkthdr.csum_flags |= type;
-			if (!sctp)
-				mp->m_pkthdr.csum_data = htons(0xffff);
+			mp->m_pkthdr.csum_flags |= CSUM_L4_CALC;
+			mp->m_pkthdr.csum_flags |= CSUM_L4_VALID;
+			mp->m_pkthdr.csum_data = htons(0xffff);
 		} 
 	}
 	return;

Modified: user/andre/tcp_workqueue/sys/dev/jme/if_jme.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/jme/if_jme.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/jme/if_jme.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -2605,16 +2605,16 @@ jme_rxeof(struct jme_softc *sc)
 			/* Set checksum information. */
 			if ((ifp->if_capenable & IFCAP_RXCSUM) != 0 &&
 			    (flags & JME_RD_IPV4) != 0) {
-				m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
+				m->m_pkthdr.csum_flags |= CSUM_L3_CALC;
 				if ((flags & JME_RD_IPCSUM) != 0)
-					m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+					m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 				if (((flags & JME_RD_MORE_FRAG) == 0) &&
 				    ((flags & (JME_RD_TCP | JME_RD_TCPCSUM)) ==
 				    (JME_RD_TCP | JME_RD_TCPCSUM) ||
 				    (flags & (JME_RD_UDP | JME_RD_UDPCSUM)) ==
 				    (JME_RD_UDP | JME_RD_UDPCSUM))) {
 					m->m_pkthdr.csum_flags |=
-					    CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+					    CSUM_L4_CALC | CSUM_L4_VALID;
 					m->m_pkthdr.csum_data = 0xffff;
 				}
 			}

Modified: user/andre/tcp_workqueue/sys/dev/lge/if_lge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/lge/if_lge.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/lge/if_lge.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -944,15 +944,15 @@ lge_rxeof(sc, cnt)
 
 		/* Do IP checksum checking. */
 		if (rxsts & LGE_RXSTS_ISIP)
-			m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
+			m->m_pkthdr.csum_flags |= CSUM_L3_CALC;
 		if (!(rxsts & LGE_RXSTS_IPCSUMERR))
-			m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+			m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 		if ((rxsts & LGE_RXSTS_ISTCP &&
 		    !(rxsts & LGE_RXSTS_TCPCSUMERR)) ||
 		    (rxsts & LGE_RXSTS_ISUDP &&
 		    !(rxsts & LGE_RXSTS_UDPCSUMERR))) {
 			m->m_pkthdr.csum_flags |=
-			    CSUM_DATA_VALID|CSUM_PSEUDO_HDR;
+			    CSUM_L4_CALC|CSUM_L4_VALID;
 			m->m_pkthdr.csum_data = 0xffff;
 		}
 

Modified: user/andre/tcp_workqueue/sys/dev/mge/if_mge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/mge/if_mge.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/mge/if_mge.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -1661,12 +1661,12 @@ mge_offload_process_frame(struct ifnet *
 
 	if (ifp->if_capenable & IFCAP_RXCSUM) {
 		if ((status & MGE_RX_L3_IS_IP) && (status & MGE_RX_IP_OK))
-			csum_flags |= CSUM_IP_CHECKED | CSUM_IP_VALID;
+			csum_flags |= CSUM_L3_CALC | CSUM_L3_VALID;
 
 		if ((bufsize & MGE_RX_IP_FRAGMENT) == 0 &&
 		    (MGE_RX_L4_IS_TCP(status) || MGE_RX_L4_IS_UDP(status)) &&
 		    (status & MGE_RX_L4_CSUM_OK)) {
-			csum_flags |= CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+			csum_flags |= CSUM_L4_CALC | CSUM_L4_VALID;
 			frame->m_pkthdr.csum_data = 0xFFFF;
 		}
 

Modified: user/andre/tcp_workqueue/sys/dev/msk/if_msk.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/msk/if_msk.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/msk/if_msk.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -3098,13 +3098,13 @@ msk_rxcsum(struct msk_if_softc *sc_if, u
 
 	if ((sc_if->msk_flags & MSK_FLAG_DESCV2) != 0) {
 		if ((control & (CSS_IPV4 | CSS_IPFRAG)) == CSS_IPV4) {
-			m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
+			m->m_pkthdr.csum_flags |= CSUM_L3_CALC;
 			if ((control & CSS_IPV4_CSUM_OK) != 0)
-				m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+				m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 			if ((control & (CSS_TCP | CSS_UDP)) != 0 &&
 			    (control & (CSS_TCPUDP_CSUM_OK)) != 0) {
-				m->m_pkthdr.csum_flags |= CSUM_DATA_VALID |
-				    CSUM_PSEUDO_HDR;
+				m->m_pkthdr.csum_flags |= CSUM_L4_CALC |
+				    CSUM_L4_VALID;
 				m->m_pkthdr.csum_data = 0xffff;
 			}
 		}
@@ -3173,7 +3173,7 @@ msk_rxcsum(struct msk_if_softc *sc_if, u
 			csum = temp32 & 65535;
 		}
 	}
-	m->m_pkthdr.csum_flags |= CSUM_DATA_VALID;
+	m->m_pkthdr.csum_flags |= CSUM_L4_CALC | CSUM_L4_VALID;
 	m->m_pkthdr.csum_data = csum;
 }
 

Modified: user/andre/tcp_workqueue/sys/dev/mxge/if_mxge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/mxge/if_mxge.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/mxge/if_mxge.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -2045,13 +2045,12 @@ mxge_encap(struct mxge_slice_state *ss, 
 	ifp = sc->ifp;
 	tx = &ss->tx;
 
-	ip_off = sizeof (struct ether_header);
+	ip_off = m->m_pkthdr.csum_l2hlen;
 #ifdef MXGE_NEW_VLAN_API
 	if (m->m_flags & M_VLANTAG) {
 		m = mxge_vlan_tag_insert(m);
 		if (__predict_false(m == NULL))
 			goto drop;
-		ip_off += ETHER_VLAN_ENCAP_LEN;
 	}
 #endif
 	/* (try to) map the frame for DMA */
@@ -2096,18 +2095,12 @@ mxge_encap(struct mxge_slice_state *ss, 
 	flags = MXGEFW_FLAGS_NO_TSO;
 
 	/* checksum offloading? */
-	if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA)) {
+	if (m->m_pkthdr.csum_flags & (CSUM_IP_UDP|CSUM_IP_TCP)) {
 		/* ensure ip header is in first mbuf, copy
 		   it to a scratch buffer if not */
-		if (__predict_false(m->m_len < ip_off + sizeof (*ip))) {
-			m_copydata(m, 0, ip_off + sizeof (*ip),
-				   ss->scratch);
-			ip = (struct ip *)(ss->scratch + ip_off);
-		} else {
-			ip = (struct ip *)(mtod(m, char *) + ip_off);
-		}
+		ip = mtodo(m, ip_off, struct ip *);
 		cksum_offset = ip_off + (ip->ip_hl << 2);
-		pseudo_hdr_offset = cksum_offset +  m->m_pkthdr.csum_data;
+		pseudo_hdr_offset = cksum_offset + m->m_pkthdr.csum_l3hlen;
 		pseudo_hdr_offset = htobe16(pseudo_hdr_offset);
 		req->cksum_offset = cksum_offset;
 		flags |= MXGEFW_FLAGS_CKSUM;
@@ -2595,7 +2588,7 @@ mxge_rx_done_big(struct mxge_slice_state
 		   we could not do LRO on.  Tell the stack that the
 		   checksum is good */
 		m->m_pkthdr.csum_data = 0xffff;
-		m->m_pkthdr.csum_flags = CSUM_PSEUDO_HDR | CSUM_DATA_VALID;
+		m->m_pkthdr.csum_flags = CSUM_L4_CALC | CSUM_L4_VALID;
 	}
 	/* flowid only valid if RSS hashing is enabled */
 	if (sc->num_slices > 1) {
@@ -2660,7 +2653,7 @@ mxge_rx_done_small(struct mxge_slice_sta
 		   we could not do LRO on.  Tell the stack that the
 		   checksum is good */
 		m->m_pkthdr.csum_data = 0xffff;
-		m->m_pkthdr.csum_flags = CSUM_PSEUDO_HDR | CSUM_DATA_VALID;
+		m->m_pkthdr.csum_flags = CSUM_L4_CALC | CSUM_L4_VALID;
 	}
 	/* flowid only valid if RSS hashing is enabled */
 	if (sc->num_slices > 1) {

Modified: user/andre/tcp_workqueue/sys/dev/mxge/mxge_lro.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/mxge/mxge_lro.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/mxge/mxge_lro.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -97,8 +97,8 @@ mxge_lro_flush(struct mxge_slice_state *
 			mxge_csum_generic((uint16_t*)ip,
 					      sizeof (*ip));
 
-		lro->m_head->m_pkthdr.csum_flags = CSUM_IP_CHECKED |
-			CSUM_IP_VALID | CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+		lro->m_head->m_pkthdr.csum_flags = CSUM_L3_CALC |
+			CSUM_L3_VALID | CSUM_L4_CALC | CSUM_L4_VALID;
 		lro->m_head->m_pkthdr.csum_data = 0xffff;
 		lro->m_head->m_pkthdr.len = lro->len;
 

Modified: user/andre/tcp_workqueue/sys/dev/nfe/if_nfe.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/nfe/if_nfe.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/nfe/if_nfe.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -2165,12 +2165,12 @@ nfe_rxeof(struct nfe_softc *sc, int coun
 
 		if ((ifp->if_capenable & IFCAP_RXCSUM) != 0) {
 			if ((flags & NFE_RX_IP_CSUMOK) != 0) {
-				m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
-				m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+				m->m_pkthdr.csum_flags |= CSUM_L3_CALC;
+				m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 				if ((flags & NFE_RX_TCP_CSUMOK) != 0 ||
 				    (flags & NFE_RX_UDP_CSUMOK) != 0) {
 					m->m_pkthdr.csum_flags |=
-					    CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+					    CSUM_L4_CALC | CSUM_L4_VALID;
 					m->m_pkthdr.csum_data = 0xffff;
 				}
 			}
@@ -2281,12 +2281,12 @@ nfe_jrxeof(struct nfe_softc *sc, int cou
 
 		if ((ifp->if_capenable & IFCAP_RXCSUM) != 0) {
 			if ((flags & NFE_RX_IP_CSUMOK) != 0) {
-				m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
-				m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+				m->m_pkthdr.csum_flags |= CSUM_L3_CALC;
+				m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 				if ((flags & NFE_RX_TCP_CSUMOK) != 0 ||
 				    (flags & NFE_RX_UDP_CSUMOK) != 0) {
 					m->m_pkthdr.csum_flags |=
-					    CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+					    CSUM_L4_CALC | CSUM_L4_VALID;
 					m->m_pkthdr.csum_data = 0xffff;
 				}
 			}

Modified: user/andre/tcp_workqueue/sys/dev/nge/if_nge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/nge/if_nge.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/nge/if_nge.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -1569,15 +1569,15 @@ nge_rxeof(struct nge_softc *sc)
 		if ((ifp->if_capenable & IFCAP_RXCSUM) != 0) {
 			/* Do IP checksum checking. */
 			if ((extsts & NGE_RXEXTSTS_IPPKT) != 0)
-				m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
+				m->m_pkthdr.csum_flags |= CSUM_L3_CALC;
 			if ((extsts & NGE_RXEXTSTS_IPCSUMERR) == 0)
-				m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+				m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 			if ((extsts & NGE_RXEXTSTS_TCPPKT &&
 			    !(extsts & NGE_RXEXTSTS_TCPCSUMERR)) ||
 			    (extsts & NGE_RXEXTSTS_UDPPKT &&
 			    !(extsts & NGE_RXEXTSTS_UDPCSUMERR))) {
 				m->m_pkthdr.csum_flags |=
-				    CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+				    CSUM_L4_CALC | CSUM_L4_VALID;
 				m->m_pkthdr.csum_data = 0xffff;
 			}
 		}

Modified: user/andre/tcp_workqueue/sys/dev/nxge/if_nxge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/nxge/if_nxge.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/nxge/if_nxge.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -2434,9 +2434,10 @@ _exit:
 void
 xge_set_mbuf_cflags(mbuf_t pkt)
 {
-	pkt->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
-	pkt->m_pkthdr.csum_flags |= CSUM_IP_VALID;
-	pkt->m_pkthdr.csum_flags |= (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
+	/* XXXAO: Is this really unconditionally true? */
+	pkt->m_pkthdr.csum_flags = CSUM_L3_CALC;
+	pkt->m_pkthdr.csum_flags |= CSUM_L3_VALID;
+	pkt->m_pkthdr.csum_flags |= (CSUM_L4_CALC | CSUM_L4_VALID);
 	pkt->m_pkthdr.csum_data = htons(0xffff);
 }
 

Modified: user/andre/tcp_workqueue/sys/dev/oce/oce_if.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/oce/oce_if.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/oce/oce_if.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -1255,13 +1255,13 @@ oce_rx(struct oce_rq *rq, uint32_t rqe_i
 			if (IF_CSUM_ENABLED(sc)) {
 				if (cqe->u0.s.l4_cksum_pass) {
 					pd->mbuf->m_pkthdr.csum_flags |=
-					    (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
+					    (CSUM_L4_CALC | CSUM_L4_VALID);
 					pd->mbuf->m_pkthdr.csum_data = 0xffff;
 				}
 				if (cqe->u0.s.ip_cksum_pass) {
 					if (!cqe->u0.s.ip_ver) { /* IPV4 */
 						pd->mbuf->m_pkthdr.csum_flags |=
-						(CSUM_IP_CHECKED|CSUM_IP_VALID);
+						(CSUM_L3_CALC|CSUM_L3_VALID);
 					}
 				}
 			}

Modified: user/andre/tcp_workqueue/sys/dev/qlxgb/qla_isr.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/qlxgb/qla_isr.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/qlxgb/qla_isr.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -132,7 +132,7 @@ qla_rx_intr(qla_host_t *ha, uint64_t dat
 	}
 
 	if (status == Q8_STAT_DESC_STATUS_CHKSUM_OK) {
-		mp->m_pkthdr.csum_flags = (CSUM_IP_CHECKED | CSUM_IP_VALID);
+		mp->m_pkthdr.csum_flags = (CSUM_L3_CALC | CSUM_L3_VALID);
 	} else {
 		mp->m_pkthdr.csum_flags = 0;
 	}

Modified: user/andre/tcp_workqueue/sys/dev/re/if_re.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/re/if_re.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/re/if_re.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -2281,10 +2281,10 @@ re_rxeof(struct rl_softc *sc, int *rx_np
 				/* Check IP header checksum */
 				if (rxstat & RL_RDESC_STAT_PROTOID)
 					m->m_pkthdr.csum_flags |=
-					    CSUM_IP_CHECKED;
+					    CSUM_L3_CALC;
 				if (!(rxstat & RL_RDESC_STAT_IPSUMBAD))
 					m->m_pkthdr.csum_flags |=
-					    CSUM_IP_VALID;
+					    CSUM_L3_VALID;
 
 				/* Check TCP/UDP checksum */
 				if ((RL_TCPPKT(rxstat) &&
@@ -2292,7 +2292,7 @@ re_rxeof(struct rl_softc *sc, int *rx_np
 				    (RL_UDPPKT(rxstat) &&
 				     !(rxstat & RL_RDESC_STAT_UDPSUMBAD))) {
 					m->m_pkthdr.csum_flags |=
-						CSUM_DATA_VALID|CSUM_PSEUDO_HDR;
+						CSUM_L4_CALC|CSUM_L4_VALID;
 					m->m_pkthdr.csum_data = 0xffff;
 				}
 			} else {
@@ -2302,17 +2302,17 @@ re_rxeof(struct rl_softc *sc, int *rx_np
 				if ((rxstat & RL_RDESC_STAT_PROTOID) &&
 				    (rxvlan & RL_RDESC_IPV4))
 					m->m_pkthdr.csum_flags |=
-					    CSUM_IP_CHECKED;
+					    CSUM_L3_CALC;
 				if (!(rxstat & RL_RDESC_STAT_IPSUMBAD) &&
 				    (rxvlan & RL_RDESC_IPV4))
 					m->m_pkthdr.csum_flags |=
-					    CSUM_IP_VALID;
+					    CSUM_L3_VALID;
 				if (((rxstat & RL_RDESC_STAT_TCP) &&
 				    !(rxstat & RL_RDESC_STAT_TCPSUMBAD)) ||
 				    ((rxstat & RL_RDESC_STAT_UDP) &&
 				    !(rxstat & RL_RDESC_STAT_UDPSUMBAD))) {
 					m->m_pkthdr.csum_flags |=
-						CSUM_DATA_VALID|CSUM_PSEUDO_HDR;
+						CSUM_L4_CALC|CSUM_L4_CALC;
 					m->m_pkthdr.csum_data = 0xffff;
 				}
 			}

Modified: user/andre/tcp_workqueue/sys/dev/rt/if_rt.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/rt/if_rt.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/rt/if_rt.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -1712,8 +1712,8 @@ rt_rx_eof(struct rt_softc *sc, int limit
 				}
 			}
 			if ((desc_flags & RXDSXR_SRC_IP_CSUM_FAIL) != 0) {
-				m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
-				m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+				m->m_pkthdr.csum_flags |= CSUM_L3_CALC;
+				m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 				m->m_pkthdr.csum_data = 0xffff;
 			}
 			m->m_flags &= ~M_HASFCS;

Modified: user/andre/tcp_workqueue/sys/dev/sf/if_sf.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/sf/if_sf.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/sf/if_sf.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -1619,8 +1619,8 @@ sf_rxeof(struct sf_softc *sc)
 				    SF_RXSTAT2_UDP)) != 0) {
 					if ((status2 & SF_RXSTAT2_CSUM_OK)) {
 						m->m_pkthdr.csum_flags =
-						    CSUM_DATA_VALID |
-						    CSUM_PSEUDO_HDR;
+						    CSUM_L4_CALC |
+						    CSUM_L4_VALID;
 						m->m_pkthdr.csum_data = 0xffff;
 					}
 				}
@@ -1631,7 +1631,7 @@ sf_rxeof(struct sf_softc *sc)
 				    SF_RXSTAT2_UDP)) != 0) {
 					if ((status2 & SF_RXSTAT2_PCSUM_OK)) {
 						m->m_pkthdr.csum_flags =
-						    CSUM_DATA_VALID;
+						    CSUM_L4_CALC; /*XXXAO*/
 						m->m_pkthdr.csum_data =
 						    (status &
 						    SF_RX_CMPDESC_CSUM2);

Modified: user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_rx.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_rx.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_rx.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -295,9 +295,9 @@ sfxge_rx_deliver(struct sfxge_softc *sc,
 
 	/* Convert checksum flags */
 	csum_flags = (rx_desc->flags & EFX_CKSUM_IPV4) ?
-		(CSUM_IP_CHECKED | CSUM_IP_VALID) : 0;
+		(CSUM_L3_CALC | CSUM_L3_VALID) : 0;
 	if (rx_desc->flags & EFX_CKSUM_TCPUDP)
-		csum_flags |= CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+		csum_flags |= CSUM_L4_CALC | CSUM_L4_VALID;
 
 #ifdef SFXGE_HAVE_MQ
 	/* The hash covers a 4-tuple for TCP only */
@@ -336,13 +336,13 @@ sfxge_lro_deliver(struct sfxge_lro_state
 		iph->ip_sum = 0;
 		iph->ip_sum = in_cksum_hdr(iph);
 		c_th = (struct tcphdr *)(iph + 1);
-		csum_flags = (CSUM_DATA_VALID | CSUM_PSEUDO_HDR |
-			      CSUM_IP_CHECKED | CSUM_IP_VALID);
+		csum_flags = (CSUM_L4_CALC | CSUM_L4_VALID |
+			      CSUM_L3_CALC | CSUM_L4_VALID);
 	} else {
 		struct ip6_hdr *iph = c->nh;
 		iph->ip6_plen = htons(iph->ip6_plen);
 		c_th = (struct tcphdr *)(iph + 1);
-		csum_flags = CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+		csum_flags = CSUM_L4_CALC | CSUM_L4_VALID;
 	}
 
 	c_th->th_win = c->th_last->th_win;

Modified: user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_tx.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_tx.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_tx.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -592,7 +592,7 @@ sfxge_if_transmit(struct ifnet *ifp, str
 	}
 
 	/* Pick the desired transmit queue. */
-	if (m->m_pkthdr.csum_flags & (CSUM_DELAY_DATA | CSUM_TSO)) {
+	if (m->m_pkthdr.csum_flags & (CSUM_IP_UDP|CSUM_IP_TCP|CSUM_TSO)) {
 		int index = 0;
 
 		if (m->m_flags & M_FLOWID) {
@@ -601,7 +601,7 @@ sfxge_if_transmit(struct ifnet *ifp, str
 			index = sc->rx_indir_table[hash % SFXGE_RX_SCALE_MAX];
 		}
 		txq = sc->txq[SFXGE_TXQ_IP_TCP_UDP_CKSUM + index];
-	} else if (m->m_pkthdr.csum_flags & CSUM_DELAY_IP) {
+	} else if (m->m_pkthdr.csum_flags & CSUM_IP) {
 		txq = sc->txq[SFXGE_TXQ_IP_CKSUM];
 	} else {
 		txq = sc->txq[SFXGE_TXQ_NON_CKSUM];

Modified: user/andre/tcp_workqueue/sys/dev/sge/if_sge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/sge/if_sge.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/sge/if_sge.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -1183,13 +1183,13 @@ sge_rxeof(struct sge_softc *sc)
 			if ((rxinfo & RDC_IP_CSUM) != 0 &&
 			    (rxinfo & RDC_IP_CSUM_OK) != 0)
 				m->m_pkthdr.csum_flags |=
-				    CSUM_IP_CHECKED | CSUM_IP_VALID;
+				    CSUM_L3_CALC | CSUM_L3_VALID;
 			if (((rxinfo & RDC_TCP_CSUM) != 0 &&
 			    (rxinfo & RDC_TCP_CSUM_OK) != 0) ||
 			    ((rxinfo & RDC_UDP_CSUM) != 0 &&
 			    (rxinfo & RDC_UDP_CSUM_OK) != 0)) {
 				m->m_pkthdr.csum_flags |=
-				    CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
+				    CSUM_L4_CALC | CSUM_L4_VALID;
 				m->m_pkthdr.csum_data = 0xffff;
 			}
 		}

Modified: user/andre/tcp_workqueue/sys/dev/sk/if_sk.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/sk/if_sk.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/sk/if_sk.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -2705,9 +2705,9 @@ sk_rxcksum(ifp, m, csum)
 		 */
 		return;
 	}
-	m->m_pkthdr.csum_flags = CSUM_IP_CHECKED;
+	m->m_pkthdr.csum_flags = CSUM_L3_CALC;
 	if (ipcsum == 0xffff)
-		m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+		m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 }
 
 static __inline int

Modified: user/andre/tcp_workqueue/sys/dev/stge/if_stge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/stge/if_stge.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/stge/if_stge.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -1726,17 +1726,17 @@ stge_rxeof(struct stge_softc *sc)
 			if ((ifp->if_capenable & IFCAP_RXCSUM) != 0) {
 				if ((status & RFD_IPDetected) != 0) {
 					m->m_pkthdr.csum_flags |=
-						CSUM_IP_CHECKED;
+						CSUM_L3_CALC;
 					if ((status & RFD_IPError) == 0)
 						m->m_pkthdr.csum_flags |=
-						    CSUM_IP_VALID;
+						    CSUM_L3_VALID;
 				}
 				if (((status & RFD_TCPDetected) != 0 &&
 				    (status & RFD_TCPError) == 0) ||
 				    ((status & RFD_UDPDetected) != 0 &&
 				    (status & RFD_UDPError) == 0)) {
 					m->m_pkthdr.csum_flags |=
-					    (CSUM_DATA_VALID | CSUM_PSEUDO_HDR);
+					    (CSUM_L4_CALC | CSUM_L4_VALID);
 					m->m_pkthdr.csum_data = 0xffff;
 				}
 			}

Modified: user/andre/tcp_workqueue/sys/dev/ti/if_ti.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/ti/if_ti.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/ti/if_ti.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -2866,14 +2866,16 @@ ti_rxeof(struct ti_softc *sc)
 
 		if (ifp->if_capenable & IFCAP_RXCSUM) {
 			if (cur_rx->ti_flags & TI_BDFLAG_IP_CKSUM) {
-				m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
+				m->m_pkthdr.csum_flags |= CSUM_L3_CALC;
 				if ((cur_rx->ti_ip_cksum ^ 0xffff) == 0)
-					m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+					m->m_pkthdr.csum_flags |= CSUM_L3_VALID;
 			}
 			if (cur_rx->ti_flags & TI_BDFLAG_TCP_UDP_CKSUM) {
 				m->m_pkthdr.csum_data =
 				    cur_rx->ti_tcp_udp_cksum;
-				m->m_pkthdr.csum_flags |= CSUM_DATA_VALID;
+				m->m_pkthdr.csum_flags |= CSUM_L4_CALC;
+				/* XXXAO: look at specs. */
+				m->m_pkthdr.csum_flags |= CSUM_L4_VALID;
 			}
 		}
 
@@ -3167,7 +3169,7 @@ ti_start_locked(struct ifnet *ifp)
 		 * (paranoia -- may not actually be needed)
 		 */
 		if (m_head->m_flags & M_FIRSTFRAG &&
-		    m_head->m_pkthdr.csum_flags & (CSUM_DELAY_DATA)) {
+		    m_head->m_pkthdr.csum_flags & (CSUM_IP_UDP|CSUM_IP_TCP)) {
 			if ((TI_TX_RING_CNT - sc->ti_txcnt) <
 			    m_head->m_pkthdr.csum_data + 16) {
 				IFQ_DRV_PREPEND(&ifp->if_snd, m_head);

Modified: user/andre/tcp_workqueue/sys/dev/tsec/if_tsec.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/tsec/if_tsec.c	Mon Nov 19 18:04:17 2012	(r243291)
+++ user/andre/tcp_workqueue/sys/dev/tsec/if_tsec.c	Mon Nov 19 18:09:00 2012	(r243292)
@@ -1847,17 +1847,17 @@ tsec_offload_process_frame(struct tsec_s
 	protocol = rx_fcb.protocol;
 
 	if (TSEC_RX_FCB_IP_CSUM_CHECKED(flags)) {
-		csum_flags |= CSUM_IP_CHECKED;
+		csum_flags |= CSUM_L3_CALC;
 
 		if ((flags & TSEC_RX_FCB_IP_CSUM_ERROR) == 0)
-			csum_flags |= CSUM_IP_VALID;
+			csum_flags |= CSUM_L3_VALID;
 	}
 
 	if ((protocol == IPPROTO_TCP || protocol == IPPROTO_UDP) &&

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211191809.qAJI90Vb015606>