mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-03 17:51:23 +00:00

FDB entries that perform VxLAN encapsulation with an IPv6 underlay hold a reference on a resource. Namely, the KVDL entry where the IPv6 underlay destination IP is stored. When such an FDB entry is deleted, it needs to drop the reference from the corresponding KVDL entry. To that end, maintain a hash table that maps an FDB entry (i.e., {MAC, FID}) to the IPv6 address used by it. Signed-off-by: Amit Cohen <amcohen@nvidia.com> Signed-off-by: Ido Schimmel <idosch@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
56 lines
1.7 KiB
C
56 lines
1.7 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
|
|
/* Copyright (c) 2018 Mellanox Technologies. All rights reserved */
|
|
|
|
#ifndef _MLXSW_SPECTRUM_NVE_H
|
|
#define _MLXSW_SPECTRUM_NVE_H
|
|
|
|
#include <linux/netlink.h>
|
|
#include <linux/rhashtable.h>
|
|
|
|
#include "spectrum.h"
|
|
|
|
struct mlxsw_sp_nve_config {
|
|
enum mlxsw_sp_nve_type type;
|
|
u8 ttl;
|
|
u8 learning_en:1;
|
|
__be16 udp_dport;
|
|
__be32 flowlabel;
|
|
u32 ul_tb_id;
|
|
enum mlxsw_sp_l3proto ul_proto;
|
|
union mlxsw_sp_l3addr ul_sip;
|
|
};
|
|
|
|
struct mlxsw_sp_nve {
|
|
struct mlxsw_sp_nve_config config;
|
|
struct rhashtable mc_list_ht;
|
|
struct rhashtable ipv6_ht;
|
|
struct list_head ipv6_addr_list; /* Saves hash table nodes. */
|
|
struct mlxsw_sp *mlxsw_sp;
|
|
const struct mlxsw_sp_nve_ops **nve_ops_arr;
|
|
unsigned int num_nve_tunnels; /* Protected by RTNL */
|
|
unsigned int num_max_mc_entries[MLXSW_SP_L3_PROTO_MAX];
|
|
u32 tunnel_index;
|
|
u16 ul_rif_index; /* Reserved for Spectrum */
|
|
};
|
|
|
|
struct mlxsw_sp_nve_ops {
|
|
enum mlxsw_sp_nve_type type;
|
|
bool (*can_offload)(const struct mlxsw_sp_nve *nve,
|
|
const struct mlxsw_sp_nve_params *params,
|
|
struct netlink_ext_ack *extack);
|
|
void (*nve_config)(const struct mlxsw_sp_nve *nve,
|
|
const struct mlxsw_sp_nve_params *params,
|
|
struct mlxsw_sp_nve_config *config);
|
|
int (*init)(struct mlxsw_sp_nve *nve,
|
|
const struct mlxsw_sp_nve_config *config);
|
|
void (*fini)(struct mlxsw_sp_nve *nve);
|
|
int (*fdb_replay)(const struct net_device *nve_dev, __be32 vni,
|
|
struct netlink_ext_ack *extack);
|
|
void (*fdb_clear_offload)(const struct net_device *nve_dev, __be32 vni);
|
|
};
|
|
|
|
extern const struct mlxsw_sp_nve_ops mlxsw_sp1_nve_vxlan_ops;
|
|
extern const struct mlxsw_sp_nve_ops mlxsw_sp2_nve_vxlan_ops;
|
|
|
|
#endif
|