1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright (c) 2020, Nikolay Aleksandrov <nikolay@nvidia.com>
3  */
4 #ifndef _BR_PRIVATE_MCAST_EHT_H_
5 #define _BR_PRIVATE_MCAST_EHT_H_
6 
7 union net_bridge_eht_addr {
8 	__be32				ip4;
9 #if IS_ENABLED(CONFIG_IPV6)
10 	struct in6_addr			ip6;
11 #endif
12 };
13 
14 /* single host's list of set entries and filter_mode */
15 struct net_bridge_group_eht_host {
16 	struct rb_node			rb_node;
17 
18 	union net_bridge_eht_addr	h_addr;
19 	struct hlist_head		set_entries;
20 	unsigned int			num_entries;
21 	unsigned char			filter_mode;
22 	struct net_bridge_port_group	*pg;
23 };
24 
25 /* (host, src entry) added to a per-src set and host's list */
26 struct net_bridge_group_eht_set_entry {
27 	struct rb_node			rb_node;
28 	struct hlist_node		host_list;
29 
30 	union net_bridge_eht_addr	h_addr;
31 	struct timer_list		timer;
32 	struct net_bridge		*br;
33 	struct net_bridge_group_eht_set	*eht_set;
34 	struct net_bridge_group_eht_host *h_parent;
35 	struct net_bridge_mcast_gc	mcast_gc;
36 };
37 
38 /* per-src set */
39 struct net_bridge_group_eht_set {
40 	struct rb_node			rb_node;
41 
42 	union net_bridge_eht_addr	src_addr;
43 	struct rb_root			entry_tree;
44 	struct timer_list		timer;
45 	struct net_bridge_port_group	*pg;
46 	struct net_bridge		*br;
47 	struct net_bridge_mcast_gc	mcast_gc;
48 };
49 
50 #endif /* _BR_PRIVATE_MCAST_EHT_H_ */
51