From: Stephen Hemminger <shemminger@vyatta.com>
To: David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org
Subject: [PATCH 2/4] fib_trie: improve output format for /proc/net/fib_trie
Date: Tue, 12 Feb 2008 16:50:44 -0800 [thread overview]
Message-ID: <20080213005122.727447010@vyatta.com> (raw)
In-Reply-To: 20080213005042.150212716@vyatta.com
[-- Attachment #1: fib-trie-format.patch --]
[-- Type: text/plain, Size: 5136 bytes --]
Make output format prettier (more tree like).
<local>:
--- 0.0.0.0/0
|--- 10.111.111.0/24
| +-- 10.111.111.0/32 link broadcast
| |--- 10.111.111.254/31
| | +-- 10.111.111.254/32 host local
| | +-- 10.111.111.255/32 link broadcast
|--- 127.0.0.0/8
| |--- 127.0.0.0/31
| | +-- 127.0.0.0/32 link broadcast
| | +-- 127.0.0.0/8 host local
| | +-- 127.0.0.1/32 host local
| +-- 127.255.255.255/32 link broadcast
|--- 192.168.1.0/24
| |--- 192.168.1.0/28
| | +-- 192.168.1.0/32 link broadcast
| | +-- 192.168.1.9/32 host local
| +-- 192.168.1.255/32 link broadcast
<main>:
--- 0.0.0.0/0
|--- 0.0.0.0/4
| +-- 0.0.0.0/0 universe unicast
| +-- 10.111.111.0/24 link unicast
+-- 169.254.0.0/16 link unicast
+-- 192.168.1.0/24 link unicast
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
---
net/ipv4/fib_trie.c | 106 ++++++++++++++++++++++++++------------------------
1 files changed, 55 insertions(+), 51 deletions(-)
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index 1ff446d..72338cd 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -2340,46 +2340,57 @@ static void fib_trie_seq_stop(struct seq_file *seq, void *v)
rcu_read_unlock();
}
+/* print left side of tree */
static void seq_indent(struct seq_file *seq, int n)
{
- while (n-- > 0) seq_puts(seq, " ");
-}
-
-static inline const char *rtn_scope(char *buf, size_t len, enum rt_scope_t s)
-{
- switch (s) {
- case RT_SCOPE_UNIVERSE: return "universe";
- case RT_SCOPE_SITE: return "site";
- case RT_SCOPE_LINK: return "link";
- case RT_SCOPE_HOST: return "host";
- case RT_SCOPE_NOWHERE: return "nowhere";
- default:
- snprintf(buf, len, "scope=%d", s);
- return buf;
- }
+ while (n-- > 0)
+ seq_puts(seq, " |");
}
static const char *rtn_type_names[__RTN_MAX] = {
- [RTN_UNSPEC] = "UNSPEC",
- [RTN_UNICAST] = "UNICAST",
- [RTN_LOCAL] = "LOCAL",
- [RTN_BROADCAST] = "BROADCAST",
- [RTN_ANYCAST] = "ANYCAST",
- [RTN_MULTICAST] = "MULTICAST",
- [RTN_BLACKHOLE] = "BLACKHOLE",
- [RTN_UNREACHABLE] = "UNREACHABLE",
- [RTN_PROHIBIT] = "PROHIBIT",
- [RTN_THROW] = "THROW",
- [RTN_NAT] = "NAT",
- [RTN_XRESOLVE] = "XRESOLVE",
+ [RTN_UNSPEC] = "unspec",
+ [RTN_UNICAST] = "unicast",
+ [RTN_LOCAL] = "local",
+ [RTN_BROADCAST] = "broadcast",
+ [RTN_ANYCAST] = "anycast",
+ [RTN_MULTICAST] = "multicast",
+ [RTN_BLACKHOLE] = "blackhole",
+ [RTN_UNREACHABLE] = "unreachable",
+ [RTN_PROHIBIT] = "prohibit",
+ [RTN_THROW] = "throw",
+ [RTN_NAT] = "nat",
+ [RTN_XRESOLVE] = "xresolve",
};
-static inline const char *rtn_type(char *buf, size_t len, unsigned t)
-{
- if (t < __RTN_MAX && rtn_type_names[t])
- return rtn_type_names[t];
- snprintf(buf, len, "type %u", t);
- return buf;
+static void fib_trie_show_alias(struct seq_file *seq, const struct fib_alias *fa)
+{
+ switch (fa->fa_scope) {
+ case RT_SCOPE_UNIVERSE:
+ seq_puts(seq, "universe");
+ break;
+ case RT_SCOPE_SITE:
+ seq_puts(seq, "site");
+ break;
+ case RT_SCOPE_LINK:
+ seq_puts(seq, "link");
+ break;
+ case RT_SCOPE_HOST:
+ seq_puts(seq, "host");
+ break;
+ case RT_SCOPE_NOWHERE:
+ seq_puts(seq, "nowhere");
+ break;
+ default:
+ seq_printf(seq, "scope:%d", fa->fa_scope);
+ }
+
+ if (fa->fa_type < __RTN_MAX && rtn_type_names[fa->fa_type])
+ seq_printf(seq, " %s", rtn_type_names[fa->fa_type]);
+ else
+ seq_printf(seq, " type:%u", fa->fa_type);
+
+ if (fa->fa_tos)
+ seq_printf(seq, " tos:%#x", fa->fa_tos);
}
/* Pretty print the trie */
@@ -2402,10 +2413,8 @@ static int fib_trie_seq_show(struct seq_file *seq, void *v)
struct tnode *tn = (struct tnode *) n;
__be32 prf = htonl(mask_pfx(tn->key, tn->pos));
- seq_indent(seq, iter->depth-1);
- seq_printf(seq, " +-- %d.%d.%d.%d/%d %d %d %d\n",
- NIPQUAD(prf), tn->pos, tn->bits, tn->full_children,
- tn->empty_children);
+ seq_indent(seq, iter->depth - 1);
+ seq_printf(seq, "--- %d.%d.%d.%d/%d\n", NIPQUAD(prf), tn->pos);
} else {
struct leaf *l = (struct leaf *) n;
@@ -2413,24 +2422,19 @@ static int fib_trie_seq_show(struct seq_file *seq, void *v)
struct hlist_node *node;
__be32 val = htonl(l->key);
- seq_indent(seq, iter->depth);
- seq_printf(seq, " |-- %d.%d.%d.%d\n", NIPQUAD(val));
-
hlist_for_each_entry_rcu(li, node, &l->list, hlist) {
struct fib_alias *fa;
+
+ seq_indent(seq, iter->depth - 1);
+ seq_printf(seq, " +-- %d.%d.%d.%d/%d ",
+ NIPQUAD(val), li->plen);
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", fa->fa_tos);
- seq_putc(seq, '\n');
+ fib_trie_show_alias(seq, fa);
+ if (list_is_last(&fa->fa_list, &li->falh))
+ seq_putc(seq, '\n');
+ else
+ seq_puts(seq, ", ");
}
}
}
--
1.5.3.8
--
Stephen Hemminger <shemminger@vyatta.com>
next prev parent reply other threads:[~2008-02-13 0:57 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20080213005042.150212716@vyatta.com>
2008-02-13 0:50 ` [PATCH 1/4] rcu_assign_pointer: null check fix Stephen Hemminger
2008-02-13 1:27 ` David Miller
2008-02-13 8:07 ` Jarek Poplawski
2008-02-13 0:50 ` Stephen Hemminger [this message]
2008-02-13 2:28 ` [PATCH 2/4] fib_trie: improve output format for /proc/net/fib_trie Andrew Morton
2008-02-13 3:23 ` Stephen Hemminger
[not found] ` <20080213005122.879352336@vyatta.com>
2008-02-13 1:26 ` [PATCH 4/4] hlist_for_each_entry_continue simplification David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080213005122.727447010@vyatta.com \
--to=shemminger@vyatta.com \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).