#include "ice.h"
#include "ice_eswitch_br.h"
#include "ice_repr.h"
#include "ice_switch.h"
#include "ice_vlan.h"
#include "ice_vf_vsi_vlan_ops.h"
#include "ice_trace.h"
#define ICE_ESW_BRIDGE_UPDATE_INTERVAL …
static const struct rhashtable_params ice_fdb_ht_params = …;
static bool ice_eswitch_br_is_dev_valid(const struct net_device *dev)
{ … }
static struct net_device *
ice_eswitch_br_get_uplink_from_lag(struct net_device *lag_dev)
{ … }
static struct ice_esw_br_port *
ice_eswitch_br_netdev_to_port(struct net_device *dev)
{ … }
static void
ice_eswitch_br_ingress_rule_setup(struct ice_adv_rule_info *rule_info,
u8 pf_id, u16 vf_vsi_idx)
{ … }
static void
ice_eswitch_br_egress_rule_setup(struct ice_adv_rule_info *rule_info,
u16 pf_vsi_idx)
{ … }
static int
ice_eswitch_br_rule_delete(struct ice_hw *hw, struct ice_rule_query_data *rule)
{ … }
static u16
ice_eswitch_br_get_lkups_cnt(u16 vid)
{ … }
static void
ice_eswitch_br_add_vlan_lkup(struct ice_adv_lkup_elem *list, u16 vid)
{ … }
static struct ice_rule_query_data *
ice_eswitch_br_fwd_rule_create(struct ice_hw *hw, int vsi_idx, int port_type,
const unsigned char *mac, u16 vid)
{ … }
static struct ice_rule_query_data *
ice_eswitch_br_guard_rule_create(struct ice_hw *hw, u16 vsi_idx,
const unsigned char *mac, u16 vid)
{ … }
static struct ice_esw_br_flow *
ice_eswitch_br_flow_create(struct device *dev, struct ice_hw *hw, int vsi_idx,
int port_type, const unsigned char *mac, u16 vid)
{ … }
static struct ice_esw_br_fdb_entry *
ice_eswitch_br_fdb_find(struct ice_esw_br *bridge, const unsigned char *mac,
u16 vid)
{ … }
static void
ice_eswitch_br_flow_delete(struct ice_pf *pf, struct ice_esw_br_flow *flow)
{ … }
static struct ice_esw_br_vlan *
ice_esw_br_port_vlan_lookup(struct ice_esw_br *bridge, u16 vsi_idx, u16 vid)
{ … }
static void
ice_eswitch_br_fdb_entry_delete(struct ice_esw_br *bridge,
struct ice_esw_br_fdb_entry *fdb_entry)
{ … }
static void
ice_eswitch_br_fdb_offload_notify(struct net_device *dev,
const unsigned char *mac, u16 vid,
unsigned long val)
{ … }
static void
ice_eswitch_br_fdb_entry_notify_and_cleanup(struct ice_esw_br *bridge,
struct ice_esw_br_fdb_entry *entry)
{ … }
static void
ice_eswitch_br_fdb_entry_find_and_delete(struct ice_esw_br *bridge,
const unsigned char *mac, u16 vid)
{ … }
static void
ice_eswitch_br_fdb_entry_create(struct net_device *netdev,
struct ice_esw_br_port *br_port,
bool added_by_user,
const unsigned char *mac, u16 vid)
{ … }
static void
ice_eswitch_br_fdb_work_dealloc(struct ice_esw_br_fdb_work *fdb_work)
{ … }
static void
ice_eswitch_br_fdb_event_work(struct work_struct *work)
{ … }
static struct ice_esw_br_fdb_work *
ice_eswitch_br_fdb_work_alloc(struct switchdev_notifier_fdb_info *fdb_info,
struct net_device *dev,
unsigned long event)
{ … }
static int
ice_eswitch_br_switchdev_event(struct notifier_block *nb,
unsigned long event, void *ptr)
{ … }
void ice_eswitch_br_fdb_flush(struct ice_esw_br *bridge)
{ … }
static void
ice_eswitch_br_vlan_filtering_set(struct ice_esw_br *bridge, bool enable)
{ … }
static void
ice_eswitch_br_clear_pvid(struct ice_esw_br_port *port)
{ … }
static void
ice_eswitch_br_vlan_cleanup(struct ice_esw_br_port *port,
struct ice_esw_br_vlan *vlan)
{ … }
static void ice_eswitch_br_port_vlans_flush(struct ice_esw_br_port *port)
{ … }
static int
ice_eswitch_br_set_pvid(struct ice_esw_br_port *port,
struct ice_esw_br_vlan *vlan)
{ … }
static struct ice_esw_br_vlan *
ice_eswitch_br_vlan_create(u16 vid, u16 flags, struct ice_esw_br_port *port)
{ … }
static int
ice_eswitch_br_port_vlan_add(struct ice_esw_br *bridge, u16 vsi_idx, u16 vid,
u16 flags, struct netlink_ext_ack *extack)
{ … }
static void
ice_eswitch_br_port_vlan_del(struct ice_esw_br *bridge, u16 vsi_idx, u16 vid)
{ … }
static int
ice_eswitch_br_port_obj_add(struct net_device *netdev, const void *ctx,
const struct switchdev_obj *obj,
struct netlink_ext_ack *extack)
{ … }
static int
ice_eswitch_br_port_obj_del(struct net_device *netdev, const void *ctx,
const struct switchdev_obj *obj)
{ … }
static int
ice_eswitch_br_port_obj_attr_set(struct net_device *netdev, const void *ctx,
const struct switchdev_attr *attr,
struct netlink_ext_ack *extack)
{ … }
static int
ice_eswitch_br_event_blocking(struct notifier_block *nb, unsigned long event,
void *ptr)
{ … }
static void
ice_eswitch_br_port_deinit(struct ice_esw_br *bridge,
struct ice_esw_br_port *br_port)
{ … }
static struct ice_esw_br_port *
ice_eswitch_br_port_init(struct ice_esw_br *bridge)
{ … }
static int
ice_eswitch_br_vf_repr_port_init(struct ice_esw_br *bridge,
struct ice_repr *repr)
{ … }
static int
ice_eswitch_br_uplink_port_init(struct ice_esw_br *bridge, struct ice_pf *pf)
{ … }
static void
ice_eswitch_br_ports_flush(struct ice_esw_br *bridge)
{ … }
static void
ice_eswitch_br_deinit(struct ice_esw_br_offloads *br_offloads,
struct ice_esw_br *bridge)
{ … }
static struct ice_esw_br *
ice_eswitch_br_init(struct ice_esw_br_offloads *br_offloads, int ifindex)
{ … }
static struct ice_esw_br *
ice_eswitch_br_get(struct ice_esw_br_offloads *br_offloads, int ifindex,
struct netlink_ext_ack *extack)
{ … }
static void
ice_eswitch_br_verify_deinit(struct ice_esw_br_offloads *br_offloads,
struct ice_esw_br *bridge)
{ … }
static int
ice_eswitch_br_port_unlink(struct ice_esw_br_offloads *br_offloads,
struct net_device *dev, int ifindex,
struct netlink_ext_ack *extack)
{ … }
static int
ice_eswitch_br_port_link(struct ice_esw_br_offloads *br_offloads,
struct net_device *dev, int ifindex,
struct netlink_ext_ack *extack)
{ … }
static int
ice_eswitch_br_port_changeupper(struct notifier_block *nb, void *ptr)
{ … }
static int
ice_eswitch_br_port_event(struct notifier_block *nb,
unsigned long event, void *ptr)
{ … }
static void
ice_eswitch_br_offloads_dealloc(struct ice_pf *pf)
{ … }
static struct ice_esw_br_offloads *
ice_eswitch_br_offloads_alloc(struct ice_pf *pf)
{ … }
void
ice_eswitch_br_offloads_deinit(struct ice_pf *pf)
{ … }
static void ice_eswitch_br_update(struct ice_esw_br_offloads *br_offloads)
{ … }
static void ice_eswitch_br_update_work(struct work_struct *work)
{ … }
int
ice_eswitch_br_offloads_init(struct ice_pf *pf)
{ … }