app: replace some offload flags with packet type
authorHelin Zhang <helin.zhang@intel.com>
Thu, 9 Jul 2015 16:31:32 +0000 (00:31 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 15 Jul 2015 22:57:47 +0000 (00:57 +0200)
To unify packet types among all PMDs, bit masks of packet type for
'ol_flags' are replaced by unified packet type.
To avoid breaking ABI compatibility, all the changes would be
enabled by RTE_NEXT_ABI.

Signed-off-by: Helin Zhang <helin.zhang@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
app/test-pipeline/pipeline_hash.c
app/test-pmd/csumonly.c
app/test-pmd/rxonly.c
app/test/packet_burst_generator.c

index 4598ad4..aa3f9e5 100644 (file)
@@ -459,20 +459,33 @@ app_main_loop_rx_metadata(void) {
                        signature = RTE_MBUF_METADATA_UINT32_PTR(m, 0);
                        key = RTE_MBUF_METADATA_UINT8_PTR(m, 32);
 
+#ifdef RTE_NEXT_ABI
+                       if (RTE_ETH_IS_IPV4_HDR(m->packet_type)) {
+#else
                        if (m->ol_flags & PKT_RX_IPV4_HDR) {
+#endif
                                ip_hdr = (struct ipv4_hdr *)
                                        &m_data[sizeof(struct ether_hdr)];
                                ip_dst = ip_hdr->dst_addr;
 
                                k32 = (uint32_t *) key;
                                k32[0] = ip_dst & 0xFFFFFF00;
+#ifdef RTE_NEXT_ABI
+                       } else if (RTE_ETH_IS_IPV6_HDR(m->packet_type)) {
+#else
                        } else {
+#endif
                                ipv6_hdr = (struct ipv6_hdr *)
                                        &m_data[sizeof(struct ether_hdr)];
                                ipv6_dst = ipv6_hdr->dst_addr;
 
                                memcpy(key, ipv6_dst, 16);
+#ifdef RTE_NEXT_ABI
+                       } else
+                               continue;
+#else
                        }
+#endif
 
                        *signature = test_hash(key, 0, 0);
                }
index 4287940..1bf3485 100644 (file)
@@ -202,8 +202,14 @@ parse_ethernet(struct ether_hdr *eth_hdr, struct testpmd_offload_info *info)
 
 /* Parse a vxlan header */
 static void
+#ifdef RTE_NEXT_ABI
+parse_vxlan(struct udp_hdr *udp_hdr,
+           struct testpmd_offload_info *info,
+           uint32_t pkt_type)
+#else
 parse_vxlan(struct udp_hdr *udp_hdr, struct testpmd_offload_info *info,
        uint64_t mbuf_olflags)
+#endif
 {
        struct ether_hdr *eth_hdr;
 
@@ -211,8 +217,12 @@ parse_vxlan(struct udp_hdr *udp_hdr, struct testpmd_offload_info *info,
         * (rfc7348) or that the rx offload flag is set (i40e only
         * currently) */
        if (udp_hdr->dst_port != _htons(4789) &&
+#ifdef RTE_NEXT_ABI
+               RTE_ETH_IS_TUNNEL_PKT(pkt_type) == 0)
+#else
                (mbuf_olflags & (PKT_RX_TUNNEL_IPV4_HDR |
                        PKT_RX_TUNNEL_IPV6_HDR)) == 0)
+#endif
                return;
 
        info->is_tunnel = 1;
@@ -549,7 +559,11 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
                                struct udp_hdr *udp_hdr;
                                udp_hdr = (struct udp_hdr *)((char *)l3_hdr +
                                        info.l3_len);
+#ifdef RTE_NEXT_ABI
+                               parse_vxlan(udp_hdr, &info, m->packet_type);
+#else
                                parse_vxlan(udp_hdr, &info, m->ol_flags);
+#endif
                        } else if (info.l4_proto == IPPROTO_GRE) {
                                struct simple_gre_hdr *gre_hdr;
                                gre_hdr = (struct simple_gre_hdr *)
index 4a9f86e..41871d3 100644 (file)
@@ -91,7 +91,11 @@ pkt_burst_receive(struct fwd_stream *fs)
        uint64_t ol_flags;
        uint16_t nb_rx;
        uint16_t i, packet_type;
+#ifdef RTE_NEXT_ABI
+       uint16_t is_encapsulation;
+#else
        uint64_t is_encapsulation;
+#endif
 
 #ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES
        uint64_t start_tsc;
@@ -135,8 +139,12 @@ pkt_burst_receive(struct fwd_stream *fs)
                ol_flags = mb->ol_flags;
                packet_type = mb->packet_type;
 
+#ifdef RTE_NEXT_ABI
+               is_encapsulation = RTE_ETH_IS_TUNNEL_PKT(packet_type);
+#else
                is_encapsulation = ol_flags & (PKT_RX_TUNNEL_IPV4_HDR |
                                PKT_RX_TUNNEL_IPV6_HDR);
+#endif
 
                print_ether_addr("  src=", &eth_hdr->s_addr);
                print_ether_addr(" - dst=", &eth_hdr->d_addr);
@@ -163,6 +171,177 @@ pkt_burst_receive(struct fwd_stream *fs)
                if (ol_flags & PKT_RX_QINQ_PKT)
                        printf(" - QinQ VLAN tci=0x%x, VLAN tci outer=0x%x",
                                        mb->vlan_tci, mb->vlan_tci_outer);
+#ifdef RTE_NEXT_ABI
+               if (mb->packet_type) {
+                       uint32_t ptype;
+
+                       /* (outer) L2 packet type */
+                       ptype = mb->packet_type & RTE_PTYPE_L2_MASK;
+                       switch (ptype) {
+                       case RTE_PTYPE_L2_ETHER:
+                               printf(" - (outer) L2 type: ETHER");
+                               break;
+                       case RTE_PTYPE_L2_ETHER_TIMESYNC:
+                               printf(" - (outer) L2 type: ETHER_Timesync");
+                               break;
+                       case RTE_PTYPE_L2_ETHER_ARP:
+                               printf(" - (outer) L2 type: ETHER_ARP");
+                               break;
+                       case RTE_PTYPE_L2_ETHER_LLDP:
+                               printf(" - (outer) L2 type: ETHER_LLDP");
+                               break;
+                       default:
+                               printf(" - (outer) L2 type: Unknown");
+                               break;
+                       }
+
+                       /* (outer) L3 packet type */
+                       ptype = mb->packet_type & RTE_PTYPE_L3_MASK;
+                       switch (ptype) {
+                       case RTE_PTYPE_L3_IPV4:
+                               printf(" - (outer) L3 type: IPV4");
+                               break;
+                       case RTE_PTYPE_L3_IPV4_EXT:
+                               printf(" - (outer) L3 type: IPV4_EXT");
+                               break;
+                       case RTE_PTYPE_L3_IPV6:
+                               printf(" - (outer) L3 type: IPV6");
+                               break;
+                       case RTE_PTYPE_L3_IPV4_EXT_UNKNOWN:
+                               printf(" - (outer) L3 type: IPV4_EXT_UNKNOWN");
+                               break;
+                       case RTE_PTYPE_L3_IPV6_EXT:
+                               printf(" - (outer) L3 type: IPV6_EXT");
+                               break;
+                       case RTE_PTYPE_L3_IPV6_EXT_UNKNOWN:
+                               printf(" - (outer) L3 type: IPV6_EXT_UNKNOWN");
+                               break;
+                       default:
+                               printf(" - (outer) L3 type: Unknown");
+                               break;
+                       }
+
+                       /* (outer) L4 packet type */
+                       ptype = mb->packet_type & RTE_PTYPE_L4_MASK;
+                       switch (ptype) {
+                       case RTE_PTYPE_L4_TCP:
+                               printf(" - (outer) L4 type: TCP");
+                               break;
+                       case RTE_PTYPE_L4_UDP:
+                               printf(" - (outer) L4 type: UDP");
+                               break;
+                       case RTE_PTYPE_L4_FRAG:
+                               printf(" - (outer) L4 type: L4_FRAG");
+                               break;
+                       case RTE_PTYPE_L4_SCTP:
+                               printf(" - (outer) L4 type: SCTP");
+                               break;
+                       case RTE_PTYPE_L4_ICMP:
+                               printf(" - (outer) L4 type: ICMP");
+                               break;
+                       case RTE_PTYPE_L4_NONFRAG:
+                               printf(" - (outer) L4 type: L4_NONFRAG");
+                               break;
+                       default:
+                               printf(" - (outer) L4 type: Unknown");
+                               break;
+                       }
+
+                       /* packet tunnel type */
+                       ptype = mb->packet_type & RTE_PTYPE_TUNNEL_MASK;
+                       switch (ptype) {
+                       case RTE_PTYPE_TUNNEL_IP:
+                               printf(" - Tunnel type: IP");
+                               break;
+                       case RTE_PTYPE_TUNNEL_GRE:
+                               printf(" - Tunnel type: GRE");
+                               break;
+                       case RTE_PTYPE_TUNNEL_VXLAN:
+                               printf(" - Tunnel type: VXLAN");
+                               break;
+                       case RTE_PTYPE_TUNNEL_NVGRE:
+                               printf(" - Tunnel type: NVGRE");
+                               break;
+                       case RTE_PTYPE_TUNNEL_GENEVE:
+                               printf(" - Tunnel type: GENEVE");
+                               break;
+                       case RTE_PTYPE_TUNNEL_GRENAT:
+                               printf(" - Tunnel type: GRENAT");
+                               break;
+                       default:
+                               printf(" - Tunnel type: Unknown");
+                               break;
+                       }
+
+                       /* inner L2 packet type */
+                       ptype = mb->packet_type & RTE_PTYPE_INNER_L2_MASK;
+                       switch (ptype) {
+                       case RTE_PTYPE_INNER_L2_ETHER:
+                               printf(" - Inner L2 type: ETHER");
+                               break;
+                       case RTE_PTYPE_INNER_L2_ETHER_VLAN:
+                               printf(" - Inner L2 type: ETHER_VLAN");
+                               break;
+                       default:
+                               printf(" - Inner L2 type: Unknown");
+                               break;
+                       }
+
+                       /* inner L3 packet type */
+                       ptype = mb->packet_type & RTE_PTYPE_INNER_INNER_L3_MASK;
+                       switch (ptype) {
+                       case RTE_PTYPE_INNER_L3_IPV4:
+                               printf(" - Inner L3 type: IPV4");
+                               break;
+                       case RTE_PTYPE_INNER_L3_IPV4_EXT:
+                               printf(" - Inner L3 type: IPV4_EXT");
+                               break;
+                       case RTE_PTYPE_INNER_L3_IPV6:
+                               printf(" - Inner L3 type: IPV6");
+                               break;
+                       case RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN:
+                               printf(" - Inner L3 type: IPV4_EXT_UNKNOWN");
+                               break;
+                       case RTE_PTYPE_INNER_L3_IPV6_EXT:
+                               printf(" - Inner L3 type: IPV6_EXT");
+                               break;
+                       case RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN:
+                               printf(" - Inner L3 type: IPV6_EXT_UNKNOWN");
+                               break;
+                       default:
+                               printf(" - Inner L3 type: Unknown");
+                               break;
+                       }
+
+                       /* inner L4 packet type */
+                       ptype = mb->packet_type & RTE_PTYPE_INNER_L4_MASK;
+                       switch (ptype) {
+                       case RTE_PTYPE_INNER_L4_TCP:
+                               printf(" - Inner L4 type: TCP");
+                               break;
+                       case RTE_PTYPE_INNER_L4_UDP:
+                               printf(" - Inner L4 type: UDP");
+                               break;
+                       case RTE_PTYPE_INNER_L4_FRAG:
+                               printf(" - Inner L4 type: L4_FRAG");
+                               break;
+                       case RTE_PTYPE_INNER_L4_SCTP:
+                               printf(" - Inner L4 type: SCTP");
+                               break;
+                       case RTE_PTYPE_INNER_L4_ICMP:
+                               printf(" - Inner L4 type: ICMP");
+                               break;
+                       case RTE_PTYPE_INNER_L4_NONFRAG:
+                               printf(" - Inner L4 type: L4_NONFRAG");
+                               break;
+                       default:
+                               printf(" - Inner L4 type: Unknown");
+                               break;
+                       }
+                       printf("\n");
+               } else
+                       printf("Unknown packet type\n");
+#endif /* RTE_NEXT_ABI */
                if (is_encapsulation) {
                        struct ipv4_hdr *ipv4_hdr;
                        struct ipv6_hdr *ipv6_hdr;
@@ -176,7 +355,11 @@ pkt_burst_receive(struct fwd_stream *fs)
                        l2_len  = sizeof(struct ether_hdr);
 
                         /* Do not support ipv4 option field */
+#ifdef RTE_NEXT_ABI
+                       if (RTE_ETH_IS_IPV4_HDR(packet_type)) {
+#else
                        if (ol_flags & PKT_RX_TUNNEL_IPV4_HDR) {
+#endif
                                l3_len = sizeof(struct ipv4_hdr);
                                ipv4_hdr = rte_pktmbuf_mtod_offset(mb,
                                                                   struct ipv4_hdr *,
index 28d9e25..d9d808b 100644 (file)
@@ -273,19 +273,21 @@ nomore_mbuf:
                if (ipv4) {
                        pkt->vlan_tci  = ETHER_TYPE_IPv4;
                        pkt->l3_len = sizeof(struct ipv4_hdr);
-
+#ifndef RTE_NEXT_ABI
                        if (vlan_enabled)
                                pkt->ol_flags = PKT_RX_IPV4_HDR | PKT_RX_VLAN_PKT;
                        else
                                pkt->ol_flags = PKT_RX_IPV4_HDR;
+#endif
                } else {
                        pkt->vlan_tci  = ETHER_TYPE_IPv6;
                        pkt->l3_len = sizeof(struct ipv6_hdr);
-
+#ifndef RTE_NEXT_ABI
                        if (vlan_enabled)
                                pkt->ol_flags = PKT_RX_IPV6_HDR | PKT_RX_VLAN_PKT;
                        else
                                pkt->ol_flags = PKT_RX_IPV6_HDR;
+#endif
                }
 
                pkts_burst[nb_pkt] = pkt;