Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
0002 /* Copyright (c) 2021 Mellanox Technologies. */
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 /* __MLX5_ESW_BRIDGE_H__ */