From: wenxuanx.wu@intel.com
To: thomas@monjalon.net, andrew.rybchenko@oktetlabs.ru,
xiaoyun.li@intel.com, ferruh.yigit@xilinx.com,
aman.deep.singh@intel.com, dev@dpdk.org, yuying.zhang@intel.com,
qi.z.zhang@intel.com, jerinjacobk@gmail.com
Cc: stephen@networkplumber.org, Wenxuan Wu <wenxuanx.wu@intel.com>,
Xuan Ding <xuan.ding@intel.com>, Yuan Wang <yuanx.wang@intel.com>
Subject: [PATCH v9 3/4] app/testpmd: add rxhdrs commands and parameters
Date: Mon, 13 Jun 2022 10:25:49 +0000 [thread overview]
Message-ID: <20220613102550.241759-4-wenxuanx.wu@intel.com> (raw)
In-Reply-To: <20220613102550.241759-1-wenxuanx.wu@intel.com>
From: Wenxuan Wu <wenxuanx.wu@intel.com>
Add command line parameter:
--rxhdrs=mac,[ipv4,udp]
Set the protocol_hdr of segments to scatter packets on receiving if
split feature is engaged. And the queues with BUFFER_SPLIT flag.
Add interactive mode command:
testpmd>set rxhdrs mac,ipv4,l3,tcp,udp,sctp
(protocol sequence should be valid)
The protocol split feature is off by default. To enable protocol split,
you need:
1. Start testpmd with two mempools. E.g. --mbuf-size=2048,2048
2. Configure Rx queue with rx_offload buffer split on.
3. Set the protocol type of buffer split. E.g. set rxhdrs mac,ipv4
(default protocols of testpmd : mac|icmp|ipv4|ipv6|l3|tcp|udp|
sctp|l4|inner_mac|inner_ipv4|inner_ipv6|
inner_l3|inner_tcp|inner_udp|inner_sctp|
inner_l4)
Above protocols can be configured in testpmd. But the configuration can
only be applied when it is supported by specific pmd.
Signed-off-by: Wenxuan Wu <wenxuanx.wu@intel.com>
Signed-off-by: Xuan Ding <xuan.ding@intel.com>
Signed-off-by: Yuan Wang <yuanx.wang@intel.com>
Reviewed-by: Qi Zhang <qi.z.zhang@intel.com>
---
app/test-pmd/cmdline.c | 133 +++++++++++++++++++++++++++++++++++++-
app/test-pmd/config.c | 75 +++++++++++++++++++++
app/test-pmd/parameters.c | 15 ++++-
app/test-pmd/testpmd.c | 6 +-
app/test-pmd/testpmd.h | 6 ++
5 files changed, 229 insertions(+), 6 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 6ffea8e21a..474235bc91 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -183,7 +183,7 @@ static void cmd_help_long_parsed(void *parsed_result,
"show (rxq|txq) info (port_id) (queue_id)\n"
" Display information for configured RX/TX queue.\n\n"
- "show config (rxtx|cores|fwd|rxoffs|rxpkts|txpkts)\n"
+ "show config (rxtx|cores|fwd|rxoffs|rxpkts|rxhdrs|txpkts)\n"
" Display the given configuration.\n\n"
"read rxd (port_id) (queue_id) (rxd_id)\n"
@@ -316,6 +316,15 @@ static void cmd_help_long_parsed(void *parsed_result,
" Affects only the queues configured with split"
" offloads.\n\n"
+ "set rxhdrs (mac[,ipv4])*\n"
+ " Set the protocol hdr of each segment to scatter"
+ " packets on receiving if split feature is engaged."
+ " Affects only the queues configured with split"
+ " offloads.\n\n"
+ " Supported proto header: mac|ipv4||qinq|gre|ipv6|l3|tcp|udp|sctp|l4|"
+ "inner_mac|inner_ipv4|inner_ipv6|inner_l3|inner_tcp|"
+ "inner_udp|inner_sctp\n"
+
"set txpkts (x[,y]*)\n"
" Set the length of each segment of TXONLY"
" and optionally CSUM packets.\n\n"
@@ -3617,6 +3626,78 @@ cmdline_parse_inst_t cmd_stop = {
},
};
+static unsigned int
+get_ptype(char *value)
+{
+ uint32_t protocol;
+ if (!strcmp(value, "mac"))
+ protocol = RTE_PTYPE_L2_ETHER;
+ else if (!strcmp(value, "ipv4"))
+ protocol = RTE_PTYPE_L3_IPV4;
+ else if (!strcmp(value, "ipv6"))
+ protocol = RTE_PTYPE_L3_IPV6;
+ else if (!strcmp(value, "l3"))
+ protocol = RTE_PTYPE_L3_IPV4|RTE_PTYPE_L3_IPV6;
+ else if (!strcmp(value, "tcp"))
+ protocol = RTE_PTYPE_L4_TCP;
+ else if (!strcmp(value, "udp"))
+ protocol = RTE_PTYPE_L4_UDP;
+ else if (!strcmp(value, "sctp"))
+ protocol = RTE_PTYPE_L4_SCTP;
+ else if (!strcmp(value, "l4"))
+ protocol = RTE_PTYPE_L4_TCP|RTE_PTYPE_L4_UDP|RTE_PTYPE_L4_SCTP;
+ else if (!strcmp(value, "inner_mac"))
+ protocol = RTE_PTYPE_INNER_L2_ETHER;
+ else if (!strcmp(value, "inner_ipv4"))
+ protocol = RTE_PTYPE_INNER_L3_IPV4;
+ else if (!strcmp(value, "inner_ipv6"))
+ protocol = RTE_PTYPE_INNER_L3_IPV6;
+ else if (!strcmp(value, "inner_l3"))
+ protocol = RTE_PTYPE_INNER_L3_IPV4|RTE_PTYPE_INNER_L3_IPV6;
+ else if (!strcmp(value, "inner_tcp"))
+ protocol = RTE_PTYPE_INNER_L4_TCP;
+ else if (!strcmp(value, "inner_udp"))
+ protocol = RTE_PTYPE_INNER_L4_UDP;
+ else if (!strcmp(value, "inner_sctp"))
+ protocol = RTE_PTYPE_INNER_L4_SCTP;
+ else if (!strcmp(value, "unknown"))
+ protocol = RTE_PTYPE_UNKNOWN;
+ else if (!strcmp(value, "gre"))
+ protocol = RTE_PTYPE_TUNNEL_GRE;
+ else if (!strcmp(value, "qinq"))
+ protocol = RTE_PTYPE_L2_ETHER_QINQ;
+ else {
+ fprintf(stderr, "Unsupported protocol name: %s\n", value);
+ return 0;
+ }
+ return protocol;
+}
+/* *** SET RXHDRSLIST *** */
+
+unsigned int
+parse_hdrs_list(const char *str, const char *item_name, unsigned int max_items,
+ unsigned int *parsed_items, int check_hdrs_sequence)
+{
+ unsigned int nb_item;
+ char *cur;
+ char *tmp;
+ nb_item = 0;
+ char *str2 = strdup(str);
+ cur = strtok_r(str2, ",", &tmp);
+ while (cur != NULL) {
+ parsed_items[nb_item] = get_ptype(cur);
+ cur = strtok_r(NULL, ",", &tmp);
+ nb_item++;
+ }
+ if (nb_item > max_items)
+ fprintf(stderr, "Number of %s = %u > %u (maximum items)\n",
+ item_name, nb_item + 1, max_items);
+ set_rx_pkt_hdrs(parsed_items, nb_item);
+ free(str2);
+ if (!check_hdrs_sequence)
+ return nb_item;
+ return nb_item;
+}
/* *** SET CORELIST and PORTLIST CONFIGURATION *** */
unsigned int
@@ -3986,6 +4067,49 @@ cmdline_parse_inst_t cmd_set_rxpkts = {
},
};
+/* *** SET SEGMENT HEADERS OF RX PACKETS SPLIT *** */
+struct cmd_set_rxhdrs_result {
+ cmdline_fixed_string_t cmd_keyword;
+ cmdline_fixed_string_t rxhdrs;
+ cmdline_fixed_string_t seg_hdrs;
+};
+
+static void
+cmd_set_rxhdrs_parsed(void *parsed_result,
+ __rte_unused struct cmdline *cl,
+ __rte_unused void *data)
+{
+ struct cmd_set_rxhdrs_result *res;
+ unsigned int seg_hdrs[MAX_SEGS_BUFFER_SPLIT];
+ unsigned int nb_segs;
+
+ res = parsed_result;
+ nb_segs = parse_hdrs_list(res->seg_hdrs, "segment hdrs",
+ MAX_SEGS_BUFFER_SPLIT, seg_hdrs, 0);
+ if (nb_segs >= 1)
+ set_rx_pkt_hdrs(seg_hdrs, nb_segs);
+ cmd_reconfig_device_queue(RTE_PORT_ALL, 0, 1);
+}
+cmdline_parse_token_string_t cmd_set_rxhdrs_keyword =
+ TOKEN_STRING_INITIALIZER(struct cmd_set_rxhdrs_result,
+ cmd_keyword, "set");
+cmdline_parse_token_string_t cmd_set_rxhdrs_name =
+ TOKEN_STRING_INITIALIZER(struct cmd_set_rxhdrs_result,
+ rxhdrs, "rxhdrs");
+cmdline_parse_token_string_t cmd_set_rxhdrs_seg_hdrs =
+ TOKEN_STRING_INITIALIZER(struct cmd_set_rxhdrs_result,
+ seg_hdrs, NULL);
+cmdline_parse_inst_t cmd_set_rxhdrs = {
+ .f = cmd_set_rxhdrs_parsed,
+ .data = NULL,
+ .help_str = "set rxhdrs <mac[,ipv4]*>",
+ .tokens = {
+ (void *)&cmd_set_rxhdrs_keyword,
+ (void *)&cmd_set_rxhdrs_name,
+ (void *)&cmd_set_rxhdrs_seg_hdrs,
+ NULL,
+ },
+};
/* *** SET SEGMENT LENGTHS OF TXONLY PACKETS *** */
struct cmd_set_txpkts_result {
@@ -8058,6 +8182,8 @@ static void cmd_showcfg_parsed(void *parsed_result,
show_rx_pkt_offsets();
else if (!strcmp(res->what, "rxpkts"))
show_rx_pkt_segments();
+ else if (!strcmp(res->what, "rxhdrs"))
+ show_rx_pkt_hdrs();
else if (!strcmp(res->what, "txpkts"))
show_tx_pkt_segments();
else if (!strcmp(res->what, "txtimes"))
@@ -8070,12 +8196,12 @@ cmdline_parse_token_string_t cmd_showcfg_port =
TOKEN_STRING_INITIALIZER(struct cmd_showcfg_result, cfg, "config");
cmdline_parse_token_string_t cmd_showcfg_what =
TOKEN_STRING_INITIALIZER(struct cmd_showcfg_result, what,
- "rxtx#cores#fwd#rxoffs#rxpkts#txpkts#txtimes");
+ "rxtx#cores#fwd#rxoffs#rxpkts#rxhdrs#txpkts#txtimes");
cmdline_parse_inst_t cmd_showcfg = {
.f = cmd_showcfg_parsed,
.data = NULL,
- .help_str = "show config rxtx|cores|fwd|rxoffs|rxpkts|txpkts|txtimes",
+ .help_str = "show config rxtx|cores|fwd|rxoffs|rxpkts|rxhdrs|txpkts|txtimes",
.tokens = {
(void *)&cmd_showcfg_show,
(void *)&cmd_showcfg_port,
@@ -17833,6 +17959,7 @@ cmdline_parse_ctx_t main_ctx[] = {
(cmdline_parse_inst_t *)&cmd_set_log,
(cmdline_parse_inst_t *)&cmd_set_rxoffs,
(cmdline_parse_inst_t *)&cmd_set_rxpkts,
+ (cmdline_parse_inst_t *)&cmd_set_rxhdrs,
(cmdline_parse_inst_t *)&cmd_set_txpkts,
(cmdline_parse_inst_t *)&cmd_set_txsplit,
(cmdline_parse_inst_t *)&cmd_set_txtimes,
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index cc8e7aa138..90ac5cfa68 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -4757,6 +4757,81 @@ show_rx_pkt_segments(void)
printf("%hu\n", rx_pkt_seg_lengths[i]);
}
}
+static const char *get_ptype_str(uint32_t ptype)
+{
+ switch (ptype) {
+ case RTE_PTYPE_INNER_L2_ETHER_QINQ:
+ return "qinq";
+ case RTE_PTYPE_TUNNEL_GRE:
+ return "gre";
+ case RTE_PTYPE_UNKNOWN:
+ return "unknown";
+ case RTE_PTYPE_L2_ETHER:
+ return "outer_mac";
+ case RTE_PTYPE_L3_IPV4:
+ return "ipv4";
+ case RTE_PTYPE_L3_IPV6:
+ return "ipv6";
+ case RTE_PTYPE_L3_IPV6|RTE_PTYPE_L3_IPV4:
+ return "ip";
+ case RTE_PTYPE_L4_TCP:
+ return "tcp";
+ case RTE_PTYPE_L4_UDP:
+ return "udp";
+ case RTE_PTYPE_L4_SCTP:
+ return "sctp";
+ case RTE_PTYPE_L4_TCP|RTE_PTYPE_L4_UDP|RTE_PTYPE_L4_SCTP:
+ return "l4";
+ case RTE_PTYPE_INNER_L2_ETHER:
+ return "inner_mac";
+ case RTE_PTYPE_INNER_L3_IPV4:
+ return "inner_ipv4";
+ case RTE_PTYPE_INNER_L3_IPV6:
+ return "inner_ipv6";
+ case RTE_PTYPE_INNER_L4_TCP:
+ return "inner_tcp";
+ case RTE_PTYPE_INNER_L4_UDP:
+ return "inner_udp";
+ case RTE_PTYPE_INNER_L4_SCTP:
+ return "inner_sctp";
+ default:
+ return "unsupported";
+ }
+}
+void
+show_rx_pkt_hdrs(void)
+{
+ uint32_t i, n;
+
+ n = rx_pkt_nb_segs;
+ printf("Number of segments: %u\n", n);
+ if (n) {
+ printf("Packet segs: ");
+ for (i = 0; i != n - 1; i++)
+ printf("%s, ", get_ptype_str(rx_pkt_hdr_protos[i]));
+ printf("%s\n", rx_pkt_hdr_protos[i] == 0 ? "payload" :
+ get_ptype_str(rx_pkt_hdr_protos[i]));
+ }
+}
+void
+set_rx_pkt_hdrs(unsigned int *seg_hdrs, unsigned int nb_segs)
+{
+ unsigned int i;
+
+ if (nb_segs >= MAX_SEGS_BUFFER_SPLIT) {
+ printf("nb segments per RX packets=%u >= "
+ "MAX_SEGS_BUFFER_SPLIT - ignored\n", nb_segs);
+ return;
+ }
+
+ for (i = 0; i < nb_segs; i++)
+ rx_pkt_hdr_protos[i] = (uint32_t) seg_hdrs[i];
+ /*
+ * We calculate the number of hdrs, but payload is not included,
+ * so rx_pkt_nb_segs would increase 1.
+ */
+ rx_pkt_nb_segs = (rx_pkt_nb_segs == 0) ? (uint8_t) nb_segs + 1 : rx_pkt_nb_segs;
+}
void
set_rx_pkt_segments(unsigned int *seg_lengths, unsigned int nb_segs)
diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index daf6a31b2b..f86d626276 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -161,6 +161,7 @@ usage(char* progname)
" Used mainly with PCAP drivers.\n");
printf(" --rxoffs=X[,Y]*: set RX segment offsets for split.\n");
printf(" --rxpkts=X[,Y]*: set RX segment sizes to split.\n");
+ printf(" --rxhdrs=mac[,ipv4]*: set RX segment protocol to split.\n");
printf(" --txpkts=X[,Y]*: set TX segment sizes"
" or total packet length.\n");
printf(" --txonly-multi-flow: generate multiple flows in txonly mode\n");
@@ -673,6 +674,7 @@ launch_args_parse(int argc, char** argv)
{ "flow-isolate-all", 0, 0, 0 },
{ "rxoffs", 1, 0, 0 },
{ "rxpkts", 1, 0, 0 },
+ { "rxhdrs", 1, 0, 0 },
{ "txpkts", 1, 0, 0 },
{ "txonly-multi-flow", 0, 0, 0 },
{ "rxq-share", 2, 0, 0 },
@@ -1327,7 +1329,6 @@ launch_args_parse(int argc, char** argv)
if (!strcmp(lgopts[opt_idx].name, "rxpkts")) {
unsigned int seg_len[MAX_SEGS_BUFFER_SPLIT];
unsigned int nb_segs;
-
nb_segs = parse_item_list
(optarg, "rxpkt segments",
MAX_SEGS_BUFFER_SPLIT,
@@ -1337,6 +1338,18 @@ launch_args_parse(int argc, char** argv)
else
rte_exit(EXIT_FAILURE, "bad rxpkts\n");
}
+ if (!strcmp(lgopts[opt_idx].name, "rxhdrs")) {
+ unsigned int seg_hdrs[MAX_SEGS_BUFFER_SPLIT];
+ unsigned int nb_segs;
+ nb_segs = parse_hdrs_list
+ (optarg, "rxpkt segments",
+ MAX_SEGS_BUFFER_SPLIT,
+ seg_hdrs, 0);
+ if (nb_segs >= 1)
+ set_rx_pkt_hdrs(seg_hdrs, nb_segs);
+ else
+ rte_exit(EXIT_FAILURE, "bad rxpkts\n");
+ }
if (!strcmp(lgopts[opt_idx].name, "txpkts")) {
unsigned seg_lengths[RTE_MAX_SEGS_PER_PKT];
unsigned int nb_segs;
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index fe2ce19f99..ef679c70be 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -240,6 +240,7 @@ uint16_t rx_pkt_seg_lengths[MAX_SEGS_BUFFER_SPLIT];
uint8_t rx_pkt_nb_segs; /**< Number of segments to split */
uint16_t rx_pkt_seg_offsets[MAX_SEGS_BUFFER_SPLIT];
uint8_t rx_pkt_nb_offs; /**< Number of specified offsets */
+uint32_t rx_pkt_hdr_protos[MAX_SEGS_BUFFER_SPLIT];
/*
* Configuration of packet segments used by the "txonly" processing engine.
@@ -2587,11 +2588,12 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
mpx = mbuf_pool_find(socket_id, mp_n);
/* Handle zero as mbuf data buffer size. */
rx_seg->length = rx_pkt_seg_lengths[i] ?
- rx_pkt_seg_lengths[i] :
- mbuf_data_size[mp_n];
+ rx_pkt_seg_lengths[i] :
+ mbuf_data_size[mp_n];
rx_seg->offset = i < rx_pkt_nb_offs ?
rx_pkt_seg_offsets[i] : 0;
rx_seg->mp = mpx ? mpx : mp;
+ rx_seg->proto_hdr = rx_pkt_hdr_protos[i];
}
rx_conf->rx_nseg = rx_pkt_nb_segs;
rx_conf->rx_seg = rx_useg;
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index 31f766c965..e791b9becd 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -534,6 +534,7 @@ extern uint32_t max_rx_pkt_len;
* Configuration of packet segments used to scatter received packets
* if some of split features is configured.
*/
+extern uint32_t rx_pkt_hdr_protos[MAX_SEGS_BUFFER_SPLIT];
extern uint16_t rx_pkt_seg_lengths[MAX_SEGS_BUFFER_SPLIT];
extern uint8_t rx_pkt_nb_segs; /**< Number of segments to split */
extern uint16_t rx_pkt_seg_offsets[MAX_SEGS_BUFFER_SPLIT];
@@ -864,6 +865,9 @@ inc_tx_burst_stats(struct fwd_stream *fs, uint16_t nb_tx)
unsigned int parse_item_list(const char *str, const char *item_name,
unsigned int max_items,
unsigned int *parsed_items, int check_unique_values);
+unsigned int parse_hdrs_list(const char *str, const char *item_name,
+ unsigned int max_item,
+ unsigned int *parsed_items, int check_unique_values);
void launch_args_parse(int argc, char** argv);
void cmdline_read_from_file(const char *filename);
void prompt(void);
@@ -1018,6 +1022,8 @@ void set_record_core_cycles(uint8_t on_off);
void set_record_burst_stats(uint8_t on_off);
void set_verbose_level(uint16_t vb_level);
void set_rx_pkt_segments(unsigned int *seg_lengths, unsigned int nb_segs);
+void set_rx_pkt_hdrs(unsigned int *seg_protos, unsigned int nb_segs);
+void show_rx_pkt_hdrs(void);
void show_rx_pkt_segments(void);
void set_rx_pkt_offsets(unsigned int *seg_offsets, unsigned int nb_offs);
void show_rx_pkt_offsets(void);
--
2.25.1
next prev parent reply other threads:[~2022-06-13 10:49 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-03 6:01 [RFC] ethdev: introduce protocol type based header split xuan.ding
2022-03-03 8:55 ` Thomas Monjalon
2022-03-08 7:48 ` Ding, Xuan
2022-03-03 16:15 ` Stephen Hemminger
2022-03-04 9:58 ` Zhang, Qi Z
2022-03-04 11:54 ` Morten Brørup
2022-03-04 17:32 ` Stephen Hemminger
2022-03-22 3:56 ` [RFC,v2 0/3] " xuan.ding
2022-03-22 3:56 ` [RFC,v2 1/3] " xuan.ding
2022-03-22 7:14 ` Zhang, Qi Z
2022-03-22 7:43 ` Ding, Xuan
2022-03-22 3:56 ` [RFC,v2 2/3] app/testpmd: add header split configuration xuan.ding
2022-03-22 3:56 ` [RFC,v2 3/3] net/ice: support header split in Rx data path xuan.ding
2022-03-29 6:49 ` [RFC,v3 0/3] ethdev: introduce protocol type based header split xuan.ding
2022-03-29 6:49 ` [RFC,v3 1/3] " xuan.ding
2022-03-29 7:56 ` Zhang, Qi Z
2022-03-29 8:18 ` Ding, Xuan
2022-03-29 6:49 ` [RFC,v3 2/3] app/testpmd: add header split configuration xuan.ding
2022-03-29 6:49 ` [RFC,v3 3/3] net/ice: support header split in Rx data path xuan.ding
2022-04-02 10:41 ` [v4 0/3] ethdev: introduce protocol type based header split wenxuanx.wu
2022-04-02 10:41 ` [v4 1/3] " wenxuanx.wu
2022-04-07 10:47 ` Andrew Rybchenko
2022-04-12 16:15 ` Ding, Xuan
2022-04-20 15:48 ` Andrew Rybchenko
2022-04-25 14:57 ` Ding, Xuan
2022-04-21 10:27 ` Thomas Monjalon
2022-04-25 15:05 ` Ding, Xuan
2022-04-07 13:26 ` Jerin Jacob
2022-04-12 16:40 ` Ding, Xuan
2022-04-20 14:39 ` Andrew Rybchenko
2022-04-21 10:36 ` Thomas Monjalon
2022-04-25 9:23 ` Ding, Xuan
2022-04-26 11:13 ` [PATCH v5 0/3] ethdev: introduce protocol based buffer split wenxuanx.wu
2022-04-26 11:13 ` [PATCH v5 1/4] lib/ethdev: introduce protocol type " wenxuanx.wu
2022-05-17 21:12 ` Thomas Monjalon
2022-05-19 14:40 ` Ding, Xuan
2022-05-26 14:58 ` Ding, Xuan
2022-04-26 11:13 ` [PATCH v5 2/4] app/testpmd: add proto based buffer split config wenxuanx.wu
2022-04-26 11:13 ` [PATCH v5 3/4] net/ice: support proto based buf split in Rx path wenxuanx.wu
2022-04-02 10:41 ` [v4 2/3] app/testpmd: add header split configuration wenxuanx.wu
2022-04-02 10:41 ` [v4 3/3] net/ice: support header split in Rx data path wenxuanx.wu
2022-05-27 7:54 ` [PATCH v6] ethdev: introduce protocol header based buffer split xuan.ding
2022-05-27 8:14 ` [PATCH v6 0/1] ethdev: introduce protocol " xuan.ding
2022-05-27 8:14 ` [PATCH v6 1/1] ethdev: introduce protocol header " xuan.ding
2022-05-30 9:43 ` Ray Kinsella
2022-06-01 13:06 ` [PATCH v7 0/3] ethdev: introduce protocol type based header split wenxuanx.wu
2022-06-01 13:06 ` [PATCH v7 1/3] ethdev: introduce protocol header based buffer split wenxuanx.wu
2022-06-01 13:06 ` [PATCH v7 2/3] net/ice: support buffer split in Rx path wenxuanx.wu
2022-06-01 13:06 ` [PATCH v7 3/3] app/testpmd: add rxhdrs commands and parameters wenxuanx.wu
2022-06-01 13:22 ` [PATCH v7 0/3] ethdev: introduce protocol type based header split wenxuanx.wu
2022-06-01 13:22 ` [PATCH v7 1/3] ethdev: introduce protocol header based buffer split wenxuanx.wu
2022-06-01 13:22 ` [PATCH v7 2/3] net/ice: support buffer split in Rx path wenxuanx.wu
2022-06-01 13:22 ` [PATCH v7 3/3] app/testpmd: add rxhdrs commands and parameters wenxuanx.wu
2022-06-01 13:50 ` [PATCH v8 0/3] ethdev: introduce protocol type based header split wenxuanx.wu
2022-06-01 13:50 ` [PATCH v8 1/3] ethdev: introduce protocol hdr based buffer split wenxuanx.wu
2022-06-02 13:20 ` Andrew Rybchenko
2022-06-03 16:30 ` Ding, Xuan
2022-06-04 14:25 ` Andrew Rybchenko
2022-06-07 10:13 ` Ding, Xuan
2022-06-07 10:48 ` Andrew Rybchenko
2022-06-10 15:04 ` Ding, Xuan
2022-06-01 13:50 ` [PATCH v8 1/3] ethdev: introduce protocol header " wenxuanx.wu
2022-06-02 13:20 ` Andrew Rybchenko
2022-06-02 13:44 ` Ding, Xuan
2022-06-01 13:50 ` [PATCH v8 2/3] net/ice: support buffer split in Rx path wenxuanx.wu
2022-06-01 13:50 ` [PATCH v8 3/3] app/testpmd: add rxhdrs commands and parameters wenxuanx.wu
2022-06-02 13:20 ` [PATCH v8 0/3] ethdev: introduce protocol type based header split Andrew Rybchenko
2022-06-13 10:25 ` [PATCH v9 0/4] add an api to support proto based buffer split wenxuanx.wu
2022-06-13 10:25 ` [PATCH v9 1/4] ethdev: introduce protocol header API wenxuanx.wu
2022-07-07 9:05 ` Thomas Monjalon
2022-08-01 7:09 ` Wang, YuanX
2022-08-01 10:01 ` Thomas Monjalon
2022-08-02 10:12 ` Wang, YuanX
2022-07-08 15:00 ` Andrew Rybchenko
2022-08-01 7:17 ` Wang, YuanX
2022-06-13 10:25 ` [PATCH v9 2/4] ethdev: introduce protocol hdr based buffer split wenxuanx.wu
2022-07-07 9:07 ` Thomas Monjalon
2022-07-11 9:54 ` Ding, Xuan
2022-07-11 10:12 ` Thomas Monjalon
2022-07-08 15:00 ` Andrew Rybchenko
2022-07-21 3:24 ` Ding, Xuan
2022-08-01 14:28 ` Andrew Rybchenko
2022-08-02 7:22 ` Ding, Xuan
2022-06-13 10:25 ` wenxuanx.wu [this message]
2022-06-13 10:25 ` [PATCH v9 4/4] net/ice: support buffer split in Rx path wenxuanx.wu
2022-06-21 8:56 ` [PATCH v9 0/4] add an api to support proto based buffer split Ding, Xuan
2022-07-07 9:10 ` Thomas Monjalon
2022-07-11 10:08 ` Ding, Xuan
2022-08-12 18:15 [PATCH 0/4] support protocol " Yuan Wang
2022-10-09 20:25 ` [PATCH v9 " Yuan Wang
2022-10-09 20:25 ` [PATCH v9 3/4] app/testpmd: add rxhdrs commands and parameters Yuan Wang
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=20220613102550.241759-4-wenxuanx.wu@intel.com \
--to=wenxuanx.wu@intel.com \
--cc=aman.deep.singh@intel.com \
--cc=andrew.rybchenko@oktetlabs.ru \
--cc=dev@dpdk.org \
--cc=ferruh.yigit@xilinx.com \
--cc=jerinjacobk@gmail.com \
--cc=qi.z.zhang@intel.com \
--cc=stephen@networkplumber.org \
--cc=thomas@monjalon.net \
--cc=xiaoyun.li@intel.com \
--cc=xuan.ding@intel.com \
--cc=yuanx.wang@intel.com \
--cc=yuying.zhang@intel.com \
/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).