Skip to content

Commit 1ae1732

Browse files
Ilya Lesokhindavem330
authored andcommitted
net/mlx5: Accel, Add TLS tx offload interface
Add routines for manipulating TLS TX offload contexts. In Innova TLS, TLS contexts are added or deleted via a command message over the SBU connection. The HW then sends a response message over the same connection. Add implementation for Innova TLS (FPGA-based) hardware. These routines will be used by the TLS offload support in a later patch mlx5/accel is a middle acceleration layer to allow mlx5e and other ULPs to work directly with mlx5_core rather than Innova FPGA or other mlx5 acceleration providers. In the future, when IPSec/TLS or any other acceleration gets integrated into ConnectX chip, mlx5/accel layer will provide the integrated acceleration, rather than the Innova one. Signed-off-by: Ilya Lesokhin <[email protected]> Signed-off-by: Boris Pismenny <[email protected]> Acked-by: Saeed Mahameed <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent bb90941 commit 1ae1732

File tree

9 files changed

+878
-18
lines changed

9 files changed

+878
-18
lines changed

drivers/net/ethernet/mellanox/mlx5/core/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ mlx5_core-y := main.o cmd.o debugfs.o fw.o eq.o uar.o pagealloc.o \
88
fs_counters.o rl.o lag.o dev.o wq.o lib/gid.o lib/clock.o \
99
diag/fs_tracepoint.o
1010

11-
mlx5_core-$(CONFIG_MLX5_ACCEL) += accel/ipsec.o
11+
mlx5_core-$(CONFIG_MLX5_ACCEL) += accel/ipsec.o accel/tls.o
1212

1313
mlx5_core-$(CONFIG_MLX5_FPGA) += fpga/cmd.o fpga/core.o fpga/conn.o fpga/sdk.o \
14-
fpga/ipsec.o
14+
fpga/ipsec.o fpga/tls.o
1515

1616
mlx5_core-$(CONFIG_MLX5_CORE_EN) += en_main.o en_common.o en_fs.o en_ethtool.o \
1717
en_tx.o en_rx.o en_dim.o en_txrx.o en_stats.o vxlan.o \
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Copyright (c) 2018 Mellanox Technologies. All rights reserved.
3+
*
4+
* This software is available to you under a choice of one of two
5+
* licenses. You may choose to be licensed under the terms of the GNU
6+
* General Public License (GPL) Version 2, available from the file
7+
* COPYING in the main directory of this source tree, or the
8+
* OpenIB.org BSD license below:
9+
*
10+
* Redistribution and use in source and binary forms, with or
11+
* without modification, are permitted provided that the following
12+
* conditions are met:
13+
*
14+
* - Redistributions of source code must retain the above
15+
* copyright notice, this list of conditions and the following
16+
* disclaimer.
17+
*
18+
* - Redistributions in binary form must reproduce the above
19+
* copyright notice, this list of conditions and the following
20+
* disclaimer in the documentation and/or other materials
21+
* provided with the distribution.
22+
*
23+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27+
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28+
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30+
* SOFTWARE.
31+
*
32+
*/
33+
34+
#include <linux/mlx5/device.h>
35+
36+
#include "accel/tls.h"
37+
#include "mlx5_core.h"
38+
#include "fpga/tls.h"
39+
40+
int mlx5_accel_tls_add_tx_flow(struct mlx5_core_dev *mdev, void *flow,
41+
struct tls_crypto_info *crypto_info,
42+
u32 start_offload_tcp_sn, u32 *p_swid)
43+
{
44+
return mlx5_fpga_tls_add_tx_flow(mdev, flow, crypto_info,
45+
start_offload_tcp_sn, p_swid);
46+
}
47+
48+
void mlx5_accel_tls_del_tx_flow(struct mlx5_core_dev *mdev, u32 swid)
49+
{
50+
mlx5_fpga_tls_del_tx_flow(mdev, swid, GFP_KERNEL);
51+
}
52+
53+
bool mlx5_accel_is_tls_device(struct mlx5_core_dev *mdev)
54+
{
55+
return mlx5_fpga_is_tls_device(mdev);
56+
}
57+
58+
u32 mlx5_accel_tls_device_caps(struct mlx5_core_dev *mdev)
59+
{
60+
return mlx5_fpga_tls_device_caps(mdev);
61+
}
62+
63+
int mlx5_accel_tls_init(struct mlx5_core_dev *mdev)
64+
{
65+
return mlx5_fpga_tls_init(mdev);
66+
}
67+
68+
void mlx5_accel_tls_cleanup(struct mlx5_core_dev *mdev)
69+
{
70+
mlx5_fpga_tls_cleanup(mdev);
71+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/*
2+
* Copyright (c) 2018 Mellanox Technologies. All rights reserved.
3+
*
4+
* This software is available to you under a choice of one of two
5+
* licenses. You may choose to be licensed under the terms of the GNU
6+
* General Public License (GPL) Version 2, available from the file
7+
* COPYING in the main directory of this source tree, or the
8+
* OpenIB.org BSD license below:
9+
*
10+
* Redistribution and use in source and binary forms, with or
11+
* without modification, are permitted provided that the following
12+
* conditions are met:
13+
*
14+
* - Redistributions of source code must retain the above
15+
* copyright notice, this list of conditions and the following
16+
* disclaimer.
17+
*
18+
* - Redistributions in binary form must reproduce the above
19+
* copyright notice, this list of conditions and the following
20+
* disclaimer in the documentation and/or other materials
21+
* provided with the distribution.
22+
*
23+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27+
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28+
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30+
* SOFTWARE.
31+
*
32+
*/
33+
34+
#ifndef __MLX5_ACCEL_TLS_H__
35+
#define __MLX5_ACCEL_TLS_H__
36+
37+
#include <linux/mlx5/driver.h>
38+
#include <linux/tls.h>
39+
40+
#ifdef CONFIG_MLX5_ACCEL
41+
42+
enum {
43+
MLX5_ACCEL_TLS_TX = BIT(0),
44+
MLX5_ACCEL_TLS_RX = BIT(1),
45+
MLX5_ACCEL_TLS_V12 = BIT(2),
46+
MLX5_ACCEL_TLS_V13 = BIT(3),
47+
MLX5_ACCEL_TLS_LRO = BIT(4),
48+
MLX5_ACCEL_TLS_IPV6 = BIT(5),
49+
MLX5_ACCEL_TLS_AES_GCM128 = BIT(30),
50+
MLX5_ACCEL_TLS_AES_GCM256 = BIT(31),
51+
};
52+
53+
struct mlx5_ifc_tls_flow_bits {
54+
u8 src_port[0x10];
55+
u8 dst_port[0x10];
56+
union mlx5_ifc_ipv6_layout_ipv4_layout_auto_bits src_ipv4_src_ipv6;
57+
union mlx5_ifc_ipv6_layout_ipv4_layout_auto_bits dst_ipv4_dst_ipv6;
58+
u8 ipv6[0x1];
59+
u8 direction_sx[0x1];
60+
u8 reserved_at_2[0x1e];
61+
};
62+
63+
int mlx5_accel_tls_add_tx_flow(struct mlx5_core_dev *mdev, void *flow,
64+
struct tls_crypto_info *crypto_info,
65+
u32 start_offload_tcp_sn, u32 *p_swid);
66+
void mlx5_accel_tls_del_tx_flow(struct mlx5_core_dev *mdev, u32 swid);
67+
bool mlx5_accel_is_tls_device(struct mlx5_core_dev *mdev);
68+
u32 mlx5_accel_tls_device_caps(struct mlx5_core_dev *mdev);
69+
int mlx5_accel_tls_init(struct mlx5_core_dev *mdev);
70+
void mlx5_accel_tls_cleanup(struct mlx5_core_dev *mdev);
71+
72+
#else
73+
74+
static inline int
75+
mlx5_accel_tls_add_tx_flow(struct mlx5_core_dev *mdev, void *flow,
76+
struct tls_crypto_info *crypto_info,
77+
u32 start_offload_tcp_sn, u32 *p_swid) { return 0; }
78+
static inline void mlx5_accel_tls_del_tx_flow(struct mlx5_core_dev *mdev, u32 swid) { }
79+
static inline bool mlx5_accel_is_tls_device(struct mlx5_core_dev *mdev) { return false; }
80+
static inline u32 mlx5_accel_tls_device_caps(struct mlx5_core_dev *mdev) { return 0; }
81+
static inline int mlx5_accel_tls_init(struct mlx5_core_dev *mdev) { return 0; }
82+
static inline void mlx5_accel_tls_cleanup(struct mlx5_core_dev *mdev) { }
83+
84+
#endif
85+
86+
#endif /* __MLX5_ACCEL_TLS_H__ */

drivers/net/ethernet/mellanox/mlx5/core/fpga/core.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ struct mlx5_fpga_device {
5353
} conn_res;
5454

5555
struct mlx5_fpga_ipsec *ipsec;
56+
struct mlx5_fpga_tls *tls;
5657
};
5758

5859
#define mlx5_fpga_dbg(__adev, format, ...) \

0 commit comments

Comments
 (0)