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

source code of linux/drivers/net/ethernet/sfc/tc_conntrack.h