app: replace some offload flags with packet type
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>
This commit is contained in:
parent
429df3803a
commit
9e972be2b7
app
@ -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);
|
||||
}
|
||||
|
@ -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 *)
|
||||
|
@ -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=", ð_hdr->s_addr);
|
||||
print_ether_addr(" - dst=", ð_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 *,
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user