From patchwork Tue Sep 25 15:03:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiaoyu Min X-Patchwork-Id: 45332 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B5D321B430; Tue, 25 Sep 2018 17:04:36 +0200 (CEST) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40089.outbound.protection.outlook.com [40.107.4.89]) by dpdk.org (Postfix) with ESMTP id C86BB1B426 for ; Tue, 25 Sep 2018 17:04:32 +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=v0MfuqAI22RCVjRArsrvM/YierWTW4vboLfPBMHs/ng=; b=h7z3kQUhw1BSEMBa8yeECymXY8xAq9n56JY8OX6696bETTfNvX+oibhsD16qVPomcy15uUns1oqiLqXnHINVsK3oUX9DF3F4f+vZXcvSMprU9yHtgRmjIYhwBleIJ0osQ9bHIZTp1Zx5ZLc4ryWUKQGqTSIrYo10gVN51tdHFQE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=jackmin@mellanox.com; Received: from dev-r630-08.mtbc.labs.mlnx (118.201.220.138) by VI1PR0501MB2031.eurprd05.prod.outlook.com (2603:10a6:800:36::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1164.20; Tue, 25 Sep 2018 15:04:28 +0000 From: Xiaoyu Min To: ferruh.yigit@intel.com, Shahaf Shuler , Yongseok Koh Cc: dev@dpdk.org Date: Tue, 25 Sep 2018 23:03:40 +0800 Message-Id: <20180925150340.25378-4-jackmin@mellanox.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180925150340.25378-1-jackmin@mellanox.com> References: <20180925150340.25378-1-jackmin@mellanox.com> MIME-Version: 1.0 X-Originating-IP: [118.201.220.138] X-ClientProxiedBy: HK2PR04CA0053.apcprd04.prod.outlook.com (2603:1096:202:14::21) To VI1PR0501MB2031.eurprd05.prod.outlook.com (2603:10a6:800:36::17) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9c8ca4f4-4ab5-4193-633c-08d622f8324e X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534165)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:VI1PR0501MB2031; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2031; 3:kXqkmfFD0aFqEkptCNIJ9lT6D2+WiBlE+wfRlfHWBPlaGkFbbjg4ZIlmVSvQdWXRpf7jcXnO2hcAo5O9z5YmA5kFzlC6jshKyFmDQOAFIKglf77XHw9hoFd+eXoPIwWSmYk09FE81x+5Hvi9naK49atLMXa7he2a/iWnOoOsX1gqHARfvdRnn0nY7DG1HQ4mg+rt6WOPjPZAMUS9O9uQ/R6jsB9V0BVDGhysSI9XoVG0VkqPhqIllchdv1viUlq4; 25:RPFOZ17tVLku6WOentGTGfmSc0mS9BBcrXL2Y4THOmflv0dxJlvoxxwVUMqhTkZftIH77qIH0IfPRekK3jscoQUpSktG4MKbp273a3zZcROwwPCXvkcdvGDgCFHddcSeQ/2MEK0t40sncLbZGwrI6r0rERFPR088IZPc5j5iq45A+ThJBhwONMPp38Owhxf1c6yd9EcB3ZBl1beGrT0mYLGDVOJK9+eqW1WjFRlB21DXuAIHOR+FsscapjSl1d8x4zDn4zBiK1ilw+l1T7SH/FqvpjA8JFa34c5QvXTkoj6Txj9KSe/qFaLIYw+yFn1RbTyY5L2wYPY7Q0/ryD7ejw==; 31:j2ZzYzPabjyoN5anNATzbC25BuzotZLP76ab8IdWihdd/xiPPXrePovDlilNP3Q+xDAsABQ/uVYstIaGkFy4FI5F9IQ47bawmSK0jR/6tFszgU/UD0u9y3zJq1PcIx9kgESqfowet1cvx5ilDcroRxI9MDT+xSOvPTp8GE8XlEnCMMccUmL386w/ceXz01ggDSL+5Dbn+D168Vg8z0AgxzrpgErVJ/aXZH9gdmLOF0c= X-MS-TrafficTypeDiagnostic: VI1PR0501MB2031: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2031; 20:RhPFeLE4cURI5GKiVERJwcizCdG8uNPy8jqw4Ye/4QE5+DggiCHqR7Zqywmn33OtYLnZD51fUGzhaEiuDvBcx+T0ew2XAztf0PiobY+OFaZxDDCjkL6lmTBmoNcTBuVMS2ON9UKOixvJWKzYI27cN5JWywVJfS8nuVhzs0nf1Nq6ok2CJRDMNtN6QLlCVYNpoHnZSf4veSp2mWQ21Na1FoFPRb7RGPKE+lKED/UA+Sn4+dEhXf8XN0JWcNBmOZohpWjLXDC/sFGeKfqt6Gwday++o2X43xyPP9RbvzVvEefSpK7TsMfzokUpGXTdN1ife2TvDpxf/MAvdl+m3Lz9gnr0odQDY65H5Xrx6L5oem9+UPVI606nT62xzhLCstj1x6b05J0nCMu8xs0jEOQNyFji3hyWMhx4auoqJu3NlDe46u0jENnB6v33b0QxosPEeORQXPbLYmm46V69gwP3YIf2OK88n4U04iEcMQCrEZCXxVBXC9wcdxqcMKyQhJHY; 4:Exr45TZ43ZO38d1RucyY2BUIHUZsWQnuI7SwpANWzX4DO/euzm8fVGHMGkVakwmxSbTOdiy/CRrYh7jKC7C4wVluoOF5IawEZgWJ4e/Nv9MWzdPoAVO/IeJ9wBzBRyZKpHZ7kWUvtaGCRIutT5eF7+Zr+suj3mtksK6nJznv3udyuMU24fOvvfsLgCoIzdVEc+SXFNr4wPWuK52vNrTgem1gelDCR8c24JR20NMiGCt36haJgtajXNnmdfFg/ciapH2/CiU/KgiTc1WcClHF1Q== 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)(5005006)(8121501046)(10201501046)(93006095)(93001095)(3231355)(944501410)(52105095)(3002001)(6055026)(149066)(150027)(6041310)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(20161123558120)(201708071742011)(7699051); SRVR:VI1PR0501MB2031; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0501MB2031; X-Forefront-PRVS: 08062C429B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(136003)(366004)(346002)(376002)(39860400002)(199004)(189003)(26005)(956004)(6506007)(106356001)(105586002)(386003)(446003)(11346002)(486006)(2616005)(186003)(16526019)(476003)(6666003)(6486002)(305945005)(478600001)(34290500001)(8676002)(7736002)(2906002)(81166006)(97736004)(81156014)(5660300001)(6512007)(6116002)(3846002)(6636002)(1076002)(53936002)(16586007)(4326008)(25786009)(110136005)(48376002)(51416003)(76176011)(52116002)(68736007)(50466002)(36756003)(50226002)(14444005)(316002)(575784001)(66066001)(47776003)(86362001)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0501MB2031; H:dev-r630-08.mtbc.labs.mlnx; 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-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0501MB2031; 23:M8rvPtUdKG4NBBh2gTyUydlkwtJvTSyUz+yvt/x?= opzc/vYOlOZivO/BuManwBtiOaamBr0+u9UhxinbyCLtNoUVdnnpB1gD5D6zo8CDz69nZRdTQaPO2y5zUA86PRYjb/iUjDTrDBlVTPZmx3jgdBnMel+qeJpnsfIr0myNEZ9uUqiyUkrqbjB8+v/TpYhb1/XZX1pARACZ8qVSdWuGNX+5Aj8TfpeUkx9CDK43hp9YzdNVhnr1Wygwz38crQeMme8k0RbD7o4B3xhbgk9HQapPZYvAJWzohI5gCtmVcRk0WN+K4L3a4GHnaKYClZvuUzNrxtKKXOdZMA/neKNOdkW+l80BY8lp/BqJqg/8ZzHW3ClU+Zic7fxk4qvEQNR6J/tWH1v9qL/taYsWHQGq2UM5Agz9ksOWkw0W2/07iPfKektILOuSTfljmtlByrwTxDTUHcQi+PYmfulrsX8dgHey4R34lqSa0MGetMuvUfgFi1OeAwKwUhM93efMgooVWBQbYForGREK1rBnbo5WXiy4Y/b9UWWDVclvzpxoD7lGj7v9bW8D5ai0D623BJZ6Dt7eFuGUhXsZ3m/1+KH2mdfC3tjiKEWVv26sUDBX/n3MqAWolxALfjYpkK7dUW2xhsUxE/p87QzmASuY8gFid6PDGcspcFEOZJVdyoNV0XUr8qdv9xx/NWik/a7YyvjoF4Y+6xlJt7WaYoYNy1kWmZhFzJhewwMFEBlQLN4/ah/4h8zudtyEr+2nWcKuLFY6xjWn2u1UgX+OFlIdBA1EtS0vCLjtR+LCyC11Z/KyyscFHPORY5NctOsPh62jInZBvJBoJjYFHR9UCfeGoo18dNq8NtpqcjnKSeX9X/dXomX7FylPQ7YxgKEX/+Cne+9WPj5U0V9v4Ae6uF9FmDKEMM/5TgVCLlsQ62B+d0Rud9vUm5n3eI1bO/OuCsm4nN2UAAVgd0VvIXwlfUjqVv4/6J3mAsVqeSgrJE4k3S/dpsLLOl2SxqYpRkZycgiIgT2/LHO8CZkkWazwj3DmDNwyTrvkZMdz8+ZiTVQLeTJBaPlkNwpjlYL00crufr58LP4QwTNr3Z/2WGqeiP8n6PhzEB6ip/fJz4/VTU5JT96VaMO3/GBNnvEODMvSYy5AzGVU/qyphGWYaf9wOaJ10TtafkxDmZ5bsd38yO3gAXL+oh7P3zQacJFPFZUnkBOPMp0cRDaVKI5ibCceW3n5lx5OZs2SBeFhpg/jINaTVBU+PSAkso5oWPFgGeKwAUkdcN05O X-Microsoft-Antispam-Message-Info: IK0SGPGYhfGHdysr4ajWnYE0HkcmMsRTMaAUUiyHuy/dNswDs4+UPRE/CR2sGWej8GWMg30aGH29/qIc7zDH6X0Rb+CQYrGzYxJCalc82Fp/v5ngQuzxE5vFDRJpNPEh+WOWmQnRaxZtssEpNWbLdOJM8nK1KQqXqaG5C5yx+Y5X7sNMD8KERqZJSn9Mp+kJPJIZq9s/e0tgtz868xuN6Y+ZDN/Na2ApapB8rFyb3/HH0iKvPdAH9+xeWKf6zP9ZlI1duVCwH6KFXGl9+XURqrwB+LhCtNSbnUTPpXeJ1DMQ7QF4Kf7zIlPLb13asTFmX83btDyNS4HArBkf5uBjNxhixB1tCYDWB5DOBpB7M2Q= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0501MB2031; 6:5cKNHPgj7gK2iFB3FTOvjfrBe5Ttx6v+y/OMjOCTHUwBUNU9Fc/Q+MLL6C0yj2DicGDu31AZsMt0T8hdqyB0+Tl0PqnewxcXgexwjYUB8yOsIf3Tx8dQnfTHr+fe8OkXioNaq1ht7v8OS93BxMehFn31DoGPoaL6sGWSmN/Km7hz+zuHzfBMFLbvq17YZKKNxR/ccNIrBAuZlwwp+p2HmNyeJNF42PkAMmi5v2fQE7qJT1L90SsM4IJpEt0AzSp/cKT7Eswy+CxjohXN6QSPgqObAqXQ/uyP71rXrLWRnZkJR9TIjdZY+kIv2CzMX1kS84Qew5+KKO84DFdsMwLoyJeFGrf7hvNzUNHYn4dc6I3j9x5rxYvz2pDEwRL+ojN7aAJwwvMhkncZ8MMPoRpO8jDmFNU6ztf0rs5sdWo8VOx61CAVnh8aVzZj3Oe2hpqJcBYKaI4xcHBt7Lb8xkNBDw==; 5:c/ccgclj8Vu4Pk2eVtyfve1xDnjngKTFl/kNZ2BWTr7oU8TgCiGHhm8TFH3zncyCK0yZOnhAcJ8POxKTf4nR2VDVRWq+Pvz4FPGEi4cWW4cvxhGlPb53HXc2XqXf0L4IiSaxCUdcrasxSSb+F5Ij0yV5mHOtqrWGhIG+VCt45Ak=; 7:jO/kOhMFpvDRzTtVseY10fnXE63h0AMWIgvXBnpVhUcsHpH8c2DLK6kuEbtCK6m4QA/ckbApTbw27VVeEK7cHM9P0BARnSPKvzyBYcGAQWbMh5tIJpVE8Mt3+Zl6LpA1Hxdrk7+EG0/ZOPwWtrJv2UrQ+bS0MPkI+k5M/A6hGt2aGFZm428wELSlNOViWyV0/xePqg4Otjsz/FYQbZQkWOpLbKs1b7rQwz5BjS1eAaYVG1JkXLPpTMLE2bu0HeSZ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Sep 2018 15:04:28.7646 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9c8ca4f4-4ab5-4193-633c-08d622f8324e X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0501MB2031 Subject: [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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Offload following modify MAC address actions to E-Switch via TC-Flower driver - RTE_FLOW_ACTION_TYPE_SET_MAC_SRC - RTE_FLOW_ACTION_TYPE_SET_MAC_DST The corresponding rte_flow_item_eth must be present in rte_flow pattern Only support modify outer layer MAC address Signed-off-by: Xiaoyu Min --- drivers/net/mlx5/mlx5_flow.h | 2 ++ drivers/net/mlx5/mlx5_flow_tcf.c | 62 +++++++++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) 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) /* 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_flow_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) == RTE_FLOW_ACTION_TYPE_SET_TP_SRC || \ (act) == RTE_FLOW_ACTION_TYPE_SET_TP_DST || \ (act) == RTE_FLOW_ACTION_TYPE_SET_TTL || \ - (act) == RTE_FLOW_ACTION_TYPE_DEC_TTL) ? \ + (act) == RTE_FLOW_ACTION_TYPE_DEC_TTL || \ + (act) == RTE_FLOW_ACTION_TYPE_SET_MAC_SRC || \ + (act) == 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; } +static void +flow_tcf_pedit_key_set_mac(const struct rte_flow_action *actions, + struct pedit_parser *p_parser) +{ + int idx = p_parser->sel.nkeys; + uint32_t off = + actions->type == RTE_FLOW_ACTION_TYPE_SET_MAC_SRC ? 6 : 0; + const struct rte_flow_action_set_mac *conf = + (const struct rte_flow_action_set_mac *)actions->conf; + + p_parser->keys[idx].off = off; + p_parser->keys[idx].mask = ~UINT32_MAX; + p_parser->keys_ex[idx].htype = TCA_PEDIT_KEY_EX_HDR_TYPE_ETH; + p_parser->keys_ex[idx].cmd = 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 = off + SZ_PEDIT_KEY_VAL; + p_parser->keys[idx].mask = 0xFFFF0000; + p_parser->keys_ex[idx].htype = TCA_PEDIT_KEY_EX_HDR_TYPE_ETH; + p_parser->keys_ex[idx].cmd = 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 = (++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_flow_action **actions, keys += flow_tcf_calc_pedit_keys(TTL_LEN); flags |= MLX5_ACTION_DEC_TTL; break; + case RTE_FLOW_ACTION_TYPE_SET_MAC_SRC: + keys += flow_tcf_calc_pedit_keys(ETHER_ADDR_LEN); + flags |= MLX5_ACTION_SET_MAC_SRC; + break; + case RTE_FLOW_ACTION_TYPE_SET_MAC_DST: + keys += flow_tcf_calc_pedit_keys(ETHER_ADDR_LEN); + flags |= 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 |= MLX5_ACTION_DEC_TTL; break; + case RTE_FLOW_ACTION_TYPE_SET_MAC_SRC: + action_flags |= MLX5_ACTION_SET_MAC_SRC; + break; + case RTE_FLOW_ACTION_TYPE_SET_MAC_DST: + action_flags |= 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; } @@ -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 += 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 = mnl_attr_nest_start(nlh, na_act_index_cur++); flow_tcf_create_pedit_mnl_msg(nlh,