0001
0002
0003
0004 #ifndef __MLX5_ESW_BRIDGE_H__
0005 #define __MLX5_ESW_BRIDGE_H__
0006
0007 #include <linux/notifier.h>
0008 #include <linux/list.h>
0009 #include <linux/workqueue.h>
0010 #include <linux/xarray.h>
0011 #include "eswitch.h"
0012
0013 struct mlx5_flow_table;
0014 struct mlx5_flow_group;
0015
0016 struct mlx5_esw_bridge_offloads {
0017 struct mlx5_eswitch *esw;
0018 struct list_head bridges;
0019 struct xarray ports;
0020
0021 struct notifier_block netdev_nb;
0022 struct notifier_block nb_blk;
0023 struct notifier_block nb;
0024 struct workqueue_struct *wq;
0025 struct delayed_work update_work;
0026
0027 struct mlx5_flow_table *ingress_ft;
0028 struct mlx5_flow_group *ingress_vlan_fg;
0029 struct mlx5_flow_group *ingress_vlan_filter_fg;
0030 struct mlx5_flow_group *ingress_qinq_fg;
0031 struct mlx5_flow_group *ingress_qinq_filter_fg;
0032 struct mlx5_flow_group *ingress_mac_fg;
0033
0034 struct mlx5_flow_table *skip_ft;
0035 };
0036
0037 struct mlx5_esw_bridge_offloads *mlx5_esw_bridge_init(struct mlx5_eswitch *esw);
0038 void mlx5_esw_bridge_cleanup(struct mlx5_eswitch *esw);
0039 int mlx5_esw_bridge_vport_link(int ifindex, u16 vport_num, u16 esw_owner_vhca_id,
0040 struct mlx5_esw_bridge_offloads *br_offloads,
0041 struct netlink_ext_ack *extack);
0042 int mlx5_esw_bridge_vport_unlink(int ifindex, u16 vport_num, u16 esw_owner_vhca_id,
0043 struct mlx5_esw_bridge_offloads *br_offloads,
0044 struct netlink_ext_ack *extack);
0045 int mlx5_esw_bridge_vport_peer_link(int ifindex, u16 vport_num, u16 esw_owner_vhca_id,
0046 struct mlx5_esw_bridge_offloads *br_offloads,
0047 struct netlink_ext_ack *extack);
0048 int mlx5_esw_bridge_vport_peer_unlink(int ifindex, u16 vport_num, u16 esw_owner_vhca_id,
0049 struct mlx5_esw_bridge_offloads *br_offloads,
0050 struct netlink_ext_ack *extack);
0051 void mlx5_esw_bridge_fdb_update_used(struct net_device *dev, u16 vport_num, u16 esw_owner_vhca_id,
0052 struct mlx5_esw_bridge_offloads *br_offloads,
0053 struct switchdev_notifier_fdb_info *fdb_info);
0054 void mlx5_esw_bridge_fdb_create(struct net_device *dev, u16 vport_num, u16 esw_owner_vhca_id,
0055 struct mlx5_esw_bridge_offloads *br_offloads,
0056 struct switchdev_notifier_fdb_info *fdb_info);
0057 void mlx5_esw_bridge_fdb_remove(struct net_device *dev, u16 vport_num, u16 esw_owner_vhca_id,
0058 struct mlx5_esw_bridge_offloads *br_offloads,
0059 struct switchdev_notifier_fdb_info *fdb_info);
0060 void mlx5_esw_bridge_update(struct mlx5_esw_bridge_offloads *br_offloads);
0061 int mlx5_esw_bridge_ageing_time_set(u16 vport_num, u16 esw_owner_vhca_id, unsigned long ageing_time,
0062 struct mlx5_esw_bridge_offloads *br_offloads);
0063 int mlx5_esw_bridge_vlan_filtering_set(u16 vport_num, u16 esw_owner_vhca_id, bool enable,
0064 struct mlx5_esw_bridge_offloads *br_offloads);
0065 int mlx5_esw_bridge_vlan_proto_set(u16 vport_num, u16 esw_owner_vhca_id, u16 proto,
0066 struct mlx5_esw_bridge_offloads *br_offloads);
0067 int mlx5_esw_bridge_port_vlan_add(u16 vport_num, u16 esw_owner_vhca_id, u16 vid, u16 flags,
0068 struct mlx5_esw_bridge_offloads *br_offloads,
0069 struct netlink_ext_ack *extack);
0070 void mlx5_esw_bridge_port_vlan_del(u16 vport_num, u16 esw_owner_vhca_id, u16 vid,
0071 struct mlx5_esw_bridge_offloads *br_offloads);
0072
0073 #endif