• Home
  • Raw
  • Download

Lines Matching refs:mdb

55 static inline int __br_ip4_hash(struct net_bridge_mdb_htable *mdb, __be32 ip,  in __br_ip4_hash()  argument
58 return jhash_2words((__force u32)ip, vid, mdb->secret) & (mdb->max - 1); in __br_ip4_hash()
62 static inline int __br_ip6_hash(struct net_bridge_mdb_htable *mdb, in __br_ip6_hash() argument
67 mdb->secret) & (mdb->max - 1); in __br_ip6_hash()
71 static inline int br_ip_hash(struct net_bridge_mdb_htable *mdb, in br_ip_hash() argument
76 return __br_ip4_hash(mdb, ip->u.ip4, ip->vid); in br_ip_hash()
79 return __br_ip6_hash(mdb, &ip->u.ip6, ip->vid); in br_ip_hash()
86 struct net_bridge_mdb_htable *mdb, struct br_ip *dst, int hash) in __br_mdb_ip_get() argument
90 hlist_for_each_entry_rcu(mp, &mdb->mhash[hash], hlist[mdb->ver]) { in __br_mdb_ip_get()
98 struct net_bridge_mdb_entry *br_mdb_ip_get(struct net_bridge_mdb_htable *mdb, in br_mdb_ip_get() argument
101 if (!mdb) in br_mdb_ip_get()
104 return __br_mdb_ip_get(mdb, dst, br_ip_hash(mdb, dst)); in br_mdb_ip_get()
108 struct net_bridge_mdb_htable *mdb, __be32 dst, __u16 vid) in br_mdb_ip4_get() argument
116 return br_mdb_ip_get(mdb, &br_dst); in br_mdb_ip4_get()
121 struct net_bridge_mdb_htable *mdb, const struct in6_addr *dst, in br_mdb_ip6_get() argument
130 return br_mdb_ip_get(mdb, &br_dst); in br_mdb_ip6_get()
137 struct net_bridge_mdb_htable *mdb = rcu_dereference(br->mdb); in br_mdb_get() local
162 return br_mdb_ip_get(mdb, &ip); in br_mdb_get()
167 struct net_bridge_mdb_htable *mdb = in br_mdb_free() local
169 struct net_bridge_mdb_htable *old = mdb->old; in br_mdb_free()
171 mdb->old = NULL; in br_mdb_free()
225 struct net_bridge_mdb_htable *mdb; in br_multicast_group_expired() local
236 mdb = mlock_dereference(br->mdb, br); in br_multicast_group_expired()
238 hlist_del_rcu(&mp->hlist[mdb->ver]); in br_multicast_group_expired()
239 mdb->size--; in br_multicast_group_expired()
250 struct net_bridge_mdb_htable *mdb; in br_multicast_del_pg() local
255 mdb = mlock_dereference(br->mdb, br); in br_multicast_del_pg()
257 mp = br_mdb_ip_get(mdb, &pg->addr); in br_multicast_del_pg()
302 struct net_bridge_mdb_htable *mdb; in br_mdb_rehash() local
305 mdb = kmalloc(sizeof(*mdb), GFP_ATOMIC); in br_mdb_rehash()
306 if (!mdb) in br_mdb_rehash()
309 mdb->max = max; in br_mdb_rehash()
310 mdb->old = old; in br_mdb_rehash()
312 mdb->mhash = kzalloc(max * sizeof(*mdb->mhash), GFP_ATOMIC); in br_mdb_rehash()
313 if (!mdb->mhash) { in br_mdb_rehash()
314 kfree(mdb); in br_mdb_rehash()
318 mdb->size = old ? old->size : 0; in br_mdb_rehash()
319 mdb->ver = old ? old->ver ^ 1 : 0; in br_mdb_rehash()
322 get_random_bytes(&mdb->secret, sizeof(mdb->secret)); in br_mdb_rehash()
324 mdb->secret = old->secret; in br_mdb_rehash()
329 err = br_mdb_copy(mdb, old, elasticity); in br_mdb_rehash()
331 kfree(mdb->mhash); in br_mdb_rehash()
332 kfree(mdb); in br_mdb_rehash()
337 call_rcu_bh(&mdb->rcu, br_mdb_free); in br_mdb_rehash()
340 rcu_assign_pointer(*mdbp, mdb); in br_mdb_rehash()
511 struct net_bridge_mdb_htable *mdb; in br_multicast_get_group() local
518 mdb = rcu_dereference_protected(br->mdb, 1); in br_multicast_get_group()
519 hlist_for_each_entry(mp, &mdb->mhash[hash], hlist[mdb->ver]) { in br_multicast_get_group()
526 max = mdb->max; in br_multicast_get_group()
537 if (mdb->size >= max) { in br_multicast_get_group()
551 if (max > mdb->max || elasticity) { in br_multicast_get_group()
552 if (mdb->old) { in br_multicast_get_group()
561 err = br_mdb_rehash(&br->mdb, max, elasticity); in br_multicast_get_group()
566 mdb->size, err); in br_multicast_get_group()
584 struct net_bridge_mdb_htable *mdb; in br_multicast_new_group() local
589 mdb = rcu_dereference_protected(br->mdb, 1); in br_multicast_new_group()
590 if (!mdb) { in br_multicast_new_group()
591 err = br_mdb_rehash(&br->mdb, BR_HASH_SIZE, 0); in br_multicast_new_group()
597 hash = br_ip_hash(mdb, group); in br_multicast_new_group()
605 mdb = rcu_dereference_protected(br->mdb, 1); in br_multicast_new_group()
606 hash = br_ip_hash(mdb, group); in br_multicast_new_group()
622 hlist_add_head_rcu(&mp->hlist[mdb->ver], &mdb->mhash[hash]); in br_multicast_new_group()
623 mdb->size++; in br_multicast_new_group()
1129 mp = br_mdb_ip4_get(mlock_dereference(br->mdb, br), group, vid); in br_ip4_multicast_query()
1203 mp = br_mdb_ip6_get(mlock_dereference(br->mdb, br), group, vid); in br_ip6_multicast_query()
1233 struct net_bridge_mdb_htable *mdb; in br_multicast_leave_group() local
1245 mdb = mlock_dereference(br->mdb, br); in br_multicast_leave_group()
1246 mp = br_mdb_ip_get(mdb, group); in br_multicast_leave_group()
1653 struct net_bridge_mdb_htable *mdb; in br_multicast_stop() local
1664 mdb = mlock_dereference(br->mdb, br); in br_multicast_stop()
1665 if (!mdb) in br_multicast_stop()
1668 br->mdb = NULL; in br_multicast_stop()
1670 ver = mdb->ver; in br_multicast_stop()
1671 for (i = 0; i < mdb->max; i++) { in br_multicast_stop()
1672 hlist_for_each_entry_safe(mp, n, &mdb->mhash[i], in br_multicast_stop()
1679 if (mdb->old) { in br_multicast_stop()
1683 WARN_ON(mdb->old); in br_multicast_stop()
1686 mdb->old = mdb; in br_multicast_stop()
1687 call_rcu_bh(&mdb->rcu, br_mdb_free); in br_multicast_stop()
1781 struct net_bridge_mdb_htable *mdb; in br_multicast_toggle() local
1794 mdb = mlock_dereference(br->mdb, br); in br_multicast_toggle()
1795 if (mdb) { in br_multicast_toggle()
1796 if (mdb->old) { in br_multicast_toggle()
1803 err = br_mdb_rehash(&br->mdb, mdb->max, in br_multicast_toggle()
1839 struct net_bridge_mdb_htable *mdb; in br_multicast_set_hash_max() local
1849 mdb = mlock_dereference(br->mdb, br); in br_multicast_set_hash_max()
1850 if (mdb && val < mdb->size) in br_multicast_set_hash_max()
1858 if (mdb) { in br_multicast_set_hash_max()
1859 if (mdb->old) { in br_multicast_set_hash_max()
1866 err = br_mdb_rehash(&br->mdb, br->hash_max, in br_multicast_set_hash_max()