1/* SPDX-License-Identifier: GPL-2.0-only */ 2/**************************************************************************** 3 * Driver for Solarflare network controllers and boards 4 * Copyright 2023, Advanced Micro Devices, Inc. 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 as published 8 * by the Free Software Foundation, incorporated herein by reference. 9 */ 10 11#ifndef EFX_TC_CONNTRACK_H 12#define EFX_TC_CONNTRACK_H 13#include "net_driver.h" 14 15#if IS_ENABLED(CONFIG_SFC_SRIOV) 16#include <linux/refcount.h> 17#include <net/netfilter/nf_flow_table.h> 18 19struct efx_tc_ct_zone { 20 u16 zone; 21 struct rhash_head linkage; 22 refcount_t ref; 23 struct nf_flowtable *nf_ft; 24 struct efx_nic *efx; 25 struct mutex mutex; /* protects cts list */ 26 struct list_head cts; /* list of efx_tc_ct_entry in this zone */ 27}; 28 29/* create/uncreate/teardown hashtables */ 30int efx_tc_init_conntrack(struct efx_nic *efx); 31void efx_tc_destroy_conntrack(struct efx_nic *efx); 32void efx_tc_fini_conntrack(struct efx_nic *efx); 33 34struct efx_tc_ct_zone *efx_tc_ct_register_zone(struct efx_nic *efx, u16 zone, 35 struct nf_flowtable *ct_ft); 36void efx_tc_ct_unregister_zone(struct efx_nic *efx, 37 struct efx_tc_ct_zone *ct_zone); 38 39struct efx_tc_ct_entry { 40 unsigned long cookie; 41 struct rhash_head linkage; 42 __be16 eth_proto; 43 u8 ip_proto; 44 bool dnat; 45 __be32 src_ip, dst_ip, nat_ip; 46 struct in6_addr src_ip6, dst_ip6; 47 __be16 l4_sport, l4_dport, l4_natport; /* Ports (UDP, TCP) */ 48 struct efx_tc_ct_zone *zone; 49 u32 mark; 50 struct efx_tc_counter *cnt; 51 struct list_head list; /* entry on zone->cts */ 52}; 53 54#endif /* CONFIG_SFC_SRIOV */ 55#endif /* EFX_TC_CONNTRACK_H */ 56