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