Lines Matching refs:mdb

71 static inline int __br_ip4_hash(struct net_bridge_mdb_htable *mdb, __be32 ip,  in __br_ip4_hash()  argument
74 return jhash_2words((__force u32)ip, vid, mdb->secret) & (mdb->max - 1); in __br_ip4_hash()
78 static inline int __br_ip6_hash(struct net_bridge_mdb_htable *mdb, in __br_ip6_hash() argument
83 mdb->secret) & (mdb->max - 1); in __br_ip6_hash()
87 static inline int br_ip_hash(struct net_bridge_mdb_htable *mdb, in br_ip_hash() argument
92 return __br_ip4_hash(mdb, ip->u.ip4, ip->vid); in br_ip_hash()
95 return __br_ip6_hash(mdb, &ip->u.ip6, ip->vid); in br_ip_hash()
102 struct net_bridge_mdb_htable *mdb, struct br_ip *dst, int hash) in __br_mdb_ip_get() argument
106 hlist_for_each_entry_rcu(mp, &mdb->mhash[hash], hlist[mdb->ver]) { in __br_mdb_ip_get()
114 struct net_bridge_mdb_entry *br_mdb_ip_get(struct net_bridge_mdb_htable *mdb, in br_mdb_ip_get() argument
117 if (!mdb) in br_mdb_ip_get()
120 return __br_mdb_ip_get(mdb, dst, br_ip_hash(mdb, dst)); in br_mdb_ip_get()
124 struct net_bridge_mdb_htable *mdb, __be32 dst, __u16 vid) in br_mdb_ip4_get() argument
132 return br_mdb_ip_get(mdb, &br_dst); in br_mdb_ip4_get()
137 struct net_bridge_mdb_htable *mdb, const struct in6_addr *dst, in br_mdb_ip6_get() argument
146 return br_mdb_ip_get(mdb, &br_dst); in br_mdb_ip6_get()
153 struct net_bridge_mdb_htable *mdb = rcu_dereference(br->mdb); in br_mdb_get() local
178 return br_mdb_ip_get(mdb, &ip); in br_mdb_get()
183 struct net_bridge_mdb_htable *mdb = in br_mdb_free() local
185 struct net_bridge_mdb_htable *old = mdb->old; in br_mdb_free()
187 mdb->old = NULL; in br_mdb_free()
241 struct net_bridge_mdb_htable *mdb; in br_multicast_group_expired() local
252 mdb = mlock_dereference(br->mdb, br); in br_multicast_group_expired()
254 hlist_del_rcu(&mp->hlist[mdb->ver]); in br_multicast_group_expired()
255 mdb->size--; in br_multicast_group_expired()
266 struct net_bridge_mdb_htable *mdb; in br_multicast_del_pg() local
271 mdb = mlock_dereference(br->mdb, br); in br_multicast_del_pg()
273 mp = br_mdb_ip_get(mdb, &pg->addr); in br_multicast_del_pg()
320 struct net_bridge_mdb_htable *mdb; in br_mdb_rehash() local
323 mdb = kmalloc(sizeof(*mdb), GFP_ATOMIC); in br_mdb_rehash()
324 if (!mdb) in br_mdb_rehash()
327 mdb->max = max; in br_mdb_rehash()
328 mdb->old = old; in br_mdb_rehash()
330 mdb->mhash = kzalloc(max * sizeof(*mdb->mhash), GFP_ATOMIC); in br_mdb_rehash()
331 if (!mdb->mhash) { in br_mdb_rehash()
332 kfree(mdb); in br_mdb_rehash()
336 mdb->size = old ? old->size : 0; in br_mdb_rehash()
337 mdb->ver = old ? old->ver ^ 1 : 0; in br_mdb_rehash()
340 get_random_bytes(&mdb->secret, sizeof(mdb->secret)); in br_mdb_rehash()
342 mdb->secret = old->secret; in br_mdb_rehash()
347 err = br_mdb_copy(mdb, old, elasticity); in br_mdb_rehash()
349 kfree(mdb->mhash); in br_mdb_rehash()
350 kfree(mdb); in br_mdb_rehash()
355 call_rcu_bh(&mdb->rcu, br_mdb_free); in br_mdb_rehash()
358 rcu_assign_pointer(*mdbp, mdb); in br_mdb_rehash()
530 struct net_bridge_mdb_htable *mdb; in br_multicast_get_group() local
537 mdb = rcu_dereference_protected(br->mdb, 1); in br_multicast_get_group()
538 hlist_for_each_entry(mp, &mdb->mhash[hash], hlist[mdb->ver]) { in br_multicast_get_group()
545 max = mdb->max; in br_multicast_get_group()
556 if (mdb->size >= max) { in br_multicast_get_group()
570 if (max > mdb->max || elasticity) { in br_multicast_get_group()
571 if (mdb->old) { in br_multicast_get_group()
580 err = br_mdb_rehash(&br->mdb, max, elasticity); in br_multicast_get_group()
585 mdb->size, err); in br_multicast_get_group()
603 struct net_bridge_mdb_htable *mdb; in br_multicast_new_group() local
608 mdb = rcu_dereference_protected(br->mdb, 1); in br_multicast_new_group()
609 if (!mdb) { in br_multicast_new_group()
610 err = br_mdb_rehash(&br->mdb, BR_HASH_SIZE, 0); in br_multicast_new_group()
616 hash = br_ip_hash(mdb, group); in br_multicast_new_group()
624 mdb = rcu_dereference_protected(br->mdb, 1); in br_multicast_new_group()
625 hash = br_ip_hash(mdb, group); in br_multicast_new_group()
641 hlist_add_head_rcu(&mp->hlist[mdb->ver], &mdb->mhash[hash]); in br_multicast_new_group()
642 mdb->size++; in br_multicast_new_group()
1311 mp = br_mdb_ip4_get(mlock_dereference(br->mdb, br), group, vid); in br_ip4_multicast_query()
1396 mp = br_mdb_ip6_get(mlock_dereference(br->mdb, br), group, vid); in br_ip6_multicast_query()
1429 struct net_bridge_mdb_htable *mdb; in br_multicast_leave_group() local
1440 mdb = mlock_dereference(br->mdb, br); in br_multicast_leave_group()
1441 mp = br_mdb_ip_get(mdb, group); in br_multicast_leave_group()
1787 struct net_bridge_mdb_htable *mdb; in br_multicast_dev_del() local
1794 mdb = mlock_dereference(br->mdb, br); in br_multicast_dev_del()
1795 if (!mdb) in br_multicast_dev_del()
1798 br->mdb = NULL; in br_multicast_dev_del()
1800 ver = mdb->ver; in br_multicast_dev_del()
1801 for (i = 0; i < mdb->max; i++) { in br_multicast_dev_del()
1802 hlist_for_each_entry_safe(mp, n, &mdb->mhash[i], in br_multicast_dev_del()
1809 if (mdb->old) { in br_multicast_dev_del()
1813 WARN_ON(mdb->old); in br_multicast_dev_del()
1816 mdb->old = mdb; in br_multicast_dev_del()
1817 call_rcu_bh(&mdb->rcu, br_mdb_free); in br_multicast_dev_del()
1905 struct net_bridge_mdb_htable *mdb; in br_multicast_toggle() local
1918 mdb = mlock_dereference(br->mdb, br); in br_multicast_toggle()
1919 if (mdb) { in br_multicast_toggle()
1920 if (mdb->old) { in br_multicast_toggle()
1927 err = br_mdb_rehash(&br->mdb, mdb->max, in br_multicast_toggle()
1982 struct net_bridge_mdb_htable *mdb; in br_multicast_set_hash_max() local
1988 mdb = mlock_dereference(br->mdb, br); in br_multicast_set_hash_max()
1989 if (mdb && val < mdb->size) in br_multicast_set_hash_max()
1997 if (mdb) { in br_multicast_set_hash_max()
1998 if (mdb->old) { in br_multicast_set_hash_max()
2005 err = br_mdb_rehash(&br->mdb, br->hash_max, in br_multicast_set_hash_max()