Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.14-rc1 93 lines 2.5 kB view raw
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#define BR_MCAST_DEFAULT_EHT_HOSTS_LIMIT 512 8 9union net_bridge_eht_addr { 10 __be32 ip4; 11#if IS_ENABLED(CONFIG_IPV6) 12 struct in6_addr ip6; 13#endif 14}; 15 16/* single host's list of set entries and filter_mode */ 17struct net_bridge_group_eht_host { 18 struct rb_node rb_node; 19 20 union net_bridge_eht_addr h_addr; 21 struct hlist_head set_entries; 22 unsigned int num_entries; 23 unsigned char filter_mode; 24 struct net_bridge_port_group *pg; 25}; 26 27/* (host, src entry) added to a per-src set and host's list */ 28struct net_bridge_group_eht_set_entry { 29 struct rb_node rb_node; 30 struct hlist_node host_list; 31 32 union net_bridge_eht_addr h_addr; 33 struct timer_list timer; 34 struct net_bridge *br; 35 struct net_bridge_group_eht_set *eht_set; 36 struct net_bridge_group_eht_host *h_parent; 37 struct net_bridge_mcast_gc mcast_gc; 38}; 39 40/* per-src set */ 41struct net_bridge_group_eht_set { 42 struct rb_node rb_node; 43 44 union net_bridge_eht_addr src_addr; 45 struct rb_root entry_tree; 46 struct timer_list timer; 47 struct net_bridge_port_group *pg; 48 struct net_bridge *br; 49 struct net_bridge_mcast_gc mcast_gc; 50}; 51 52#ifdef CONFIG_BRIDGE_IGMP_SNOOPING 53void br_multicast_eht_clean_sets(struct net_bridge_port_group *pg); 54bool br_multicast_eht_handle(struct net_bridge_port_group *pg, 55 void *h_addr, 56 void *srcs, 57 u32 nsrcs, 58 size_t addr_size, 59 int grec_type); 60int br_multicast_eht_set_hosts_limit(struct net_bridge_port *p, 61 u32 eht_hosts_limit); 62 63static inline bool 64br_multicast_eht_should_del_pg(const struct net_bridge_port_group *pg) 65{ 66 return !!((pg->key.port->flags & BR_MULTICAST_FAST_LEAVE) && 67 RB_EMPTY_ROOT(&pg->eht_host_tree)); 68} 69 70static inline bool 71br_multicast_eht_hosts_over_limit(const struct net_bridge_port_group *pg) 72{ 73 const struct net_bridge_port *p = pg->key.port; 74 75 return !!(p->multicast_eht_hosts_cnt >= p->multicast_eht_hosts_limit); 76} 77 78static inline void br_multicast_eht_hosts_inc(struct net_bridge_port_group *pg) 79{ 80 struct net_bridge_port *p = pg->key.port; 81 82 p->multicast_eht_hosts_cnt++; 83} 84 85static inline void br_multicast_eht_hosts_dec(struct net_bridge_port_group *pg) 86{ 87 struct net_bridge_port *p = pg->key.port; 88 89 p->multicast_eht_hosts_cnt--; 90} 91#endif /* CONFIG_BRIDGE_IGMP_SNOOPING */ 92 93#endif /* _BR_PRIVATE_MCAST_EHT_H_ */