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