Page MenuHomeFreeBSD

D27639.id80781.diff
No OneTemporary

D27639.id80781.diff

Index: sys/dev/ixl/ixl.h
===================================================================
--- sys/dev/ixl/ixl.h
+++ sys/dev/ixl/ixl.h
@@ -387,6 +387,7 @@
u64 rx_packets;
u64 rx_bytes;
u64 desc_errs;
+ u64 csum_errs;
};
/*
Index: sys/dev/ixl/ixl_pf_main.c
===================================================================
--- sys/dev/ixl/ixl_pf_main.c
+++ sys/dev/ixl/ixl_pf_main.c
@@ -766,6 +766,11 @@
vsi_list = SYSCTL_CHILDREN(vsi->vsi_node);
ixl_add_sysctls_eth_stats(&vsi->sysctl_ctx, vsi_list, &vsi->eth_stats);
+ /* Copy of netstat RX errors counter for validation purposes */
+ SYSCTL_ADD_UQUAD(&vsi->sysctl_ctx, vsi_list, OID_AUTO, "rx_errors",
+ CTLFLAG_RD, &vsi->ierrors,
+ "RX packet errors");
+
if (queues_sysctls)
ixl_vsi_add_queues_stats(vsi, &vsi->sysctl_ctx);
}
@@ -1984,7 +1989,7 @@
struct ixl_pf *pf;
struct ifnet *ifp;
struct i40e_eth_stats *es;
- u64 tx_discards;
+ u64 tx_discards, csum_errs;
struct i40e_hw_port_stats *nsd;
@@ -1997,6 +2002,11 @@
tx_discards = es->tx_discards + nsd->tx_dropped_link_down;
+ csum_errs = 0;
+ for (int i = 0; i < vsi->num_rx_queues; i++)
+ csum_errs += vsi->rx_queues[i].rxr.csum_errs;
+ nsd->checksum_error = csum_errs;
+
/* Update ifnet stats */
IXL_SET_IPACKETS(vsi, es->rx_unicast +
es->rx_multicast +
@@ -2010,7 +2020,8 @@
IXL_SET_OMCASTS(vsi, es->tx_multicast);
IXL_SET_IERRORS(vsi, nsd->crc_errors + nsd->illegal_bytes +
- nsd->rx_undersize + nsd->rx_oversize + nsd->rx_fragments +
+ nsd->checksum_error + nsd->rx_length_errors +
+ nsd->rx_undersize + nsd->rx_fragments + nsd->rx_oversize +
nsd->rx_jabber);
IXL_SET_OERRORS(vsi, es->tx_errors);
IXL_SET_IQDROPS(vsi, es->rx_discards + nsd->eth.rx_discards);
Index: sys/dev/ixl/ixl_txrx.c
===================================================================
--- sys/dev/ixl/ixl_txrx.c
+++ sys/dev/ixl/ixl_txrx.c
@@ -51,7 +51,7 @@
#endif
/* Local Prototypes */
-static void ixl_rx_checksum(if_rxd_info_t ri, u32 status, u32 error, u8 ptype);
+static u8 ixl_rx_checksum(if_rxd_info_t ri, u32 status, u32 error, u8 ptype);
static int ixl_isc_txd_encap(void *arg, if_pkt_info_t pi);
static void ixl_isc_txd_flush(void *arg, uint16_t txqid, qidx_t pidx);
@@ -720,7 +720,7 @@
rxr->rx_packets++;
if ((if_getcapenable(vsi->ifp) & IFCAP_RXCSUM) != 0)
- ixl_rx_checksum(ri, status, error, ptype);
+ rxr->csum_errs += ixl_rx_checksum(ri, status, error, ptype);
ri->iri_flowid = le32toh(cur->wb.qword0.hi_dword.rss);
ri->iri_rsstype = ixl_ptype_to_hash(ptype);
ri->iri_vtag = vtag;
@@ -737,7 +737,7 @@
* doesn't spend time verifying the checksum.
*
*********************************************************************/
-static void
+static u8
ixl_rx_checksum(if_rxd_info_t ri, u32 status, u32 error, u8 ptype)
{
struct i40e_rx_ptype_decoded decoded;
@@ -746,7 +746,7 @@
/* No L3 or L4 checksum was calculated */
if (!(status & (1 << I40E_RX_DESC_STATUS_L3L4P_SHIFT)))
- return;
+ return (0);
decoded = decode_rx_desc_ptype(ptype);
@@ -756,7 +756,7 @@
if (status &
(1 << I40E_RX_DESC_STATUS_IPV6EXADD_SHIFT)) {
ri->iri_csum_flags = 0;
- return;
+ return (1);
}
}
@@ -764,17 +764,19 @@
/* IPv4 checksum error */
if (error & (1 << I40E_RX_DESC_ERROR_IPE_SHIFT))
- return;
+ return (1);
ri->iri_csum_flags |= CSUM_L3_VALID;
ri->iri_csum_flags |= CSUM_L4_CALC;
/* L4 checksum error */
if (error & (1 << I40E_RX_DESC_ERROR_L4E_SHIFT))
- return;
+ return (1);
ri->iri_csum_flags |= CSUM_L4_VALID;
ri->iri_csum_data |= htons(0xffff);
+
+ return (0);
}
/* Set Report Status queue fields to 0 */

File Metadata

Mime Type
text/plain
Expires
Mon, Aug 3, 12:47 AM (3 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35876281
Default Alt Text
D27639.id80781.diff (3 KB)

Event Timeline