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>