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