xref: /dpdk/drivers/net/sfc/sfc_mae_ct.h (revision c0db99c5329b13f17617a7a73a7530c2a59ac79a)
1*c0db99c5SDenis Pryazhennikov /* SPDX-License-Identifier: BSD-3-Clause
2*c0db99c5SDenis Pryazhennikov  *
3*c0db99c5SDenis Pryazhennikov  * Copyright (c) 2023 Advanced Micro Devices, Inc.
4*c0db99c5SDenis Pryazhennikov  */
5*c0db99c5SDenis Pryazhennikov 
6*c0db99c5SDenis Pryazhennikov #ifndef _SFC_MAE_CONNTRACK_H
7*c0db99c5SDenis Pryazhennikov #define _SFC_MAE_CONNTRACK_H
8*c0db99c5SDenis Pryazhennikov 
9*c0db99c5SDenis Pryazhennikov #include <stdbool.h>
10*c0db99c5SDenis Pryazhennikov 
11*c0db99c5SDenis Pryazhennikov #include <rte_ip.h>
12*c0db99c5SDenis Pryazhennikov 
13*c0db99c5SDenis Pryazhennikov #include "efx.h"
14*c0db99c5SDenis Pryazhennikov 
15*c0db99c5SDenis Pryazhennikov #include "sfc_tbls.h"
16*c0db99c5SDenis Pryazhennikov 
17*c0db99c5SDenis Pryazhennikov #ifdef __cplusplus
18*c0db99c5SDenis Pryazhennikov extern "C" {
19*c0db99c5SDenis Pryazhennikov #endif
20*c0db99c5SDenis Pryazhennikov 
21*c0db99c5SDenis Pryazhennikov typedef struct sfc_mae_conntrack_key_s {
22*c0db99c5SDenis Pryazhennikov 	uint8_t		ip_proto;
23*c0db99c5SDenis Pryazhennikov 	uint16_t	ether_type_le;
24*c0db99c5SDenis Pryazhennikov 
25*c0db99c5SDenis Pryazhennikov 	uint16_t	src_port_le;
26*c0db99c5SDenis Pryazhennikov 	uint16_t	dst_port_le;
27*c0db99c5SDenis Pryazhennikov 
28*c0db99c5SDenis Pryazhennikov 	uint8_t		src_addr_le[RTE_SIZEOF_FIELD(struct rte_ipv6_hdr, src_addr)];
29*c0db99c5SDenis Pryazhennikov 	uint8_t		dst_addr_le[RTE_SIZEOF_FIELD(struct rte_ipv6_hdr, dst_addr)];
30*c0db99c5SDenis Pryazhennikov } sfc_mae_conntrack_key_t;
31*c0db99c5SDenis Pryazhennikov 
32*c0db99c5SDenis Pryazhennikov typedef struct sfc_mae_conntrack_nat_s {
33*c0db99c5SDenis Pryazhennikov 	uint32_t	ip_le;
34*c0db99c5SDenis Pryazhennikov 	uint16_t	port_le;
35*c0db99c5SDenis Pryazhennikov 	bool		dir_is_dst;
36*c0db99c5SDenis Pryazhennikov } sfc_mae_conntrack_nat_t;
37*c0db99c5SDenis Pryazhennikov 
38*c0db99c5SDenis Pryazhennikov typedef struct sfc_mae_conntrack_response_s {
39*c0db99c5SDenis Pryazhennikov 	uint32_t		ct_mark;
40*c0db99c5SDenis Pryazhennikov 	sfc_mae_conntrack_nat_t	nat;
41*c0db99c5SDenis Pryazhennikov 	uint32_t		counter_id;
42*c0db99c5SDenis Pryazhennikov } sfc_mae_conntrack_response_t;
43*c0db99c5SDenis Pryazhennikov 
44*c0db99c5SDenis Pryazhennikov struct sfc_adapter;
45*c0db99c5SDenis Pryazhennikov 
46*c0db99c5SDenis Pryazhennikov static inline bool
sfc_mae_conntrack_is_supported(struct sfc_adapter * sa)47*c0db99c5SDenis Pryazhennikov sfc_mae_conntrack_is_supported(struct sfc_adapter *sa)
48*c0db99c5SDenis Pryazhennikov {
49*c0db99c5SDenis Pryazhennikov 	return sfc_tbls_id_is_supported(sa, EFX_TABLE_ID_CONNTRACK);
50*c0db99c5SDenis Pryazhennikov }
51*c0db99c5SDenis Pryazhennikov 
52*c0db99c5SDenis Pryazhennikov static inline const struct sfc_tbl_meta *
sfc_mae_conntrack_meta_lookup(struct sfc_adapter * sa)53*c0db99c5SDenis Pryazhennikov sfc_mae_conntrack_meta_lookup(struct sfc_adapter *sa)
54*c0db99c5SDenis Pryazhennikov {
55*c0db99c5SDenis Pryazhennikov 	return sfc_tbl_meta_lookup(sa, EFX_TABLE_ID_CONNTRACK);
56*c0db99c5SDenis Pryazhennikov }
57*c0db99c5SDenis Pryazhennikov 
58*c0db99c5SDenis Pryazhennikov int sfc_mae_conntrack_insert(struct sfc_adapter *sa,
59*c0db99c5SDenis Pryazhennikov 			     const sfc_mae_conntrack_key_t *key,
60*c0db99c5SDenis Pryazhennikov 			     const sfc_mae_conntrack_response_t *response);
61*c0db99c5SDenis Pryazhennikov 
62*c0db99c5SDenis Pryazhennikov int sfc_mae_conntrack_delete(struct sfc_adapter *sa,
63*c0db99c5SDenis Pryazhennikov 			     const sfc_mae_conntrack_key_t *key);
64*c0db99c5SDenis Pryazhennikov 
65*c0db99c5SDenis Pryazhennikov #ifdef __cplusplus
66*c0db99c5SDenis Pryazhennikov }
67*c0db99c5SDenis Pryazhennikov #endif
68*c0db99c5SDenis Pryazhennikov #endif /* _SFC_MAE_CONNTRACK_H */
69