|
@@ -2399,31 +2399,30 @@ static int fib_trie_seq_show(struct seq_file *seq, void *v)
|
|
|
|
|
|
} else {
|
|
} else {
|
|
struct leaf *l = (struct leaf *) n;
|
|
struct leaf *l = (struct leaf *) n;
|
|
- int i;
|
|
|
|
|
|
+ struct leaf_info *li;
|
|
|
|
+ struct hlist_node *node;
|
|
|
|
+
|
|
__be32 val = htonl(l->key);
|
|
__be32 val = htonl(l->key);
|
|
|
|
|
|
seq_indent(seq, iter->depth);
|
|
seq_indent(seq, iter->depth);
|
|
seq_printf(seq, " |-- %d.%d.%d.%d\n", NIPQUAD(val));
|
|
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) {
|
|
|
|
- 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,
|
|
|
|
- rtn_scope(buf1, sizeof(buf1),
|
|
|
|
- fa->fa_scope),
|
|
|
|
- rtn_type(buf2, sizeof(buf2),
|
|
|
|
- fa->fa_type));
|
|
|
|
- if (fa->fa_tos)
|
|
|
|
- seq_printf(seq, "tos =%d\n",
|
|
|
|
- fa->fa_tos);
|
|
|
|
- seq_putc(seq, '\n');
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
+ 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", li->plen,
|
|
|
|
+ rtn_scope(buf1, sizeof(buf1),
|
|
|
|
+ fa->fa_scope),
|
|
|
|
+ rtn_type(buf2, sizeof(buf2),
|
|
|
|
+ fa->fa_type));
|
|
|
|
+ if (fa->fa_tos)
|
|
|
|
+ seq_printf(seq, "tos =%d\n",
|
|
|
|
+ fa->fa_tos);
|
|
|
|
+ seq_putc(seq, '\n');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -2477,8 +2476,8 @@ static int fib_route_seq_show(struct seq_file *seq, void *v)
|
|
{
|
|
{
|
|
const struct fib_trie_iter *iter = seq->private;
|
|
const struct fib_trie_iter *iter = seq->private;
|
|
struct leaf *l = v;
|
|
struct leaf *l = v;
|
|
- int i;
|
|
|
|
- char bf[128];
|
|
|
|
|
|
+ struct leaf_info *li;
|
|
|
|
+ struct hlist_node *node;
|
|
|
|
|
|
if (v == SEQ_START_TOKEN) {
|
|
if (v == SEQ_START_TOKEN) {
|
|
seq_printf(seq, "%-127s\n", "Iface\tDestination\tGateway "
|
|
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))
|
|
if (IS_TNODE(l))
|
|
return 0;
|
|
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;
|
|
struct fib_alias *fa;
|
|
__be32 mask, prefix;
|
|
__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) {
|
|
list_for_each_entry_rcu(fa, &li->falh, fa_list) {
|
|
const struct fib_info *fi = fa->fa_info;
|
|
const struct fib_info *fi = fa->fa_info;
|
|
unsigned flags = fib_flag_trans(fa->fa_type, mask, fi);
|
|
unsigned flags = fib_flag_trans(fa->fa_type, mask, fi);
|
|
|
|
+ char bf[128];
|
|
|
|
|
|
if (fa->fa_type == RTN_BROADCAST
|
|
if (fa->fa_type == RTN_BROADCAST
|
|
|| fa->fa_type == RTN_MULTICAST)
|
|
|| fa->fa_type == RTN_MULTICAST)
|