From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752207AbdK1JuA (ORCPT ); Tue, 28 Nov 2017 04:50:00 -0500 Received: from mail-ve1eur01on0057.outbound.protection.outlook.com ([104.47.1.57]:18016 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751660AbdK1Jtz (ORCPT ); Tue, 28 Nov 2017 04:49:55 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=yossefe@mellanox.com; From: yossefe@mellanox.com To: "David S. Miller" , Steffen Klassert , Herbert Xu , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: borisp@mellanox.com, kliteyn@mellanox.com, yossiku@mellanox.com, Yossef Efraim Subject: [PATCH net-next 3/3] xfrm: Add ESN support for IPSec HW offload Date: Tue, 28 Nov 2017 11:49:30 +0200 Message-Id: <1511862571-3494-3-git-send-email-yossefe@mellanox.com> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1511862571-3494-1-git-send-email-yossefe@mellanox.com> References: <1511862571-3494-1-git-send-email-yossefe@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [82.166.227.17] X-ClientProxiedBy: AM5PR0102CA0002.eurprd01.prod.exchangelabs.com (2603:10a6:206::15) To AM0PR0502MB3745.eurprd05.prod.outlook.com (2603:10a6:208:1e::14) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 299cc782-4033-4819-3671-08d536455f3e X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603258);SRVR:AM0PR0502MB3745; X-Microsoft-Exchange-Diagnostics: 1;AM0PR0502MB3745;3:05edHFZ6dPHOrIZy7icFT+bu9kYq9MwC6UAfnufezWa2Qyv5AEa3ysKGwon004l+yA3yK+t5maJ+1Ya7153YDWn2B44tf35Bzs6D133IA06pC0kV79hZDlbqdSqyKC/P+ZDPHLo9RIGpeP3gyp74qWazJeyYHxRttG5n6vuxTDQ4oCcOTcVO3B8gYUW9fGk2JOnA+7dO2zoPZbVh3SpTD2Gcjs646Do+9SY8dNDJNYhAGUC0kXB5f99jQq0P4TJ+;25:QLAZLWqE1IUq7SGSLrF8tKTlzte6wYZuSHf7oVyGDyr/7mfh7no2XhTAPtHojPod93svNww1lCLqUy8IldDB5UgXaQmz/zht5bG8aWkVtpy2GSamMtnJBg92q4sXD4FfstFSnpSXTVdz5vj9Beguj5GQ7pKQIlqGoTNUa5bZ9adkd6J3ypPIL7EDs8YlVAETrZ9d81SG7Bzsj1bzgrFNPhfuOsTb3wKHVbLoAFJBSwZygERvoXgez710EpNiltNZUux0MDDFDO7bYNllNe5PIn7Y/wPDX9iXQ4MLThfewjcDJ28gTUbZ311JbCL7LxrATk6ATxAet/IwPBPGG6C/+w==;31:700yCXaw+MHzQ+K+VtpFT9j4upkOSw4K4Latvs1JiN3bMyVH+iuOMliOiGGtQJUy6lcfKNWAbx6jVK5ZvXJHwKGRYjnEqsLuWKTjUCz8+idSqNUgIWVB5IY6muZn8SmTYIhH3LCCLBKNgY2u/b7uGeqeK/wVqNPHGiwXNjZE7shh19j1seq4667x6ELzZCoclJ/qf8kGaoju5Vo3+L0gmRxUg0ajjmfPD2czMPl/Rx8= X-MS-TrafficTypeDiagnostic: AM0PR0502MB3745: X-Microsoft-Exchange-Diagnostics: 1;AM0PR0502MB3745;20:Fpy3SN82WVPmB/TRumqssoLP12qwaHnu1E+zKjdNfrNBbXw+DptI7SFSQiPRG89iIZu4NEpBcn2ghhshSs/rub++omdyu2syM69Y7bgc1IOXzopPlfoazsJe4ozuNATekLdEqBo1iuaI9tZn/vYX0sLkkYqhIaFtaZoS/Dy13yJTn03OmCcfMwIdLfh6oWe0/PqwKTnfMe5KXJ94nHlPnGeseR2XwWOCv9kH+Ovo3j4958eu0ZyykwkhRz7QlNq4hsHiYjjehYtJUgYH3GGGZjIBAQSsOybWROXH7bECTBy2V/DGkpXe3tOMzWIJsPzf7yElq4ejRo3WCOSX97Un2G4WZnI8m/N/l3eQ2GoCnxlE8shurNxs8RLtraih5fWZ9/jnZbggv87QXTjjzBnM2GHDTu7G7wJYWCFsGFt5ZWENRvnS1sg1LJP2215sxlZheqaBatUvYpTrepH4qXytQBXKcYjMXNv82b2DusZ3YYOuYYNvNgvK0pLZnWE8r7IR;4:AXzudG3VSh9PDyj2G8hhxtewf9bIxjuxUoNSdawrJfU4y07pCtg58rSZH8/jrInPGB33iaHyJfgrFhcNptq17CievDspyCvnvUY02b5tHnomSEbVJgitZ1hxeqRmzYd9czdKu6kN/ognKlD4zNI2OWWDg0WPcS/sZMFwEHJ6p3clTAfuHFuxfb6S6wRQPdc+axZ0J4LmYedswogDQ54zop3r/cQMDYZYbMivdt1CCc92iYrOGiIEPBp+kBomwO5A/h5XpfScd4pGbg1AtFEAFQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(2401047)(5005006)(8121501046)(3002001)(3231022)(10201501046)(93006095)(93001095)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123555025)(20161123564025)(20161123560025)(20161123558100)(6072148)(201708071742011);SRVR:AM0PR0502MB3745;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:AM0PR0502MB3745; X-Forefront-PRVS: 0505147DDB X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(39860400002)(366004)(376002)(346002)(199003)(189002)(66066001)(4326008)(68736007)(53936002)(6512007)(107886003)(9686003)(48376002)(50466002)(85782001)(6116002)(189998001)(86362001)(47776003)(3846002)(36756003)(52116002)(97736004)(51416003)(81166006)(81156014)(8676002)(8936002)(5660300001)(478600001)(316002)(33646002)(2950100002)(50226002)(7736002)(16526018)(6666003)(101416001)(110136005)(16586007)(106356001)(105586002)(2906002)(25786009)(76176999)(50986999)(305945005)(6486002)(85772001);DIR:OUT;SFP:1101;SCL:1;SRVR:AM0PR0502MB3745;H:dev-l-vrt-187.mtl.labs.mlnx;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;AM0PR0502MB3745;23:ojTat341i1h7TkqmytXG4qZYaI4II7NqgT5ckRB?= =?us-ascii?Q?nhGHXoeQi/NvWXOkAPSg3OP48Bc6TEpPCV1FPo2M6u0hBsLplaaUPugW9xNQ?= =?us-ascii?Q?K/vxy/sU53536Z0r6nAn2HosunvmPhn6XWm91JmV0hgyik7s8uk3rpcD8Q4Q?= =?us-ascii?Q?WZUxJVaPnhaxKFwhSOxgdUJK+7lq2yqgPt4RS3fX3/bQUbKf/WIq+4D5U85L?= =?us-ascii?Q?Twv1T5TgAP9+uKXc80wgL5l5r+mEAanitySTubWxpMQabb6ycakl+nDcE76F?= =?us-ascii?Q?K/a2GX/gZYTYQ3m7z/GDb9FzFfmUMdIvwJ9vU8SO9CRjKURLIIVkxxVYM4FX?= =?us-ascii?Q?ILW/5M6t96owCb/einYVg/uFDmeL66xqm1zUJ5Cjo2YOrM5LCqUUG53IJJ16?= =?us-ascii?Q?vm/jFQZy2BCZFgg83EiR5DKxCy9hMcwIQi1zSCOwpalnG1m+SwPanYJWehzA?= =?us-ascii?Q?TovC9KhWB7SJbp+DBGvThG3C14Iz24CfoihPGXQfag6dXZxMO3JSh8kIxdRy?= =?us-ascii?Q?Yex6q5R2Z9LZRMnadqRgrDmQ1zBCNlTmvBv0ZkZZV4XkWJcMa1srbwujd12u?= =?us-ascii?Q?lt9hzs3IDUZ77dg0sXt8Ayxln+30noF5v8SMDvBOtHZfDpVAEO8a5iKQLMjC?= =?us-ascii?Q?CV1VoED9Z8dOedt+CFl64jichM/r9M66ykYkn9HYiNM0EkyVDfXYegtRlWbQ?= =?us-ascii?Q?adbDWLjw1tZh74VCAGUkgKNIK/t/LMFjkFc2suqR4TURMlq4TAnWF/2Ekh50?= =?us-ascii?Q?aNKH0o6bxrWsYd53blSWrhnJNMXYrWaYeWEftaz9yWe4VKxXE5oGbIilrlBY?= =?us-ascii?Q?iMCZR5vylZZDMWB8l8c9USVlfb3+L9AJdU2ij/S3rS6oK/UAMXudIUa04FxO?= =?us-ascii?Q?LCwi+XE/G0jgDGaY11AFIDwfyLPq8YbnYu51qW16axb3w2kPkn1oBwW9XLnu?= =?us-ascii?Q?AL5OJGEO84OmyjEgu+vdmrx+oTvVXYT+hYY4sth1EooQ6EiDdKlxVi9pQb/X?= =?us-ascii?Q?hRi1DkqQfrLvnT9kpnySl294aDBK+eYTPzWooV44PaQ6vhGDiKn79BU+SLfZ?= =?us-ascii?Q?1PiBKg8aBRC58eirHjdWG5UiyhZYlQiKmRmE7YTE8T07bLQL4N85tL0QUeGC?= =?us-ascii?Q?H0j3jDsiGtms1fxqkyAi6WbEk3Vnv2Gx0gOMN5fLZQdFRdNLuBn9dRGMnNSR?= =?us-ascii?Q?QhYfP9JwyRWxhamw=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM0PR0502MB3745;6:PMjfrYtgy9mt4s/CjSPNUaXXy75bd9eAJUnxrA2GCSK1SiM4TBCmKRf5ntblH3MVUv7aN0oRHgMWDWDkq1bjkOiaRpQn/KGdp4JuFQ5kFT6VYtxOiaxU7etLkbWCq+GHQSslW7wdCH5igiC5oX2QITtpJJak7HJH59yEdMBXuS3SUW/e4xor6GeIkruCtMOh39Xg/Nv6CzaxbIsi4njPfK+GNQstOMKQ7HxxNjn4RqEAJUxLwAVxBHWTUD5tQTdhPJwSpSEp5MK7njDe6UtmiZE4tU3t7DO4rFFl+qV9GIlmu2w8QH9gze+vsz1wuyvNuR50ccrWWVIchtjrZBPGDH0wYLCV2p4O9FBK9hy5iF8=;5:mKhaiaNtjTjyl92B3nHxxfTVyIQqksVTcqr9W+rDtxpWAVhwlB4mnwDXAAWpno+UO466vnhFzKjOaVM0HROcM9e1mik1/zEeczehwKTHOsrtzs84E2Uwlgn0TZeU7yCRYGV7fC2N77P+QVK06Xo4e5QhQHT1cuLRkIFdTfUF6PQ=;24:BGdLcd0myzWmML77nheDL8eK5QbsYB0ykmXHNII7sRnemWTfmtiA0KgRNZfsKOKc+fNLqf6JteCNP4+INQNdrUtDYOp2C3gbScy3bDhC4rg=;7:aDeu8vEfwAyH40d+aMi0x8GYDuNmJsX0Ni6JVYPCNRebcSeVVOPUJxLEYiNBXwWLwVd++c+Fzjk+ODtxuBwykw6AyON+8s1y4kweNyeAIgxkOXHLJtGFoFK+g+2SF2Yr4gegoGyUyoCZoP/dAy1+e5ZYvbAEf/n9PHn9QVxFLCf4Gxhzjol+o5hLNROq3P/XiEuYdzm3QXyiZBuOf8LczMA+v99las79+dN/x3698nqCl7Kf0ZdS3UhU0RlBHoJi SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Nov 2017 09:49:51.2913 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 299cc782-4033-4819-3671-08d536455f3e X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0502MB3745 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yossef Efraim This patch adds ESN support to IPsec device offload. Adding new xfrm device operation to synchronize device ESN. Signed-off-by: Yossef Efraim --- include/linux/netdevice.h | 1 + include/net/xfrm.h | 12 ++++++++++++ net/xfrm/xfrm_device.c | 4 ++-- net/xfrm/xfrm_replay.c | 2 ++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 7de7656..d4e9198 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -825,6 +825,7 @@ struct xfrmdev_ops { void (*xdo_dev_state_free) (struct xfrm_state *x); bool (*xdo_dev_offload_ok) (struct sk_buff *skb, struct xfrm_state *x); + void (*xdo_dev_state_advance_esn) (struct xfrm_state *x); }; #endif diff --git a/include/net/xfrm.h b/include/net/xfrm.h index dc28a98..372bfcb 100644 --- a/include/net/xfrm.h +++ b/include/net/xfrm.h @@ -1863,6 +1863,14 @@ int xfrm_dev_state_add(struct net *net, struct xfrm_state *x, struct xfrm_user_offload *xuo); bool xfrm_dev_offload_ok(struct sk_buff *skb, struct xfrm_state *x); +static inline void xfrm_dev_state_advance_esn(struct xfrm_state *x) +{ + struct xfrm_state_offload *xso = &x->xso; + + if (xso->dev && xso->dev->xfrmdev_ops->xdo_dev_state_advance_esn) + xso->dev->xfrmdev_ops->xdo_dev_state_advance_esn(x); +} + static inline bool xfrm_dst_offload_ok(struct dst_entry *dst) { struct xfrm_state *x = dst->xfrm; @@ -1920,6 +1928,10 @@ static inline bool xfrm_dev_offload_ok(struct sk_buff *skb, struct xfrm_state *x return false; } +static inline void xfrm_dev_state_advance_esn(struct xfrm_state *x) +{ +} + static inline bool xfrm_dst_offload_ok(struct dst_entry *dst) { return false; diff --git a/net/xfrm/xfrm_device.c b/net/xfrm/xfrm_device.c index dc68d9c..fc7e1e44 100644 --- a/net/xfrm/xfrm_device.c +++ b/net/xfrm/xfrm_device.c @@ -65,8 +65,8 @@ int xfrm_dev_state_add(struct net *net, struct xfrm_state *x, if (!x->type_offload) return -EINVAL; - /* We don't yet support UDP encapsulation, TFC padding and ESN. */ - if (x->encap || x->tfcpad || (x->props.flags & XFRM_STATE_ESN)) + /* We don't yet support UDP encapsulation and TFC padding. */ + if (x->encap || x->tfcpad) return -EINVAL; dev = dev_get_by_index(net, xuo->ifindex); diff --git a/net/xfrm/xfrm_replay.c b/net/xfrm/xfrm_replay.c index 0250181..1d38c6a 100644 --- a/net/xfrm/xfrm_replay.c +++ b/net/xfrm/xfrm_replay.c @@ -551,6 +551,8 @@ static void xfrm_replay_advance_esn(struct xfrm_state *x, __be32 net_seq) bitnr = replay_esn->replay_window - (diff - pos); } + xfrm_dev_state_advance_esn(x); + nr = bitnr >> 5; bitnr = bitnr & 0x1F; replay_esn->bmp[nr] |= (1U << bitnr); -- 2.8.1