From: Jiawei Wang <jiaweiw@mellanox.com> To: orika@mellanox.com, viacheslavo@mellanox.com, matan@mellanox.com Cc: dev@dpdk.org, thomas@monjalon.net, rasland@mellanox.com, ian.stokes@intel.com, fbl@redhat.com, jiaweiw@mellanox.com Subject: [dpdk-dev] [PATCH v3 7/7] app/testpmd: add testpmd command for sample action Date: Mon, 6 Jul 2020 20:51:08 +0300 Message-ID: <1594057868-18724-8-git-send-email-jiaweiw@mellanox.com> (raw) In-Reply-To: <1594057868-18724-1-git-send-email-jiaweiw@mellanox.com> Add a new testpmd command 'set sample_actions' that supports the multiple sample actions list configuration by using the index: set sample_actions <index> <actions list> The examples for the sample flow use case and result as below: 1. set sample_actions 0 mark id 0x8 / queue index 2 / end .. pattern eth / end actions sample ratio 2 index 0 / jump group 2 ... This flow will result in all the matched ingress packets will be jumped to next flow table, and the each second packet will be marked and sent to queue 2 of the control application. 2. ...pattern eth / end actions sample ratio 2 / port_id id 2 ... The flow will result in all the matched ingress packets will be sent to port 2, and the each second packet will also be sent to e-switch manager vport. Signed-off-by: Jiawei Wang <jiaweiw@mellanox.com> Acked-by: Ori Kam <orika@mellanox.com> --- app/test-pmd/cmdline_flow.c | 285 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 276 insertions(+), 9 deletions(-) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 4e2006c..6b1e515 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -56,6 +56,8 @@ enum index { SET_RAW_ENCAP, SET_RAW_DECAP, SET_RAW_INDEX, + SET_SAMPLE_ACTIONS, + SET_SAMPLE_INDEX, /* Top-level command. */ FLOW, @@ -349,6 +351,10 @@ enum index { ACTION_SET_IPV6_DSCP_VALUE, ACTION_AGE, ACTION_AGE_TIMEOUT, + ACTION_SAMPLE, + ACTION_SAMPLE_RATIO, + ACTION_SAMPLE_INDEX, + ACTION_SAMPLE_INDEX_VALUE, }; /** Maximum size for pattern in struct rte_flow_item_raw. */ @@ -484,6 +490,22 @@ struct action_nvgre_encap_data { struct mplsoudp_decap_conf mplsoudp_decap_conf; +#define ACTION_SAMPLE_ACTIONS_NUM 10 +#define RAW_SAMPLE_CONFS_MAX_NUM 8 +/** Storage for struct rte_flow_action_sample including external data. */ +struct action_sample_data { + struct rte_flow_action_sample conf; + uint32_t idx; +}; +/** Storage for struct rte_flow_action_sample. */ +struct raw_sample_conf { + struct rte_flow_action data[ACTION_SAMPLE_ACTIONS_NUM]; +}; +struct raw_sample_conf raw_sample_confs[RAW_SAMPLE_CONFS_MAX_NUM]; +struct rte_flow_action_mark sample_mark[RAW_SAMPLE_CONFS_MAX_NUM]; +struct rte_flow_action_queue sample_queue[RAW_SAMPLE_CONFS_MAX_NUM]; +struct rte_flow_action_count sample_count[RAW_SAMPLE_CONFS_MAX_NUM]; + /** Maximum number of subsequent tokens and arguments on the stack. */ #define CTX_STACK_SIZE 16 @@ -1161,6 +1183,7 @@ struct parse_action_priv { ACTION_SET_IPV4_DSCP, ACTION_SET_IPV6_DSCP, ACTION_AGE, + ACTION_SAMPLE, ZERO, }; @@ -1393,9 +1416,28 @@ struct parse_action_priv { ZERO, }; +static const enum index action_sample[] = { + ACTION_SAMPLE, + ACTION_SAMPLE_RATIO, + ACTION_SAMPLE_INDEX, + ACTION_NEXT, + ZERO, +}; + +static const enum index next_action_sample[] = { + ACTION_QUEUE, + ACTION_MARK, + ACTION_COUNT, + ACTION_NEXT, + ZERO, +}; + static int parse_set_raw_encap_decap(struct context *, const struct token *, const char *, unsigned int, void *, unsigned int); +static int parse_set_sample_action(struct context *, const struct token *, + const char *, unsigned int, + void *, unsigned int); static int parse_set_init(struct context *, const struct token *, const char *, unsigned int, void *, unsigned int); @@ -1460,7 +1502,15 @@ static int parse_vc_action_raw_decap_index(struct context *, static int parse_vc_action_set_meta(struct context *ctx, const struct token *token, const char *str, unsigned int len, void *buf, + unsigned int size); +static int parse_vc_action_sample(struct context *ctx, + const struct token *token, const char *str, + unsigned int len, void *buf, unsigned int size); +static int +parse_vc_action_sample_index(struct context *ctx, const struct token *token, + const char *str, unsigned int len, void *buf, + unsigned int size); static int parse_destroy(struct context *, const struct token *, const char *, unsigned int, void *, unsigned int); @@ -1531,6 +1581,8 @@ static int comp_vc_action_rss_queue(struct context *, const struct token *, unsigned int, char *, unsigned int); static int comp_set_raw_index(struct context *, const struct token *, unsigned int, char *, unsigned int); +static int comp_set_sample_index(struct context *, const struct token *, + unsigned int, char *, unsigned int); /** Token definitions. */ static const struct token token_list[] = { @@ -3612,11 +3664,13 @@ static int comp_set_raw_index(struct context *, const struct token *, /* Top level command. */ [SET] = { .name = "set", - .help = "set raw encap/decap data", - .type = "set raw_encap|raw_decap <index> <pattern>", + .help = "set raw encap/decap/sample data", + .type = "set raw_encap|raw_decap <index> <pattern>" + " or set sample_actions <index> <action>", .next = NEXT(NEXT_ENTRY (SET_RAW_ENCAP, - SET_RAW_DECAP)), + SET_RAW_DECAP, + SET_SAMPLE_ACTIONS)), .call = parse_set_init, }, /* Sub-level commands. */ @@ -3647,6 +3701,23 @@ static int comp_set_raw_index(struct context *, const struct token *, .next = NEXT(next_item), .call = parse_port, }, + [SET_SAMPLE_INDEX] = { + .name = "{index}", + .type = "UNSIGNED", + .help = "index of sample actions", + .next = NEXT(next_action_sample), + .call = parse_port, + }, + [SET_SAMPLE_ACTIONS] = { + .name = "sample_actions", + .help = "set sample actions list", + .next = NEXT(NEXT_ENTRY(SET_SAMPLE_INDEX)), + .args = ARGS(ARGS_ENTRY_ARB_BOUNDED + (offsetof(struct buffer, port), + sizeof(((struct buffer *)0)->port), + 0, RAW_SAMPLE_CONFS_MAX_NUM - 1)), + .call = parse_set_sample_action, + }, [ACTION_SET_TAG] = { .name = "set_tag", .help = "set tag", @@ -3750,6 +3821,37 @@ static int comp_set_raw_index(struct context *, const struct token *, .next = NEXT(action_age, NEXT_ENTRY(UNSIGNED)), .call = parse_vc_conf, }, + [ACTION_SAMPLE] = { + .name = "sample", + .help = "set a sample action", + .next = NEXT(action_sample), + .priv = PRIV_ACTION(SAMPLE, + sizeof(struct action_sample_data)), + .call = parse_vc_action_sample, + }, + [ACTION_SAMPLE_RATIO] = { + .name = "ratio", + .help = "flow sample ratio value", + .next = NEXT(action_sample, NEXT_ENTRY(UNSIGNED)), + .args = ARGS(ARGS_ENTRY_ARB + (offsetof(struct action_sample_data, conf) + + offsetof(struct rte_flow_action_sample, ratio), + sizeof(((struct rte_flow_action_sample *)0)-> + ratio))), + }, + [ACTION_SAMPLE_INDEX] = { + .name = "index", + .help = "the index of sample actions list", + .next = NEXT(NEXT_ENTRY(ACTION_SAMPLE_INDEX_VALUE)), + }, + [ACTION_SAMPLE_INDEX_VALUE] = { + .name = "{index}", + .type = "UNSIGNED", + .help = "unsigned integer value", + .next = NEXT(NEXT_ENTRY(ACTION_NEXT)), + .call = parse_vc_action_sample_index, + .comp = comp_set_sample_index, + }, }; /** Remove and return last entry from argument stack. */ @@ -5207,6 +5309,76 @@ static int comp_set_raw_index(struct context *, const struct token *, return len; } +static int +parse_vc_action_sample(struct context *ctx, const struct token *token, + const char *str, unsigned int len, void *buf, + unsigned int size) +{ + struct buffer *out = buf; + struct rte_flow_action *action; + struct action_sample_data *action_sample_data = NULL; + static struct rte_flow_action end_action = { + RTE_FLOW_ACTION_TYPE_END, 0 + }; + int ret; + + ret = parse_vc(ctx, token, str, len, buf, size); + if (ret < 0) + return ret; + /* Nothing else to do if there is no buffer. */ + if (!out) + return ret; + if (!out->args.vc.actions_n) + return -1; + action = &out->args.vc.actions[out->args.vc.actions_n - 1]; + /* Point to selected object. */ + ctx->object = out->args.vc.data; + ctx->objmask = NULL; + /* Copy the headers to the buffer. */ + action_sample_data = ctx->object; + action_sample_data->conf.actions = &end_action; + action->conf = &action_sample_data->conf; + return ret; +} + +static int +parse_vc_action_sample_index(struct context *ctx, const struct token *token, + const char *str, unsigned int len, void *buf, + unsigned int size) +{ + struct action_sample_data *action_sample_data; + struct rte_flow_action *action; + const struct arg *arg; + struct buffer *out = buf; + int ret; + uint16_t idx; + + RTE_SET_USED(token); + RTE_SET_USED(buf); + RTE_SET_USED(size); + if (ctx->curr != ACTION_SAMPLE_INDEX_VALUE) + return -1; + arg = ARGS_ENTRY_ARB_BOUNDED + (offsetof(struct action_sample_data, idx), + sizeof(((struct action_sample_data *)0)->idx), + 0, RAW_SAMPLE_CONFS_MAX_NUM - 1); + if (push_args(ctx, arg)) + return -1; + ret = parse_int(ctx, token, str, len, NULL, 0); + if (ret < 0) { + pop_args(ctx); + return -1; + } + if (!ctx->object) + return len; + action = &out->args.vc.actions[out->args.vc.actions_n - 1]; + action_sample_data = ctx->object; + idx = action_sample_data->idx; + action_sample_data->conf.actions = raw_sample_confs[idx].data; + action->conf = &action_sample_data->conf; + return len; +} + /** Parse tokens for destroy command. */ static int parse_destroy(struct context *ctx, const struct token *token, @@ -5971,6 +6143,38 @@ static int comp_set_raw_index(struct context *, const struct token *, if (!out->command) return -1; out->command = ctx->curr; + /* For encap/decap we need is pattern */ + out->args.vc.pattern = (void *)RTE_ALIGN_CEIL((uintptr_t)(out + 1), + sizeof(double)); + return len; +} + +/** Parse set command, initialize output buffer for subsequent tokens. */ +static int +parse_set_sample_action(struct context *ctx, const struct token *token, + const char *str, unsigned int len, + void *buf, unsigned int size) +{ + struct buffer *out = buf; + + /* Token name must match. */ + if (parse_default(ctx, token, str, len, NULL, 0) < 0) + return -1; + /* Nothing else to do if there is no buffer. */ + if (!out) + return len; + /* Make sure buffer is large enough. */ + if (size < sizeof(*out)) + return -1; + ctx->objdata = 0; + ctx->objmask = NULL; + ctx->object = out; + if (!out->command) + return -1; + out->command = ctx->curr; + /* For sampler we need is actions */ + out->args.vc.actions = (void *)RTE_ALIGN_CEIL((uintptr_t)(out + 1), + sizeof(double)); return len; } @@ -6007,11 +6211,8 @@ static int comp_set_raw_index(struct context *, const struct token *, return -1; out->command = ctx->curr; out->args.vc.data = (uint8_t *)out + size; - /* All we need is pattern */ - out->args.vc.pattern = - (void *)RTE_ALIGN_CEIL((uintptr_t)(out + 1), - sizeof(double)); - ctx->object = out->args.vc.pattern; + ctx->object = (void *)RTE_ALIGN_CEIL((uintptr_t)(out + 1), + sizeof(double)); } return len; } @@ -6162,6 +6363,24 @@ static int comp_set_raw_index(struct context *, const struct token *, return nb; } +/** Complete index number for set raw_encap/raw_decap commands. */ +static int +comp_set_sample_index(struct context *ctx, const struct token *token, + unsigned int ent, char *buf, unsigned int size) +{ + uint16_t idx = 0; + uint16_t nb = 0; + + RTE_SET_USED(ctx); + RTE_SET_USED(token); + for (idx = 0; idx < RAW_SAMPLE_CONFS_MAX_NUM; ++idx) { + if (buf && idx == ent) + return snprintf(buf, size, "%u", idx); + ++nb; + } + return nb; +} + /** Internal context. */ static struct context cmd_flow_context; @@ -6607,7 +6826,53 @@ static int comp_set_raw_index(struct context *, const struct token *, return mask; } - +/** Dispatch parsed buffer to function calls. */ +static void +cmd_set_raw_parsed_sample(const struct buffer *in) +{ + uint32_t n = in->args.vc.actions_n; + uint32_t i = 0; + struct rte_flow_action *action = NULL; + struct rte_flow_action *data = NULL; + size_t size = 0; + uint16_t idx = in->port; /* We borrow port field as index */ + uint32_t max_size = sizeof(struct rte_flow_action) * + ACTION_SAMPLE_ACTIONS_NUM; + + RTE_ASSERT(in->command == SET_SAMPLE_ACTIONS); + data = (struct rte_flow_action *)&raw_sample_confs[idx].data; + memset(data, 0x00, max_size); + for (; i <= n - 1; i++) { + action = in->args.vc.actions + i; + if (action->type == RTE_FLOW_ACTION_TYPE_END) + break; + switch (action->type) { + case RTE_FLOW_ACTION_TYPE_MARK: + size = sizeof(struct rte_flow_action_mark); + rte_memcpy(&sample_mark[idx], + (const void *)action->conf, size); + action->conf = &sample_mark[idx]; + break; + case RTE_FLOW_ACTION_TYPE_COUNT: + size = sizeof(struct rte_flow_action_count); + rte_memcpy(&sample_count[idx], + (const void *)action->conf, size); + action->conf = &sample_count[idx]; + break; + case RTE_FLOW_ACTION_TYPE_QUEUE: + size = sizeof(struct rte_flow_action_queue); + rte_memcpy(&sample_queue[idx], + (const void *)action->conf, size); + action->conf = &sample_queue[idx]; + break; + default: + printf("Error - Not supported action\n"); + return; + } + rte_memcpy(data, action, sizeof(struct rte_flow_action)); + data++; + } +} /** Dispatch parsed buffer to function calls. */ static void @@ -6624,6 +6889,8 @@ static int comp_set_raw_index(struct context *, const struct token *, uint16_t proto = 0; uint16_t idx = in->port; /* We borrow port field as index */ + if (in->command == SET_SAMPLE_ACTIONS) + return cmd_set_raw_parsed_sample(in); RTE_ASSERT(in->command == SET_RAW_ENCAP || in->command == SET_RAW_DECAP); if (in->command == SET_RAW_ENCAP) { -- 1.8.3.1
next prev parent reply other threads:[~2020-07-06 17:54 UTC|newest] Thread overview: 186+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-06-25 16:26 [dpdk-dev] [PATCH 0/8] support the flow-based traffic sampling Jiawei Wang 2020-06-25 16:26 ` [dpdk-dev] [PATCH 1/8] ethdev: introduce sample action for rte flow Jiawei Wang 2020-06-25 17:55 ` Jerin Jacob 2020-06-25 19:29 ` Thomas Monjalon 2020-06-26 10:35 ` Jerin Jacob 2020-06-26 10:45 ` Thomas Monjalon 2020-06-26 11:10 ` Jerin Jacob 2020-06-28 8:14 ` Andrew Rybchenko 2020-06-28 13:16 ` Jiawei(Jonny) Wang 2020-06-28 13:37 ` Jerin Jacob 2020-06-28 15:52 ` Jiawei(Jonny) Wang 2020-07-02 0:18 ` Stephen Hemminger 2020-07-02 7:16 ` Ori Kam 2020-06-28 8:27 ` Andrew Rybchenko 2020-06-28 16:16 ` Jiawei(Jonny) Wang 2020-06-28 16:18 ` Andrew Rybchenko 2020-06-29 11:40 ` Ori Kam 2020-06-29 13:11 ` Andrew Rybchenko 2020-06-29 14:29 ` Ori Kam 2020-06-30 16:42 ` Ori Kam 2020-07-01 9:37 ` Ori Kam 2020-06-25 16:26 ` [dpdk-dev] [PATCH 2/8] common/mlx5: glue for default miss and sample action Jiawei Wang 2020-06-30 15:25 ` Ori Kam 2020-06-25 16:26 ` [dpdk-dev] [PATCH 3/8] common/mlx5: query sampler object capability via DevX Jiawei Wang 2020-06-30 17:38 ` Ori Kam 2020-06-25 16:26 ` [dpdk-dev] [PATCH 4/8] net/mlx5: add the validate sample action Jiawei Wang 2020-06-30 17:59 ` Ori Kam 2020-07-01 13:55 ` Jiawei(Jonny) Wang 2020-06-25 16:26 ` [dpdk-dev] [PATCH 5/8] net/mlx5: split sample flow into two sub flows Jiawei Wang 2020-06-30 18:18 ` Ori Kam 2020-06-25 16:26 ` [dpdk-dev] [PATCH 6/8] net/mlx5: update translate function for sample action Jiawei Wang 2020-06-30 19:54 ` Ori Kam 2020-07-01 15:06 ` Jiawei(Jonny) Wang 2020-06-25 16:26 ` [dpdk-dev] [PATCH 7/8] net/mlx5: update the metadata register c0 support Jiawei Wang 2020-06-25 16:26 ` [dpdk-dev] [PATCH 8/8] app/testpmd: add testpmd command for sample action Jiawei Wang 2020-06-30 15:23 ` Ori Kam 2020-07-02 17:43 ` [dpdk-dev] [PATCH 0/7] support the flow-based traffic sampling Jiawei Wang 2020-07-02 17:43 ` [dpdk-dev] [PATCH 1/7] ethdev: introduce sample action for rte flow Jiawei Wang 2020-07-02 17:43 ` [dpdk-dev] [PATCH 2/7] common/mlx5: glue for sample action Jiawei Wang 2020-07-02 17:43 ` [dpdk-dev] [PATCH 3/7] common/mlx5: query sampler object capability via DevX Jiawei Wang 2020-07-02 17:43 ` [dpdk-dev] [PATCH 4/7] net/mlx5: add the validate sample action Jiawei Wang 2020-07-02 17:43 ` [dpdk-dev] [PATCH 5/7] net/mlx5: split sample flow into two sub flows Jiawei Wang 2020-07-02 17:43 ` [dpdk-dev] [PATCH 6/7] net/mlx5: update translate function for sample action Jiawei Wang 2020-07-02 17:43 ` [dpdk-dev] [PATCH 7/7] app/testpmd: add testpmd command " Jiawei Wang 2020-07-02 18:43 ` [dpdk-dev] [PATCH v2 0/7] [v2] support the flow-based traffic sampling Jiawei Wang 2020-07-02 18:43 ` [dpdk-dev] [PATCH v2 1/7] ethdev: introduce sample action for rte flow Jiawei Wang 2020-07-03 6:39 ` Jerin Jacob 2020-07-03 14:55 ` Matan Azrad 2020-07-03 15:08 ` Jerin Jacob 2020-07-03 15:27 ` Matan Azrad 2020-07-03 15:27 ` Thomas Monjalon 2020-07-03 15:36 ` Jerin Jacob 2020-07-04 19:26 ` Matan Azrad 2020-07-05 1:21 ` Jerin Jacob 2020-07-05 4:52 ` Matan Azrad 2020-07-06 8:37 ` Jerin Jacob 2020-07-04 14:35 ` Ajit Khaparde 2020-07-04 14:44 ` Ajit Khaparde 2020-07-05 8:55 ` Thomas Monjalon 2020-07-05 23:54 ` Ajit Khaparde 2020-07-04 13:04 ` Andrew Rybchenko 2020-07-05 10:18 ` Ori Kam 2020-07-05 23:54 ` Ajit Khaparde 2020-07-06 6:53 ` Jiawei(Jonny) Wang 2020-07-02 18:43 ` [dpdk-dev] [PATCH v2 2/7] common/mlx5: glue for sample action Jiawei Wang 2020-07-02 18:43 ` [dpdk-dev] [PATCH v2 3/7] common/mlx5: query sampler object capability via DevX Jiawei Wang 2020-07-02 18:43 ` [dpdk-dev] [PATCH v2 4/7] net/mlx5: add the validate sample action Jiawei Wang 2020-07-05 19:30 ` Ori Kam 2020-07-02 18:43 ` [dpdk-dev] [PATCH v2 5/7] net/mlx5: split sample flow into two sub flows Jiawei Wang 2020-07-02 18:43 ` [dpdk-dev] [PATCH v2 6/7] net/mlx5: update translate function for sample action Jiawei Wang 2020-07-05 19:32 ` Ori Kam 2020-07-02 18:43 ` [dpdk-dev] [PATCH v2 7/7] app/testpmd: add testpmd command " Jiawei Wang 2020-07-06 17:51 ` [dpdk-dev] [PATCH v3 0/7] support the flow-based traffic sampling Jiawei Wang 2020-07-06 17:51 ` [dpdk-dev] [PATCH v3 1/7] ethdev: introduce sample action for rte flow Jiawei Wang 2020-07-07 10:26 ` Andrew Rybchenko 2020-07-06 17:51 ` [dpdk-dev] [PATCH v3 2/7] common/mlx5: glue for sample action Jiawei Wang 2020-07-06 17:51 ` [dpdk-dev] [PATCH v3 3/7] common/mlx5: query sampler object capability via DevX Jiawei Wang 2020-07-06 17:51 ` [dpdk-dev] [PATCH v3 4/7] net/mlx5: add the validate sample action Jiawei Wang 2020-07-06 17:51 ` [dpdk-dev] [PATCH v3 5/7] net/mlx5: split sample flow into two sub flows Jiawei Wang 2020-07-06 17:51 ` [dpdk-dev] [PATCH v3 6/7] net/mlx5: update translate function for sample action Jiawei Wang 2020-07-06 17:51 ` Jiawei Wang [this message] 2020-07-06 18:23 ` [dpdk-dev] [PATCH v3 0/7] support the flow-based traffic sampling Stephen Hemminger 2020-07-06 19:14 ` Ori Kam 2020-08-26 16:01 ` [dpdk-dev] [PATCH v4 " Jiawei Wang 2020-08-26 16:01 ` [dpdk-dev] [PATCH v4 1/7] ethdev: introduce sample action for rte flow Jiawei Wang 2020-08-26 16:02 ` [dpdk-dev] [PATCH v4 2/7] common/mlx5: glue for sample action Jiawei Wang 2020-08-26 16:02 ` [dpdk-dev] [PATCH v4 3/7] common/mlx5: query sampler object capability via DevX Jiawei Wang 2020-08-26 16:02 ` [dpdk-dev] [PATCH v4 4/7] net/mlx5: add the validate sample action Jiawei Wang 2020-08-26 16:02 ` [dpdk-dev] [PATCH v4 5/7] net/mlx5: split sample flow into two sub flows Jiawei Wang 2020-08-26 16:02 ` [dpdk-dev] [PATCH v4 6/7] net/mlx5: update translate function for sample action Jiawei Wang 2020-08-26 16:02 ` [dpdk-dev] [PATCH v4 7/7] app/testpmd: add testpmd command " Jiawei Wang 2020-08-27 15:01 ` [dpdk-dev] [PATCH v5 0/7] support the flow-based traffic sampling Jiawei Wang 2020-08-27 15:01 ` [dpdk-dev] [PATCH v5 1/7] ethdev: introduce sample action for rte flow Jiawei Wang 2020-09-04 4:17 ` Ajit Khaparde 2020-09-08 14:38 ` Ori Kam 2020-08-27 15:01 ` [dpdk-dev] [PATCH v5 2/7] common/mlx5: glue for sample action Jiawei Wang 2020-08-27 15:01 ` [dpdk-dev] [PATCH v5 3/7] common/mlx5: query sampler object capability via DevX Jiawei Wang 2020-08-27 15:01 ` [dpdk-dev] [PATCH v5 4/7] net/mlx5: add the validate sample action Jiawei Wang 2020-08-27 15:01 ` [dpdk-dev] [PATCH v5 5/7] net/mlx5: split sample flow into two sub flows Jiawei Wang 2020-08-27 15:01 ` [dpdk-dev] [PATCH v5 6/7] net/mlx5: update translate function for sample action Jiawei Wang 2020-08-27 15:01 ` [dpdk-dev] [PATCH v5 7/7] app/testpmd: add testpmd command " Jiawei Wang 2020-09-09 6:48 ` [dpdk-dev] [PATCH v6 00/12] support the flow-based traffic sampling Jiawei Wang 2020-09-09 6:48 ` [dpdk-dev] [PATCH v6 01/12] ethdev: introduce sample action for rte flow Jiawei Wang 2020-09-09 6:48 ` [dpdk-dev] [PATCH v6 02/12] common/mlx5: glue for sample action Jiawei Wang 2020-09-09 6:48 ` [dpdk-dev] [PATCH v6 03/12] common/mlx5: query sampler object capability via DevX Jiawei Wang 2020-09-09 6:48 ` [dpdk-dev] [PATCH v6 04/12] net/mlx5: add the validate sample action Jiawei Wang 2020-09-09 6:48 ` [dpdk-dev] [PATCH v6 05/12] net/mlx5: split sample flow into two sub flows Jiawei Wang 2020-09-09 6:48 ` [dpdk-dev] [PATCH v6 06/12] net/mlx5: update translate function for sample action Jiawei Wang 2020-09-09 6:48 ` [dpdk-dev] [PATCH v6 07/12] app/testpmd: add testpmd command " Jiawei Wang 2020-09-09 6:48 ` [dpdk-dev] [PATCH v6 08/12] common/mlx5: add glue function for mirroring Jiawei Wang 2020-09-09 6:48 ` [dpdk-dev] [PATCH v6 09/12] net/mlx5: update validation for mirroring flow Jiawei Wang 2020-09-09 6:48 ` [dpdk-dev] [PATCH v6 10/12] net/mlx5: update translate function for mirror Jiawei Wang 2020-09-09 6:48 ` [dpdk-dev] [PATCH v6 11/12] app/testpmd: add port and encap support for sample action Jiawei Wang 2020-09-21 22:27 ` Ajit Khaparde 2020-09-22 12:32 ` Jiawei(Jonny) Wang 2020-09-09 6:48 ` [dpdk-dev] [PATCH v6 12/12] net/mlx5: support the native port id actions for mirroring Jiawei Wang 2020-09-22 17:19 ` [dpdk-dev] [PATCH v7 00/12] support the flow-based traffic sampling Jiawei Wang 2020-09-22 17:19 ` [dpdk-dev] [PATCH v7 01/12] ethdev: introduce sample action for rte flow Jiawei Wang 2020-09-22 17:19 ` [dpdk-dev] [PATCH v7 02/12] common/mlx5: glue for sample action Jiawei Wang 2020-09-22 17:19 ` [dpdk-dev] [PATCH v7 03/12] common/mlx5: query sampler object capability via DevX Jiawei Wang 2020-09-22 17:19 ` [dpdk-dev] [PATCH v7 04/12] net/mlx5: add the validate sample action Jiawei Wang 2020-09-22 17:19 ` [dpdk-dev] [PATCH v7 05/12] net/mlx5: split sample flow into two sub flows Jiawei Wang 2020-09-22 17:19 ` [dpdk-dev] [PATCH v7 06/12] net/mlx5: update translate function for sample action Jiawei Wang 2020-09-22 17:19 ` [dpdk-dev] [PATCH v7 07/12] app/testpmd: add testpmd command " Jiawei Wang 2020-09-22 17:19 ` [dpdk-dev] [PATCH v7 08/12] common/mlx5: add glue function for mirroring Jiawei Wang 2020-09-22 17:19 ` [dpdk-dev] [PATCH v7 09/12] net/mlx5: update validation for mirroring flow Jiawei Wang 2020-09-22 17:19 ` [dpdk-dev] [PATCH v7 10/12] net/mlx5: update translate function for mirror Jiawei Wang 2020-09-22 17:19 ` [dpdk-dev] [PATCH v7 11/12] app/testpmd: add port and encap support for sample action Jiawei Wang 2020-09-22 17:19 ` [dpdk-dev] [PATCH v7 12/12] doc: add E-Switch sample flow limitation description Jiawei Wang 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 00/13] support the flow-based traffic sampling Jiawei Wang 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 01/13] ethdev: introduce sample action for rte flow Jiawei Wang 2020-10-01 20:51 ` Ajit Khaparde 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 02/13] common/mlx5: glue for sample action Jiawei Wang 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 03/13] common/mlx5: query sampler object capability via DevX Jiawei Wang 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 04/13] net/mlx5: add the validate sample action Jiawei Wang 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 05/13] net/mlx5: split sample flow into two sub flows Jiawei Wang 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 06/13] net/mlx5: update translate function for sample action Jiawei Wang 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 07/13] app/testpmd: add testpmd command " Jiawei Wang 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 08/13] common/mlx5: add glue function for mirroring Jiawei Wang 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 09/13] net/mlx5: update validation for mirroring flow Jiawei Wang 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 10/13] net/mlx5: update translate function for mirror Jiawei Wang 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 11/13] app/testpmd: add port and encap support for sample action Jiawei Wang 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 12/13] doc: add the sample flow limitation description Jiawei Wang 2020-09-27 6:18 ` [dpdk-dev] [PATCH v8 13/13] doc: update offload dependencies document Jiawei Wang 2020-09-27 6:30 ` Asaf Penso 2020-10-09 13:46 ` [dpdk-dev] [PATCH v9 0/3] support the flow-based traffic sampling Jiawei Wang 2020-10-09 13:46 ` [dpdk-dev] [PATCH v9 1/3] ethdev: introduce sample action for rte flow Jiawei Wang 2020-10-09 22:07 ` Ajit Khaparde 2020-10-09 13:46 ` [dpdk-dev] [PATCH v9 2/3] app/testpmd: add testpmd command for sample action Jiawei Wang 2020-10-09 13:46 ` [dpdk-dev] [PATCH v9 3/3] app/testpmd: add port and encap support " Jiawei Wang 2020-10-09 13:55 ` [dpdk-dev] [PATCH v9 0/3] support the flow-based traffic sampling Jiawei(Jonny) Wang 2020-10-12 18:18 ` Ferruh Yigit 2020-10-09 13:50 ` [dpdk-dev] [PATCH 00/10] Add sampling and mirroring support in MLX5 PMD Jiawei Wang 2020-10-09 13:50 ` [dpdk-dev] [PATCH 01/10] common/mlx5: glue for sample action Jiawei Wang 2020-10-09 13:50 ` [dpdk-dev] [PATCH 02/10] common/mlx5: query sampler object capability via DevX Jiawei Wang 2020-10-09 13:50 ` [dpdk-dev] [PATCH 03/10] net/mlx5: add the validate sample action Jiawei Wang 2020-10-09 13:50 ` [dpdk-dev] [PATCH 04/10] net/mlx5: split sample flow into two sub flows Jiawei Wang 2020-10-09 13:50 ` [dpdk-dev] [PATCH 05/10] net/mlx5: update translate function for sample action Jiawei Wang 2020-10-09 13:50 ` [dpdk-dev] [PATCH 06/10] common/mlx5: add glue function for mirroring Jiawei Wang 2020-10-09 13:50 ` [dpdk-dev] [PATCH 07/10] net/mlx5: update validation for mirroring flow Jiawei Wang 2020-10-09 13:50 ` [dpdk-dev] [PATCH 08/10] net/mlx5: update translate function for mirror Jiawei Wang 2020-10-09 13:50 ` [dpdk-dev] [PATCH 09/10] doc: add the sample flow limitation description Jiawei Wang 2020-10-09 13:50 ` [dpdk-dev] [PATCH 10/10] doc: update offload dependencies document Jiawei Wang 2020-10-13 8:17 ` [dpdk-dev] [PATCH v2 00/10] Add sampling and mirroring support in MLX5 PMD Jiawei Wang 2020-10-13 8:17 ` [dpdk-dev] [PATCH v2 01/10] common/mlx5: glue for sample action Jiawei Wang 2020-10-13 8:17 ` [dpdk-dev] [PATCH v2 02/10] common/mlx5: query sampler object capability via DevX Jiawei Wang 2020-10-13 8:17 ` [dpdk-dev] [PATCH v2 03/10] net/mlx5: add the validate sample action Jiawei Wang 2020-10-13 8:17 ` [dpdk-dev] [PATCH v2 04/10] net/mlx5: split sample flow into two sub flows Jiawei Wang 2020-10-13 8:17 ` [dpdk-dev] [PATCH v2 05/10] net/mlx5: update translate function for sample action Jiawei Wang 2020-10-13 8:17 ` [dpdk-dev] [PATCH v2 06/10] common/mlx5: add glue function for mirroring Jiawei Wang 2020-10-13 8:17 ` [dpdk-dev] [PATCH v2 07/10] net/mlx5: update validation for mirroring flow Jiawei Wang 2020-10-13 8:17 ` [dpdk-dev] [PATCH v2 08/10] net/mlx5: update translate function for mirror Jiawei Wang 2020-10-13 8:17 ` [dpdk-dev] [PATCH v2 09/10] doc: add the sample flow limitation description Jiawei Wang 2020-10-13 8:17 ` [dpdk-dev] [PATCH v2 10/10] doc: update offload dependencies document Jiawei Wang 2020-10-13 14:11 ` [dpdk-dev] [PATCH v3 00/10] Add sampling and mirroring support in MLX5 PMD Jiawei Wang 2020-10-13 14:11 ` [dpdk-dev] [PATCH v3 01/10] common/mlx5: glue for sample action Jiawei Wang 2020-10-13 14:11 ` [dpdk-dev] [PATCH v3 02/10] common/mlx5: query sampler object capability via DevX Jiawei Wang 2020-10-13 14:11 ` [dpdk-dev] [PATCH v3 03/10] net/mlx5: add the validate sample action Jiawei Wang 2020-10-13 14:11 ` [dpdk-dev] [PATCH v3 04/10] net/mlx5: split sample flow into two sub flows Jiawei Wang 2020-10-13 14:11 ` [dpdk-dev] [PATCH v3 05/10] net/mlx5: update translate function for sample action Jiawei Wang 2020-10-13 14:11 ` [dpdk-dev] [PATCH v3 06/10] common/mlx5: add glue function for mirroring Jiawei Wang 2020-10-13 14:11 ` [dpdk-dev] [PATCH v3 07/10] net/mlx5: update validation for mirroring flow Jiawei Wang 2020-10-13 14:11 ` [dpdk-dev] [PATCH v3 08/10] net/mlx5: update translate function for mirror Jiawei Wang 2020-10-13 14:11 ` [dpdk-dev] [PATCH v3 09/10] doc: add the sample flow limitation description Jiawei Wang 2020-10-13 14:11 ` [dpdk-dev] [PATCH v3 10/10] doc: update offload dependencies document Jiawei Wang 2020-10-14 11:06 ` [dpdk-dev] [PATCH v3 00/10] Add sampling and mirroring support in MLX5 PMD Raslan Darawsheh
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=1594057868-18724-8-git-send-email-jiaweiw@mellanox.com \ --to=jiaweiw@mellanox.com \ --cc=dev@dpdk.org \ --cc=fbl@redhat.com \ --cc=ian.stokes@intel.com \ --cc=matan@mellanox.com \ --cc=orika@mellanox.com \ --cc=rasland@mellanox.com \ --cc=thomas@monjalon.net \ --cc=viacheslavo@mellanox.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
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git