From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id A8A3AA04F6; Tue, 7 Jan 2020 07:33:13 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id F20171D906; Tue, 7 Jan 2020 07:33:12 +0100 (CET) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2069.outbound.protection.outlook.com [40.107.20.69]) by dpdk.org (Postfix) with ESMTP id 073771D6E9 for ; Tue, 7 Jan 2020 07:33:11 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=khhfo6e37/XbR41hWD6uHUdZDdtw63g+SrBqbrSU9ApuZ4ITsIyUosaoFEOy8XO3U6IjgoYlWXBeP48GFKOY14dicZeldHcsZZ5mZqErF7G5Lch0oxj5wWdOYl07eh2moEzVrfwcUfXqXVTSc5a1JdNDOFW8JUFpPxTavCPcFVfAHBF0F9iPcRUQZwbIOawWu0Pd/YSqieSBz9PiLdxGEyaPLoPxqBkHBX5os6xl3WOZouY3YG1YJl0hEvUEPIMHbQVFkzBdskvYw7t7swKjXOOqidUIu7U4wl9poo4rBK5pzK4fCJqD4jKx8w8p8SNVjKy67+6N82ZVv5eW6pS75A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RQg8C3m+lUoFvpu1MzDqtJoTtavM/RptQ88PmFwI0CI=; b=YnkJpfQzgseii1HUJmKgKW1a4889TA4g6cTqESyZLA7LAq/AQv0ILgXJmnHIzxTwpKCdvEZrJlmcgU0MYgZbhhyLoP2ZdXb9u6QQBbCW5SLH9ljxr6CHGioF6hy4Ii+cSct85h3F2H97tLG+JQwCFZYW5I3lvZWHn9qfLKD5SxQjIKXGc38j4hakrpG/E8/FPEXHYyPgPijflO5MPbrO4AELsNenhtfaXjgfudBhfvWfEEoNQPEqnXQK77d6JL1FhkZT4iLUDkAzIfgFxOjRNGc3NdOYTr4aNXcnMpOuu9OMMcbYWxcsg7G4Jbv52FYm9/U4axl/5pViVJ9Cp3ynbQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RQg8C3m+lUoFvpu1MzDqtJoTtavM/RptQ88PmFwI0CI=; b=C5fpOg8aKG7M3Eq2N95ZFKL+/tdu4l5LeWxYyKR1Otk44AEkOGJhhuavc5Rti3m4hIV20d6+7S6DxzDFR7O4OXW40kg2li/mzu4rRzwdHMQogMBEcsv/1ZTwkLKdzpp+MR+5Loy/ORq0a0We6qVslb6OJKEsCNLTI3MNXyNoXFA= Received: from HE1PR05MB3484.eurprd05.prod.outlook.com (10.170.246.12) by HE1PR05MB3273.eurprd05.prod.outlook.com (10.170.246.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2602.14; Tue, 7 Jan 2020 06:33:09 +0000 Received: from HE1PR05MB3484.eurprd05.prod.outlook.com ([fe80::540c:c9ae:282d:eaa7]) by HE1PR05MB3484.eurprd05.prod.outlook.com ([fe80::540c:c9ae:282d:eaa7%4]) with mapi id 15.20.2602.015; Tue, 7 Jan 2020 06:33:09 +0000 From: Suanming Mou To: Matan Azrad , Shahaf Shuler , Slava Ovsiienko CC: "dev@dpdk.org" , Ori Kam , "arybchenko@solarflare.com" , "ferruh.yigit@intel.com" , Thomas Monjalon Thread-Topic: [PATCH 2/2] net/mlx5: add IPv4/IPv6 DSCP rewrite action Thread-Index: AQHVwTJ656IIrQBQtEac38E8jek5fafdtc+wgAEN09A= Date: Tue, 7 Jan 2020 06:33:09 +0000 Message-ID: References: <1577945052-39548-1-git-send-email-suanmingm@mellanox.com> <1577945052-39548-3-git-send-email-suanmingm@mellanox.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=suanmingm@mellanox.com; x-originating-ip: [125.120.143.53] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 1ee6461f-5ba9-479e-1d66-08d7933b766f x-ms-traffictypediagnostic: HE1PR05MB3273:|HE1PR05MB3273: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; x-forefront-prvs: 027578BB13 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(39860400002)(366004)(396003)(346002)(376002)(136003)(189003)(199004)(13464003)(52536014)(8676002)(2906002)(66946007)(81166006)(76116006)(86362001)(81156014)(5660300002)(316002)(110136005)(54906003)(6636002)(7696005)(186003)(478600001)(6506007)(9686003)(53546011)(55016002)(66476007)(33656002)(4326008)(66446008)(64756008)(66556008)(71200400001)(8936002)(26005); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR05MB3273; H:HE1PR05MB3484.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: z6A1546w8Q7YGfSCeoUyrzpoegw0HBpB0A/hrmP5QGYrO383Zz1s9SyrkBbm3dVqlPTKjzWRWsLPB0khL41w7tTCoF8/m2iGli8Kig0c9vgLIUFq3eIBPHg+hC73WR+7MRexi5WIgBt+2FLmi0PzxzLv4MZ64okT+3evRbCAvN3B3yMscIJxz/ibJbYpNtdyadurV1uelrqZamQmztYGAqCNdlMiFtWbQoKUWT9ewqmYB48qSIHwl9p6ov7huXSNjNDx/YbNfhkbK+w8bYt9D8F+NfA7xDCVtQaCirnxGzORzHawTM1QnOrs/kdZgNJg2qlka/Q1f06XnbzJNaMEJdPm4R1iJPuh9V37EfTZczauuRQ/I4LssMKR80IMdDWK+3LZmn6GXjPLDYtFNDZUccnrj8x2Ho4w/+QAFOGtQA2uYR7/WXt+q+r/MSuM0R0PasFomlyn0W4RZI2hRdIucWaL8ynyYcMFLD38FVlmqDg091TwvATOFgWQ80Zcsn0e Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1ee6461f-5ba9-479e-1d66-08d7933b766f X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jan 2020 06:33:09.2923 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: cWtPC0ijEp1BLjZEyFZ5bE60lcCG2qsRiNFlPlYlnatrVJlYxJ1HFqQi3w6cypuCwIzqXvMDnK4eEcsfNQIyBQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR05MB3273 Subject: Re: [dpdk-dev] [PATCH 2/2] net/mlx5: add IPv4/IPv6 DSCP rewrite 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi > -----Original Message----- > From: Matan Azrad > Sent: Monday, January 6, 2020 10:37 PM > To: Suanming Mou ; Shahaf Shuler > ; Slava Ovsiienko > Cc: dev@dpdk.org; Ori Kam ; > arybchenko@solarflare.com; ferruh.yigit@intel.com; Thomas Monjalon > > Subject: RE: [PATCH 2/2] net/mlx5: add IPv4/IPv6 DSCP rewrite action >=20 > Hi >=20 > From: Suanming Mou > > This commit add the IPv4/IPv6 DSCP rewrite actions to the PMD code. > > > > Supported actions: > > RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP > > RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP > > > > Signed-off-by: Suanming Mou > > --- > > drivers/net/mlx5/mlx5_flow.h | 6 +- > > drivers/net/mlx5/mlx5_flow_dv.c | 184 > > ++++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 189 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/net/mlx5/mlx5_flow.h > > b/drivers/net/mlx5/mlx5_flow.h index 27d82ac..e42c98a 100644 > > --- a/drivers/net/mlx5/mlx5_flow.h > > +++ b/drivers/net/mlx5/mlx5_flow.h > > @@ -196,6 +196,8 @@ enum mlx5_feature_name { #define > > MLX5_FLOW_ACTION_MARK_EXT (1ull << 33) #define > > MLX5_FLOW_ACTION_SET_META (1ull << 34) #define > MLX5_FLOW_ACTION_METER > > (1ull << 35) > > +#define MLX5_FLOW_ACTION_SET_IPV4_DSCP (1ull << 36) #define > > +MLX5_FLOW_ACTION_SET_IPV6_DSCP (1ull << 37) > > > > #define MLX5_FLOW_FATE_ACTIONS \ > > (MLX5_FLOW_ACTION_DROP | MLX5_FLOW_ACTION_QUEUE | \ @@ - > 232,7 +234,9 > > @@ enum mlx5_feature_name { > > MLX5_FLOW_ACTION_OF_SET_VLAN_VID > > | \ > > MLX5_FLOW_ACTION_SET_TAG | \ > > MLX5_FLOW_ACTION_MARK_EXT | \ > > - MLX5_FLOW_ACTION_SET_META) > > + MLX5_FLOW_ACTION_SET_META | \ > > + MLX5_FLOW_ACTION_SET_IPV4_DSCP | \ > > + MLX5_FLOW_ACTION_SET_IPV6_DSCP) >=20 > I don't think DSCP set is a reg feature... please check... It does not belong to the mlx5_feature_name, it belongs to the MLX5_FLOW_MO= DIFY_HDR_ACTIONS macro. I don't know why git put the feature_name here. : ( >=20 > > #define MLX5_FLOW_VLAN_ACTIONS > > (MLX5_FLOW_ACTION_OF_POP_VLAN | \ > > MLX5_FLOW_ACTION_OF_PUSH_VLAN) > > diff --git a/drivers/net/mlx5/mlx5_flow_dv.c > > b/drivers/net/mlx5/mlx5_flow_dv.c index 4c16281..15fe726 100644 > > --- a/drivers/net/mlx5/mlx5_flow_dv.c > > +++ b/drivers/net/mlx5/mlx5_flow_dv.c > > @@ -157,6 +157,7 @@ struct field_modify_info > > modify_vlan_out_first_vid[] =3D { }; > > > > struct field_modify_info modify_ipv4[] =3D { > > + {1, 1, MLX5_MODI_OUT_IP_DSCP}, > > {1, 8, MLX5_MODI_OUT_IPV4_TTL}, > > {4, 12, MLX5_MODI_OUT_SIPV4}, > > {4, 16, MLX5_MODI_OUT_DIPV4}, > > @@ -164,6 +165,7 @@ struct field_modify_info modify_ipv4[] =3D { }; > > > > struct field_modify_info modify_ipv6[] =3D { > > + {1, 0, MLX5_MODI_OUT_IP_DSCP}, > > {1, 7, MLX5_MODI_OUT_IPV6_HOPLIMIT}, > > {4, 8, MLX5_MODI_OUT_SIPV6_127_96}, > > {4, 12, MLX5_MODI_OUT_SIPV6_95_64}, > > @@ -1191,6 +1193,82 @@ struct field_modify_info modify_tcp[] =3D { } > > > > /** > > + * Convert modify-header set IPv4 DSCP action to DV specification. > > + * > > + * @param[in,out] resource > > + * Pointer to the modify-header resource. > > + * @param[in] action > > + * Pointer to action specification. > > + * @param[out] error > > + * Pointer to the error structure. > > + * > > + * @return > > + * 0 on success, a negative errno value otherwise and rte_errno is s= et. > > + */ > > +static int > > +flow_dv_convert_action_modify_ipv4_dscp > > + (struct mlx5_flow_dv_modify_hdr_resource > > *resource, > > + const struct rte_flow_action *action, > > + struct rte_flow_error *error) > > +{ > > + const struct rte_flow_action_set_dscp *conf =3D > > + (const struct rte_flow_action_set_dscp *)(action->conf); > > + struct rte_flow_item item =3D { .type =3D RTE_FLOW_ITEM_TYPE_IPV4 }; > > + struct rte_flow_item_ipv4 ipv4; > > + struct rte_flow_item_ipv4 ipv4_mask; > > + > > + memset(&ipv4, 0, sizeof(ipv4)); > > + memset(&ipv4_mask, 0, sizeof(ipv4_mask)); > > + ipv4.hdr.type_of_service =3D conf->dscp; > > + ipv4_mask.hdr.type_of_service =3D 0x3f; >=20 > Please use RTE_IPV4_HDR_DSCP_MASK. OK. >=20 > > + item.spec =3D &ipv4; > > + item.mask =3D &ipv4_mask; > > + return flow_dv_convert_modify_action(&item, modify_ipv4, NULL, > > resource, > > + MLX5_MODIFICATION_TYPE_SET, > > error); } > > + > > +/** > > + * Convert modify-header set IPv6 DSCP action to DV specification. > > + * > > + * @param[in,out] resource > > + * Pointer to the modify-header resource. > > + * @param[in] action > > + * Pointer to action specification. > > + * @param[out] error > > + * Pointer to the error structure. > > + * > > + * @return > > + * 0 on success, a negative errno value otherwise and rte_errno is s= et. > > + */ > > +static int > > +flow_dv_convert_action_modify_ipv6_dscp > > + (struct mlx5_flow_dv_modify_hdr_resource > > *resource, > > + const struct rte_flow_action *action, > > + struct rte_flow_error *error) > > +{ > > + const struct rte_flow_action_set_dscp *conf =3D > > + (const struct rte_flow_action_set_dscp *)(action->conf); > > + struct rte_flow_item item =3D { .type =3D RTE_FLOW_ITEM_TYPE_IPV6 }; > > + struct rte_flow_item_ipv6 ipv6; > > + struct rte_flow_item_ipv6 ipv6_mask; > > + > > + memset(&ipv6, 0, sizeof(ipv6)); > > + memset(&ipv6_mask, 0, sizeof(ipv6_mask)); > > + /* > > + * Even though the DSCP bits offset of IPv6 is not byte aligned, > > + * rdma-core only accept the DSCP bits byte aligned start from > > + * bit 0 to 5 as to be compatible with IPv4. No need to shift the > > + * bits in IPv6 case as rdma-core requires byte aligned value. > > + */ > > + ipv6.hdr.vtc_flow =3D conf->dscp; > > + ipv6_mask.hdr.vtc_flow =3D 0x3f; >=20 > Please use RTE_IPV6_HDR_DSCP_MASK. OK. >=20 > > + item.spec =3D &ipv6; > > + item.mask =3D &ipv6_mask; > > + return flow_dv_convert_modify_action(&item, modify_ipv6, NULL, > > resource, > > + MLX5_MODIFICATION_TYPE_SET, > > error); } > > + > > +/** > > * Validate MARK item. > > * > > * @param[in] dev > > @@ -3433,6 +3511,74 @@ struct field_modify_info modify_tcp[] =3D { } > > > > /** > > + * Validate the modify-header IPv4 DSCP actions. > > + * > > + * @param[in] action_flags > > + * Holds the actions detected until now. > > + * @param[in] action > > + * Pointer to the modify action. > > + * @param[in] item_flags > > + * Holds the items detected. > > + * @param[out] error > > + * Pointer to error structure. > > + * > > + * @return > > + * 0 on success, a negative errno value otherwise and rte_errno is s= et. > > + */ > > +static int > > +flow_dv_validate_action_modify_ipv4_dscp(const uint64_t action_flags, > > + const struct rte_flow_action *action, > > + const uint64_t item_flags, > > + struct rte_flow_error *error) > > +{ > > + int ret =3D 0; > > + > > + ret =3D flow_dv_validate_action_modify_hdr(action_flags, action, > > error); > > + if (!ret) { > > + if (!(item_flags & MLX5_FLOW_LAYER_L3_IPV4)) > > + return rte_flow_error_set(error, EINVAL, > > + > > RTE_FLOW_ERROR_TYPE_ACTION, > > + NULL, > > + "no ipv4 item in pattern"); > > + } > > + return ret; > > +} > > + > > +/** > > + * Validate the modify-header IPv6 DSCP actions. > > + * > > + * @param[in] action_flags > > + * Holds the actions detected until now. > > + * @param[in] action > > + * Pointer to the modify action. > > + * @param[in] item_flags > > + * Holds the items detected. > > + * @param[out] error > > + * Pointer to error structure. > > + * > > + * @return > > + * 0 on success, a negative errno value otherwise and rte_errno is s= et. > > + */ > > +static int > > +flow_dv_validate_action_modify_ipv6_dscp(const uint64_t action_flags, > > + const struct rte_flow_action *action, > > + const uint64_t item_flags, > > + struct rte_flow_error *error) > > +{ > > + int ret =3D 0; > > + > > + ret =3D flow_dv_validate_action_modify_hdr(action_flags, action, > > error); > > + if (!ret) { > > + if (!(item_flags & MLX5_FLOW_LAYER_L3_IPV6)) > > + return rte_flow_error_set(error, EINVAL, > > + > > RTE_FLOW_ERROR_TYPE_ACTION, > > + NULL, > > + "no ipv6 item in pattern"); > > + } > > + return ret; > > +} > > + > > +/** > > * Find existing modify-header resource or create and register a new o= ne. > > * > > * @param dev[in, out] > > @@ -4806,6 +4952,32 @@ struct field_modify_info modify_tcp[] =3D { > > action_flags |=3D MLX5_FLOW_ACTION_METER; > > ++actions_n; > > break; > > + case RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP: > > + ret =3D flow_dv_validate_action_modify_ipv4_dscp > > + (action_flags, > > + actions, > > + item_flags, > > + error); > > + if (ret < 0) > > + return ret; > > + /* Count all modify-header actions as one action. */ > > + if (!(action_flags & > > MLX5_FLOW_MODIFY_HDR_ACTIONS)) > > + ++actions_n; > > + action_flags |=3D > > MLX5_FLOW_ACTION_SET_IPV4_DSCP; > > + break; > > + case RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP: > > + ret =3D flow_dv_validate_action_modify_ipv6_dscp > > + (action_flags, > > + actions, > > + item_flags, > > + error); > > + if (ret < 0) > > + return ret; > > + /* Count all modify-header actions as one action. */ > > + if (!(action_flags & > > MLX5_FLOW_MODIFY_HDR_ACTIONS)) > > + ++actions_n; > > + action_flags |=3D > > MLX5_FLOW_ACTION_SET_IPV6_DSCP; > > + break; > > default: > > return rte_flow_error_set(error, ENOTSUP, > > > > RTE_FLOW_ERROR_TYPE_ACTION, > > @@ -7101,6 +7273,18 @@ struct field_modify_info modify_tcp[] =3D { > > flow->meter->mfts->meter_action; > > action_flags |=3D MLX5_FLOW_ACTION_METER; > > break; > > + case RTE_FLOW_ACTION_TYPE_SET_IPV4_DSCP: > > + if > > (flow_dv_convert_action_modify_ipv4_dscp(&mhdr_res, > > + actions, error)) > > + return -rte_errno; > > + action_flags |=3D > > MLX5_FLOW_ACTION_SET_IPV4_DSCP; > > + break; > > + case RTE_FLOW_ACTION_TYPE_SET_IPV6_DSCP: > > + if > > (flow_dv_convert_action_modify_ipv6_dscp(&mhdr_res, > > + actions, error)) > > + return -rte_errno; > > + action_flags |=3D > > MLX5_FLOW_ACTION_SET_IPV6_DSCP; > > + break; > > case RTE_FLOW_ACTION_TYPE_END: > > actions_end =3D true; > > if (mhdr_res.actions_num) { > > -- > > 1.8.3.1