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 Pryazhennikovsfc_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 Pryazhennikovsfc_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