From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60040.outbound.protection.outlook.com [40.107.6.40]) by dpdk.org (Postfix) with ESMTP id 6A8D91B460 for ; Wed, 3 Oct 2018 22:10:36 +0200 (CEST) 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=UjG+/HHzBFo6H7MJmq4Sd/DGpOCfdbUmtaMHNAYcRps=; b=g7ikIbXV/SLlEtTt4jvgaRssi+UYeQ4v019OLBGxTrp8H3mKNZO3pbZhlcHHIl5BsU40RtJK8YS/tzZkM9I5512WwQF04sdSIaof+S33UsXuL+QCA7r5is5M6bBcKju1PoB0GhlInL1Obip4eNgp6S+SN1dgwANG/rIzoiU1H3E= Received: from DB3PR0502MB3980.eurprd05.prod.outlook.com (52.134.72.27) by DB3PR0502MB4076.eurprd05.prod.outlook.com (52.134.66.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1164.22; Wed, 3 Oct 2018 20:10:35 +0000 Received: from DB3PR0502MB3980.eurprd05.prod.outlook.com ([fe80::1cb0:661b:ecab:6045]) by DB3PR0502MB3980.eurprd05.prod.outlook.com ([fe80::1cb0:661b:ecab:6045%2]) with mapi id 15.20.1185.024; Wed, 3 Oct 2018 20:10:35 +0000 From: Yongseok Koh To: Jack Min CC: "ferruh.yigit@intel.com" , Shahaf Shuler , "dev@dpdk.org" Thread-Topic: [PATCH 3/3] net/mlx5: eswitch-modify MAC address actions Thread-Index: AQHUVOEQ24TBdfjsrkCysZfm1V4OjaUOAH6A Date: Wed, 3 Oct 2018 20:10:35 +0000 Message-ID: <20181003201026.GF26206@mtidpdk.mti.labs.mlnx> References: <20180925150340.25378-1-jackmin@mellanox.com> <20180925150340.25378-4-jackmin@mellanox.com> In-Reply-To: <20180925150340.25378-4-jackmin@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: CY4PR1101CA0003.namprd11.prod.outlook.com (2603:10b6:910:15::13) To DB3PR0502MB3980.eurprd05.prod.outlook.com (2603:10a6:8:10::27) authentication-results: spf=none (sender IP is ) smtp.mailfrom=yskoh@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [209.116.155.178] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB3PR0502MB4076; 6:T9+SqA+P9L5VgtZu5cA/841mDqcc47ZgbUzbveU58C1rjgxNpwTs3c7cDLpDr9Vf8C4QP9tJRLqKKvk+8g9xuK1vtbtCL5iBYyLy0wuCmZ9LoYumv8BRKZ6bE7N82KHHez8Dp03Y6NRP/ldUlyNfyfalrVJC7UhGYKdQqfPpTzZgwbzqD34ooyhMfE1rGb280OTFqnoKYEXofPOEOyaAWCwKgNeRzREi8/AVZ0i1h44UrEsLb3LcLi5cDZ1n4CyBL3u+K/WpL1sxW4z1zZnPXQTw8YU84IRnMyBk6sOPopQKmYiCT78XH7enD1cNudMoQWMbqgPppaQcGSbvgncjjzI7mgnZbfhICZxDCThpnnRbxnRQbl4vUdusxcXoB+yRv7EyfsuYmLwcOST5pwzfW5u5MCNpUWqznfergKe+kS3STum1rkT761xA8dw40/Buwn4x+1IyKzxQQEiKiFFyIg==; 5:2Br2jCzYdUp2BM6GpnTlulLOQ82rDu98cGpqsdwBL50RUor8uZf2xmX2V15IP9oZhlgYTvDS69Ml6XKBYTUUWgby7mIMYBJu45ihgYBWsCT7WYalFGB7aZ9H7OFhDsyul/DVsUEemsI1UYGlGPbKggkfY+33r6u1kTF4ywqkQ+U=; 7:myWBBrvX1E0GkSqzdtOT3j9B4DEH4zKRWQlvY2DTPEGGeksJcxEj5t33O2KkfMbnurioj7wrDwDL/aUm0hXB5DNQfTmmrC+biqSaY9gDX/A9+Q0g+8cXXJRD6dFLC6ugLjz/GxBxItE5ZtRVyZ8XsDrr96Kg/E/4fVTxM8HAjcJqn85oGd2h5Q5qipID8OxMKh7WUfb2X3NflK/J4DXRhOhHgpDpoSM3febQ2weeLQxcqcz6gA/MN7gVFLgDOlwq x-ms-office365-filtering-correlation-id: 771dc438-6e04-4b1c-2cfd-08d6296c4770 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:DB3PR0502MB4076; x-ms-traffictypediagnostic: DB3PR0502MB4076: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231355)(944501410)(52105095)(93006095)(93001095)(6055026)(149066)(150057)(6041310)(20161123560045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(201708071742011)(7699051); SRVR:DB3PR0502MB4076; BCL:0; PCL:0; RULEID:; SRVR:DB3PR0502MB4076; x-forefront-prvs: 0814A2C7A3 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(366004)(346002)(376002)(396003)(39860400002)(199004)(189003)(26005)(71200400001)(33896004)(71190400001)(386003)(99286004)(25786009)(6506007)(106356001)(6246003)(54906003)(4326008)(2900100001)(186003)(316002)(6862004)(7736002)(575784001)(33656002)(86362001)(1076002)(105586002)(9686003)(486006)(229853002)(256004)(11346002)(476003)(446003)(81156014)(53936002)(6486002)(305945005)(6512007)(66066001)(14444005)(6116002)(6636002)(8936002)(81166006)(5660300001)(14454004)(3846002)(2906002)(102836004)(97736004)(8676002)(478600001)(68736007)(52116002)(6436002)(5250100002)(76176011); DIR:OUT; SFP:1101; SCL:1; SRVR:DB3PR0502MB4076; H:DB3PR0502MB3980.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 6lu/QVZtYZznGajEIfTw15wGBa1NFToXiuHQiwDJXeEMyLYw09d60uCnI5tcPXjdc9Knx/dTzzvSTBDmdz0fxHqE7OJ5M/uJSZZKgxJhr1pYOpB5FbAv7Vp/646zNVYO4XRfUdIUWLUMEFs6wX9E7eteXdHJYHp67H2vmIgyAbf2HpHlbFuKOfB+PPV+ACl0qYXV/h4nbBU1WUJU0/ENuNK6K6y+QpHaBk4BbMk4FO+gR6w9FQyPWVHR6xp42d5mnwN7mkt/E2PNMdGxN7sXNl5RhmyHm1xNE4UZUh2A/6NJEgjFx0clLswPy1H27uggv+Xo/xx3u6ZV5lotEX7N1mYxHda3DBATfW3n2X5a8/8= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="us-ascii" Content-ID: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 771dc438-6e04-4b1c-2cfd-08d6296c4770 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Oct 2018 20:10:35.4727 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0502MB4076 Subject: Re: [dpdk-dev] [PATCH 3/3] net/mlx5: eswitch-modify MAC address actions 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: Wed, 03 Oct 2018 20:10:36 -0000 On Tue, Sep 25, 2018 at 11:03:40PM +0800, Xiaoyu Min wrote: > Offload following modify MAC address actions to E-Switch > via TC-Flower driver >=20 > - RTE_FLOW_ACTION_TYPE_SET_MAC_SRC > - RTE_FLOW_ACTION_TYPE_SET_MAC_DST >=20 > The corresponding rte_flow_item_eth must be present in > rte_flow pattern >=20 > Only support modify outer layer MAC address >=20 > Signed-off-by: Xiaoyu Min > --- Same comments as before. Thanks, Yongseok > drivers/net/mlx5/mlx5_flow.h | 2 ++ > drivers/net/mlx5/mlx5_flow_tcf.c | 62 +++++++++++++++++++++++++++++++- > 2 files changed, 63 insertions(+), 1 deletion(-) >=20 > diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h > index 5237e31dd..76c4e8398 100644 > --- a/drivers/net/mlx5/mlx5_flow.h > +++ b/drivers/net/mlx5/mlx5_flow.h > @@ -95,6 +95,8 @@ > #define MLX5_ACTION_SET_TP_DST (1u << 16) > #define MLX5_ACTION_SET_TTL (1u << 17) > #define MLX5_ACTION_DEC_TTL (1u << 18) > +#define MLX5_ACTION_SET_MAC_SRC (1u << 19) > +#define MLX5_ACTION_SET_MAC_DST (1u << 20) > =20 > /* possible L3 layers protocols filtering. */ > #define MLX5_IP_PROTOCOL_TCP 6 > diff --git a/drivers/net/mlx5/mlx5_flow_tcf.c b/drivers/net/mlx5/mlx5_flo= w_tcf.c > index af88c4a0d..cb60c3e05 100644 > --- a/drivers/net/mlx5/mlx5_flow_tcf.c > +++ b/drivers/net/mlx5/mlx5_flow_tcf.c > @@ -303,7 +303,9 @@ struct flow_tcf_ptoi { > (act) =3D=3D RTE_FLOW_ACTION_TYPE_SET_TP_SRC || \ > (act) =3D=3D RTE_FLOW_ACTION_TYPE_SET_TP_DST || \ > (act) =3D=3D RTE_FLOW_ACTION_TYPE_SET_TTL || \ > - (act) =3D=3D RTE_FLOW_ACTION_TYPE_DEC_TTL) ? \ > + (act) =3D=3D RTE_FLOW_ACTION_TYPE_DEC_TTL || \ > + (act) =3D=3D RTE_FLOW_ACTION_TYPE_SET_MAC_SRC || \ > + (act) =3D=3D RTE_FLOW_ACTION_TYPE_SET_MAC_DST) ? \ > 1 : 0; }) > #define MAX_PEDIT_KEYS (128) > #define SZ_PEDIT_KEY_VAL (4) > @@ -327,6 +329,33 @@ flow_tcf_calc_pedit_keys(const uint64_t size) > return keys; > } > =20 > +static void > +flow_tcf_pedit_key_set_mac(const struct rte_flow_action *actions, > + struct pedit_parser *p_parser) > +{ > + int idx =3D p_parser->sel.nkeys; > + uint32_t off =3D > + actions->type =3D=3D RTE_FLOW_ACTION_TYPE_SET_MAC_SRC ? 6 : 0; > + const struct rte_flow_action_set_mac *conf =3D > + (const struct rte_flow_action_set_mac *)actions->conf; > + > + p_parser->keys[idx].off =3D off; > + p_parser->keys[idx].mask =3D ~UINT32_MAX; > + p_parser->keys_ex[idx].htype =3D TCA_PEDIT_KEY_EX_HDR_TYPE_ETH; > + p_parser->keys_ex[idx].cmd =3D TCA_PEDIT_KEY_EX_CMD_SET; > + memcpy(&p_parser->keys[idx].val, > + conf->mac_addr, SZ_PEDIT_KEY_VAL); > + idx++; > + p_parser->keys[idx].off =3D off + SZ_PEDIT_KEY_VAL; > + p_parser->keys[idx].mask =3D 0xFFFF0000; > + p_parser->keys_ex[idx].htype =3D TCA_PEDIT_KEY_EX_HDR_TYPE_ETH; > + p_parser->keys_ex[idx].cmd =3D TCA_PEDIT_KEY_EX_CMD_SET; > + memcpy(&p_parser->keys[idx].val, > + conf->mac_addr + SZ_PEDIT_KEY_VAL, > + ETHER_ADDR_LEN - SZ_PEDIT_KEY_VAL); > + p_parser->sel.nkeys =3D (++idx); > +} > + > static void > flow_tcf_pedit_key_set_dec_ttl(const struct rte_flow_action *actions, > struct pedit_parser *p_parser, > @@ -447,6 +476,10 @@ flow_tcf_create_pedit_mnl_msg(struct nlmsghdr *nl, > flow_tcf_pedit_key_set_dec_ttl(*actions, > &p_parser, item_flags); > break; > + case RTE_FLOW_ACTION_TYPE_SET_MAC_SRC: > + case RTE_FLOW_ACTION_TYPE_SET_MAC_DST: > + flow_tcf_pedit_key_set_mac(*actions, &p_parser); > + break; > default: > goto pedit_mnl_msg_done; > } > @@ -535,6 +568,14 @@ flow_tcf_get_pedit_actions_size(const struct rte_flo= w_action **actions, > keys +=3D flow_tcf_calc_pedit_keys(TTL_LEN); > flags |=3D MLX5_ACTION_DEC_TTL; > break; > + case RTE_FLOW_ACTION_TYPE_SET_MAC_SRC: > + keys +=3D flow_tcf_calc_pedit_keys(ETHER_ADDR_LEN); > + flags |=3D MLX5_ACTION_SET_MAC_SRC; > + break; > + case RTE_FLOW_ACTION_TYPE_SET_MAC_DST: > + keys +=3D flow_tcf_calc_pedit_keys(ETHER_ADDR_LEN); > + flags |=3D MLX5_ACTION_SET_MAC_DST; > + break; > default: > goto get_pedit_action_size_done; > } > @@ -1041,6 +1082,12 @@ flow_tcf_validate(struct rte_eth_dev *dev, > case RTE_FLOW_ACTION_TYPE_DEC_TTL: > action_flags |=3D MLX5_ACTION_DEC_TTL; > break; > + case RTE_FLOW_ACTION_TYPE_SET_MAC_SRC: > + action_flags |=3D MLX5_ACTION_SET_MAC_SRC; > + break; > + case RTE_FLOW_ACTION_TYPE_SET_MAC_DST: > + action_flags |=3D MLX5_ACTION_SET_MAC_DST; > + break; > default: > return rte_flow_error_set(error, ENOTSUP, > RTE_FLOW_ERROR_TYPE_ACTION, > @@ -1093,6 +1140,15 @@ flow_tcf_validate(struct rte_eth_dev *dev, > actions, > "no IP found in pattern"); > } > + if (action_flags & > + (MLX5_ACTION_SET_MAC_SRC | MLX5_ACTION_SET_MAC_DST)) { > + if (!(item_flags & MLX5_FLOW_LAYER_OUTER_L2)) > + return rte_flow_error_set(error, ENOTSUP, > + RTE_FLOW_ERROR_TYPE_ACTION, > + actions, > + "no ethernet found in" > + " pattern"); > + } > return 0; > } > =20 > @@ -1244,6 +1300,8 @@ flow_tcf_get_actions_and_size(const struct rte_flow= _action actions[], > case RTE_FLOW_ACTION_TYPE_SET_TP_DST: > case RTE_FLOW_ACTION_TYPE_SET_TTL: > case RTE_FLOW_ACTION_TYPE_DEC_TTL: > + case RTE_FLOW_ACTION_TYPE_SET_MAC_SRC: > + case RTE_FLOW_ACTION_TYPE_SET_MAC_DST: > size +=3D flow_tcf_get_pedit_actions_size(&actions, > &flags); > break; > @@ -1788,6 +1846,8 @@ flow_tcf_translate(struct rte_eth_dev *dev, struct = mlx5_flow *dev_flow, > case RTE_FLOW_ACTION_TYPE_SET_TP_DST: > case RTE_FLOW_ACTION_TYPE_SET_TTL: > case RTE_FLOW_ACTION_TYPE_DEC_TTL: > + case RTE_FLOW_ACTION_TYPE_SET_MAC_SRC: > + case RTE_FLOW_ACTION_TYPE_SET_MAC_DST: > na_act_index =3D > mnl_attr_nest_start(nlh, na_act_index_cur++); > flow_tcf_create_pedit_mnl_msg(nlh, > --=20 > 2.17.1 >=20