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