mbuf: use offset macro
[dpdk.git] / app / test-pmd / rxonly.c
index 9ad1df6..b8e35ab 100644 (file)
@@ -51,7 +51,6 @@
 #include <rte_memcpy.h>
 #include <rte_memzone.h>
 #include <rte_launch.h>
-#include <rte_tailq.h>
 #include <rte_eal.h>
 #include <rte_per_lcore.h>
 #include <rte_lcore.h>
 
 #include "testpmd.h"
 
-#define MAX_PKT_RX_FLAGS 13
-static const char *pkt_rx_flag_names[MAX_PKT_RX_FLAGS] = {
-       "VLAN_PKT",
-       "RSS_HASH",
-       "PKT_RX_FDIR",
-       "IP_CKSUM",
-       "IP_CKSUM_BAD",
-
-       "IPV4_HDR",
-       "IPV4_HDR_EXT",
-       "IPV6_HDR",
-       "IPV6_HDR_EXT",
-
-       "IEEE1588_PTP",
-       "IEEE1588_TMST",
-
-       "TUNNEL_IPV4_HDR",
-       "TUNNEL_IPV6_HDR",
-};
-
 static inline void
 print_ether_addr(const char *what, struct ether_addr *eth_addr)
 {
@@ -167,10 +146,18 @@ pkt_burst_receive(struct fwd_stream *fs)
                if (ol_flags & PKT_RX_RSS_HASH) {
                        printf(" - RSS hash=0x%x", (unsigned) mb->hash.rss);
                        printf(" - RSS queue=0x%x",(unsigned) fs->rx_queue);
+               } else if (ol_flags & PKT_RX_FDIR) {
+                       printf(" - FDIR matched ");
+                       if (ol_flags & PKT_RX_FDIR_ID)
+                               printf("ID=0x%x",
+                                      mb->hash.fdir.hi);
+                       else if (ol_flags & PKT_RX_FDIR_FLX)
+                               printf("flex bytes=0x%08x %08x",
+                                      mb->hash.fdir.hi, mb->hash.fdir.lo);
+                       else
+                               printf("hash=0x%x ID=0x%x ",
+                                      mb->hash.fdir.hash, mb->hash.fdir.id);
                }
-               else if (ol_flags & PKT_RX_FDIR)
-                       printf(" - FDIR hash=0x%x - FDIR id=0x%x ",
-                              mb->hash.fdir.hash, mb->hash.fdir.id);
                if (ol_flags & PKT_RX_VLAN_PKT)
                        printf(" - VLAN tci=0x%x", mb->vlan_tci);
                if (is_encapsulation) {
@@ -188,22 +175,25 @@ pkt_burst_receive(struct fwd_stream *fs)
                         /* Do not support ipv4 option field */
                        if (ol_flags & PKT_RX_TUNNEL_IPV4_HDR) {
                                l3_len = sizeof(struct ipv4_hdr);
-                               ipv4_hdr = (struct ipv4_hdr *) (rte_pktmbuf_mtod(mb,
-                                               unsigned char *) + l2_len);
+                               ipv4_hdr = rte_pktmbuf_mtod_offset(mb,
+                                                                  struct ipv4_hdr *,
+                                                                  l2_len);
                                l4_proto = ipv4_hdr->next_proto_id;
                        } else {
                                l3_len = sizeof(struct ipv6_hdr);
-                               ipv6_hdr = (struct ipv6_hdr *) (rte_pktmbuf_mtod(mb,
-                                               unsigned char *) + l2_len);
+                               ipv6_hdr = rte_pktmbuf_mtod_offset(mb,
+                                                                  struct ipv6_hdr *,
+                                                                  l2_len);
                                l4_proto = ipv6_hdr->proto;
                        }
                        if (l4_proto == IPPROTO_UDP) {
-                               udp_hdr = (struct udp_hdr *) (rte_pktmbuf_mtod(mb,
-                                               unsigned char *) + l2_len + l3_len);
+                               udp_hdr = rte_pktmbuf_mtod_offset(mb,
+                                                                 struct udp_hdr *,
+                                                                 l2_len + l3_len);
                                l4_len = sizeof(struct udp_hdr);
-                               vxlan_hdr = (struct vxlan_hdr *) (rte_pktmbuf_mtod(mb,
-                                               unsigned char *) + l2_len + l3_len
-                                                + l4_len);
+                               vxlan_hdr = rte_pktmbuf_mtod_offset(mb,
+                                                                   struct vxlan_hdr *,
+                                                                   l2_len + l3_len + l4_len);
 
                                printf(" - VXLAN packet: packet type =%d, "
                                        "Destination UDP port =%d, VNI = %d",
@@ -214,12 +204,16 @@ pkt_burst_receive(struct fwd_stream *fs)
                printf(" - Receive queue=0x%x", (unsigned) fs->rx_queue);
                printf("\n");
                if (ol_flags != 0) {
-                       int rxf;
-
-                       for (rxf = 0; rxf < MAX_PKT_RX_FLAGS; rxf++) {
-                               if (ol_flags & (1 << rxf))
-                                       printf("  PKT_RX_%s\n",
-                                              pkt_rx_flag_names[rxf]);
+                       unsigned rxf;
+                       const char *name;
+
+                       for (rxf = 0; rxf < sizeof(mb->ol_flags) * 8; rxf++) {
+                               if ((ol_flags & (1ULL << rxf)) == 0)
+                                       continue;
+                               name = rte_get_rx_ol_flag_name(1ULL << rxf);
+                               if (name == NULL)
+                                       continue;
+                               printf("  %s\n", name);
                        }
                }
                rte_pktmbuf_free(mb);