dev.dpdk.org archive mirror
 help / color / mirror / Atom feed
From: Jijiang Liu <jijiang.liu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: dev-VfR2kkLFssw@public.gmane.org
Subject: [PATCH v8 05/10] app/test-pmd:test VxLAN packet identification
Date: Mon, 27 Oct 2014 10:13:21 +0800	[thread overview]
Message-ID: <1414376006-31402-6-git-send-email-jijiang.liu@intel.com> (raw)
In-Reply-To: <1414376006-31402-1-git-send-email-jijiang.liu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>

Add two commands to test VxLAN packet identification.
The test steps are as follows:
 1> use commands to add/delete VxLAN UDP port.
 2> use rxonly mode to receive VxLAN packet.

Signed-off-by: Jijiang Liu <jijiang.liu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
 app/test-pmd/cmdline.c |   65 ++++++++++++++++++++++++++++++++++++++++++++++++
 app/test-pmd/rxonly.c  |   55 +++++++++++++++++++++++++++++++++++++++-
 2 files changed, 118 insertions(+), 2 deletions(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 0b972f9..4d7b4d1 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -285,6 +285,12 @@ static void cmd_help_long_parsed(void *parsed_result,
 			"    Set the outer VLAN TPID for Packet Filtering on"
 			" a port\n\n"
 
+			"rx_vxlan_port add (udp_port) (port_id)\n"
+			"    Add an UDP port for VxLAN packet filter on a port\n\n"
+
+			"rx_vxlan_port rm (udp_port) (port_id)\n"
+			"    Remove an UDP port for VxLAN packet filter on a port\n\n"
+
 			"tx_vlan set vlan_id (port_id)\n"
 			"    Set hardware insertion of VLAN ID in packets sent"
 			" on a port.\n\n"
@@ -6225,6 +6231,64 @@ cmdline_parse_inst_t cmd_vf_rate_limit = {
 	},
 };
 
+/* *** CONFIGURE TUNNEL UDP PORT *** */
+struct cmd_tunnel_udp_config {
+	cmdline_fixed_string_t cmd;
+	cmdline_fixed_string_t what;
+	uint16_t udp_port;
+	uint8_t port_id;
+};
+
+static void
+cmd_tunnel_udp_config_parsed(void *parsed_result,
+			  __attribute__((unused)) struct cmdline *cl,
+			  __attribute__((unused)) void *data)
+{
+	struct cmd_tunnel_udp_config *res = parsed_result;
+	struct rte_eth_udp_tunnel tunnel_udp;
+	int ret;
+
+	tunnel_udp.udp_port = res->udp_port;
+
+	if (!strcmp(res->cmd, "rx_vxlan_port"))
+		tunnel_udp.prot_type = RTE_TUNNEL_TYPE_VXLAN;
+
+	if (!strcmp(res->what, "add"))
+		ret = rte_eth_dev_udp_tunnel_add(res->port_id, &tunnel_udp);
+	else
+		ret = rte_eth_dev_udp_tunnel_delete(res->port_id, &tunnel_udp);
+
+	if (ret < 0)
+		printf("udp tunneling add error: (%s)\n", strerror(-ret));
+}
+
+cmdline_parse_token_string_t cmd_tunnel_udp_config_cmd =
+	TOKEN_STRING_INITIALIZER(struct cmd_tunnel_udp_config,
+				cmd, "rx_vxlan_port");
+cmdline_parse_token_string_t cmd_tunnel_udp_config_what =
+	TOKEN_STRING_INITIALIZER(struct cmd_tunnel_udp_config,
+				what, "add#rm");
+cmdline_parse_token_num_t cmd_tunnel_udp_config_udp_port =
+	TOKEN_NUM_INITIALIZER(struct cmd_tunnel_udp_config,
+				udp_port, UINT16);
+cmdline_parse_token_num_t cmd_tunnel_udp_config_port_id =
+	TOKEN_NUM_INITIALIZER(struct cmd_tunnel_udp_config,
+				port_id, UINT8);
+
+cmdline_parse_inst_t cmd_tunnel_udp_config = {
+	.f = cmd_tunnel_udp_config_parsed,
+	.data = (void *)0,
+	.help_str = "add/rm an tunneling UDP port filter: "
+			"rx_vxlan_port add udp_port port_id",
+	.tokens = {
+		(void *)&cmd_tunnel_udp_config_cmd,
+		(void *)&cmd_tunnel_udp_config_what,
+		(void *)&cmd_tunnel_udp_config_udp_port,
+		(void *)&cmd_tunnel_udp_config_port_id,
+		NULL,
+	},
+};
+
 /* *** CONFIGURE VM MIRROR VLAN/POOL RULE *** */
 struct cmd_set_mirror_mask_result {
 	cmdline_fixed_string_t set;
@@ -7518,6 +7582,7 @@ cmdline_parse_ctx_t main_ctx[] = {
 	(cmdline_parse_inst_t *)&cmd_vf_rxvlan_filter,
 	(cmdline_parse_inst_t *)&cmd_queue_rate_limit,
 	(cmdline_parse_inst_t *)&cmd_vf_rate_limit,
+	(cmdline_parse_inst_t *)&cmd_tunnel_udp_config,
 	(cmdline_parse_inst_t *)&cmd_set_mirror_mask,
 	(cmdline_parse_inst_t *)&cmd_set_mirror_link,
 	(cmdline_parse_inst_t *)&cmd_reset_mirror_rule,
diff --git a/app/test-pmd/rxonly.c b/app/test-pmd/rxonly.c
index 98c788b..d3be62e 100644
--- a/app/test-pmd/rxonly.c
+++ b/app/test-pmd/rxonly.c
@@ -66,10 +66,12 @@
 #include <rte_ether.h>
 #include <rte_ethdev.h>
 #include <rte_string_fns.h>
+#include <rte_ip.h>
+#include <rte_udp.h>
 
 #include "testpmd.h"
 
-#define MAX_PKT_RX_FLAGS 11
+#define MAX_PKT_RX_FLAGS 13
 static const char *pkt_rx_flag_names[MAX_PKT_RX_FLAGS] = {
 	"VLAN_PKT",
 	"RSS_HASH",
@@ -84,6 +86,9 @@ static const char *pkt_rx_flag_names[MAX_PKT_RX_FLAGS] = {
 
 	"IEEE1588_PTP",
 	"IEEE1588_TMST",
+
+	"TUNNEL_IPV4_HDR",
+	"TUNNEL_IPV6_HDR",
 };
 
 static inline void
@@ -111,7 +116,9 @@ pkt_burst_receive(struct fwd_stream *fs)
 	uint16_t eth_type;
 	uint64_t ol_flags;
 	uint16_t nb_rx;
-	uint16_t i;
+	uint16_t i, packet_type;
+	uint64_t is_encapsulation;
+
 #ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES
 	uint64_t start_tsc;
 	uint64_t end_tsc;
@@ -152,6 +159,11 @@ pkt_burst_receive(struct fwd_stream *fs)
 		eth_hdr = rte_pktmbuf_mtod(mb, struct ether_hdr *);
 		eth_type = RTE_BE_TO_CPU_16(eth_hdr->ether_type);
 		ol_flags = mb->ol_flags;
+		packet_type = mb->packet_type;
+
+		is_encapsulation = ol_flags & (PKT_RX_TUNNEL_IPV4_HDR |
+				PKT_RX_TUNNEL_IPV6_HDR);
+
 		print_ether_addr("  src=", &eth_hdr->s_addr);
 		print_ether_addr(" - dst=", &eth_hdr->d_addr);
 		printf(" - type=0x%04x - length=%u - nb_segs=%d",
@@ -166,6 +178,45 @@ pkt_burst_receive(struct fwd_stream *fs)
 			       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) {
+			struct ipv4_hdr *ipv4_hdr;
+			struct ipv6_hdr *ipv6_hdr;
+			struct udp_hdr *udp_hdr;
+			uint8_t l2_len;
+			uint8_t l3_len;
+			uint8_t l4_len;
+			uint8_t l4_proto;
+			struct  vxlan_hdr *vxlan_hdr;
+
+			l2_len  = sizeof(struct ether_hdr);
+
+			 /* 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);
+				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);
+				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);
+				l4_len = sizeof(struct udp_hdr);
+				vxlan_hdr = (struct vxlan_hdr *) (rte_pktmbuf_mtod(mb,
+						unsigned char *) + l2_len + l3_len
+						 + l4_len);
+
+				printf(" - VxLAN packet: packet type =%d, "
+					"Destination UDP port =%d, VNI = %d",
+					packet_type, RTE_BE_TO_CPU_16(udp_hdr->dst_port),
+					rte_be_to_cpu_32(vxlan_hdr->vx_vni) >> 8);
+			}
+		}
+		printf(" - Receive queue=0x%x", (unsigned) fs->rx_queue);
 		printf("\n");
 		if (ol_flags != 0) {
 			int rxf;
-- 
1.7.7.6

  parent reply	other threads:[~2014-10-27  2:13 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-27  2:13 [PATCH v8 00/10] Support VxLAN on Fortville Jijiang Liu
     [not found] ` <1414376006-31402-1-git-send-email-jijiang.liu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-10-27  2:13   ` [PATCH v8 01/10] librte_mbuf:the rte_mbuf structure changes Jijiang Liu
2014-10-27  2:13   ` [PATCH v8 02/10] librte_ether:add the basic data structures of VxLAN Jijiang Liu
2014-10-27  2:13   ` [PATCH v8 03/10] librte_ether:add VxLAN packet identification API Jijiang Liu
2014-10-27  2:13   ` [PATCH v8 04/10] i40e:support VxLAN packet identification in i40e Jijiang Liu
2014-10-27  2:13   ` Jijiang Liu [this message]
2014-10-27  2:13   ` [PATCH v8 06/10] librte_ether:add data structures of VxLAN filter Jijiang Liu
2014-10-27  2:13   ` [PATCH v8 07/10] i40e:implement the API of VxLAN filter in librte_pmd_i40e Jijiang Liu
2014-10-27  2:13   ` [PATCH v8 08/10] app/testpmd:test VxLAN packet filter Jijiang Liu
2014-10-27  2:13   ` [PATCH v8 09/10] i40e:support VxLAN Tx checksum offload Jijiang Liu
2014-10-27  2:13   ` [PATCH v8 10/10] app/testpmd:test " Jijiang Liu
     [not found]     ` <1414376006-31402-11-git-send-email-jijiang.liu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2014-11-04  8:19       ` Olivier MATZ
     [not found]         ` <54588BF7.309-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2014-11-05  6:02           ` Liu, Jijiang
     [not found]             ` <1ED644BD7E0A5F4091CF203DAFB8E4CC01D8510E-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-05 10:28               ` Olivier MATZ
     [not found]                 ` <5459FBB2.1040408-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2014-11-06 11:24                   ` Liu, Jijiang
     [not found]                     ` <1ED644BD7E0A5F4091CF203DAFB8E4CC01D858A1-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-06 13:08                       ` Olivier MATZ
     [not found]                         ` <545B72E5.9090002-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2014-11-06 14:27                           ` Liu, Jijiang
2014-11-07  0:43                   ` Yong Wang
     [not found]                     ` <0c654d2c0d304b45a40af6ca38b70adf-kzjMWN3NnNA9Xh8A42242iWTkRzJkiQl@public.gmane.org>
2014-11-07 17:16                       ` Olivier MATZ
     [not found]                         ` <545CFE56.60605-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2014-11-10 11:39                           ` Ananyev, Konstantin
     [not found]                             ` <2601191342CEEE43887BDE71AB977258213A38D2-kPTMFJFq+rEu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-10 15:57                               ` Olivier MATZ
     [not found]                                 ` <5460E07F.6060303-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2014-11-12  9:55                                   ` Ananyev, Konstantin
     [not found]                                     ` <2601191342CEEE43887BDE71AB977258213A3F5F-kPTMFJFq+rEu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-12 13:05                                       ` Olivier MATZ
     [not found]                                         ` <54635B2B.5040603-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2014-11-12 13:40                                           ` Thomas Monjalon
2014-11-12 23:14                                             ` Ananyev, Konstantin
2014-11-12 14:39                                           ` Ananyev, Konstantin
     [not found]                                             ` <2601191342CEEE43887BDE71AB977258213A40EB-kPTMFJFq+rEu0RiL9chJVbfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-12 14:56                                               ` Olivier MATZ
     [not found]                         ` <D0868B54.24DBB%yongwang@vmware.com>
2014-11-11  0:07                           ` FW: " Yong Wang
2014-11-10  6:03                   ` Liu, Jijiang
     [not found]                     ` <1ED644BD7E0A5F4091CF203DAFB8E4CC01D8F399-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-10 16:17                       ` Olivier MATZ
     [not found]                         ` <5460E512.1050609-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2014-11-11  5:29                           ` Liu, Jijiang
     [not found]                             ` <1ED644BD7E0A5F4091CF203DAFB8E4CC01D8F7A7-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-12 17:26                               ` Thomas Monjalon
2014-11-13  5:35                                 ` Liu, Jijiang
     [not found]                                   ` <1ED644BD7E0A5F4091CF203DAFB8E4CC01D99258-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-13  5:39                                     ` Liu, Jijiang
2014-11-13  6:51                                 ` Liu, Jijiang
     [not found]                                   ` <1ED644BD7E0A5F4091CF203DAFB8E4CC01D992F8-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-13  9:10                                     ` Thomas Monjalon
2014-11-14  8:15                                       ` Liu, Jijiang
     [not found]                                         ` <1ED644BD7E0A5F4091CF203DAFB8E4CC01D9B646-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-14  9:09                                           ` Olivier MATZ
     [not found]                                             ` <5465C6DD.4000000-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2014-11-17  6:52                                               ` Liu, Jijiang
     [not found]                                                 ` <1ED644BD7E0A5F4091CF203DAFB8E4CC01D9BAC0-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-17 11:21                                                   ` Olivier MATZ
     [not found]                                                     ` <5469DA40.7050107-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2014-11-20  7:28                                                       ` Liu, Jijiang
     [not found]                                                         ` <1ED644BD7E0A5F4091CF203DAFB8E4CC01D9C383-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-11-20 16:36                                                           ` Olivier MATZ
     [not found]                                                             ` <546E1887.1020800-pdR9zngts4EAvxtiuMwx3w@public.gmane.org>
2014-11-21  5:40                                                               ` Liu, Jijiang
2014-10-27  2:20   ` [PATCH v8 00/10] Support VxLAN on Fortville Liu, Yong
2014-10-27  2:41   ` Zhang, Helin
     [not found]     ` <F35DEAC7BCE34641BA9FAC6BCA4A12E70A7AB624-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-10-27 13:46       ` Thomas Monjalon
2014-10-27 14:34         ` Liu, Jijiang
     [not found]           ` <1ED644BD7E0A5F4091CF203DAFB8E4CC01D83857-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2014-10-27 15:15             ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1414376006-31402-6-git-send-email-jijiang.liu@intel.com \
    --to=jijiang.liu-ral2jqcrhueavxtiumwx3w@public.gmane.org \
    --cc=dev-VfR2kkLFssw@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).