xref: /linux/net/ipv4/fib_trie.c (revision d458cdf712e0c671e8e819abb16ecd6e44f9daec)
1 /*
2  *   This program is free software; you can redistribute it and/or
3  *   modify it under the terms of the GNU General Public License
4  *   as published by the Free Software Foundation; either version
5  *   2 of the License, or (at your option) any later version.
6  *
7  *   Robert Olsson <robert.olsson@its.uu.se> Uppsala Universitet
8  *     & Swedish University of Agricultural Sciences.
9  *
10  *   Jens Laas <jens.laas@data.slu.se> Swedish University of
11  *     Agricultural Sciences.
12  *
13  *   Hans Liss <hans.liss@its.uu.se>  Uppsala Universitet
14  *
15  * This work is based on the LPC-trie which is originally described in:
16  *
17  * An experimental study of compression methods for dynamic tries
18  * Stefan Nilsson and Matti Tikkanen. Algorithmica, 33(1):19-33, 2002.
19  * http://www.csc.kth.se/~snilsson/software/dyntrie2/
20  *
21  *
22  * IP-address lookup using LC-tries. Stefan Nilsson and Gunnar Karlsson
23  * IEEE Journal on Selected Areas in Communications, 17(6):1083-1092, June 1999
24  *
25  *
26  * Code from fib_hash has been reused which includes the following header:
27  *
28  *
29  * INET		An implementation of the TCP/IP protocol suite for the LINUX
30  *		operating system.  INET is implemented using the  BSD Socket
31  *		interface as the means of communication with the user level.
32  *
33  *		IPv4 FIB: lookup engine and maintenance routines.
34  *
35  *
36  * Authors:	Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
37  *
38  *		This program is free software; you can redistribute it and/or
39  *		modify it under the terms of the GNU General Public License
40  *		as published by the Free Software Foundation; either version
41  *		2 of the License, or (at your option) any later version.
42  *
43  * Substantial contributions to this work comes from:
44  *
45  *		David S. Miller, <davem@davemloft.net>
46  *		Stephen Hemminger <shemminger@osdl.org>
47  *		Paul E. McKenney <paulmck@us.ibm.com>
48  *		Patrick McHardy <kaber@trash.net>
49  */
50 
51 #define VERSION "0.409"
52 
53 #include <asm/uaccess.h>
54 #include <linux/bitops.h>
55 #include <linux/types.h>
56 #include <linux/kernel.h>
57 #include <linux/mm.h>
58 #include <linux/string.h>
59 #include <linux/socket.h>
60 #include <linux/sockios.h>
61 #include <linux/errno.h>
62 #include <linux/in.h>
63 #include <linux/inet.h>
64 #include <linux/inetdevice.h>
65 #include <linux/netdevice.h>
66 #include <linux/if_arp.h>
67 #include <linux/proc_fs.h>
68 #include <linux/rcupdate.h>
69 #include <linux/skbuff.h>
70 #include <linux/netlink.h>
71 #include <linux/init.h>
72 #include <linux/list.h>
73 #include <linux/slab.h>
74 #include <linux/export.h>
75 #include <net/net_namespace.h>
76 #include <net/ip.h>
77 #include <net/protocol.h>
78 #include <net/route.h>
79 #include <net/tcp.h>
80 #include <net/sock.h>
81 #include <net/ip_fib.h>
82 #include "fib_lookup.h"
83 
84 #define MAX_STAT_DEPTH 32
85 
86 #define KEYLENGTH (8*sizeof(t_key))
87 
88 typedef unsigned int t_key;
89 
90 #define T_TNODE 0
91 #define T_LEAF  1
92 #define NODE_TYPE_MASK	0x1UL
93 #define NODE_TYPE(node) ((node)->parent & NODE_TYPE_MASK)
94 
95 #define IS_TNODE(n) (!(n->parent & T_LEAF))
96 #define IS_LEAF(n) (n->parent & T_LEAF)
97 
98 struct rt_trie_node {
99 	unsigned long parent;
100 	t_key key;
101 };
102 
103 struct leaf {
104 	unsigned long parent;
105 	t_key key;
106 	struct hlist_head list;
107 	struct rcu_head rcu;
108 };
109 
110 struct leaf_info {
111 	struct hlist_node hlist;
112 	int plen;
113 	u32 mask_plen; /* ntohl(inet_make_mask(plen)) */
114 	struct list_head falh;
115 	struct rcu_head rcu;
116 };
117 
118 struct tnode {
119 	unsigned long parent;
120 	t_key key;
121 	unsigned char pos;		/* 2log(KEYLENGTH) bits needed */
122 	unsigned char bits;		/* 2log(KEYLENGTH) bits needed */
123 	unsigned int full_children;	/* KEYLENGTH bits needed */
124 	unsigned int empty_children;	/* KEYLENGTH bits needed */
125 	union {
126 		struct rcu_head rcu;
127 		struct tnode *tnode_free;
128 	};
129 	struct rt_trie_node __rcu *child[0];
130 };
131 
132 #ifdef CONFIG_IP_FIB_TRIE_STATS
133 struct trie_use_stats {
134 	unsigned int gets;
135 	unsigned int backtrack;
136 	unsigned int semantic_match_passed;
137 	unsigned int semantic_match_miss;
138 	unsigned int null_node_hit;
139 	unsigned int resize_node_skipped;
140 };
141 #endif
142 
143 struct trie_stat {
144 	unsigned int totdepth;
145 	unsigned int maxdepth;
146 	unsigned int tnodes;
147 	unsigned int leaves;
148 	unsigned int nullpointers;
149 	unsigned int prefixes;
150 	unsigned int nodesizes[MAX_STAT_DEPTH];
151 };
152 
153 struct trie {
154 	struct rt_trie_node __rcu *trie;
155 #ifdef CONFIG_IP_FIB_TRIE_STATS
156 	struct trie_use_stats stats;
157 #endif
158 };
159 
160 static void tnode_put_child_reorg(struct tnode *tn, int i, struct rt_trie_node *n,
161 				  int wasfull);
162 static struct rt_trie_node *resize(struct trie *t, struct tnode *tn);
163 static struct tnode *inflate(struct trie *t, struct tnode *tn);
164 static struct tnode *halve(struct trie *t, struct tnode *tn);
165 /* tnodes to free after resize(); protected by RTNL */
166 static struct tnode *tnode_free_head;
167 static size_t tnode_free_size;
168 
169 /*
170  * synchronize_rcu after call_rcu for that many pages; it should be especially
171  * useful before resizing the root node with PREEMPT_NONE configs; the value was
172  * obtained experimentally, aiming to avoid visible slowdown.
173  */
174 static const int sync_pages = 128;
175 
176 static struct kmem_cache *fn_alias_kmem __read_mostly;
177 static struct kmem_cache *trie_leaf_kmem __read_mostly;
178 
179 /*
180  * caller must hold RTNL
181  */
182 static inline struct tnode *node_parent(const struct rt_trie_node *node)
183 {
184 	unsigned long parent;
185 
186 	parent = rcu_dereference_index_check(node->parent, lockdep_rtnl_is_held());
187 
188 	return (struct tnode *)(parent & ~NODE_TYPE_MASK);
189 }
190 
191 /*
192  * caller must hold RCU read lock or RTNL
193  */
194 static inline struct tnode *node_parent_rcu(const struct rt_trie_node *node)
195 {
196 	unsigned long parent;
197 
198 	parent = rcu_dereference_index_check(node->parent, rcu_read_lock_held() ||
199 							   lockdep_rtnl_is_held());
200 
201 	return (struct tnode *)(parent & ~NODE_TYPE_MASK);
202 }
203 
204 /* Same as rcu_assign_pointer
205  * but that macro() assumes that value is a pointer.
206  */
207 static inline void node_set_parent(struct rt_trie_node *node, struct tnode *ptr)
208 {
209 	smp_wmb();
210 	node->parent = (unsigned long)ptr | NODE_TYPE(node);
211 }
212 
213 /*
214  * caller must hold RTNL
215  */
216 static inline struct rt_trie_node *tnode_get_child(const struct tnode *tn, unsigned int i)
217 {
218 	BUG_ON(i >= 1U << tn->bits);
219 
220 	return rtnl_dereference(tn->child[i]);
221 }
222 
223 /*
224  * caller must hold RCU read lock or RTNL
225  */
226 static inline struct rt_trie_node *tnode_get_child_rcu(const struct tnode *tn, unsigned int i)
227 {
228 	BUG_ON(i >= 1U << tn->bits);
229 
230 	return rcu_dereference_rtnl(tn->child[i]);
231 }
232 
233 static inline int tnode_child_length(const struct tnode *tn)
234 {
235 	return 1 << tn->bits;
236 }
237 
238 static inline t_key mask_pfx(t_key k, unsigned int l)
239 {
240 	return (l == 0) ? 0 : k >> (KEYLENGTH-l) << (KEYLENGTH-l);
241 }
242 
243 static inline t_key tkey_extract_bits(t_key a, unsigned int offset, unsigned int bits)
244 {
245 	if (offset < KEYLENGTH)
246 		return ((t_key)(a << offset)) >> (KEYLENGTH - bits);
247 	else
248 		return 0;
249 }
250 
251 static inline int tkey_equals(t_key a, t_key b)
252 {
253 	return a == b;
254 }
255 
256 static inline int tkey_sub_equals(t_key a, int offset, int bits, t_key b)
257 {
258 	if (bits == 0 || offset >= KEYLENGTH)
259 		return 1;
260 	bits = bits > KEYLENGTH ? KEYLENGTH : bits;
261 	return ((a ^ b) << offset) >> (KEYLENGTH - bits) == 0;
262 }
263 
264 static inline int tkey_mismatch(t_key a, int offset, t_key b)
265 {
266 	t_key diff = a ^ b;
267 	int i = offset;
268 
269 	if (!diff)
270 		return 0;
271 	while ((diff << i) >> (KEYLENGTH-1) == 0)
272 		i++;
273 	return i;
274 }
275 
276 /*
277   To understand this stuff, an understanding of keys and all their bits is
278   necessary. Every node in the trie has a key associated with it, but not
279   all of the bits in that key are significant.
280 
281   Consider a node 'n' and its parent 'tp'.
282 
283   If n is a leaf, every bit in its key is significant. Its presence is
284   necessitated by path compression, since during a tree traversal (when
285   searching for a leaf - unless we are doing an insertion) we will completely
286   ignore all skipped bits we encounter. Thus we need to verify, at the end of
287   a potentially successful search, that we have indeed been walking the
288   correct key path.
289 
290   Note that we can never "miss" the correct key in the tree if present by
291   following the wrong path. Path compression ensures that segments of the key
292   that are the same for all keys with a given prefix are skipped, but the
293   skipped part *is* identical for each node in the subtrie below the skipped
294   bit! trie_insert() in this implementation takes care of that - note the
295   call to tkey_sub_equals() in trie_insert().
296 
297   if n is an internal node - a 'tnode' here, the various parts of its key
298   have many different meanings.
299 
300   Example:
301   _________________________________________________________________
302   | i | i | i | i | i | i | i | N | N | N | S | S | S | S | S | C |
303   -----------------------------------------------------------------
304     0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
305 
306   _________________________________________________________________
307   | C | C | C | u | u | u | u | u | u | u | u | u | u | u | u | u |
308   -----------------------------------------------------------------
309    16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31
310 
311   tp->pos = 7
312   tp->bits = 3
313   n->pos = 15
314   n->bits = 4
315 
316   First, let's just ignore the bits that come before the parent tp, that is
317   the bits from 0 to (tp->pos-1). They are *known* but at this point we do
318   not use them for anything.
319 
320   The bits from (tp->pos) to (tp->pos + tp->bits - 1) - "N", above - are the
321   index into the parent's child array. That is, they will be used to find
322   'n' among tp's children.
323 
324   The bits from (tp->pos + tp->bits) to (n->pos - 1) - "S" - are skipped bits
325   for the node n.
326 
327   All the bits we have seen so far are significant to the node n. The rest
328   of the bits are really not needed or indeed known in n->key.
329 
330   The bits from (n->pos) to (n->pos + n->bits - 1) - "C" - are the index into
331   n's child array, and will of course be different for each child.
332 
333 
334   The rest of the bits, from (n->pos + n->bits) onward, are completely unknown
335   at this point.
336 
337 */
338 
339 static inline void check_tnode(const struct tnode *tn)
340 {
341 	WARN_ON(tn && tn->pos+tn->bits > 32);
342 }
343 
344 static const int halve_threshold = 25;
345 static const int inflate_threshold = 50;
346 static const int halve_threshold_root = 15;
347 static const int inflate_threshold_root = 30;
348 
349 static void __alias_free_mem(struct rcu_head *head)
350 {
351 	struct fib_alias *fa = container_of(head, struct fib_alias, rcu);
352 	kmem_cache_free(fn_alias_kmem, fa);
353 }
354 
355 static inline void alias_free_mem_rcu(struct fib_alias *fa)
356 {
357 	call_rcu(&fa->rcu, __alias_free_mem);
358 }
359 
360 static void __leaf_free_rcu(struct rcu_head *head)
361 {
362 	struct leaf *l = container_of(head, struct leaf, rcu);
363 	kmem_cache_free(trie_leaf_kmem, l);
364 }
365 
366 static inline void free_leaf(struct leaf *l)
367 {
368 	call_rcu(&l->rcu, __leaf_free_rcu);
369 }
370 
371 static inline void free_leaf_info(struct leaf_info *leaf)
372 {
373 	kfree_rcu(leaf, rcu);
374 }
375 
376 static struct tnode *tnode_alloc(size_t size)
377 {
378 	if (size <= PAGE_SIZE)
379 		return kzalloc(size, GFP_KERNEL);
380 	else
381 		return vzalloc(size);
382 }
383 
384 static void __tnode_free_rcu(struct rcu_head *head)
385 {
386 	struct tnode *tn = container_of(head, struct tnode, rcu);
387 	size_t size = sizeof(struct tnode) +
388 		      (sizeof(struct rt_trie_node *) << tn->bits);
389 
390 	if (size <= PAGE_SIZE)
391 		kfree(tn);
392 	else
393 		vfree(tn);
394 }
395 
396 static inline void tnode_free(struct tnode *tn)
397 {
398 	if (IS_LEAF(tn))
399 		free_leaf((struct leaf *) tn);
400 	else
401 		call_rcu(&tn->rcu, __tnode_free_rcu);
402 }
403 
404 static void tnode_free_safe(struct tnode *tn)
405 {
406 	BUG_ON(IS_LEAF(tn));
407 	tn->tnode_free = tnode_free_head;
408 	tnode_free_head = tn;
409 	tnode_free_size += sizeof(struct tnode) +
410 			   (sizeof(struct rt_trie_node *) << tn->bits);
411 }
412 
413 static void tnode_free_flush(void)
414 {
415 	struct tnode *tn;
416 
417 	while ((tn = tnode_free_head)) {
418 		tnode_free_head = tn->tnode_free;
419 		tn->tnode_free = NULL;
420 		tnode_free(tn);
421 	}
422 
423 	if (tnode_free_size >= PAGE_SIZE * sync_pages) {
424 		tnode_free_size = 0;
425 		synchronize_rcu();
426 	}
427 }
428 
429 static struct leaf *leaf_new(void)
430 {
431 	struct leaf *l = kmem_cache_alloc(trie_leaf_kmem, GFP_KERNEL);
432 	if (l) {
433 		l->parent = T_LEAF;
434 		INIT_HLIST_HEAD(&l->list);
435 	}
436 	return l;
437 }
438 
439 static struct leaf_info *leaf_info_new(int plen)
440 {
441 	struct leaf_info *li = kmalloc(sizeof(struct leaf_info),  GFP_KERNEL);
442 	if (li) {
443 		li->plen = plen;
444 		li->mask_plen = ntohl(inet_make_mask(plen));
445 		INIT_LIST_HEAD(&li->falh);
446 	}
447 	return li;
448 }
449 
450 static struct tnode *tnode_new(t_key key, int pos, int bits)
451 {
452 	size_t sz = sizeof(struct tnode) + (sizeof(struct rt_trie_node *) << bits);
453 	struct tnode *tn = tnode_alloc(sz);
454 
455 	if (tn) {
456 		tn->parent = T_TNODE;
457 		tn->pos = pos;
458 		tn->bits = bits;
459 		tn->key = key;
460 		tn->full_children = 0;
461 		tn->empty_children = 1<<bits;
462 	}
463 
464 	pr_debug("AT %p s=%zu %zu\n", tn, sizeof(struct tnode),
465 		 sizeof(struct rt_trie_node *) << bits);
466 	return tn;
467 }
468 
469 /*
470  * Check whether a tnode 'n' is "full", i.e. it is an internal node
471  * and no bits are skipped. See discussion in dyntree paper p. 6
472  */
473 
474 static inline int tnode_full(const struct tnode *tn, const struct rt_trie_node *n)
475 {
476 	if (n == NULL || IS_LEAF(n))
477 		return 0;
478 
479 	return ((struct tnode *) n)->pos == tn->pos + tn->bits;
480 }
481 
482 static inline void put_child(struct tnode *tn, int i,
483 			     struct rt_trie_node *n)
484 {
485 	tnode_put_child_reorg(tn, i, n, -1);
486 }
487 
488  /*
489   * Add a child at position i overwriting the old value.
490   * Update the value of full_children and empty_children.
491   */
492 
493 static void tnode_put_child_reorg(struct tnode *tn, int i, struct rt_trie_node *n,
494 				  int wasfull)
495 {
496 	struct rt_trie_node *chi = rtnl_dereference(tn->child[i]);
497 	int isfull;
498 
499 	BUG_ON(i >= 1<<tn->bits);
500 
501 	/* update emptyChildren */
502 	if (n == NULL && chi != NULL)
503 		tn->empty_children++;
504 	else if (n != NULL && chi == NULL)
505 		tn->empty_children--;
506 
507 	/* update fullChildren */
508 	if (wasfull == -1)
509 		wasfull = tnode_full(tn, chi);
510 
511 	isfull = tnode_full(tn, n);
512 	if (wasfull && !isfull)
513 		tn->full_children--;
514 	else if (!wasfull && isfull)
515 		tn->full_children++;
516 
517 	if (n)
518 		node_set_parent(n, tn);
519 
520 	rcu_assign_pointer(tn->child[i], n);
521 }
522 
523 #define MAX_WORK 10
524 static struct rt_trie_node *resize(struct trie *t, struct tnode *tn)
525 {
526 	int i;
527 	struct tnode *old_tn;
528 	int inflate_threshold_use;
529 	int halve_threshold_use;
530 	int max_work;
531 
532 	if (!tn)
533 		return NULL;
534 
535 	pr_debug("In tnode_resize %p inflate_threshold=%d threshold=%d\n",
536 		 tn, inflate_threshold, halve_threshold);
537 
538 	/* No children */
539 	if (tn->empty_children == tnode_child_length(tn)) {
540 		tnode_free_safe(tn);
541 		return NULL;
542 	}
543 	/* One child */
544 	if (tn->empty_children == tnode_child_length(tn) - 1)
545 		goto one_child;
546 	/*
547 	 * Double as long as the resulting node has a number of
548 	 * nonempty nodes that are above the threshold.
549 	 */
550 
551 	/*
552 	 * From "Implementing a dynamic compressed trie" by Stefan Nilsson of
553 	 * the Helsinki University of Technology and Matti Tikkanen of Nokia
554 	 * Telecommunications, page 6:
555 	 * "A node is doubled if the ratio of non-empty children to all
556 	 * children in the *doubled* node is at least 'high'."
557 	 *
558 	 * 'high' in this instance is the variable 'inflate_threshold'. It
559 	 * is expressed as a percentage, so we multiply it with
560 	 * tnode_child_length() and instead of multiplying by 2 (since the
561 	 * child array will be doubled by inflate()) and multiplying
562 	 * the left-hand side by 100 (to handle the percentage thing) we
563 	 * multiply the left-hand side by 50.
564 	 *
565 	 * The left-hand side may look a bit weird: tnode_child_length(tn)
566 	 * - tn->empty_children is of course the number of non-null children
567 	 * in the current node. tn->full_children is the number of "full"
568 	 * children, that is non-null tnodes with a skip value of 0.
569 	 * All of those will be doubled in the resulting inflated tnode, so
570 	 * we just count them one extra time here.
571 	 *
572 	 * A clearer way to write this would be:
573 	 *
574 	 * to_be_doubled = tn->full_children;
575 	 * not_to_be_doubled = tnode_child_length(tn) - tn->empty_children -
576 	 *     tn->full_children;
577 	 *
578 	 * new_child_length = tnode_child_length(tn) * 2;
579 	 *
580 	 * new_fill_factor = 100 * (not_to_be_doubled + 2*to_be_doubled) /
581 	 *      new_child_length;
582 	 * if (new_fill_factor >= inflate_threshold)
583 	 *
584 	 * ...and so on, tho it would mess up the while () loop.
585 	 *
586 	 * anyway,
587 	 * 100 * (not_to_be_doubled + 2*to_be_doubled) / new_child_length >=
588 	 *      inflate_threshold
589 	 *
590 	 * avoid a division:
591 	 * 100 * (not_to_be_doubled + 2*to_be_doubled) >=
592 	 *      inflate_threshold * new_child_length
593 	 *
594 	 * expand not_to_be_doubled and to_be_doubled, and shorten:
595 	 * 100 * (tnode_child_length(tn) - tn->empty_children +
596 	 *    tn->full_children) >= inflate_threshold * new_child_length
597 	 *
598 	 * expand new_child_length:
599 	 * 100 * (tnode_child_length(tn) - tn->empty_children +
600 	 *    tn->full_children) >=
601 	 *      inflate_threshold * tnode_child_length(tn) * 2
602 	 *
603 	 * shorten again:
604 	 * 50 * (tn->full_children + tnode_child_length(tn) -
605 	 *    tn->empty_children) >= inflate_threshold *
606 	 *    tnode_child_length(tn)
607 	 *
608 	 */
609 
610 	check_tnode(tn);
611 
612 	/* Keep root node larger  */
613 
614 	if (!node_parent((struct rt_trie_node *)tn)) {
615 		inflate_threshold_use = inflate_threshold_root;
616 		halve_threshold_use = halve_threshold_root;
617 	} else {
618 		inflate_threshold_use = inflate_threshold;
619 		halve_threshold_use = halve_threshold;
620 	}
621 
622 	max_work = MAX_WORK;
623 	while ((tn->full_children > 0 &&  max_work-- &&
624 		50 * (tn->full_children + tnode_child_length(tn)
625 		      - tn->empty_children)
626 		>= inflate_threshold_use * tnode_child_length(tn))) {
627 
628 		old_tn = tn;
629 		tn = inflate(t, tn);
630 
631 		if (IS_ERR(tn)) {
632 			tn = old_tn;
633 #ifdef CONFIG_IP_FIB_TRIE_STATS
634 			t->stats.resize_node_skipped++;
635 #endif
636 			break;
637 		}
638 	}
639 
640 	check_tnode(tn);
641 
642 	/* Return if at least one inflate is run */
643 	if (max_work != MAX_WORK)
644 		return (struct rt_trie_node *) tn;
645 
646 	/*
647 	 * Halve as long as the number of empty children in this
648 	 * node is above threshold.
649 	 */
650 
651 	max_work = MAX_WORK;
652 	while (tn->bits > 1 &&  max_work-- &&
653 	       100 * (tnode_child_length(tn) - tn->empty_children) <
654 	       halve_threshold_use * tnode_child_length(tn)) {
655 
656 		old_tn = tn;
657 		tn = halve(t, tn);
658 		if (IS_ERR(tn)) {
659 			tn = old_tn;
660 #ifdef CONFIG_IP_FIB_TRIE_STATS
661 			t->stats.resize_node_skipped++;
662 #endif
663 			break;
664 		}
665 	}
666 
667 
668 	/* Only one child remains */
669 	if (tn->empty_children == tnode_child_length(tn) - 1) {
670 one_child:
671 		for (i = 0; i < tnode_child_length(tn); i++) {
672 			struct rt_trie_node *n;
673 
674 			n = rtnl_dereference(tn->child[i]);
675 			if (!n)
676 				continue;
677 
678 			/* compress one level */
679 
680 			node_set_parent(n, NULL);
681 			tnode_free_safe(tn);
682 			return n;
683 		}
684 	}
685 	return (struct rt_trie_node *) tn;
686 }
687 
688 
689 static void tnode_clean_free(struct tnode *tn)
690 {
691 	int i;
692 	struct tnode *tofree;
693 
694 	for (i = 0; i < tnode_child_length(tn); i++) {
695 		tofree = (struct tnode *)rtnl_dereference(tn->child[i]);
696 		if (tofree)
697 			tnode_free(tofree);
698 	}
699 	tnode_free(tn);
700 }
701 
702 static struct tnode *inflate(struct trie *t, struct tnode *tn)
703 {
704 	struct tnode *oldtnode = tn;
705 	int olen = tnode_child_length(tn);
706 	int i;
707 
708 	pr_debug("In inflate\n");
709 
710 	tn = tnode_new(oldtnode->key, oldtnode->pos, oldtnode->bits + 1);
711 
712 	if (!tn)
713 		return ERR_PTR(-ENOMEM);
714 
715 	/*
716 	 * Preallocate and store tnodes before the actual work so we
717 	 * don't get into an inconsistent state if memory allocation
718 	 * fails. In case of failure we return the oldnode and  inflate
719 	 * of tnode is ignored.
720 	 */
721 
722 	for (i = 0; i < olen; i++) {
723 		struct tnode *inode;
724 
725 		inode = (struct tnode *) tnode_get_child(oldtnode, i);
726 		if (inode &&
727 		    IS_TNODE(inode) &&
728 		    inode->pos == oldtnode->pos + oldtnode->bits &&
729 		    inode->bits > 1) {
730 			struct tnode *left, *right;
731 			t_key m = ~0U << (KEYLENGTH - 1) >> inode->pos;
732 
733 			left = tnode_new(inode->key&(~m), inode->pos + 1,
734 					 inode->bits - 1);
735 			if (!left)
736 				goto nomem;
737 
738 			right = tnode_new(inode->key|m, inode->pos + 1,
739 					  inode->bits - 1);
740 
741 			if (!right) {
742 				tnode_free(left);
743 				goto nomem;
744 			}
745 
746 			put_child(tn, 2*i, (struct rt_trie_node *) left);
747 			put_child(tn, 2*i+1, (struct rt_trie_node *) right);
748 		}
749 	}
750 
751 	for (i = 0; i < olen; i++) {
752 		struct tnode *inode;
753 		struct rt_trie_node *node = tnode_get_child(oldtnode, i);
754 		struct tnode *left, *right;
755 		int size, j;
756 
757 		/* An empty child */
758 		if (node == NULL)
759 			continue;
760 
761 		/* A leaf or an internal node with skipped bits */
762 
763 		if (IS_LEAF(node) || ((struct tnode *) node)->pos >
764 		   tn->pos + tn->bits - 1) {
765 			put_child(tn,
766 				tkey_extract_bits(node->key, oldtnode->pos, oldtnode->bits + 1),
767 				node);
768 			continue;
769 		}
770 
771 		/* An internal node with two children */
772 		inode = (struct tnode *) node;
773 
774 		if (inode->bits == 1) {
775 			put_child(tn, 2*i, rtnl_dereference(inode->child[0]));
776 			put_child(tn, 2*i+1, rtnl_dereference(inode->child[1]));
777 
778 			tnode_free_safe(inode);
779 			continue;
780 		}
781 
782 		/* An internal node with more than two children */
783 
784 		/* We will replace this node 'inode' with two new
785 		 * ones, 'left' and 'right', each with half of the
786 		 * original children. The two new nodes will have
787 		 * a position one bit further down the key and this
788 		 * means that the "significant" part of their keys
789 		 * (see the discussion near the top of this file)
790 		 * will differ by one bit, which will be "0" in
791 		 * left's key and "1" in right's key. Since we are
792 		 * moving the key position by one step, the bit that
793 		 * we are moving away from - the bit at position
794 		 * (inode->pos) - is the one that will differ between
795 		 * left and right. So... we synthesize that bit in the
796 		 * two  new keys.
797 		 * The mask 'm' below will be a single "one" bit at
798 		 * the position (inode->pos)
799 		 */
800 
801 		/* Use the old key, but set the new significant
802 		 *   bit to zero.
803 		 */
804 
805 		left = (struct tnode *) tnode_get_child(tn, 2*i);
806 		put_child(tn, 2*i, NULL);
807 
808 		BUG_ON(!left);
809 
810 		right = (struct tnode *) tnode_get_child(tn, 2*i+1);
811 		put_child(tn, 2*i+1, NULL);
812 
813 		BUG_ON(!right);
814 
815 		size = tnode_child_length(left);
816 		for (j = 0; j < size; j++) {
817 			put_child(left, j, rtnl_dereference(inode->child[j]));
818 			put_child(right, j, rtnl_dereference(inode->child[j + size]));
819 		}
820 		put_child(tn, 2*i, resize(t, left));
821 		put_child(tn, 2*i+1, resize(t, right));
822 
823 		tnode_free_safe(inode);
824 	}
825 	tnode_free_safe(oldtnode);
826 	return tn;
827 nomem:
828 	tnode_clean_free(tn);
829 	return ERR_PTR(-ENOMEM);
830 }
831 
832 static struct tnode *halve(struct trie *t, struct tnode *tn)
833 {
834 	struct tnode *oldtnode = tn;
835 	struct rt_trie_node *left, *right;
836 	int i;
837 	int olen = tnode_child_length(tn);
838 
839 	pr_debug("In halve\n");
840 
841 	tn = tnode_new(oldtnode->key, oldtnode->pos, oldtnode->bits - 1);
842 
843 	if (!tn)
844 		return ERR_PTR(-ENOMEM);
845 
846 	/*
847 	 * Preallocate and store tnodes before the actual work so we
848 	 * don't get into an inconsistent state if memory allocation
849 	 * fails. In case of failure we return the oldnode and halve
850 	 * of tnode is ignored.
851 	 */
852 
853 	for (i = 0; i < olen; i += 2) {
854 		left = tnode_get_child(oldtnode, i);
855 		right = tnode_get_child(oldtnode, i+1);
856 
857 		/* Two nonempty children */
858 		if (left && right) {
859 			struct tnode *newn;
860 
861 			newn = tnode_new(left->key, tn->pos + tn->bits, 1);
862 
863 			if (!newn)
864 				goto nomem;
865 
866 			put_child(tn, i/2, (struct rt_trie_node *)newn);
867 		}
868 
869 	}
870 
871 	for (i = 0; i < olen; i += 2) {
872 		struct tnode *newBinNode;
873 
874 		left = tnode_get_child(oldtnode, i);
875 		right = tnode_get_child(oldtnode, i+1);
876 
877 		/* At least one of the children is empty */
878 		if (left == NULL) {
879 			if (right == NULL)    /* Both are empty */
880 				continue;
881 			put_child(tn, i/2, right);
882 			continue;
883 		}
884 
885 		if (right == NULL) {
886 			put_child(tn, i/2, left);
887 			continue;
888 		}
889 
890 		/* Two nonempty children */
891 		newBinNode = (struct tnode *) tnode_get_child(tn, i/2);
892 		put_child(tn, i/2, NULL);
893 		put_child(newBinNode, 0, left);
894 		put_child(newBinNode, 1, right);
895 		put_child(tn, i/2, resize(t, newBinNode));
896 	}
897 	tnode_free_safe(oldtnode);
898 	return tn;
899 nomem:
900 	tnode_clean_free(tn);
901 	return ERR_PTR(-ENOMEM);
902 }
903 
904 /* readside must use rcu_read_lock currently dump routines
905  via get_fa_head and dump */
906 
907 static struct leaf_info *find_leaf_info(struct leaf *l, int plen)
908 {
909 	struct hlist_head *head = &l->list;
910 	struct leaf_info *li;
911 
912 	hlist_for_each_entry_rcu(li, head, hlist)
913 		if (li->plen == plen)
914 			return li;
915 
916 	return NULL;
917 }
918 
919 static inline struct list_head *get_fa_head(struct leaf *l, int plen)
920 {
921 	struct leaf_info *li = find_leaf_info(l, plen);
922 
923 	if (!li)
924 		return NULL;
925 
926 	return &li->falh;
927 }
928 
929 static void insert_leaf_info(struct hlist_head *head, struct leaf_info *new)
930 {
931 	struct leaf_info *li = NULL, *last = NULL;
932 
933 	if (hlist_empty(head)) {
934 		hlist_add_head_rcu(&new->hlist, head);
935 	} else {
936 		hlist_for_each_entry(li, head, hlist) {
937 			if (new->plen > li->plen)
938 				break;
939 
940 			last = li;
941 		}
942 		if (last)
943 			hlist_add_after_rcu(&last->hlist, &new->hlist);
944 		else
945 			hlist_add_before_rcu(&new->hlist, &li->hlist);
946 	}
947 }
948 
949 /* rcu_read_lock needs to be hold by caller from readside */
950 
951 static struct leaf *
952 fib_find_node(struct trie *t, u32 key)
953 {
954 	int pos;
955 	struct tnode *tn;
956 	struct rt_trie_node *n;
957 
958 	pos = 0;
959 	n = rcu_dereference_rtnl(t->trie);
960 
961 	while (n != NULL &&  NODE_TYPE(n) == T_TNODE) {
962 		tn = (struct tnode *) n;
963 
964 		check_tnode(tn);
965 
966 		if (tkey_sub_equals(tn->key, pos, tn->pos-pos, key)) {
967 			pos = tn->pos + tn->bits;
968 			n = tnode_get_child_rcu(tn,
969 						tkey_extract_bits(key,
970 								  tn->pos,
971 								  tn->bits));
972 		} else
973 			break;
974 	}
975 	/* Case we have found a leaf. Compare prefixes */
976 
977 	if (n != NULL && IS_LEAF(n) && tkey_equals(key, n->key))
978 		return (struct leaf *)n;
979 
980 	return NULL;
981 }
982 
983 static void trie_rebalance(struct trie *t, struct tnode *tn)
984 {
985 	int wasfull;
986 	t_key cindex, key;
987 	struct tnode *tp;
988 
989 	key = tn->key;
990 
991 	while (tn != NULL && (tp = node_parent((struct rt_trie_node *)tn)) != NULL) {
992 		cindex = tkey_extract_bits(key, tp->pos, tp->bits);
993 		wasfull = tnode_full(tp, tnode_get_child(tp, cindex));
994 		tn = (struct tnode *)resize(t, tn);
995 
996 		tnode_put_child_reorg(tp, cindex,
997 				      (struct rt_trie_node *)tn, wasfull);
998 
999 		tp = node_parent((struct rt_trie_node *) tn);
1000 		if (!tp)
1001 			rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
1002 
1003 		tnode_free_flush();
1004 		if (!tp)
1005 			break;
1006 		tn = tp;
1007 	}
1008 
1009 	/* Handle last (top) tnode */
1010 	if (IS_TNODE(tn))
1011 		tn = (struct tnode *)resize(t, tn);
1012 
1013 	rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
1014 	tnode_free_flush();
1015 }
1016 
1017 /* only used from updater-side */
1018 
1019 static struct list_head *fib_insert_node(struct trie *t, u32 key, int plen)
1020 {
1021 	int pos, newpos;
1022 	struct tnode *tp = NULL, *tn = NULL;
1023 	struct rt_trie_node *n;
1024 	struct leaf *l;
1025 	int missbit;
1026 	struct list_head *fa_head = NULL;
1027 	struct leaf_info *li;
1028 	t_key cindex;
1029 
1030 	pos = 0;
1031 	n = rtnl_dereference(t->trie);
1032 
1033 	/* If we point to NULL, stop. Either the tree is empty and we should
1034 	 * just put a new leaf in if, or we have reached an empty child slot,
1035 	 * and we should just put our new leaf in that.
1036 	 * If we point to a T_TNODE, check if it matches our key. Note that
1037 	 * a T_TNODE might be skipping any number of bits - its 'pos' need
1038 	 * not be the parent's 'pos'+'bits'!
1039 	 *
1040 	 * If it does match the current key, get pos/bits from it, extract
1041 	 * the index from our key, push the T_TNODE and walk the tree.
1042 	 *
1043 	 * If it doesn't, we have to replace it with a new T_TNODE.
1044 	 *
1045 	 * If we point to a T_LEAF, it might or might not have the same key
1046 	 * as we do. If it does, just change the value, update the T_LEAF's
1047 	 * value, and return it.
1048 	 * If it doesn't, we need to replace it with a T_TNODE.
1049 	 */
1050 
1051 	while (n != NULL &&  NODE_TYPE(n) == T_TNODE) {
1052 		tn = (struct tnode *) n;
1053 
1054 		check_tnode(tn);
1055 
1056 		if (tkey_sub_equals(tn->key, pos, tn->pos-pos, key)) {
1057 			tp = tn;
1058 			pos = tn->pos + tn->bits;
1059 			n = tnode_get_child(tn,
1060 					    tkey_extract_bits(key,
1061 							      tn->pos,
1062 							      tn->bits));
1063 
1064 			BUG_ON(n && node_parent(n) != tn);
1065 		} else
1066 			break;
1067 	}
1068 
1069 	/*
1070 	 * n  ----> NULL, LEAF or TNODE
1071 	 *
1072 	 * tp is n's (parent) ----> NULL or TNODE
1073 	 */
1074 
1075 	BUG_ON(tp && IS_LEAF(tp));
1076 
1077 	/* Case 1: n is a leaf. Compare prefixes */
1078 
1079 	if (n != NULL && IS_LEAF(n) && tkey_equals(key, n->key)) {
1080 		l = (struct leaf *) n;
1081 		li = leaf_info_new(plen);
1082 
1083 		if (!li)
1084 			return NULL;
1085 
1086 		fa_head = &li->falh;
1087 		insert_leaf_info(&l->list, li);
1088 		goto done;
1089 	}
1090 	l = leaf_new();
1091 
1092 	if (!l)
1093 		return NULL;
1094 
1095 	l->key = key;
1096 	li = leaf_info_new(plen);
1097 
1098 	if (!li) {
1099 		free_leaf(l);
1100 		return NULL;
1101 	}
1102 
1103 	fa_head = &li->falh;
1104 	insert_leaf_info(&l->list, li);
1105 
1106 	if (t->trie && n == NULL) {
1107 		/* Case 2: n is NULL, and will just insert a new leaf */
1108 
1109 		node_set_parent((struct rt_trie_node *)l, tp);
1110 
1111 		cindex = tkey_extract_bits(key, tp->pos, tp->bits);
1112 		put_child(tp, cindex, (struct rt_trie_node *)l);
1113 	} else {
1114 		/* Case 3: n is a LEAF or a TNODE and the key doesn't match. */
1115 		/*
1116 		 *  Add a new tnode here
1117 		 *  first tnode need some special handling
1118 		 */
1119 
1120 		if (tp)
1121 			pos = tp->pos+tp->bits;
1122 		else
1123 			pos = 0;
1124 
1125 		if (n) {
1126 			newpos = tkey_mismatch(key, pos, n->key);
1127 			tn = tnode_new(n->key, newpos, 1);
1128 		} else {
1129 			newpos = 0;
1130 			tn = tnode_new(key, newpos, 1); /* First tnode */
1131 		}
1132 
1133 		if (!tn) {
1134 			free_leaf_info(li);
1135 			free_leaf(l);
1136 			return NULL;
1137 		}
1138 
1139 		node_set_parent((struct rt_trie_node *)tn, tp);
1140 
1141 		missbit = tkey_extract_bits(key, newpos, 1);
1142 		put_child(tn, missbit, (struct rt_trie_node *)l);
1143 		put_child(tn, 1-missbit, n);
1144 
1145 		if (tp) {
1146 			cindex = tkey_extract_bits(key, tp->pos, tp->bits);
1147 			put_child(tp, cindex, (struct rt_trie_node *)tn);
1148 		} else {
1149 			rcu_assign_pointer(t->trie, (struct rt_trie_node *)tn);
1150 			tp = tn;
1151 		}
1152 	}
1153 
1154 	if (tp && tp->pos + tp->bits > 32)
1155 		pr_warn("fib_trie tp=%p pos=%d, bits=%d, key=%0x plen=%d\n",
1156 			tp, tp->pos, tp->bits, key, plen);
1157 
1158 	/* Rebalance the trie */
1159 
1160 	trie_rebalance(t, tp);
1161 done:
1162 	return fa_head;
1163 }
1164 
1165 /*
1166  * Caller must hold RTNL.
1167  */
1168 int fib_table_insert(struct fib_table *tb, struct fib_config *cfg)
1169 {
1170 	struct trie *t = (struct trie *) tb->tb_data;
1171 	struct fib_alias *fa, *new_fa;
1172 	struct list_head *fa_head = NULL;
1173 	struct fib_info *fi;
1174 	int plen = cfg->fc_dst_len;
1175 	u8 tos = cfg->fc_tos;
1176 	u32 key, mask;
1177 	int err;
1178 	struct leaf *l;
1179 
1180 	if (plen > 32)
1181 		return -EINVAL;
1182 
1183 	key = ntohl(cfg->fc_dst);
1184 
1185 	pr_debug("Insert table=%u %08x/%d\n", tb->tb_id, key, plen);
1186 
1187 	mask = ntohl(inet_make_mask(plen));
1188 
1189 	if (key & ~mask)
1190 		return -EINVAL;
1191 
1192 	key = key & mask;
1193 
1194 	fi = fib_create_info(cfg);
1195 	if (IS_ERR(fi)) {
1196 		err = PTR_ERR(fi);
1197 		goto err;
1198 	}
1199 
1200 	l = fib_find_node(t, key);
1201 	fa = NULL;
1202 
1203 	if (l) {
1204 		fa_head = get_fa_head(l, plen);
1205 		fa = fib_find_alias(fa_head, tos, fi->fib_priority);
1206 	}
1207 
1208 	/* Now fa, if non-NULL, points to the first fib alias
1209 	 * with the same keys [prefix,tos,priority], if such key already
1210 	 * exists or to the node before which we will insert new one.
1211 	 *
1212 	 * If fa is NULL, we will need to allocate a new one and
1213 	 * insert to the head of f.
1214 	 *
1215 	 * If f is NULL, no fib node matched the destination key
1216 	 * and we need to allocate a new one of those as well.
1217 	 */
1218 
1219 	if (fa && fa->fa_tos == tos &&
1220 	    fa->fa_info->fib_priority == fi->fib_priority) {
1221 		struct fib_alias *fa_first, *fa_match;
1222 
1223 		err = -EEXIST;
1224 		if (cfg->fc_nlflags & NLM_F_EXCL)
1225 			goto out;
1226 
1227 		/* We have 2 goals:
1228 		 * 1. Find exact match for type, scope, fib_info to avoid
1229 		 * duplicate routes
1230 		 * 2. Find next 'fa' (or head), NLM_F_APPEND inserts before it
1231 		 */
1232 		fa_match = NULL;
1233 		fa_first = fa;
1234 		fa = list_entry(fa->fa_list.prev, struct fib_alias, fa_list);
1235 		list_for_each_entry_continue(fa, fa_head, fa_list) {
1236 			if (fa->fa_tos != tos)
1237 				break;
1238 			if (fa->fa_info->fib_priority != fi->fib_priority)
1239 				break;
1240 			if (fa->fa_type == cfg->fc_type &&
1241 			    fa->fa_info == fi) {
1242 				fa_match = fa;
1243 				break;
1244 			}
1245 		}
1246 
1247 		if (cfg->fc_nlflags & NLM_F_REPLACE) {
1248 			struct fib_info *fi_drop;
1249 			u8 state;
1250 
1251 			fa = fa_first;
1252 			if (fa_match) {
1253 				if (fa == fa_match)
1254 					err = 0;
1255 				goto out;
1256 			}
1257 			err = -ENOBUFS;
1258 			new_fa = kmem_cache_alloc(fn_alias_kmem, GFP_KERNEL);
1259 			if (new_fa == NULL)
1260 				goto out;
1261 
1262 			fi_drop = fa->fa_info;
1263 			new_fa->fa_tos = fa->fa_tos;
1264 			new_fa->fa_info = fi;
1265 			new_fa->fa_type = cfg->fc_type;
1266 			state = fa->fa_state;
1267 			new_fa->fa_state = state & ~FA_S_ACCESSED;
1268 
1269 			list_replace_rcu(&fa->fa_list, &new_fa->fa_list);
1270 			alias_free_mem_rcu(fa);
1271 
1272 			fib_release_info(fi_drop);
1273 			if (state & FA_S_ACCESSED)
1274 				rt_cache_flush(cfg->fc_nlinfo.nl_net);
1275 			rtmsg_fib(RTM_NEWROUTE, htonl(key), new_fa, plen,
1276 				tb->tb_id, &cfg->fc_nlinfo, NLM_F_REPLACE);
1277 
1278 			goto succeeded;
1279 		}
1280 		/* Error if we find a perfect match which
1281 		 * uses the same scope, type, and nexthop
1282 		 * information.
1283 		 */
1284 		if (fa_match)
1285 			goto out;
1286 
1287 		if (!(cfg->fc_nlflags & NLM_F_APPEND))
1288 			fa = fa_first;
1289 	}
1290 	err = -ENOENT;
1291 	if (!(cfg->fc_nlflags & NLM_F_CREATE))
1292 		goto out;
1293 
1294 	err = -ENOBUFS;
1295 	new_fa = kmem_cache_alloc(fn_alias_kmem, GFP_KERNEL);
1296 	if (new_fa == NULL)
1297 		goto out;
1298 
1299 	new_fa->fa_info = fi;
1300 	new_fa->fa_tos = tos;
1301 	new_fa->fa_type = cfg->fc_type;
1302 	new_fa->fa_state = 0;
1303 	/*
1304 	 * Insert new entry to the list.
1305 	 */
1306 
1307 	if (!fa_head) {
1308 		fa_head = fib_insert_node(t, key, plen);
1309 		if (unlikely(!fa_head)) {
1310 			err = -ENOMEM;
1311 			goto out_free_new_fa;
1312 		}
1313 	}
1314 
1315 	if (!plen)
1316 		tb->tb_num_default++;
1317 
1318 	list_add_tail_rcu(&new_fa->fa_list,
1319 			  (fa ? &fa->fa_list : fa_head));
1320 
1321 	rt_cache_flush(cfg->fc_nlinfo.nl_net);
1322 	rtmsg_fib(RTM_NEWROUTE, htonl(key), new_fa, plen, tb->tb_id,
1323 		  &cfg->fc_nlinfo, 0);
1324 succeeded:
1325 	return 0;
1326 
1327 out_free_new_fa:
1328 	kmem_cache_free(fn_alias_kmem, new_fa);
1329 out:
1330 	fib_release_info(fi);
1331 err:
1332 	return err;
1333 }
1334 
1335 /* should be called with rcu_read_lock */
1336 static int check_leaf(struct fib_table *tb, struct trie *t, struct leaf *l,
1337 		      t_key key,  const struct flowi4 *flp,
1338 		      struct fib_result *res, int fib_flags)
1339 {
1340 	struct leaf_info *li;
1341 	struct hlist_head *hhead = &l->list;
1342 
1343 	hlist_for_each_entry_rcu(li, hhead, hlist) {
1344 		struct fib_alias *fa;
1345 
1346 		if (l->key != (key & li->mask_plen))
1347 			continue;
1348 
1349 		list_for_each_entry_rcu(fa, &li->falh, fa_list) {
1350 			struct fib_info *fi = fa->fa_info;
1351 			int nhsel, err;
1352 
1353 			if (fa->fa_tos && fa->fa_tos != flp->flowi4_tos)
1354 				continue;
1355 			if (fi->fib_dead)
1356 				continue;
1357 			if (fa->fa_info->fib_scope < flp->flowi4_scope)
1358 				continue;
1359 			fib_alias_accessed(fa);
1360 			err = fib_props[fa->fa_type].error;
1361 			if (err) {
1362 #ifdef CONFIG_IP_FIB_TRIE_STATS
1363 				t->stats.semantic_match_passed++;
1364 #endif
1365 				return err;
1366 			}
1367 			if (fi->fib_flags & RTNH_F_DEAD)
1368 				continue;
1369 			for (nhsel = 0; nhsel < fi->fib_nhs; nhsel++) {
1370 				const struct fib_nh *nh = &fi->fib_nh[nhsel];
1371 
1372 				if (nh->nh_flags & RTNH_F_DEAD)
1373 					continue;
1374 				if (flp->flowi4_oif && flp->flowi4_oif != nh->nh_oif)
1375 					continue;
1376 
1377 #ifdef CONFIG_IP_FIB_TRIE_STATS
1378 				t->stats.semantic_match_passed++;
1379 #endif
1380 				res->prefixlen = li->plen;
1381 				res->nh_sel = nhsel;
1382 				res->type = fa->fa_type;
1383 				res->scope = fa->fa_info->fib_scope;
1384 				res->fi = fi;
1385 				res->table = tb;
1386 				res->fa_head = &li->falh;
1387 				if (!(fib_flags & FIB_LOOKUP_NOREF))
1388 					atomic_inc(&fi->fib_clntref);
1389 				return 0;
1390 			}
1391 		}
1392 
1393 #ifdef CONFIG_IP_FIB_TRIE_STATS
1394 		t->stats.semantic_match_miss++;
1395 #endif
1396 	}
1397 
1398 	return 1;
1399 }
1400 
1401 int fib_table_lookup(struct fib_table *tb, const struct flowi4 *flp,
1402 		     struct fib_result *res, int fib_flags)
1403 {
1404 	struct trie *t = (struct trie *) tb->tb_data;
1405 	int ret;
1406 	struct rt_trie_node *n;
1407 	struct tnode *pn;
1408 	unsigned int pos, bits;
1409 	t_key key = ntohl(flp->daddr);
1410 	unsigned int chopped_off;
1411 	t_key cindex = 0;
1412 	unsigned int current_prefix_length = KEYLENGTH;
1413 	struct tnode *cn;
1414 	t_key pref_mismatch;
1415 
1416 	rcu_read_lock();
1417 
1418 	n = rcu_dereference(t->trie);
1419 	if (!n)
1420 		goto failed;
1421 
1422 #ifdef CONFIG_IP_FIB_TRIE_STATS
1423 	t->stats.gets++;
1424 #endif
1425 
1426 	/* Just a leaf? */
1427 	if (IS_LEAF(n)) {
1428 		ret = check_leaf(tb, t, (struct leaf *)n, key, flp, res, fib_flags);
1429 		goto found;
1430 	}
1431 
1432 	pn = (struct tnode *) n;
1433 	chopped_off = 0;
1434 
1435 	while (pn) {
1436 		pos = pn->pos;
1437 		bits = pn->bits;
1438 
1439 		if (!chopped_off)
1440 			cindex = tkey_extract_bits(mask_pfx(key, current_prefix_length),
1441 						   pos, bits);
1442 
1443 		n = tnode_get_child_rcu(pn, cindex);
1444 
1445 		if (n == NULL) {
1446 #ifdef CONFIG_IP_FIB_TRIE_STATS
1447 			t->stats.null_node_hit++;
1448 #endif
1449 			goto backtrace;
1450 		}
1451 
1452 		if (IS_LEAF(n)) {
1453 			ret = check_leaf(tb, t, (struct leaf *)n, key, flp, res, fib_flags);
1454 			if (ret > 0)
1455 				goto backtrace;
1456 			goto found;
1457 		}
1458 
1459 		cn = (struct tnode *)n;
1460 
1461 		/*
1462 		 * It's a tnode, and we can do some extra checks here if we
1463 		 * like, to avoid descending into a dead-end branch.
1464 		 * This tnode is in the parent's child array at index
1465 		 * key[p_pos..p_pos+p_bits] but potentially with some bits
1466 		 * chopped off, so in reality the index may be just a
1467 		 * subprefix, padded with zero at the end.
1468 		 * We can also take a look at any skipped bits in this
1469 		 * tnode - everything up to p_pos is supposed to be ok,
1470 		 * and the non-chopped bits of the index (se previous
1471 		 * paragraph) are also guaranteed ok, but the rest is
1472 		 * considered unknown.
1473 		 *
1474 		 * The skipped bits are key[pos+bits..cn->pos].
1475 		 */
1476 
1477 		/* If current_prefix_length < pos+bits, we are already doing
1478 		 * actual prefix  matching, which means everything from
1479 		 * pos+(bits-chopped_off) onward must be zero along some
1480 		 * branch of this subtree - otherwise there is *no* valid
1481 		 * prefix present. Here we can only check the skipped
1482 		 * bits. Remember, since we have already indexed into the
1483 		 * parent's child array, we know that the bits we chopped of
1484 		 * *are* zero.
1485 		 */
1486 
1487 		/* NOTA BENE: Checking only skipped bits
1488 		   for the new node here */
1489 
1490 		if (current_prefix_length < pos+bits) {
1491 			if (tkey_extract_bits(cn->key, current_prefix_length,
1492 						cn->pos - current_prefix_length)
1493 			    || !(cn->child[0]))
1494 				goto backtrace;
1495 		}
1496 
1497 		/*
1498 		 * If chopped_off=0, the index is fully validated and we
1499 		 * only need to look at the skipped bits for this, the new,
1500 		 * tnode. What we actually want to do is to find out if
1501 		 * these skipped bits match our key perfectly, or if we will
1502 		 * have to count on finding a matching prefix further down,
1503 		 * because if we do, we would like to have some way of
1504 		 * verifying the existence of such a prefix at this point.
1505 		 */
1506 
1507 		/* The only thing we can do at this point is to verify that
1508 		 * any such matching prefix can indeed be a prefix to our
1509 		 * key, and if the bits in the node we are inspecting that
1510 		 * do not match our key are not ZERO, this cannot be true.
1511 		 * Thus, find out where there is a mismatch (before cn->pos)
1512 		 * and verify that all the mismatching bits are zero in the
1513 		 * new tnode's key.
1514 		 */
1515 
1516 		/*
1517 		 * Note: We aren't very concerned about the piece of
1518 		 * the key that precede pn->pos+pn->bits, since these
1519 		 * have already been checked. The bits after cn->pos
1520 		 * aren't checked since these are by definition
1521 		 * "unknown" at this point. Thus, what we want to see
1522 		 * is if we are about to enter the "prefix matching"
1523 		 * state, and in that case verify that the skipped
1524 		 * bits that will prevail throughout this subtree are
1525 		 * zero, as they have to be if we are to find a
1526 		 * matching prefix.
1527 		 */
1528 
1529 		pref_mismatch = mask_pfx(cn->key ^ key, cn->pos);
1530 
1531 		/*
1532 		 * In short: If skipped bits in this node do not match
1533 		 * the search key, enter the "prefix matching"
1534 		 * state.directly.
1535 		 */
1536 		if (pref_mismatch) {
1537 			/* fls(x) = __fls(x) + 1 */
1538 			int mp = KEYLENGTH - __fls(pref_mismatch) - 1;
1539 
1540 			if (tkey_extract_bits(cn->key, mp, cn->pos - mp) != 0)
1541 				goto backtrace;
1542 
1543 			if (current_prefix_length >= cn->pos)
1544 				current_prefix_length = mp;
1545 		}
1546 
1547 		pn = (struct tnode *)n; /* Descend */
1548 		chopped_off = 0;
1549 		continue;
1550 
1551 backtrace:
1552 		chopped_off++;
1553 
1554 		/* As zero don't change the child key (cindex) */
1555 		while ((chopped_off <= pn->bits)
1556 		       && !(cindex & (1<<(chopped_off-1))))
1557 			chopped_off++;
1558 
1559 		/* Decrease current_... with bits chopped off */
1560 		if (current_prefix_length > pn->pos + pn->bits - chopped_off)
1561 			current_prefix_length = pn->pos + pn->bits
1562 				- chopped_off;
1563 
1564 		/*
1565 		 * Either we do the actual chop off according or if we have
1566 		 * chopped off all bits in this tnode walk up to our parent.
1567 		 */
1568 
1569 		if (chopped_off <= pn->bits) {
1570 			cindex &= ~(1 << (chopped_off-1));
1571 		} else {
1572 			struct tnode *parent = node_parent_rcu((struct rt_trie_node *) pn);
1573 			if (!parent)
1574 				goto failed;
1575 
1576 			/* Get Child's index */
1577 			cindex = tkey_extract_bits(pn->key, parent->pos, parent->bits);
1578 			pn = parent;
1579 			chopped_off = 0;
1580 
1581 #ifdef CONFIG_IP_FIB_TRIE_STATS
1582 			t->stats.backtrack++;
1583 #endif
1584 			goto backtrace;
1585 		}
1586 	}
1587 failed:
1588 	ret = 1;
1589 found:
1590 	rcu_read_unlock();
1591 	return ret;
1592 }
1593 EXPORT_SYMBOL_GPL(fib_table_lookup);
1594 
1595 /*
1596  * Remove the leaf and return parent.
1597  */
1598 static void trie_leaf_remove(struct trie *t, struct leaf *l)
1599 {
1600 	struct tnode *tp = node_parent((struct rt_trie_node *) l);
1601 
1602 	pr_debug("entering trie_leaf_remove(%p)\n", l);
1603 
1604 	if (tp) {
1605 		t_key cindex = tkey_extract_bits(l->key, tp->pos, tp->bits);
1606 		put_child(tp, cindex, NULL);
1607 		trie_rebalance(t, tp);
1608 	} else
1609 		RCU_INIT_POINTER(t->trie, NULL);
1610 
1611 	free_leaf(l);
1612 }
1613 
1614 /*
1615  * Caller must hold RTNL.
1616  */
1617 int fib_table_delete(struct fib_table *tb, struct fib_config *cfg)
1618 {
1619 	struct trie *t = (struct trie *) tb->tb_data;
1620 	u32 key, mask;
1621 	int plen = cfg->fc_dst_len;
1622 	u8 tos = cfg->fc_tos;
1623 	struct fib_alias *fa, *fa_to_delete;
1624 	struct list_head *fa_head;
1625 	struct leaf *l;
1626 	struct leaf_info *li;
1627 
1628 	if (plen > 32)
1629 		return -EINVAL;
1630 
1631 	key = ntohl(cfg->fc_dst);
1632 	mask = ntohl(inet_make_mask(plen));
1633 
1634 	if (key & ~mask)
1635 		return -EINVAL;
1636 
1637 	key = key & mask;
1638 	l = fib_find_node(t, key);
1639 
1640 	if (!l)
1641 		return -ESRCH;
1642 
1643 	li = find_leaf_info(l, plen);
1644 
1645 	if (!li)
1646 		return -ESRCH;
1647 
1648 	fa_head = &li->falh;
1649 	fa = fib_find_alias(fa_head, tos, 0);
1650 
1651 	if (!fa)
1652 		return -ESRCH;
1653 
1654 	pr_debug("Deleting %08x/%d tos=%d t=%p\n", key, plen, tos, t);
1655 
1656 	fa_to_delete = NULL;
1657 	fa = list_entry(fa->fa_list.prev, struct fib_alias, fa_list);
1658 	list_for_each_entry_continue(fa, fa_head, fa_list) {
1659 		struct fib_info *fi = fa->fa_info;
1660 
1661 		if (fa->fa_tos != tos)
1662 			break;
1663 
1664 		if ((!cfg->fc_type || fa->fa_type == cfg->fc_type) &&
1665 		    (cfg->fc_scope == RT_SCOPE_NOWHERE ||
1666 		     fa->fa_info->fib_scope == cfg->fc_scope) &&
1667 		    (!cfg->fc_prefsrc ||
1668 		     fi->fib_prefsrc == cfg->fc_prefsrc) &&
1669 		    (!cfg->fc_protocol ||
1670 		     fi->fib_protocol == cfg->fc_protocol) &&
1671 		    fib_nh_match(cfg, fi) == 0) {
1672 			fa_to_delete = fa;
1673 			break;
1674 		}
1675 	}
1676 
1677 	if (!fa_to_delete)
1678 		return -ESRCH;
1679 
1680 	fa = fa_to_delete;
1681 	rtmsg_fib(RTM_DELROUTE, htonl(key), fa, plen, tb->tb_id,
1682 		  &cfg->fc_nlinfo, 0);
1683 
1684 	list_del_rcu(&fa->fa_list);
1685 
1686 	if (!plen)
1687 		tb->tb_num_default--;
1688 
1689 	if (list_empty(fa_head)) {
1690 		hlist_del_rcu(&li->hlist);
1691 		free_leaf_info(li);
1692 	}
1693 
1694 	if (hlist_empty(&l->list))
1695 		trie_leaf_remove(t, l);
1696 
1697 	if (fa->fa_state & FA_S_ACCESSED)
1698 		rt_cache_flush(cfg->fc_nlinfo.nl_net);
1699 
1700 	fib_release_info(fa->fa_info);
1701 	alias_free_mem_rcu(fa);
1702 	return 0;
1703 }
1704 
1705 static int trie_flush_list(struct list_head *head)
1706 {
1707 	struct fib_alias *fa, *fa_node;
1708 	int found = 0;
1709 
1710 	list_for_each_entry_safe(fa, fa_node, head, fa_list) {
1711 		struct fib_info *fi = fa->fa_info;
1712 
1713 		if (fi && (fi->fib_flags & RTNH_F_DEAD)) {
1714 			list_del_rcu(&fa->fa_list);
1715 			fib_release_info(fa->fa_info);
1716 			alias_free_mem_rcu(fa);
1717 			found++;
1718 		}
1719 	}
1720 	return found;
1721 }
1722 
1723 static int trie_flush_leaf(struct leaf *l)
1724 {
1725 	int found = 0;
1726 	struct hlist_head *lih = &l->list;
1727 	struct hlist_node *tmp;
1728 	struct leaf_info *li = NULL;
1729 
1730 	hlist_for_each_entry_safe(li, tmp, lih, hlist) {
1731 		found += trie_flush_list(&li->falh);
1732 
1733 		if (list_empty(&li->falh)) {
1734 			hlist_del_rcu(&li->hlist);
1735 			free_leaf_info(li);
1736 		}
1737 	}
1738 	return found;
1739 }
1740 
1741 /*
1742  * Scan for the next right leaf starting at node p->child[idx]
1743  * Since we have back pointer, no recursion necessary.
1744  */
1745 static struct leaf *leaf_walk_rcu(struct tnode *p, struct rt_trie_node *c)
1746 {
1747 	do {
1748 		t_key idx;
1749 
1750 		if (c)
1751 			idx = tkey_extract_bits(c->key, p->pos, p->bits) + 1;
1752 		else
1753 			idx = 0;
1754 
1755 		while (idx < 1u << p->bits) {
1756 			c = tnode_get_child_rcu(p, idx++);
1757 			if (!c)
1758 				continue;
1759 
1760 			if (IS_LEAF(c))
1761 				return (struct leaf *) c;
1762 
1763 			/* Rescan start scanning in new node */
1764 			p = (struct tnode *) c;
1765 			idx = 0;
1766 		}
1767 
1768 		/* Node empty, walk back up to parent */
1769 		c = (struct rt_trie_node *) p;
1770 	} while ((p = node_parent_rcu(c)) != NULL);
1771 
1772 	return NULL; /* Root of trie */
1773 }
1774 
1775 static struct leaf *trie_firstleaf(struct trie *t)
1776 {
1777 	struct tnode *n = (struct tnode *)rcu_dereference_rtnl(t->trie);
1778 
1779 	if (!n)
1780 		return NULL;
1781 
1782 	if (IS_LEAF(n))          /* trie is just a leaf */
1783 		return (struct leaf *) n;
1784 
1785 	return leaf_walk_rcu(n, NULL);
1786 }
1787 
1788 static struct leaf *trie_nextleaf(struct leaf *l)
1789 {
1790 	struct rt_trie_node *c = (struct rt_trie_node *) l;
1791 	struct tnode *p = node_parent_rcu(c);
1792 
1793 	if (!p)
1794 		return NULL;	/* trie with just one leaf */
1795 
1796 	return leaf_walk_rcu(p, c);
1797 }
1798 
1799 static struct leaf *trie_leafindex(struct trie *t, int index)
1800 {
1801 	struct leaf *l = trie_firstleaf(t);
1802 
1803 	while (l && index-- > 0)
1804 		l = trie_nextleaf(l);
1805 
1806 	return l;
1807 }
1808 
1809 
1810 /*
1811  * Caller must hold RTNL.
1812  */
1813 int fib_table_flush(struct fib_table *tb)
1814 {
1815 	struct trie *t = (struct trie *) tb->tb_data;
1816 	struct leaf *l, *ll = NULL;
1817 	int found = 0;
1818 
1819 	for (l = trie_firstleaf(t); l; l = trie_nextleaf(l)) {
1820 		found += trie_flush_leaf(l);
1821 
1822 		if (ll && hlist_empty(&ll->list))
1823 			trie_leaf_remove(t, ll);
1824 		ll = l;
1825 	}
1826 
1827 	if (ll && hlist_empty(&ll->list))
1828 		trie_leaf_remove(t, ll);
1829 
1830 	pr_debug("trie_flush found=%d\n", found);
1831 	return found;
1832 }
1833 
1834 void fib_free_table(struct fib_table *tb)
1835 {
1836 	kfree(tb);
1837 }
1838 
1839 static int fn_trie_dump_fa(t_key key, int plen, struct list_head *fah,
1840 			   struct fib_table *tb,
1841 			   struct sk_buff *skb, struct netlink_callback *cb)
1842 {
1843 	int i, s_i;
1844 	struct fib_alias *fa;
1845 	__be32 xkey = htonl(key);
1846 
1847 	s_i = cb->args[5];
1848 	i = 0;
1849 
1850 	/* rcu_read_lock is hold by caller */
1851 
1852 	list_for_each_entry_rcu(fa, fah, fa_list) {
1853 		if (i < s_i) {
1854 			i++;
1855 			continue;
1856 		}
1857 
1858 		if (fib_dump_info(skb, NETLINK_CB(cb->skb).portid,
1859 				  cb->nlh->nlmsg_seq,
1860 				  RTM_NEWROUTE,
1861 				  tb->tb_id,
1862 				  fa->fa_type,
1863 				  xkey,
1864 				  plen,
1865 				  fa->fa_tos,
1866 				  fa->fa_info, NLM_F_MULTI) < 0) {
1867 			cb->args[5] = i;
1868 			return -1;
1869 		}
1870 		i++;
1871 	}
1872 	cb->args[5] = i;
1873 	return skb->len;
1874 }
1875 
1876 static int fn_trie_dump_leaf(struct leaf *l, struct fib_table *tb,
1877 			struct sk_buff *skb, struct netlink_callback *cb)
1878 {
1879 	struct leaf_info *li;
1880 	int i, s_i;
1881 
1882 	s_i = cb->args[4];
1883 	i = 0;
1884 
1885 	/* rcu_read_lock is hold by caller */
1886 	hlist_for_each_entry_rcu(li, &l->list, hlist) {
1887 		if (i < s_i) {
1888 			i++;
1889 			continue;
1890 		}
1891 
1892 		if (i > s_i)
1893 			cb->args[5] = 0;
1894 
1895 		if (list_empty(&li->falh))
1896 			continue;
1897 
1898 		if (fn_trie_dump_fa(l->key, li->plen, &li->falh, tb, skb, cb) < 0) {
1899 			cb->args[4] = i;
1900 			return -1;
1901 		}
1902 		i++;
1903 	}
1904 
1905 	cb->args[4] = i;
1906 	return skb->len;
1907 }
1908 
1909 int fib_table_dump(struct fib_table *tb, struct sk_buff *skb,
1910 		   struct netlink_callback *cb)
1911 {
1912 	struct leaf *l;
1913 	struct trie *t = (struct trie *) tb->tb_data;
1914 	t_key key = cb->args[2];
1915 	int count = cb->args[3];
1916 
1917 	rcu_read_lock();
1918 	/* Dump starting at last key.
1919 	 * Note: 0.0.0.0/0 (ie default) is first key.
1920 	 */
1921 	if (count == 0)
1922 		l = trie_firstleaf(t);
1923 	else {
1924 		/* Normally, continue from last key, but if that is missing
1925 		 * fallback to using slow rescan
1926 		 */
1927 		l = fib_find_node(t, key);
1928 		if (!l)
1929 			l = trie_leafindex(t, count);
1930 	}
1931 
1932 	while (l) {
1933 		cb->args[2] = l->key;
1934 		if (fn_trie_dump_leaf(l, tb, skb, cb) < 0) {
1935 			cb->args[3] = count;
1936 			rcu_read_unlock();
1937 			return -1;
1938 		}
1939 
1940 		++count;
1941 		l = trie_nextleaf(l);
1942 		memset(&cb->args[4], 0,
1943 		       sizeof(cb->args) - 4*sizeof(cb->args[0]));
1944 	}
1945 	cb->args[3] = count;
1946 	rcu_read_unlock();
1947 
1948 	return skb->len;
1949 }
1950 
1951 void __init fib_trie_init(void)
1952 {
1953 	fn_alias_kmem = kmem_cache_create("ip_fib_alias",
1954 					  sizeof(struct fib_alias),
1955 					  0, SLAB_PANIC, NULL);
1956 
1957 	trie_leaf_kmem = kmem_cache_create("ip_fib_trie",
1958 					   max(sizeof(struct leaf),
1959 					       sizeof(struct leaf_info)),
1960 					   0, SLAB_PANIC, NULL);
1961 }
1962 
1963 
1964 struct fib_table *fib_trie_table(u32 id)
1965 {
1966 	struct fib_table *tb;
1967 	struct trie *t;
1968 
1969 	tb = kmalloc(sizeof(struct fib_table) + sizeof(struct trie),
1970 		     GFP_KERNEL);
1971 	if (tb == NULL)
1972 		return NULL;
1973 
1974 	tb->tb_id = id;
1975 	tb->tb_default = -1;
1976 	tb->tb_num_default = 0;
1977 
1978 	t = (struct trie *) tb->tb_data;
1979 	memset(t, 0, sizeof(*t));
1980 
1981 	return tb;
1982 }
1983 
1984 #ifdef CONFIG_PROC_FS
1985 /* Depth first Trie walk iterator */
1986 struct fib_trie_iter {
1987 	struct seq_net_private p;
1988 	struct fib_table *tb;
1989 	struct tnode *tnode;
1990 	unsigned int index;
1991 	unsigned int depth;
1992 };
1993 
1994 static struct rt_trie_node *fib_trie_get_next(struct fib_trie_iter *iter)
1995 {
1996 	struct tnode *tn = iter->tnode;
1997 	unsigned int cindex = iter->index;
1998 	struct tnode *p;
1999 
2000 	/* A single entry routing table */
2001 	if (!tn)
2002 		return NULL;
2003 
2004 	pr_debug("get_next iter={node=%p index=%d depth=%d}\n",
2005 		 iter->tnode, iter->index, iter->depth);
2006 rescan:
2007 	while (cindex < (1<<tn->bits)) {
2008 		struct rt_trie_node *n = tnode_get_child_rcu(tn, cindex);
2009 
2010 		if (n) {
2011 			if (IS_LEAF(n)) {
2012 				iter->tnode = tn;
2013 				iter->index = cindex + 1;
2014 			} else {
2015 				/* push down one level */
2016 				iter->tnode = (struct tnode *) n;
2017 				iter->index = 0;
2018 				++iter->depth;
2019 			}
2020 			return n;
2021 		}
2022 
2023 		++cindex;
2024 	}
2025 
2026 	/* Current node exhausted, pop back up */
2027 	p = node_parent_rcu((struct rt_trie_node *)tn);
2028 	if (p) {
2029 		cindex = tkey_extract_bits(tn->key, p->pos, p->bits)+1;
2030 		tn = p;
2031 		--iter->depth;
2032 		goto rescan;
2033 	}
2034 
2035 	/* got root? */
2036 	return NULL;
2037 }
2038 
2039 static struct rt_trie_node *fib_trie_get_first(struct fib_trie_iter *iter,
2040 				       struct trie *t)
2041 {
2042 	struct rt_trie_node *n;
2043 
2044 	if (!t)
2045 		return NULL;
2046 
2047 	n = rcu_dereference(t->trie);
2048 	if (!n)
2049 		return NULL;
2050 
2051 	if (IS_TNODE(n)) {
2052 		iter->tnode = (struct tnode *) n;
2053 		iter->index = 0;
2054 		iter->depth = 1;
2055 	} else {
2056 		iter->tnode = NULL;
2057 		iter->index = 0;
2058 		iter->depth = 0;
2059 	}
2060 
2061 	return n;
2062 }
2063 
2064 static void trie_collect_stats(struct trie *t, struct trie_stat *s)
2065 {
2066 	struct rt_trie_node *n;
2067 	struct fib_trie_iter iter;
2068 
2069 	memset(s, 0, sizeof(*s));
2070 
2071 	rcu_read_lock();
2072 	for (n = fib_trie_get_first(&iter, t); n; n = fib_trie_get_next(&iter)) {
2073 		if (IS_LEAF(n)) {
2074 			struct leaf *l = (struct leaf *)n;
2075 			struct leaf_info *li;
2076 
2077 			s->leaves++;
2078 			s->totdepth += iter.depth;
2079 			if (iter.depth > s->maxdepth)
2080 				s->maxdepth = iter.depth;
2081 
2082 			hlist_for_each_entry_rcu(li, &l->list, hlist)
2083 				++s->prefixes;
2084 		} else {
2085 			const struct tnode *tn = (const struct tnode *) n;
2086 			int i;
2087 
2088 			s->tnodes++;
2089 			if (tn->bits < MAX_STAT_DEPTH)
2090 				s->nodesizes[tn->bits]++;
2091 
2092 			for (i = 0; i < (1<<tn->bits); i++)
2093 				if (!tn->child[i])
2094 					s->nullpointers++;
2095 		}
2096 	}
2097 	rcu_read_unlock();
2098 }
2099 
2100 /*
2101  *	This outputs /proc/net/fib_triestats
2102  */
2103 static void trie_show_stats(struct seq_file *seq, struct trie_stat *stat)
2104 {
2105 	unsigned int i, max, pointers, bytes, avdepth;
2106 
2107 	if (stat->leaves)
2108 		avdepth = stat->totdepth*100 / stat->leaves;
2109 	else
2110 		avdepth = 0;
2111 
2112 	seq_printf(seq, "\tAver depth:     %u.%02d\n",
2113 		   avdepth / 100, avdepth % 100);
2114 	seq_printf(seq, "\tMax depth:      %u\n", stat->maxdepth);
2115 
2116 	seq_printf(seq, "\tLeaves:         %u\n", stat->leaves);
2117 	bytes = sizeof(struct leaf) * stat->leaves;
2118 
2119 	seq_printf(seq, "\tPrefixes:       %u\n", stat->prefixes);
2120 	bytes += sizeof(struct leaf_info) * stat->prefixes;
2121 
2122 	seq_printf(seq, "\tInternal nodes: %u\n\t", stat->tnodes);
2123 	bytes += sizeof(struct tnode) * stat->tnodes;
2124 
2125 	max = MAX_STAT_DEPTH;
2126 	while (max > 0 && stat->nodesizes[max-1] == 0)
2127 		max--;
2128 
2129 	pointers = 0;
2130 	for (i = 1; i < max; i++)
2131 		if (stat->nodesizes[i] != 0) {
2132 			seq_printf(seq, "  %u: %u",  i, stat->nodesizes[i]);
2133 			pointers += (1<<i) * stat->nodesizes[i];
2134 		}
2135 	seq_putc(seq, '\n');
2136 	seq_printf(seq, "\tPointers: %u\n", pointers);
2137 
2138 	bytes += sizeof(struct rt_trie_node *) * pointers;
2139 	seq_printf(seq, "Null ptrs: %u\n", stat->nullpointers);
2140 	seq_printf(seq, "Total size: %u  kB\n", (bytes + 1023) / 1024);
2141 }
2142 
2143 #ifdef CONFIG_IP_FIB_TRIE_STATS
2144 static void trie_show_usage(struct seq_file *seq,
2145 			    const struct trie_use_stats *stats)
2146 {
2147 	seq_printf(seq, "\nCounters:\n---------\n");
2148 	seq_printf(seq, "gets = %u\n", stats->gets);
2149 	seq_printf(seq, "backtracks = %u\n", stats->backtrack);
2150 	seq_printf(seq, "semantic match passed = %u\n",
2151 		   stats->semantic_match_passed);
2152 	seq_printf(seq, "semantic match miss = %u\n",
2153 		   stats->semantic_match_miss);
2154 	seq_printf(seq, "null node hit= %u\n", stats->null_node_hit);
2155 	seq_printf(seq, "skipped node resize = %u\n\n",
2156 		   stats->resize_node_skipped);
2157 }
2158 #endif /*  CONFIG_IP_FIB_TRIE_STATS */
2159 
2160 static void fib_table_print(struct seq_file *seq, struct fib_table *tb)
2161 {
2162 	if (tb->tb_id == RT_TABLE_LOCAL)
2163 		seq_puts(seq, "Local:\n");
2164 	else if (tb->tb_id == RT_TABLE_MAIN)
2165 		seq_puts(seq, "Main:\n");
2166 	else
2167 		seq_printf(seq, "Id %d:\n", tb->tb_id);
2168 }
2169 
2170 
2171 static int fib_triestat_seq_show(struct seq_file *seq, void *v)
2172 {
2173 	struct net *net = (struct net *)seq->private;
2174 	unsigned int h;
2175 
2176 	seq_printf(seq,
2177 		   "Basic info: size of leaf:"
2178 		   " %Zd bytes, size of tnode: %Zd bytes.\n",
2179 		   sizeof(struct leaf), sizeof(struct tnode));
2180 
2181 	for (h = 0; h < FIB_TABLE_HASHSZ; h++) {
2182 		struct hlist_head *head = &net->ipv4.fib_table_hash[h];
2183 		struct fib_table *tb;
2184 
2185 		hlist_for_each_entry_rcu(tb, head, tb_hlist) {
2186 			struct trie *t = (struct trie *) tb->tb_data;
2187 			struct trie_stat stat;
2188 
2189 			if (!t)
2190 				continue;
2191 
2192 			fib_table_print(seq, tb);
2193 
2194 			trie_collect_stats(t, &stat);
2195 			trie_show_stats(seq, &stat);
2196 #ifdef CONFIG_IP_FIB_TRIE_STATS
2197 			trie_show_usage(seq, &t->stats);
2198 #endif
2199 		}
2200 	}
2201 
2202 	return 0;
2203 }
2204 
2205 static int fib_triestat_seq_open(struct inode *inode, struct file *file)
2206 {
2207 	return single_open_net(inode, file, fib_triestat_seq_show);
2208 }
2209 
2210 static const struct file_operations fib_triestat_fops = {
2211 	.owner	= THIS_MODULE,
2212 	.open	= fib_triestat_seq_open,
2213 	.read	= seq_read,
2214 	.llseek	= seq_lseek,
2215 	.release = single_release_net,
2216 };
2217 
2218 static struct rt_trie_node *fib_trie_get_idx(struct seq_file *seq, loff_t pos)
2219 {
2220 	struct fib_trie_iter *iter = seq->private;
2221 	struct net *net = seq_file_net(seq);
2222 	loff_t idx = 0;
2223 	unsigned int h;
2224 
2225 	for (h = 0; h < FIB_TABLE_HASHSZ; h++) {
2226 		struct hlist_head *head = &net->ipv4.fib_table_hash[h];
2227 		struct fib_table *tb;
2228 
2229 		hlist_for_each_entry_rcu(tb, head, tb_hlist) {
2230 			struct rt_trie_node *n;
2231 
2232 			for (n = fib_trie_get_first(iter,
2233 						    (struct trie *) tb->tb_data);
2234 			     n; n = fib_trie_get_next(iter))
2235 				if (pos == idx++) {
2236 					iter->tb = tb;
2237 					return n;
2238 				}
2239 		}
2240 	}
2241 
2242 	return NULL;
2243 }
2244 
2245 static void *fib_trie_seq_start(struct seq_file *seq, loff_t *pos)
2246 	__acquires(RCU)
2247 {
2248 	rcu_read_lock();
2249 	return fib_trie_get_idx(seq, *pos);
2250 }
2251 
2252 static void *fib_trie_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2253 {
2254 	struct fib_trie_iter *iter = seq->private;
2255 	struct net *net = seq_file_net(seq);
2256 	struct fib_table *tb = iter->tb;
2257 	struct hlist_node *tb_node;
2258 	unsigned int h;
2259 	struct rt_trie_node *n;
2260 
2261 	++*pos;
2262 	/* next node in same table */
2263 	n = fib_trie_get_next(iter);
2264 	if (n)
2265 		return n;
2266 
2267 	/* walk rest of this hash chain */
2268 	h = tb->tb_id & (FIB_TABLE_HASHSZ - 1);
2269 	while ((tb_node = rcu_dereference(hlist_next_rcu(&tb->tb_hlist)))) {
2270 		tb = hlist_entry(tb_node, struct fib_table, tb_hlist);
2271 		n = fib_trie_get_first(iter, (struct trie *) tb->tb_data);
2272 		if (n)
2273 			goto found;
2274 	}
2275 
2276 	/* new hash chain */
2277 	while (++h < FIB_TABLE_HASHSZ) {
2278 		struct hlist_head *head = &net->ipv4.fib_table_hash[h];
2279 		hlist_for_each_entry_rcu(tb, head, tb_hlist) {
2280 			n = fib_trie_get_first(iter, (struct trie *) tb->tb_data);
2281 			if (n)
2282 				goto found;
2283 		}
2284 	}
2285 	return NULL;
2286 
2287 found:
2288 	iter->tb = tb;
2289 	return n;
2290 }
2291 
2292 static void fib_trie_seq_stop(struct seq_file *seq, void *v)
2293 	__releases(RCU)
2294 {
2295 	rcu_read_unlock();
2296 }
2297 
2298 static void seq_indent(struct seq_file *seq, int n)
2299 {
2300 	while (n-- > 0)
2301 		seq_puts(seq, "   ");
2302 }
2303 
2304 static inline const char *rtn_scope(char *buf, size_t len, enum rt_scope_t s)
2305 {
2306 	switch (s) {
2307 	case RT_SCOPE_UNIVERSE: return "universe";
2308 	case RT_SCOPE_SITE:	return "site";
2309 	case RT_SCOPE_LINK:	return "link";
2310 	case RT_SCOPE_HOST:	return "host";
2311 	case RT_SCOPE_NOWHERE:	return "nowhere";
2312 	default:
2313 		snprintf(buf, len, "scope=%d", s);
2314 		return buf;
2315 	}
2316 }
2317 
2318 static const char *const rtn_type_names[__RTN_MAX] = {
2319 	[RTN_UNSPEC] = "UNSPEC",
2320 	[RTN_UNICAST] = "UNICAST",
2321 	[RTN_LOCAL] = "LOCAL",
2322 	[RTN_BROADCAST] = "BROADCAST",
2323 	[RTN_ANYCAST] = "ANYCAST",
2324 	[RTN_MULTICAST] = "MULTICAST",
2325 	[RTN_BLACKHOLE] = "BLACKHOLE",
2326 	[RTN_UNREACHABLE] = "UNREACHABLE",
2327 	[RTN_PROHIBIT] = "PROHIBIT",
2328 	[RTN_THROW] = "THROW",
2329 	[RTN_NAT] = "NAT",
2330 	[RTN_XRESOLVE] = "XRESOLVE",
2331 };
2332 
2333 static inline const char *rtn_type(char *buf, size_t len, unsigned int t)
2334 {
2335 	if (t < __RTN_MAX && rtn_type_names[t])
2336 		return rtn_type_names[t];
2337 	snprintf(buf, len, "type %u", t);
2338 	return buf;
2339 }
2340 
2341 /* Pretty print the trie */
2342 static int fib_trie_seq_show(struct seq_file *seq, void *v)
2343 {
2344 	const struct fib_trie_iter *iter = seq->private;
2345 	struct rt_trie_node *n = v;
2346 
2347 	if (!node_parent_rcu(n))
2348 		fib_table_print(seq, iter->tb);
2349 
2350 	if (IS_TNODE(n)) {
2351 		struct tnode *tn = (struct tnode *) n;
2352 		__be32 prf = htonl(mask_pfx(tn->key, tn->pos));
2353 
2354 		seq_indent(seq, iter->depth-1);
2355 		seq_printf(seq, "  +-- %pI4/%d %d %d %d\n",
2356 			   &prf, tn->pos, tn->bits, tn->full_children,
2357 			   tn->empty_children);
2358 
2359 	} else {
2360 		struct leaf *l = (struct leaf *) n;
2361 		struct leaf_info *li;
2362 		__be32 val = htonl(l->key);
2363 
2364 		seq_indent(seq, iter->depth);
2365 		seq_printf(seq, "  |-- %pI4\n", &val);
2366 
2367 		hlist_for_each_entry_rcu(li, &l->list, hlist) {
2368 			struct fib_alias *fa;
2369 
2370 			list_for_each_entry_rcu(fa, &li->falh, fa_list) {
2371 				char buf1[32], buf2[32];
2372 
2373 				seq_indent(seq, iter->depth+1);
2374 				seq_printf(seq, "  /%d %s %s", li->plen,
2375 					   rtn_scope(buf1, sizeof(buf1),
2376 						     fa->fa_info->fib_scope),
2377 					   rtn_type(buf2, sizeof(buf2),
2378 						    fa->fa_type));
2379 				if (fa->fa_tos)
2380 					seq_printf(seq, " tos=%d", fa->fa_tos);
2381 				seq_putc(seq, '\n');
2382 			}
2383 		}
2384 	}
2385 
2386 	return 0;
2387 }
2388 
2389 static const struct seq_operations fib_trie_seq_ops = {
2390 	.start  = fib_trie_seq_start,
2391 	.next   = fib_trie_seq_next,
2392 	.stop   = fib_trie_seq_stop,
2393 	.show   = fib_trie_seq_show,
2394 };
2395 
2396 static int fib_trie_seq_open(struct inode *inode, struct file *file)
2397 {
2398 	return seq_open_net(inode, file, &fib_trie_seq_ops,
2399 			    sizeof(struct fib_trie_iter));
2400 }
2401 
2402 static const struct file_operations fib_trie_fops = {
2403 	.owner  = THIS_MODULE,
2404 	.open   = fib_trie_seq_open,
2405 	.read   = seq_read,
2406 	.llseek = seq_lseek,
2407 	.release = seq_release_net,
2408 };
2409 
2410 struct fib_route_iter {
2411 	struct seq_net_private p;
2412 	struct trie *main_trie;
2413 	loff_t	pos;
2414 	t_key	key;
2415 };
2416 
2417 static struct leaf *fib_route_get_idx(struct fib_route_iter *iter, loff_t pos)
2418 {
2419 	struct leaf *l = NULL;
2420 	struct trie *t = iter->main_trie;
2421 
2422 	/* use cache location of last found key */
2423 	if (iter->pos > 0 && pos >= iter->pos && (l = fib_find_node(t, iter->key)))
2424 		pos -= iter->pos;
2425 	else {
2426 		iter->pos = 0;
2427 		l = trie_firstleaf(t);
2428 	}
2429 
2430 	while (l && pos-- > 0) {
2431 		iter->pos++;
2432 		l = trie_nextleaf(l);
2433 	}
2434 
2435 	if (l)
2436 		iter->key = pos;	/* remember it */
2437 	else
2438 		iter->pos = 0;		/* forget it */
2439 
2440 	return l;
2441 }
2442 
2443 static void *fib_route_seq_start(struct seq_file *seq, loff_t *pos)
2444 	__acquires(RCU)
2445 {
2446 	struct fib_route_iter *iter = seq->private;
2447 	struct fib_table *tb;
2448 
2449 	rcu_read_lock();
2450 	tb = fib_get_table(seq_file_net(seq), RT_TABLE_MAIN);
2451 	if (!tb)
2452 		return NULL;
2453 
2454 	iter->main_trie = (struct trie *) tb->tb_data;
2455 	if (*pos == 0)
2456 		return SEQ_START_TOKEN;
2457 	else
2458 		return fib_route_get_idx(iter, *pos - 1);
2459 }
2460 
2461 static void *fib_route_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2462 {
2463 	struct fib_route_iter *iter = seq->private;
2464 	struct leaf *l = v;
2465 
2466 	++*pos;
2467 	if (v == SEQ_START_TOKEN) {
2468 		iter->pos = 0;
2469 		l = trie_firstleaf(iter->main_trie);
2470 	} else {
2471 		iter->pos++;
2472 		l = trie_nextleaf(l);
2473 	}
2474 
2475 	if (l)
2476 		iter->key = l->key;
2477 	else
2478 		iter->pos = 0;
2479 	return l;
2480 }
2481 
2482 static void fib_route_seq_stop(struct seq_file *seq, void *v)
2483 	__releases(RCU)
2484 {
2485 	rcu_read_unlock();
2486 }
2487 
2488 static unsigned int fib_flag_trans(int type, __be32 mask, const struct fib_info *fi)
2489 {
2490 	unsigned int flags = 0;
2491 
2492 	if (type == RTN_UNREACHABLE || type == RTN_PROHIBIT)
2493 		flags = RTF_REJECT;
2494 	if (fi && fi->fib_nh->nh_gw)
2495 		flags |= RTF_GATEWAY;
2496 	if (mask == htonl(0xFFFFFFFF))
2497 		flags |= RTF_HOST;
2498 	flags |= RTF_UP;
2499 	return flags;
2500 }
2501 
2502 /*
2503  *	This outputs /proc/net/route.
2504  *	The format of the file is not supposed to be changed
2505  *	and needs to be same as fib_hash output to avoid breaking
2506  *	legacy utilities
2507  */
2508 static int fib_route_seq_show(struct seq_file *seq, void *v)
2509 {
2510 	struct leaf *l = v;
2511 	struct leaf_info *li;
2512 
2513 	if (v == SEQ_START_TOKEN) {
2514 		seq_printf(seq, "%-127s\n", "Iface\tDestination\tGateway "
2515 			   "\tFlags\tRefCnt\tUse\tMetric\tMask\t\tMTU"
2516 			   "\tWindow\tIRTT");
2517 		return 0;
2518 	}
2519 
2520 	hlist_for_each_entry_rcu(li, &l->list, hlist) {
2521 		struct fib_alias *fa;
2522 		__be32 mask, prefix;
2523 
2524 		mask = inet_make_mask(li->plen);
2525 		prefix = htonl(l->key);
2526 
2527 		list_for_each_entry_rcu(fa, &li->falh, fa_list) {
2528 			const struct fib_info *fi = fa->fa_info;
2529 			unsigned int flags = fib_flag_trans(fa->fa_type, mask, fi);
2530 			int len;
2531 
2532 			if (fa->fa_type == RTN_BROADCAST
2533 			    || fa->fa_type == RTN_MULTICAST)
2534 				continue;
2535 
2536 			if (fi)
2537 				seq_printf(seq,
2538 					 "%s\t%08X\t%08X\t%04X\t%d\t%u\t"
2539 					 "%d\t%08X\t%d\t%u\t%u%n",
2540 					 fi->fib_dev ? fi->fib_dev->name : "*",
2541 					 prefix,
2542 					 fi->fib_nh->nh_gw, flags, 0, 0,
2543 					 fi->fib_priority,
2544 					 mask,
2545 					 (fi->fib_advmss ?
2546 					  fi->fib_advmss + 40 : 0),
2547 					 fi->fib_window,
2548 					 fi->fib_rtt >> 3, &len);
2549 			else
2550 				seq_printf(seq,
2551 					 "*\t%08X\t%08X\t%04X\t%d\t%u\t"
2552 					 "%d\t%08X\t%d\t%u\t%u%n",
2553 					 prefix, 0, flags, 0, 0, 0,
2554 					 mask, 0, 0, 0, &len);
2555 
2556 			seq_printf(seq, "%*s\n", 127 - len, "");
2557 		}
2558 	}
2559 
2560 	return 0;
2561 }
2562 
2563 static const struct seq_operations fib_route_seq_ops = {
2564 	.start  = fib_route_seq_start,
2565 	.next   = fib_route_seq_next,
2566 	.stop   = fib_route_seq_stop,
2567 	.show   = fib_route_seq_show,
2568 };
2569 
2570 static int fib_route_seq_open(struct inode *inode, struct file *file)
2571 {
2572 	return seq_open_net(inode, file, &fib_route_seq_ops,
2573 			    sizeof(struct fib_route_iter));
2574 }
2575 
2576 static const struct file_operations fib_route_fops = {
2577 	.owner  = THIS_MODULE,
2578 	.open   = fib_route_seq_open,
2579 	.read   = seq_read,
2580 	.llseek = seq_lseek,
2581 	.release = seq_release_net,
2582 };
2583 
2584 int __net_init fib_proc_init(struct net *net)
2585 {
2586 	if (!proc_create("fib_trie", S_IRUGO, net->proc_net, &fib_trie_fops))
2587 		goto out1;
2588 
2589 	if (!proc_create("fib_triestat", S_IRUGO, net->proc_net,
2590 			 &fib_triestat_fops))
2591 		goto out2;
2592 
2593 	if (!proc_create("route", S_IRUGO, net->proc_net, &fib_route_fops))
2594 		goto out3;
2595 
2596 	return 0;
2597 
2598 out3:
2599 	remove_proc_entry("fib_triestat", net->proc_net);
2600 out2:
2601 	remove_proc_entry("fib_trie", net->proc_net);
2602 out1:
2603 	return -ENOMEM;
2604 }
2605 
2606 void __net_exit fib_proc_exit(struct net *net)
2607 {
2608 	remove_proc_entry("fib_trie", net->proc_net);
2609 	remove_proc_entry("fib_triestat", net->proc_net);
2610 	remove_proc_entry("route", net->proc_net);
2611 }
2612 
2613 #endif /* CONFIG_PROC_FS */
2614