Lines Matching refs:dz

50 #define DZ_HASHMASK(dz)	((dz)->dz_hashmask)  argument
53 #define DZ_MASK(dz) ((dz)->dz_mask) argument
87 static inline dn_fib_idx_t dn_hash(dn_fib_key_t key, struct dn_zone *dz) in dn_hash() argument
89 u16 h = le16_to_cpu(key.datum)>>(16 - dz->dz_order); in dn_hash()
92 h &= DZ_HASHMASK(dz); in dn_hash()
96 static inline dn_fib_key_t dz_key(__le16 dst, struct dn_zone *dz) in dz_key() argument
99 k.datum = dst & DZ_MASK(dz); in dz_key()
103 static inline struct dn_fib_node **dn_chain_p(dn_fib_key_t key, struct dn_zone *dz) in dn_chain_p() argument
105 return &dz->dz_hash[dn_hash(key, dz).datum]; in dn_chain_p()
108 static inline struct dn_fib_node *dz_chain(dn_fib_key_t key, struct dn_zone *dz) in dz_chain() argument
110 return dz->dz_hash[dn_hash(key, dz).datum]; in dz_chain()
123 static inline void dn_rebuild_zone(struct dn_zone *dz, in dn_rebuild_zone() argument
133 for(fp = dn_chain_p(f->fn_key, dz); in dn_rebuild_zone()
143 static void dn_rehash_zone(struct dn_zone *dz) in dn_rehash_zone() argument
149 old_divisor = dz->dz_divisor; in dn_rehash_zone()
171 old_ht = dz->dz_hash; in dn_rehash_zone()
172 dz->dz_hash = ht; in dn_rehash_zone()
173 dz->dz_hashmask = new_hashmask; in dn_rehash_zone()
174 dz->dz_divisor = new_divisor; in dn_rehash_zone()
175 dn_rebuild_zone(dz, old_ht, old_divisor); in dn_rehash_zone()
190 struct dn_zone *dz = kzalloc(sizeof(struct dn_zone), GFP_KERNEL); in dn_new_zone() local
191 if (!dz) in dn_new_zone()
195 dz->dz_divisor = 16; in dn_new_zone()
196 dz->dz_hashmask = 0x0F; in dn_new_zone()
198 dz->dz_divisor = 1; in dn_new_zone()
199 dz->dz_hashmask = 0; in dn_new_zone()
202 dz->dz_hash = kcalloc(dz->dz_divisor, sizeof(struct dn_fib_node *), GFP_KERNEL); in dn_new_zone()
203 if (!dz->dz_hash) { in dn_new_zone()
204 kfree(dz); in dn_new_zone()
208 dz->dz_order = z; in dn_new_zone()
209 dz->dz_mask = dnet_make_mask(z); in dn_new_zone()
217 dz->dz_next = table->dh_zone_list; in dn_new_zone()
218 table->dh_zone_list = dz; in dn_new_zone()
220 dz->dz_next = table->dh_zones[i]->dz_next; in dn_new_zone()
221 table->dh_zones[i]->dz_next = dz; in dn_new_zone()
223 table->dh_zones[z] = dz; in dn_new_zone()
225 return dz; in dn_new_zone()
412 struct dn_zone *dz, in dn_hash_dump_bucket() argument
428 f->fn_scope, &f->fn_key, dz->dz_order, in dn_hash_dump_bucket()
441 struct dn_zone *dz) in dn_hash_dump_zone() argument
446 for(h = 0; h < dz->dz_divisor; h++) { in dn_hash_dump_zone()
451 if (dz->dz_hash == NULL || dz->dz_hash[h] == NULL) in dn_hash_dump_zone()
453 if (dn_hash_dump_bucket(skb, cb, tb, dz, dz->dz_hash[h]) < 0) { in dn_hash_dump_zone()
466 struct dn_zone *dz; in dn_fib_table_dump() local
471 for(dz = table->dh_zone_list, m = 0; dz; dz = dz->dz_next, m++) { in dn_fib_table_dump()
477 if (dn_hash_dump_zone(skb, cb, tb, dz) < 0) { in dn_fib_table_dump()
534 struct dn_zone *dz; in dn_fib_table_insert() local
544 dz = table->dh_zones[z]; in dn_fib_table_insert()
545 if (!dz && !(dz = dn_new_zone(table, z))) in dn_fib_table_insert()
551 if (dst & ~DZ_MASK(dz)) in dn_fib_table_insert()
553 key = dz_key(dst, dz); in dn_fib_table_insert()
559 if (dz->dz_nent > (dz->dz_divisor << 2) && in dn_fib_table_insert()
560 dz->dz_divisor > DN_MAX_DIVISOR && in dn_fib_table_insert()
561 (z==16 || (1<<z) > dz->dz_divisor)) in dn_fib_table_insert()
562 dn_rehash_zone(dz); in dn_fib_table_insert()
564 fp = dn_chain_p(key, dz); in dn_fib_table_insert()
639 dz->dz_nent++; in dn_fib_table_insert()
652 dz->dz_nent--; in dn_fib_table_insert()
672 struct dn_zone *dz; in dn_fib_table_delete() local
680 if ((dz = table->dh_zones[z]) == NULL) in dn_fib_table_delete()
686 if (dst & ~DZ_MASK(dz)) in dn_fib_table_delete()
688 key = dz_key(dst, dz); in dn_fib_table_delete()
691 fp = dn_chain_p(key, dz); in dn_fib_table_delete()
731 dz->dz_nent--; in dn_fib_table_delete()
774 struct dn_zone *dz; in dn_fib_table_flush() local
778 for(dz = table->dh_zone_list; dz; dz = dz->dz_next) { in dn_fib_table_flush()
781 for(i = dz->dz_divisor-1; i >= 0; i--) in dn_fib_table_flush()
782 tmp += dn_flush_list(&dz->dz_hash[i], dz->dz_order, table); in dn_fib_table_flush()
783 dz->dz_nent -= tmp; in dn_fib_table_flush()
793 struct dn_zone *dz; in dn_fib_table_lookup() local
797 for(dz = t->dh_zone_list; dz; dz = dz->dz_next) { in dn_fib_table_lookup()
799 dn_fib_key_t k = dz_key(flp->daddr, dz); in dn_fib_table_lookup()
801 for(f = dz_chain(k, dz); f; f = f->fn_next) { in dn_fib_table_lookup()
822 res->prefixlen = dz->dz_order; in dn_fib_table_lookup()