From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 436BC45634; Wed, 17 Jul 2024 12:17:39 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 03138410DD; Wed, 17 Jul 2024 12:17:39 +0200 (CEST) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id B3CBB40609; Wed, 17 Jul 2024 12:17:37 +0200 (CEST) Received: from mail.maildlp.com (unknown [172.18.186.231]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4WPBfp3DmYz6JB87; Wed, 17 Jul 2024 18:16:18 +0800 (CST) Received: from frapeml500008.china.huawei.com (unknown [7.182.85.71]) by mail.maildlp.com (Postfix) with ESMTPS id 8E810140B3C; Wed, 17 Jul 2024 18:17:36 +0800 (CST) Received: from frapeml500007.china.huawei.com (7.182.85.172) by frapeml500008.china.huawei.com (7.182.85.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Wed, 17 Jul 2024 12:17:36 +0200 Received: from frapeml500007.china.huawei.com ([7.182.85.172]) by frapeml500007.china.huawei.com ([7.182.85.172]) with mapi id 15.01.2507.039; Wed, 17 Jul 2024 12:17:36 +0200 From: Konstantin Ananyev To: Gagandeep Singh , "dev@dpdk.org" , Konstantin Ananyev , Sean Morrissey CC: "stable@dpdk.org" Subject: RE: [PATCH 3/3] examples/l3fwd: fix maximum acceptable port ID in routes Thread-Topic: [PATCH 3/3] examples/l3fwd: fix maximum acceptable port ID in routes Thread-Index: AQHa1qAIJ72CVVlLaEGsAap4GVnOybH6r7LQ Date: Wed, 17 Jul 2024 10:17:36 +0000 Message-ID: <370cf325ad02427cbca5a37756da4c35@huawei.com> References: <20240715101458.645014-1-g.singh@nxp.com> <20240715101458.645014-3-g.singh@nxp.com> In-Reply-To: <20240715101458.645014-3-g.singh@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.48.146.14] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org > Application is accepting routes for port ID up to UINT8_MAX > for LPM amd EM routes on parsing the given rule file, but only > up to 32 ports can be enabled as per the variable enabled_port_mask > which is defined as uint32_t. >=20 > This patch restricts the rules parsing code to accept routes for > port ID up to 31 only to avoid any unnecessary maintenance of rules > which will never be used. If we want to add this extra check, probably better to do it in setup_lpm()= . Where we already check that port is enabled, and If not, then this route ru= le will be skipped: /* populate the LPM table */ for (i =3D 0; i < route_num_v4; i++) { struct in_addr in; /* skip unused ports */ if ((1 << route_base_v4[i].if_out & enabled_port_mask) =3D=3D 0) continue; Same for EM. Another question here - why we just silently skip the rule with invalid por= t? Probably need to fail with error... that what ACL code-path does. > Fixes: e7e6dd643092 ("examples/l3fwd: support config file for EM") > Fixes: 52def963fc1c ("examples/l3fwd: support config file for LPM/FIB") > Cc: sean.morrissey@intel.com > Cc: stable@dpdk.org >=20 > Signed-off-by: Gagandeep Singh > --- > examples/l3fwd/em_route_parse.c | 6 ++++-- > examples/l3fwd/lpm_route_parse.c | 6 ++++-- > 2 files changed, 8 insertions(+), 4 deletions(-) >=20 > diff --git a/examples/l3fwd/em_route_parse.c b/examples/l3fwd/em_route_pa= rse.c > index 8b534de5f1..65c71cd1ba 100644 > --- a/examples/l3fwd/em_route_parse.c > +++ b/examples/l3fwd/em_route_parse.c > @@ -65,7 +65,8 @@ em_parse_v6_rule(char *str, struct em_rule *v) > /* protocol. */ > GET_CB_FIELD(in[CB_FLD_PROTO], v->v6_key.proto, 0, UINT8_MAX, 0); > /* out interface. */ > - GET_CB_FIELD(in[CB_FLD_IF_OUT], v->if_out, 0, UINT8_MAX, 0); > + GET_CB_FIELD(in[CB_FLD_IF_OUT], v->if_out, 0, > + (sizeof(enabled_port_mask) * CHAR_BIT) - 1, 0); >=20 > return 0; > } > @@ -102,7 +103,8 @@ em_parse_v4_rule(char *str, struct em_rule *v) > /* protocol. */ > GET_CB_FIELD(in[CB_FLD_PROTO], v->v4_key.proto, 0, UINT8_MAX, 0); > /* out interface. */ > - GET_CB_FIELD(in[CB_FLD_IF_OUT], v->if_out, 0, UINT8_MAX, 0); > + GET_CB_FIELD(in[CB_FLD_IF_OUT], v->if_out, 0, > + (sizeof(enabled_port_mask) * CHAR_BIT) - 1, 0); >=20 > return 0; > } > diff --git a/examples/l3fwd/lpm_route_parse.c b/examples/l3fwd/lpm_route_= parse.c > index f27b66e838..357c12d9fe 100644 > --- a/examples/l3fwd/lpm_route_parse.c > +++ b/examples/l3fwd/lpm_route_parse.c > @@ -110,7 +110,8 @@ lpm_parse_v6_rule(char *str, struct lpm_route_rule *v= ) >=20 > rc =3D lpm_parse_v6_net(in[CB_FLD_DST_ADDR], v->ip_32, &v->depth); >=20 > - GET_CB_FIELD(in[CB_FLD_IF_OUT], v->if_out, 0, UINT8_MAX, 0); > + GET_CB_FIELD(in[CB_FLD_IF_OUT], v->if_out, 0, > + (sizeof(enabled_port_mask) * CHAR_BIT) - 1, 0); >=20 > return rc; > } > @@ -132,7 +133,8 @@ lpm_parse_v4_rule(char *str, struct lpm_route_rule *v= ) >=20 > rc =3D parse_ipv4_addr_mask(in[CB_FLD_DST_ADDR], &v->ip, &v->depth); >=20 > - GET_CB_FIELD(in[CB_FLD_IF_OUT], v->if_out, 0, UINT8_MAX, 0); > + GET_CB_FIELD(in[CB_FLD_IF_OUT], v->if_out, 0, > + (sizeof(enabled_port_mask) * CHAR_BIT) - 1, 0); >=20 > return rc; > } > -- > 2.25.1