From bf7889db2615341f454c94fed6e31fc11aa3fe39 Mon Sep 17 00:00:00 2001 From: Jijiang Liu Date: Tue, 23 Jun 2015 00:41:04 +0800 Subject: [PATCH] examples/tep_term: add bad Rx checksum statistics Add the bad Rx checksum statistics of inner IP and L4. The number of packets with bad RX IP and L4 checksum in inner header is recorded. Signed-off-by: Jijiang Liu --- examples/tep_termination/main.c | 10 +++++++++- examples/tep_termination/main.h | 4 ++++ examples/tep_termination/vxlan_setup.c | 10 ++++++++++ examples/tep_termination/vxlan_setup.h | 2 ++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/examples/tep_termination/main.c b/examples/tep_termination/main.c index 1673c0f7ee..6c7f44f9e6 100644 --- a/examples/tep_termination/main.c +++ b/examples/tep_termination/main.c @@ -1058,7 +1058,7 @@ print_stats(void) { struct virtio_net_data_ll *dev_ll; uint64_t tx_dropped, rx_dropped; - uint64_t tx, tx_total, rx, rx_total; + uint64_t tx, tx_total, rx, rx_total, rx_ip_csum, rx_l4_csum; uint32_t device_fh; const char clr[] = { 27, '[', '2', 'J', '\0' }; const char top_left[] = { 27, '[', '1', ';', '1', 'H', '\0' }; @@ -1083,12 +1083,18 @@ print_stats(void) rx = rte_atomic64_read( &dev_statistics[device_fh].rx_atomic); rx_dropped = rx_total - rx; + rx_ip_csum = rte_atomic64_read( + &dev_statistics[device_fh].rx_bad_ip_csum); + rx_l4_csum = rte_atomic64_read( + &dev_statistics[device_fh].rx_bad_l4_csum); printf("\nStatistics for device %"PRIu32" ----------" "\nTX total: %"PRIu64"" "\nTX dropped: %"PRIu64"" "\nTX successful: %"PRIu64"" "\nRX total: %"PRIu64"" + "\nRX bad IP csum: %"PRIu64"" + "\nRX bad L4 csum: %"PRIu64"" "\nRX dropped: %"PRIu64"" "\nRX successful: %"PRIu64"", device_fh, @@ -1096,6 +1102,8 @@ print_stats(void) tx_dropped, tx, rx_total, + rx_ip_csum, + rx_l4_csum, rx_dropped, rx); diff --git a/examples/tep_termination/main.h b/examples/tep_termination/main.h index 20fa5b3ad1..a34301ad9b 100644 --- a/examples/tep_termination/main.h +++ b/examples/tep_termination/main.h @@ -69,6 +69,10 @@ struct device_statistics { uint64_t rx_total; uint64_t tx; rte_atomic64_t rx_atomic; + /**< Bad inner IP csum for tunneling pkt */ + rte_atomic64_t rx_bad_ip_csum; + /**< Bad inner L4 csum for tunneling pkt */ + rte_atomic64_t rx_bad_l4_csum; } __rte_cache_aligned; /** diff --git a/examples/tep_termination/vxlan_setup.c b/examples/tep_termination/vxlan_setup.c index a1cd218c03..2341f9e23f 100644 --- a/examples/tep_termination/vxlan_setup.c +++ b/examples/tep_termination/vxlan_setup.c @@ -427,6 +427,16 @@ vxlan_rx_pkts(struct virtio_net *dev, struct rte_mbuf **pkts_burst, struct rte_mbuf *pkts_valid[rx_count]; for (i = 0; i < rx_count; i++) { + if (enable_stats) { + rte_atomic64_add( + &dev_statistics[dev->device_fh].rx_bad_ip_csum, + (pkts_burst[i]->ol_flags & PKT_RX_IP_CKSUM_BAD) + != 0); + rte_atomic64_add( + &dev_statistics[dev->device_fh].rx_bad_ip_csum, + (pkts_burst[i]->ol_flags & PKT_RX_L4_CKSUM_BAD) + != 0); + } ret = vxlan_rx_process(pkts_burst[i]); if (unlikely(ret < 0)) continue; diff --git a/examples/tep_termination/vxlan_setup.h b/examples/tep_termination/vxlan_setup.h index 96442e2287..189d491b11 100644 --- a/examples/tep_termination/vxlan_setup.h +++ b/examples/tep_termination/vxlan_setup.h @@ -39,6 +39,8 @@ extern uint16_t udp_port; extern uint8_t filter_idx; extern uint8_t ports[RTE_MAX_ETHPORTS]; extern struct ether_addr ports_eth_addr[RTE_MAX_ETHPORTS]; +extern uint32_t enable_stats; +extern struct device_statistics dev_statistics[MAX_DEVICES]; typedef int (*ol_port_configure_t)(uint8_t port, struct rte_mempool *mbuf_pool); -- 2.20.1