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