mbuf: add Tx offloading flags for tunnels
[dpdk.git] / app / test-pmd / csumonly.c
index 724bc54..5f7dffc 100644 (file)
@@ -79,9 +79,8 @@
 #define IP_HDRLEN  0x05 /* default IP header length == five 32-bits words. */
 #define IP_VHL_DEF (IP_VERSION | IP_HDRLEN)
 
-/* we cannot use htons() from arpa/inet.h due to name conflicts, and we
- * cannot use rte_cpu_to_be_16() on a constant in a switch/case */
-#if __BYTE_ORDER == __LITTLE_ENDIAN
+/* We cannot use rte_cpu_to_be_16() on a constant in a switch/case */
+#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
 #define _htons(x) ((uint16_t)((((x) & 0x00ffU) << 8) | (((x) & 0xff00U) >> 8)))
 #else
 #define _htons(x) (x)
@@ -257,7 +256,7 @@ process_outer_cksums(void *outer_l3_hdr, uint16_t outer_ethertype,
        uint64_t ol_flags = 0;
 
        if (testpmd_ol_flags & TESTPMD_TX_OFFLOAD_VXLAN_CKSUM)
-               ol_flags |= PKT_TX_VXLAN_CKSUM;
+               ol_flags |= PKT_TX_UDP_TUNNEL_PKT;
 
        if (outer_ethertype == _htons(ETHER_TYPE_IPv4)) {
                ipv4_hdr->hdr_checksum = 0;
@@ -460,6 +459,62 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
                m->tso_segsz = tso_segsz;
                m->ol_flags = ol_flags;
 
+               /* if verbose mode is enabled, dump debug info */
+               if (verbose_level > 0) {
+                       struct {
+                               uint64_t flag;
+                               uint64_t mask;
+                       } tx_flags[] = {
+                               { PKT_TX_IP_CKSUM, PKT_TX_IP_CKSUM },
+                               { PKT_TX_UDP_CKSUM, PKT_TX_L4_MASK },
+                               { PKT_TX_TCP_CKSUM, PKT_TX_L4_MASK },
+                               { PKT_TX_SCTP_CKSUM, PKT_TX_L4_MASK },
+                               { PKT_TX_UDP_TUNNEL_PKT, PKT_TX_UDP_TUNNEL_PKT },
+                               { PKT_TX_IPV4, PKT_TX_IPV4 },
+                               { PKT_TX_IPV6, PKT_TX_IPV6 },
+                               { PKT_TX_OUTER_IP_CKSUM, PKT_TX_OUTER_IP_CKSUM },
+                               { PKT_TX_OUTER_IPV4, PKT_TX_OUTER_IPV4 },
+                               { PKT_TX_OUTER_IPV6, PKT_TX_OUTER_IPV6 },
+                               { PKT_TX_TCP_SEG, PKT_TX_TCP_SEG },
+                       };
+                       unsigned j;
+                       const char *name;
+
+                       printf("-----------------\n");
+                       /* dump rx parsed packet info */
+                       printf("rx: l2_len=%d ethertype=%x l3_len=%d "
+                               "l4_proto=%d l4_len=%d\n",
+                               l2_len, rte_be_to_cpu_16(ethertype),
+                               l3_len, l4_proto, l4_len);
+                       if (tunnel == 1)
+                               printf("rx: outer_l2_len=%d outer_ethertype=%x "
+                                       "outer_l3_len=%d\n", outer_l2_len,
+                                       rte_be_to_cpu_16(outer_ethertype),
+                                       outer_l3_len);
+                       /* dump tx packet info */
+                       if ((testpmd_ol_flags & (TESTPMD_TX_OFFLOAD_IP_CKSUM |
+                                               TESTPMD_TX_OFFLOAD_UDP_CKSUM |
+                                               TESTPMD_TX_OFFLOAD_TCP_CKSUM |
+                                               TESTPMD_TX_OFFLOAD_SCTP_CKSUM)) ||
+                               tso_segsz != 0)
+                               printf("tx: m->l2_len=%d m->l3_len=%d "
+                                       "m->l4_len=%d\n",
+                                       m->l2_len, m->l3_len, m->l4_len);
+                       if ((tunnel == 1) &&
+                               (testpmd_ol_flags & TESTPMD_TX_OFFLOAD_VXLAN_CKSUM))
+                               printf("tx: m->inner_l2_len=%d m->inner_l3_len=%d\n",
+                                       m->inner_l2_len, m->inner_l3_len);
+                       if (tso_segsz != 0)
+                               printf("tx: m->tso_segsz=%d\n", m->tso_segsz);
+                       printf("tx: flags=");
+                       for (j = 0; j < sizeof(tx_flags)/sizeof(*tx_flags); j++) {
+                               name = rte_get_tx_ol_flag_name(tx_flags[j].flag);
+                               if ((m->ol_flags & tx_flags[j].mask) ==
+                                       tx_flags[j].flag)
+                                       printf("%s ", name);
+                       }
+                       printf("\n");
+               }
        }
        nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_rx);
        fs->tx_packets += nb_tx;