brintos

brintos / linux-shallow public Read only

0
0
Text · 2.4 KiB · 66a2c80 Raw
123 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/* Copyright (C) 2023, Intel Corporation. */3 4#ifndef _ICE_ESWITCH_BR_H_5#define _ICE_ESWITCH_BR_H_6 7#include <linux/rhashtable.h>8#include <linux/workqueue.h>9 10struct ice_esw_br_fdb_data {11	unsigned char addr[ETH_ALEN];12	u16 vid;13};14 15struct ice_esw_br_flow {16	struct ice_rule_query_data *fwd_rule;17	struct ice_rule_query_data *guard_rule;18};19 20enum {21	ICE_ESWITCH_BR_FDB_ADDED_BY_USER = BIT(0),22};23 24struct ice_esw_br_fdb_entry {25	struct ice_esw_br_fdb_data data;26	struct rhash_head ht_node;27	struct list_head list;28 29	int flags;30 31	struct net_device *dev;32	struct ice_esw_br_port *br_port;33	struct ice_esw_br_flow *flow;34 35	unsigned long last_use;36};37 38enum ice_esw_br_port_type {39	ICE_ESWITCH_BR_UPLINK_PORT = 0,40	ICE_ESWITCH_BR_VF_REPR_PORT = 1,41};42 43struct ice_esw_br_port {44	struct ice_esw_br *bridge;45	struct ice_vsi *vsi;46	enum ice_esw_br_port_type type;47	u16 vsi_idx;48	u16 pvid;49	u32 repr_id;50	struct xarray vlans;51};52 53enum {54	ICE_ESWITCH_BR_VLAN_FILTERING = BIT(0),55};56 57struct ice_esw_br {58	struct ice_esw_br_offloads *br_offloads;59	struct xarray ports;60 61	struct rhashtable fdb_ht;62	struct list_head fdb_list;63 64	int ifindex;65	u32 flags;66	unsigned long ageing_time;67};68 69struct ice_esw_br_offloads {70	struct ice_pf *pf;71	struct ice_esw_br *bridge;72	struct notifier_block netdev_nb;73	struct notifier_block switchdev_blk;74	struct notifier_block switchdev_nb;75 76	struct workqueue_struct *wq;77	struct delayed_work update_work;78};79 80struct ice_esw_br_fdb_work {81	struct work_struct work;82	struct switchdev_notifier_fdb_info fdb_info;83	struct net_device *dev;84	unsigned long event;85};86 87struct ice_esw_br_vlan {88	u16 vid;89	u16 flags;90};91 92#define ice_nb_to_br_offloads(nb, nb_name) \93	container_of(nb, \94		     struct ice_esw_br_offloads, \95		     nb_name)96 97#define ice_work_to_br_offloads(w) \98	container_of(w, \99		     struct ice_esw_br_offloads, \100		     update_work.work)101 102#define ice_work_to_fdb_work(w) \103	container_of(w, \104		     struct ice_esw_br_fdb_work, \105		     work)106 107static inline bool ice_eswitch_br_is_vid_valid(u16 vid)108{109	/* In trunk VLAN mode, for untagged traffic the bridge sends requests110	 * to offload VLAN 1 with pvid and untagged flags set. Since these111	 * flags are not supported, add a MAC filter instead.112	 */113	return vid > 1;114}115 116void117ice_eswitch_br_offloads_deinit(struct ice_pf *pf);118int119ice_eswitch_br_offloads_init(struct ice_pf *pf);120void ice_eswitch_br_fdb_flush(struct ice_esw_br *bridge);121 122#endif /* _ICE_ESWITCH_BR_H_ */123