Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1328042e authored by Stephen Hemminger's avatar Stephen Hemminger Committed by David S. Miller
Browse files

[IPV4] fib_trie: use hash list



The code to dump can use the existing hash chain rather than doing
repeated lookup.

Signed-off-by: default avatarStephen Hemminger <stephen.hemminger@vyatta.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 93672292
Loading
Loading
Loading
Loading
+24 −25
Original line number Diff line number Diff line
@@ -2399,22 +2399,22 @@ static int fib_trie_seq_show(struct seq_file *seq, void *v)

	} else {
		struct leaf *l = (struct leaf *) n;
		int i;
		struct leaf_info *li;
		struct hlist_node *node;

		__be32 val = htonl(l->key);

		seq_indent(seq, iter->depth);
		seq_printf(seq, "  |-- %d.%d.%d.%d\n", NIPQUAD(val));
		for (i = 32; i >= 0; i--) {
			struct leaf_info *li = find_leaf_info(l, i);

			if (li) {
		hlist_for_each_entry_rcu(li, node, &l->list, hlist) {
			struct fib_alias *fa;

			list_for_each_entry_rcu(fa, &li->falh, fa_list) {
				char buf1[32], buf2[32];

				seq_indent(seq, iter->depth+1);
					seq_printf(seq, "  /%d %s %s", i,
				seq_printf(seq, "  /%d %s %s", li->plen,
					   rtn_scope(buf1, sizeof(buf1),
						     fa->fa_scope),
					   rtn_type(buf2, sizeof(buf2),
@@ -2426,7 +2426,6 @@ static int fib_trie_seq_show(struct seq_file *seq, void *v)
			}
		}
	}
	}

	return 0;
}
@@ -2477,8 +2476,8 @@ static int fib_route_seq_show(struct seq_file *seq, void *v)
{
	const struct fib_trie_iter *iter = seq->private;
	struct leaf *l = v;
	int i;
	char bf[128];
	struct leaf_info *li;
	struct hlist_node *node;

	if (v == SEQ_START_TOKEN) {
		seq_printf(seq, "%-127s\n", "Iface\tDestination\tGateway "
@@ -2493,8 +2492,7 @@ static int fib_route_seq_show(struct seq_file *seq, void *v)
	if (IS_TNODE(l))
		return 0;

	for (i = 32; i >= 0; i--) {
		struct leaf_info *li = find_leaf_info(l, i);
	hlist_for_each_entry_rcu(li, node, &l->list, hlist) {
		struct fib_alias *fa;
		__be32 mask, prefix;

@@ -2507,6 +2505,7 @@ static int fib_route_seq_show(struct seq_file *seq, void *v)
		list_for_each_entry_rcu(fa, &li->falh, fa_list) {
			const struct fib_info *fi = fa->fa_info;
			unsigned flags = fib_flag_trans(fa->fa_type, mask, fi);
			char bf[128];

			if (fa->fa_type == RTN_BROADCAST
			    || fa->fa_type == RTN_MULTICAST)