From: Salem Sol <salems@nvidia.com> To: dev@dpdk.org Cc: Jiawei Wang <jiaweiw@nvidia.com>, Ori Kam <orika@nvidia.com>, Xiaoyun Li <xiaoyun.li@intel.com> Subject: [dpdk-dev] [PATCH v4 1/7] app/testpmd: store VXLAN/NVGRE encap data globally Date: Sun, 4 Apr 2021 12:49:04 +0300 Message-ID: <20210404094910.95413-2-salems@nvidia.com> (raw) In-Reply-To: <20210404094910.95413-1-salems@nvidia.com> From: Jiawei Wang <jiaweiw@nvidia.com> With the current code the VXLAN/NVGRE parsing routine stored the configuration of the header on stack, this might lead to overwriting the data on the stack. This patch stores the external data of vxlan and nvgre encap into global data as a pre-step to supporting vxlan and nvgre encap as a sample actions. Signed-off-by: Jiawei Wang <jiaweiw@nvidia.com> --- app/test-pmd/cmdline_flow.c | 72 ++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 28 deletions(-) diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c index 49d9f9c043..16b2120dbc 100644 --- a/app/test-pmd/cmdline_flow.c +++ b/app/test-pmd/cmdline_flow.c @@ -5244,31 +5244,11 @@ parse_vc_action_rss_queue(struct context *ctx, const struct token *token, return len; } -/** Parse VXLAN encap action. */ +/** Setup VXLAN encap configuration. */ static int -parse_vc_action_vxlan_encap(struct context *ctx, const struct token *token, - const char *str, unsigned int len, - void *buf, unsigned int size) +parse_setup_vxlan_encap_data(struct action_vxlan_encap_data *action_vxlan_encap_data) { - struct buffer *out = buf; - struct rte_flow_action *action; - struct action_vxlan_encap_data *action_vxlan_encap_data; - 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; /* Set up default configuration. */ - action_vxlan_encap_data = ctx->object; *action_vxlan_encap_data = (struct action_vxlan_encap_data){ .conf = (struct rte_flow_action_vxlan_encap){ .definition = action_vxlan_encap_data->items, @@ -5372,19 +5352,18 @@ parse_vc_action_vxlan_encap(struct context *ctx, const struct token *token, } memcpy(action_vxlan_encap_data->item_vxlan.vni, vxlan_encap_conf.vni, RTE_DIM(vxlan_encap_conf.vni)); - action->conf = &action_vxlan_encap_data->conf; - return ret; + return 0; } -/** Parse NVGRE encap action. */ +/** Parse VXLAN encap action. */ static int -parse_vc_action_nvgre_encap(struct context *ctx, const struct token *token, +parse_vc_action_vxlan_encap(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_nvgre_encap_data *action_nvgre_encap_data; + struct action_vxlan_encap_data *action_vxlan_encap_data; int ret; ret = parse_vc(ctx, token, str, len, buf, size); @@ -5399,8 +5378,17 @@ parse_vc_action_nvgre_encap(struct context *ctx, const struct token *token, /* Point to selected object. */ ctx->object = out->args.vc.data; ctx->objmask = NULL; + action_vxlan_encap_data = ctx->object; + parse_setup_vxlan_encap_data(action_vxlan_encap_data); + action->conf = &action_vxlan_encap_data->conf; + return ret; +} + +/** Setup NVGRE encap configuration. */ +static int +parse_setup_nvgre_encap_data(struct action_nvgre_encap_data *action_nvgre_encap_data) +{ /* Set up default configuration. */ - action_nvgre_encap_data = ctx->object; *action_nvgre_encap_data = (struct action_nvgre_encap_data){ .conf = (struct rte_flow_action_nvgre_encap){ .definition = action_nvgre_encap_data->items, @@ -5463,6 +5451,34 @@ parse_vc_action_nvgre_encap(struct context *ctx, const struct token *token, RTE_FLOW_ITEM_TYPE_VOID; memcpy(action_nvgre_encap_data->item_nvgre.tni, nvgre_encap_conf.tni, RTE_DIM(nvgre_encap_conf.tni)); + return 0; +} + +/** Parse NVGRE encap action. */ +static int +parse_vc_action_nvgre_encap(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_nvgre_encap_data *action_nvgre_encap_data; + 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; + action_nvgre_encap_data = ctx->object; + parse_setup_nvgre_encap_data(action_nvgre_encap_data); action->conf = &action_nvgre_encap_data->conf; return ret; } -- 2.21.0
next prev parent reply other threads:[~2021-04-04 9:49 UTC|newest] Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-04-04 9:49 [dpdk-dev] [PATCH v4 0/7] Add support for VXLAN and NVGRE encap as a sample actions Salem Sol 2021-04-04 9:49 ` Salem Sol [this message] 2021-04-06 14:54 ` [dpdk-dev] [PATCH v4 1/7] app/testpmd: store VXLAN/NVGRE encap data globally Ferruh Yigit 2021-04-07 11:48 ` [dpdk-dev] [v5 1/6] app/testpmd: prepare storing " Salem Sol 2021-04-07 23:13 ` Ferruh Yigit 2021-04-04 9:49 ` [dpdk-dev] [PATCH v4 2/7] net/mlx5: support VXLAN encap action in sample Salem Sol 2021-04-07 11:48 ` [dpdk-dev] [v5 2/6] " Salem Sol 2021-04-04 9:49 ` [dpdk-dev] [PATCH v4 3/7] net/mlx5: support NVGRE " Salem Sol 2021-04-07 11:49 ` [dpdk-dev] [v5 3/6] " Salem Sol 2021-04-04 9:49 ` [dpdk-dev] [PATCH v4 4/7] app/testpmd: support VXLAN encap for sample action Salem Sol 2021-04-07 11:50 ` [dpdk-dev] [v5 4/6] " Salem Sol 2021-04-04 9:49 ` [dpdk-dev] [PATCH v4 5/7] app/testpmd: support NVGRE " Salem Sol 2021-04-07 11:50 ` [dpdk-dev] [v5 5/6] " Salem Sol 2021-04-04 9:49 ` [dpdk-dev] [PATCH v4 6/7] doc: update sample actions support in testpmd guide Salem Sol 2021-04-07 11:51 ` [dpdk-dev] [v5 6/6] " Salem Sol 2021-04-04 9:49 ` [dpdk-dev] [PATCH v4 7/7] doc: update sample actions support in mlx5 guide Salem Sol 2021-04-06 14:45 ` Ferruh Yigit
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=20210404094910.95413-2-salems@nvidia.com \ --to=salems@nvidia.com \ --cc=dev@dpdk.org \ --cc=jiaweiw@nvidia.com \ --cc=orika@nvidia.com \ --cc=xiaoyun.li@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
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