1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright(c) 2018 Oracle and/or its affiliates. All rights reserved. */
3 
4 #ifndef _IXGBEVF_IPSEC_H_
5 #define _IXGBEVF_IPSEC_H_
6 
7 #define IXGBE_IPSEC_MAX_SA_COUNT	1024
8 #define IXGBE_IPSEC_BASE_RX_INDEX	0
9 #define IXGBE_IPSEC_BASE_TX_INDEX	IXGBE_IPSEC_MAX_SA_COUNT
10 #define IXGBE_IPSEC_AUTH_BITS		128
11 
12 #define IXGBE_RXMOD_VALID		0x00000001
13 #define IXGBE_RXMOD_PROTO_ESP		0x00000004
14 #define IXGBE_RXMOD_DECRYPT		0x00000008
15 #define IXGBE_RXMOD_IPV6		0x00000010
16 
17 struct rx_sa {
18 	struct hlist_node hlist;
19 	struct xfrm_state *xs;
20 	__be32 ipaddr[4];
21 	u32 key[4];
22 	u32 salt;
23 	u32 mode;
24 	u32 pfsa;
25 	bool used;
26 	bool decrypt;
27 };
28 
29 struct rx_ip_sa {
30 	__be32 ipaddr[4];
31 	u32 ref_cnt;
32 	bool used;
33 };
34 
35 struct tx_sa {
36 	struct xfrm_state *xs;
37 	u32 key[4];
38 	u32 salt;
39 	u32 pfsa;
40 	bool encrypt;
41 	bool used;
42 };
43 
44 struct ixgbevf_ipsec_tx_data {
45 	u32 flags;
46 	u16 trailer_len;
47 	u16 pfsa;
48 };
49 
50 struct ixgbevf_ipsec {
51 	u16 num_rx_sa;
52 	u16 num_tx_sa;
53 	struct rx_sa *rx_tbl;
54 	struct tx_sa *tx_tbl;
55 	DECLARE_HASHTABLE(rx_sa_list, 10);
56 };
57 
58 struct sa_mbx_msg {
59 	__be32 spi;
60 	u8 dir;
61 	u8 proto;
62 	u16 family;
63 	__be32 addr[4];
64 	u32 key[5];
65 };
66 #endif /* _IXGBEVF_IPSEC_H_ */
67