#include "lib/devcom.h"
#include "bridge.h"
#include "eswitch.h"
#include "bridge_priv.h"
#include "diag/bridge_tracepoint.h"
static const struct rhashtable_params mdb_ht_params = …;
int mlx5_esw_bridge_mdb_init(struct mlx5_esw_bridge *bridge)
{ … }
void mlx5_esw_bridge_mdb_cleanup(struct mlx5_esw_bridge *bridge)
{ … }
static struct mlx5_esw_bridge_port *
mlx5_esw_bridge_mdb_port_lookup(struct mlx5_esw_bridge_port *port,
struct mlx5_esw_bridge_mdb_entry *entry)
{ … }
static int mlx5_esw_bridge_mdb_port_insert(struct mlx5_esw_bridge_port *port,
struct mlx5_esw_bridge_mdb_entry *entry)
{ … }
static void mlx5_esw_bridge_mdb_port_remove(struct mlx5_esw_bridge_port *port,
struct mlx5_esw_bridge_mdb_entry *entry)
{ … }
static struct mlx5_flow_handle *
mlx5_esw_bridge_mdb_flow_create(u16 esw_owner_vhca_id, struct mlx5_esw_bridge_mdb_entry *entry,
struct mlx5_esw_bridge *bridge)
{ … }
static int
mlx5_esw_bridge_port_mdb_offload(struct mlx5_esw_bridge_port *port,
struct mlx5_esw_bridge_mdb_entry *entry)
{ … }
static struct mlx5_esw_bridge_mdb_entry *
mlx5_esw_bridge_mdb_lookup(struct mlx5_esw_bridge *bridge,
const unsigned char *addr, u16 vid)
{ … }
static struct mlx5_esw_bridge_mdb_entry *
mlx5_esw_bridge_port_mdb_entry_init(struct mlx5_esw_bridge_port *port,
const unsigned char *addr, u16 vid)
{ … }
static void mlx5_esw_bridge_port_mdb_entry_cleanup(struct mlx5_esw_bridge *bridge,
struct mlx5_esw_bridge_mdb_entry *entry)
{ … }
int mlx5_esw_bridge_port_mdb_attach(struct net_device *dev, struct mlx5_esw_bridge_port *port,
const unsigned char *addr, u16 vid)
{ … }
static void mlx5_esw_bridge_port_mdb_entry_detach(struct mlx5_esw_bridge_port *port,
struct mlx5_esw_bridge_mdb_entry *entry)
{ … }
void mlx5_esw_bridge_port_mdb_detach(struct net_device *dev, struct mlx5_esw_bridge_port *port,
const unsigned char *addr, u16 vid)
{ … }
void mlx5_esw_bridge_port_mdb_vlan_flush(struct mlx5_esw_bridge_port *port,
struct mlx5_esw_bridge_vlan *vlan)
{ … }
static void mlx5_esw_bridge_port_mdb_flush(struct mlx5_esw_bridge_port *port)
{ … }
void mlx5_esw_bridge_mdb_flush(struct mlx5_esw_bridge *bridge)
{ … }
static int mlx5_esw_bridge_port_mcast_fts_init(struct mlx5_esw_bridge_port *port,
struct mlx5_esw_bridge *bridge)
{ … }
static void mlx5_esw_bridge_port_mcast_fts_cleanup(struct mlx5_esw_bridge_port *port)
{ … }
static struct mlx5_flow_group *
mlx5_esw_bridge_mcast_filter_fg_create(struct mlx5_eswitch *esw,
struct mlx5_flow_table *mcast_ft)
{ … }
static struct mlx5_flow_group *
mlx5_esw_bridge_mcast_vlan_proto_fg_create(unsigned int from, unsigned int to, u16 vlan_proto,
struct mlx5_eswitch *esw,
struct mlx5_flow_table *mcast_ft)
{ … }
static struct mlx5_flow_group *
mlx5_esw_bridge_mcast_vlan_fg_create(struct mlx5_eswitch *esw, struct mlx5_flow_table *mcast_ft)
{ … }
static struct mlx5_flow_group *
mlx5_esw_bridge_mcast_qinq_fg_create(struct mlx5_eswitch *esw,
struct mlx5_flow_table *mcast_ft)
{ … }
static struct mlx5_flow_group *
mlx5_esw_bridge_mcast_fwd_fg_create(struct mlx5_eswitch *esw,
struct mlx5_flow_table *mcast_ft)
{ … }
static int mlx5_esw_bridge_port_mcast_fgs_init(struct mlx5_esw_bridge_port *port)
{ … }
static void mlx5_esw_bridge_port_mcast_fgs_cleanup(struct mlx5_esw_bridge_port *port)
{ … }
static struct mlx5_flow_handle *
mlx5_esw_bridge_mcast_flow_with_esw_create(struct mlx5_esw_bridge_port *port,
struct mlx5_eswitch *esw)
{ … }
static struct mlx5_flow_handle *
mlx5_esw_bridge_mcast_filter_flow_create(struct mlx5_esw_bridge_port *port)
{ … }
static struct mlx5_flow_handle *
mlx5_esw_bridge_mcast_filter_flow_peer_create(struct mlx5_esw_bridge_port *port)
{ … }
static struct mlx5_flow_handle *
mlx5_esw_bridge_mcast_vlan_flow_create(u16 vlan_proto, struct mlx5_esw_bridge_port *port,
struct mlx5_esw_bridge_vlan *vlan)
{ … }
int mlx5_esw_bridge_vlan_mcast_init(u16 vlan_proto, struct mlx5_esw_bridge_port *port,
struct mlx5_esw_bridge_vlan *vlan)
{ … }
void mlx5_esw_bridge_vlan_mcast_cleanup(struct mlx5_esw_bridge_vlan *vlan)
{ … }
static struct mlx5_flow_handle *
mlx5_esw_bridge_mcast_fwd_flow_create(struct mlx5_esw_bridge_port *port)
{ … }
static int mlx5_esw_bridge_port_mcast_fhs_init(struct mlx5_esw_bridge_port *port)
{ … }
static void mlx5_esw_bridge_port_mcast_fhs_cleanup(struct mlx5_esw_bridge_port *port)
{ … }
int mlx5_esw_bridge_port_mcast_init(struct mlx5_esw_bridge_port *port)
{ … }
void mlx5_esw_bridge_port_mcast_cleanup(struct mlx5_esw_bridge_port *port)
{ … }
static struct mlx5_flow_group *
mlx5_esw_bridge_ingress_igmp_fg_create(struct mlx5_eswitch *esw,
struct mlx5_flow_table *ingress_ft)
{ … }
static struct mlx5_flow_group *
mlx5_esw_bridge_ingress_mld_fg_create(struct mlx5_eswitch *esw,
struct mlx5_flow_table *ingress_ft)
{ … }
static int
mlx5_esw_bridge_ingress_mcast_fgs_init(struct mlx5_esw_bridge_offloads *br_offloads)
{ … }
static void
mlx5_esw_bridge_ingress_mcast_fgs_cleanup(struct mlx5_esw_bridge_offloads *br_offloads)
{ … }
static struct mlx5_flow_handle *
mlx5_esw_bridge_ingress_igmp_fh_create(struct mlx5_flow_table *ingress_ft,
struct mlx5_flow_table *skip_ft)
{ … }
static struct mlx5_flow_handle *
mlx5_esw_bridge_ingress_mld_fh_create(u8 type, struct mlx5_flow_table *ingress_ft,
struct mlx5_flow_table *skip_ft)
{ … }
static int
mlx5_esw_bridge_ingress_mcast_fhs_create(struct mlx5_esw_bridge_offloads *br_offloads)
{ … }
static void
mlx5_esw_bridge_ingress_mcast_fhs_cleanup(struct mlx5_esw_bridge_offloads *br_offloads)
{ … }
static int mlx5_esw_brige_mcast_init(struct mlx5_esw_bridge *bridge)
{ … }
static void mlx5_esw_brige_mcast_cleanup(struct mlx5_esw_bridge *bridge)
{ … }
static int mlx5_esw_brige_mcast_global_enable(struct mlx5_esw_bridge_offloads *br_offloads)
{ … }
static void mlx5_esw_brige_mcast_global_disable(struct mlx5_esw_bridge_offloads *br_offloads)
{ … }
int mlx5_esw_bridge_mcast_enable(struct mlx5_esw_bridge *bridge)
{ … }
void mlx5_esw_bridge_mcast_disable(struct mlx5_esw_bridge *bridge)
{ … }