#include "tc_encap_actions.h"
#include "tc.h"
#include "mae.h"
#include <net/vxlan.h>
#include <net/geneve.h>
#include <net/netevent.h>
#include <net/arp.h>
static const struct rhashtable_params efx_neigh_ht_params = …;
static const struct rhashtable_params efx_tc_encap_ht_params = …;
static void efx_tc_encap_free(void *ptr, void *__unused)
{ … }
static void efx_neigh_free(void *ptr, void *__unused)
{ … }
int efx_tc_init_encap_actions(struct efx_nic *efx)
{ … }
void efx_tc_destroy_encap_actions(struct efx_nic *efx)
{ … }
void efx_tc_fini_encap_actions(struct efx_nic *efx)
{ … }
static void efx_neigh_update(struct work_struct *work);
static int efx_bind_neigh(struct efx_nic *efx,
struct efx_tc_encap_action *encap, struct net *net,
struct netlink_ext_ack *extack)
{ … }
static void efx_free_neigh(struct efx_neigh_binder *neigh)
{ … }
static void efx_release_neigh(struct efx_nic *efx,
struct efx_tc_encap_action *encap)
{ … }
static void efx_gen_tun_header_eth(struct efx_tc_encap_action *encap, u16 proto)
{ … }
static void efx_gen_tun_header_ipv4(struct efx_tc_encap_action *encap, u8 ipproto, u8 len)
{ … }
#ifdef CONFIG_IPV6
static void efx_gen_tun_header_ipv6(struct efx_tc_encap_action *encap, u8 ipproto, u8 len)
{ … }
#endif
static void efx_gen_tun_header_udp(struct efx_tc_encap_action *encap, u8 len)
{ … }
static void efx_gen_tun_header_vxlan(struct efx_tc_encap_action *encap)
{ … }
static void efx_gen_tun_header_geneve(struct efx_tc_encap_action *encap)
{ … }
#define vxlan_header_l4_len …
#define vxlan4_header_len …
static void efx_gen_vxlan_header_ipv4(struct efx_tc_encap_action *encap)
{ … }
#define geneve_header_l4_len …
#define geneve4_header_len …
static void efx_gen_geneve_header_ipv4(struct efx_tc_encap_action *encap)
{ … }
#ifdef CONFIG_IPV6
#define vxlan6_header_len …
static void efx_gen_vxlan_header_ipv6(struct efx_tc_encap_action *encap)
{ … }
#define geneve6_header_len …
static void efx_gen_geneve_header_ipv6(struct efx_tc_encap_action *encap)
{ … }
#endif
static void efx_gen_encap_header(struct efx_nic *efx,
struct efx_tc_encap_action *encap)
{ … }
static void efx_tc_update_encap(struct efx_nic *efx,
struct efx_tc_encap_action *encap)
{ … }
static void efx_neigh_update(struct work_struct *work)
{ … }
static int efx_neigh_event(struct efx_nic *efx, struct neighbour *n)
{ … }
bool efx_tc_check_ready(struct efx_nic *efx, struct efx_tc_flow_rule *rule)
{ … }
struct efx_tc_encap_action *efx_tc_flower_create_encap_md(
struct efx_nic *efx, const struct ip_tunnel_info *info,
struct net_device *egdev, struct netlink_ext_ack *extack)
{ … }
void efx_tc_flower_release_encap_md(struct efx_nic *efx,
struct efx_tc_encap_action *encap)
{ … }
static void efx_tc_remove_neigh_users(struct efx_nic *efx, struct efx_neigh_binder *neigh)
{ … }
void efx_tc_unregister_egdev(struct efx_nic *efx, struct net_device *net_dev)
{ … }
int efx_tc_netevent_event(struct efx_nic *efx, unsigned long event,
void *ptr)
{ … }