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