Lines Matching refs:mdb

76 static inline int __br_ip4_hash(struct net_bridge_mdb_htable *mdb, __be32 ip,  in __br_ip4_hash()  argument
79 return jhash_2words((__force u32)ip, vid, mdb->secret) & (mdb->max - 1); in __br_ip4_hash()
83 static inline int __br_ip6_hash(struct net_bridge_mdb_htable *mdb, in __br_ip6_hash() argument
88 mdb->secret) & (mdb->max - 1); in __br_ip6_hash()
92 static inline int br_ip_hash(struct net_bridge_mdb_htable *mdb, in br_ip_hash() argument
97 return __br_ip4_hash(mdb, ip->u.ip4, ip->vid); in br_ip_hash()
100 return __br_ip6_hash(mdb, &ip->u.ip6, ip->vid); in br_ip_hash()
107 struct net_bridge_mdb_htable *mdb, struct br_ip *dst, int hash) in __br_mdb_ip_get() argument
111 hlist_for_each_entry_rcu(mp, &mdb->mhash[hash], hlist[mdb->ver]) { in __br_mdb_ip_get()
119 struct net_bridge_mdb_entry *br_mdb_ip_get(struct net_bridge_mdb_htable *mdb, in br_mdb_ip_get() argument
122 if (!mdb) in br_mdb_ip_get()
125 return __br_mdb_ip_get(mdb, dst, br_ip_hash(mdb, dst)); in br_mdb_ip_get()
129 struct net_bridge_mdb_htable *mdb, __be32 dst, __u16 vid) in br_mdb_ip4_get() argument
137 return br_mdb_ip_get(mdb, &br_dst); in br_mdb_ip4_get()
142 struct net_bridge_mdb_htable *mdb, const struct in6_addr *dst, in br_mdb_ip6_get() argument
151 return br_mdb_ip_get(mdb, &br_dst); in br_mdb_ip6_get()
158 struct net_bridge_mdb_htable *mdb = rcu_dereference(br->mdb); in br_mdb_get() local
183 return br_mdb_ip_get(mdb, &ip); in br_mdb_get()
188 struct net_bridge_mdb_htable *mdb = in br_mdb_free() local
190 struct net_bridge_mdb_htable *old = mdb->old; in br_mdb_free()
192 mdb->old = NULL; in br_mdb_free()
246 struct net_bridge_mdb_htable *mdb; in br_multicast_group_expired() local
258 mdb = mlock_dereference(br->mdb, br); in br_multicast_group_expired()
260 hlist_del_rcu(&mp->hlist[mdb->ver]); in br_multicast_group_expired()
261 mdb->size--; in br_multicast_group_expired()
272 struct net_bridge_mdb_htable *mdb; in br_multicast_del_pg() local
277 mdb = mlock_dereference(br->mdb, br); in br_multicast_del_pg()
279 mp = br_mdb_ip_get(mdb, &pg->addr); in br_multicast_del_pg()
326 struct net_bridge_mdb_htable *mdb; in br_mdb_rehash() local
329 mdb = kmalloc(sizeof(*mdb), GFP_ATOMIC); in br_mdb_rehash()
330 if (!mdb) in br_mdb_rehash()
333 mdb->max = max; in br_mdb_rehash()
334 mdb->old = old; in br_mdb_rehash()
336 mdb->mhash = kcalloc(max, sizeof(*mdb->mhash), GFP_ATOMIC); in br_mdb_rehash()
337 if (!mdb->mhash) { in br_mdb_rehash()
338 kfree(mdb); in br_mdb_rehash()
342 mdb->size = old ? old->size : 0; in br_mdb_rehash()
343 mdb->ver = old ? old->ver ^ 1 : 0; in br_mdb_rehash()
346 get_random_bytes(&mdb->secret, sizeof(mdb->secret)); in br_mdb_rehash()
348 mdb->secret = old->secret; in br_mdb_rehash()
353 err = br_mdb_copy(mdb, old, elasticity); in br_mdb_rehash()
355 kfree(mdb->mhash); in br_mdb_rehash()
356 kfree(mdb); in br_mdb_rehash()
361 call_rcu_bh(&mdb->rcu, br_mdb_free); in br_mdb_rehash()
364 rcu_assign_pointer(*mdbp, mdb); in br_mdb_rehash()
596 struct net_bridge_mdb_htable *mdb; in br_multicast_get_group() local
603 mdb = rcu_dereference_protected(br->mdb, 1); in br_multicast_get_group()
604 hlist_for_each_entry(mp, &mdb->mhash[hash], hlist[mdb->ver]) { in br_multicast_get_group()
611 max = mdb->max; in br_multicast_get_group()
622 if (mdb->size >= max) { in br_multicast_get_group()
636 if (max > mdb->max || elasticity) { in br_multicast_get_group()
637 if (mdb->old) { in br_multicast_get_group()
646 err = br_mdb_rehash(&br->mdb, max, elasticity); in br_multicast_get_group()
651 mdb->size, err); in br_multicast_get_group()
670 struct net_bridge_mdb_htable *mdb; in br_multicast_new_group() local
675 mdb = rcu_dereference_protected(br->mdb, 1); in br_multicast_new_group()
676 if (!mdb) { in br_multicast_new_group()
677 err = br_mdb_rehash(&br->mdb, BR_HASH_SIZE, 0); in br_multicast_new_group()
683 hash = br_ip_hash(mdb, group); in br_multicast_new_group()
691 mdb = rcu_dereference_protected(br->mdb, 1); in br_multicast_new_group()
692 hash = br_ip_hash(mdb, group); in br_multicast_new_group()
707 hlist_add_head_rcu(&mp->hlist[mdb->ver], &mdb->mhash[hash]); in br_multicast_new_group()
708 mdb->size++; in br_multicast_new_group()
1477 mp = br_mdb_ip4_get(mlock_dereference(br->mdb, br), group, vid); in br_ip4_multicast_query()
1561 mp = br_mdb_ip6_get(mlock_dereference(br->mdb, br), group, vid); in br_ip6_multicast_query()
1595 struct net_bridge_mdb_htable *mdb; in br_multicast_leave_group() local
1606 mdb = mlock_dereference(br->mdb, br); in br_multicast_leave_group()
1607 mp = br_mdb_ip_get(mdb, group); in br_multicast_leave_group()
2028 struct net_bridge_mdb_htable *mdb; in br_multicast_dev_del() local
2035 mdb = mlock_dereference(br->mdb, br); in br_multicast_dev_del()
2036 if (!mdb) in br_multicast_dev_del()
2039 br->mdb = NULL; in br_multicast_dev_del()
2041 ver = mdb->ver; in br_multicast_dev_del()
2042 for (i = 0; i < mdb->max; i++) { in br_multicast_dev_del()
2043 hlist_for_each_entry_safe(mp, n, &mdb->mhash[i], in br_multicast_dev_del()
2050 if (mdb->old) { in br_multicast_dev_del()
2054 WARN_ON(mdb->old); in br_multicast_dev_del()
2057 mdb->old = mdb; in br_multicast_dev_del()
2058 call_rcu_bh(&mdb->rcu, br_mdb_free); in br_multicast_dev_del()
2171 struct net_bridge_mdb_htable *mdb; in br_multicast_toggle() local
2187 mdb = mlock_dereference(br->mdb, br); in br_multicast_toggle()
2188 if (mdb) { in br_multicast_toggle()
2189 if (mdb->old) { in br_multicast_toggle()
2196 err = br_mdb_rehash(&br->mdb, mdb->max, in br_multicast_toggle()
2270 struct net_bridge_mdb_htable *mdb; in br_multicast_set_hash_max() local
2276 mdb = mlock_dereference(br->mdb, br); in br_multicast_set_hash_max()
2277 if (mdb && val < mdb->size) in br_multicast_set_hash_max()
2285 if (mdb) { in br_multicast_set_hash_max()
2286 if (mdb->old) { in br_multicast_set_hash_max()
2293 err = br_mdb_rehash(&br->mdb, br->hash_max, in br_multicast_set_hash_max()