From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id D41892C38 for ; Thu, 28 Feb 2019 20:24:46 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Feb 2019 11:24:45 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.58,424,1544515200"; d="scan'208";a="142473570" Received: from irsmsx105.ger.corp.intel.com ([163.33.3.28]) by orsmga001.jf.intel.com with ESMTP; 28 Feb 2019 11:24:45 -0800 Received: from irsmsx108.ger.corp.intel.com ([169.254.11.28]) by irsmsx105.ger.corp.intel.com ([169.254.7.72]) with mapi id 14.03.0415.000; Thu, 28 Feb 2019 19:24:44 +0000 From: "Dumitrescu, Cristian" To: "Sheehan, Georgina" , "dev@dpdk.org" Thread-Topic: [PATCH v2 2/3] pipeline: add implementation for DSCP action Thread-Index: AQHUwtu0LNYTP9dBJEumRsJVIXXwKaX1sHTQ Date: Thu, 28 Feb 2019 19:24:43 +0000 Message-ID: <3EB4FA525960D640B5BDFFD6A3D891268E84609B@IRSMSX108.ger.corp.intel.com> References: <20180211085722.59717-1-georgina.sheehan@intel.com> <20180211132905.7502-1-georgina.sheehan@intel.com> <20180211132905.7502-2-georgina.sheehan@intel.com> In-Reply-To: <20180211132905.7502-2-georgina.sheehan@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiZWVjZDYwN2QtODhiOC00Nzc4LWFhOWUtYTc2ZTMxZDlhZGI1IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiaFZXN3R4TXFPSEJBZHFON2FtMktsRW9pKzlsMEhvd05kaGdsa3h3ME1zcVVjQ08xbSsySDlubTJGQk5PZlpkRiJ9 x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2 2/3] pipeline: add implementation for DSCP action X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Feb 2019 19:24:47 -0000 > -----Original Message----- > From: Sheehan, Georgina > Sent: Sunday, February 11, 2018 1:29 PM > To: dev@dpdk.org > Cc: Dumitrescu, Cristian ; Sheehan, > Georgina > Subject: [PATCH v2 2/3] pipeline: add implementation for DSCP action According to DPDK conventions, the title should be: "examples/ip_pipeline: = ..." instead of "pipeline: ..." >=20 > From: Georgina Sheehan >=20 > This allows the application to change the DSCP value of incoming packets >=20 > v2: Added in call of function parse_table_action_dscp in softnic cli file >=20 > Signed-off-by: Georgina Sheehan > --- > examples/ip_pipeline/action.c | 11 +++++++ > examples/ip_pipeline/action.h | 1 + > examples/ip_pipeline/cli.c | 52 ++++++++++++++++++++++++++++++++- > examples/ip_pipeline/pipeline.h | 1 + > examples/ip_pipeline/thread.c | 10 +++++++ > 5 files changed, 74 insertions(+), 1 deletion(-) >=20 > diff --git a/examples/ip_pipeline/action.c b/examples/ip_pipeline/action.= c > index d2104aad6..625c870a2 100644 > --- a/examples/ip_pipeline/action.c > +++ b/examples/ip_pipeline/action.c > @@ -366,6 +366,17 @@ table_action_profile_create(const char *name, > } > } >=20 > + if (params->action_mask & (1LLU << RTE_TABLE_ACTION_DSCP)) { > + status =3D rte_table_action_profile_action_register(ap, > + RTE_TABLE_ACTION_DSCP, > + ¶ms->dscp); > + > + if (status) { > + rte_table_action_profile_free(ap); > + return NULL; > + } > + } > + > status =3D rte_table_action_profile_freeze(ap); > if (status) { > rte_table_action_profile_free(ap); > diff --git a/examples/ip_pipeline/action.h b/examples/ip_pipeline/action.= h > index cde17e69a..ea8f81c56 100644 > --- a/examples/ip_pipeline/action.h > +++ b/examples/ip_pipeline/action.h > @@ -54,6 +54,7 @@ struct table_action_profile_params { > struct rte_table_action_ttl_config ttl; > struct rte_table_action_stats_config stats; > struct rte_table_action_sym_crypto_config sym_crypto; > + struct rte_table_action_dscp_config dscp; > }; >=20 > struct table_action_profile { > diff --git a/examples/ip_pipeline/cli.c b/examples/ip_pipeline/cli.c > index a92467e63..ca3083a48 100644 > --- a/examples/ip_pipeline/cli.c > +++ b/examples/ip_pipeline/cli.c > @@ -1045,7 +1045,8 @@ static const char cmd_table_action_profile_help[] = =3D > " [time]\n" > " [sym_crypto dev offset ]\n" > " [tag]\n" > -" [decap]\n"; > +" [decap]\n" > +" [dscp]\n"; >=20 > static void > cmd_table_action_profile(char **tokens, > @@ -1458,6 +1459,17 @@ cmd_table_action_profile(char **tokens, > t0 +=3D 1; > } /* decap */ >=20 > + if ((t0 < n_tokens) && (strcmp(tokens[t0], "dscp") =3D=3D 0)) { > + if (n_tokens < t0 + 1) { > + snprintf(out, out_size, MSG_ARG_MISMATCH, > + "table action profile dscp"); > + return; > + } > + > + p.action_mask |=3D 1LLU << RTE_TABLE_ACTION_DSCP; > + t0 +=3D 1; > + } /** DSCP **/ > + > if (t0 < n_tokens) { > snprintf(out, out_size, MSG_ARG_MISMATCH, tokens[0]); > return; > @@ -3116,6 +3128,7 @@ parse_match(char **tokens, > * data_offset ] > * [tag ] > * [decap ] > + * [dscp ] > * > * where: > * ::=3D g | y | r | drop > @@ -4108,6 +4121,26 @@ parse_table_action_decap(char **tokens, > return 2; > } >=20 > +static uint32_t > +parse_table_action_dscp(char **tokens, > + uint32_t n_tokens, > + struct table_rule_action *a) > +{ > + if ((n_tokens < 2) || > + strcmp(tokens[0], "dscp")) > + return 0; > + > + uint8_t dscp_val; > + > + if (parser_read_uint8(&dscp_val, tokens[1])) > + return 0; > + > + a->dscp.dscp_val =3D dscp_val; > + > + a->action_mask |=3D 1 << RTE_TABLE_ACTION_DSCP; > + return 2; > +} > + > static uint32_t > parse_table_action(char **tokens, > uint32_t n_tokens, > @@ -4293,6 +4326,20 @@ parse_table_action(char **tokens, > n_tokens -=3D n; > } >=20 > + if (n_tokens && (strcmp(tokens[0], "dscp") =3D=3D 0)) { > + uint32_t n; > + > + n =3D parse_table_action_dscp(tokens, n_tokens, a); > + if (n =3D=3D 0) { > + snprintf(out, out_size, MSG_ARG_INVALID, > + "action dscp"); > + return 0; > + } > + > + tokens +=3D n; > + n_tokens -=3D n; > + } > + > if (n_tokens0 - n_tokens =3D=3D 1) { > snprintf(out, out_size, MSG_ARG_INVALID, "action"); > return 0; > @@ -5056,6 +5103,9 @@ table_rule_show(const char *pipeline_name, > if (a->action_mask & (1LLU << RTE_TABLE_ACTION_DECAP)) > fprintf(f, "decap %u ", a->decap.n); >=20 > + if (a->action_mask & (1LLU << RTE_TABLE_ACTION_DSCP)) > + fprintf(f, "dscp "); > + > /* end */ > fprintf(f, "\n"); > } > diff --git a/examples/ip_pipeline/pipeline.h > b/examples/ip_pipeline/pipeline.h > index 278775c2d..670174ed4 100644 > --- a/examples/ip_pipeline/pipeline.h > +++ b/examples/ip_pipeline/pipeline.h > @@ -290,6 +290,7 @@ struct table_rule_action { > struct rte_table_action_sym_crypto_params sym_crypto; > struct rte_table_action_tag_params tag; > struct rte_table_action_decap_params decap; > + struct rte_table_action_dscp_params dscp; > }; >=20 > struct table_rule { > diff --git a/examples/ip_pipeline/thread.c b/examples/ip_pipeline/thread.= c > index 272fbbeed..c9facb53e 100644 > --- a/examples/ip_pipeline/thread.c > +++ b/examples/ip_pipeline/thread.c > @@ -2751,6 +2751,16 @@ action_convert(struct rte_table_action *a, > return status; > } >=20 > + if (action->action_mask & (1LLU << RTE_TABLE_ACTION_DSCP)) { > + status =3D rte_table_action_apply(a, > + data, > + RTE_TABLE_ACTION_DSCP, > + &action->dscp); > + > + if (status) > + return status; > + } > + > return 0; > } >=20 > -- > 2.17.1