[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20180207171017.20558-4-sthemmin@microsoft.com>
Date: Wed, 7 Feb 2018 09:10:11 -0800
From: Stephen Hemminger <stephen@...workplumber.org>
To: dsahern@...il.com
Cc: netdev@...r.kernel.org, Stephen Hemminger <sthemmin@...rosoft.com>,
Stephen Hemminger <stephen@...workplumber.org>
Subject: [PATCH iproute2-next 3/9] iproute: make printing IPv4 cache flags a function
More refactoring prior to JSON support.
Signed-off-by: Stephen Hemminger <stephen@...workplumber.org>
---
ip/iproute.c | 65 ++++++++++++++++++++++++++++++++++++------------------------
1 file changed, 39 insertions(+), 26 deletions(-)
diff --git a/ip/iproute.c b/ip/iproute.c
index da6a4faed836..7317bf116e2c 100644
--- a/ip/iproute.c
+++ b/ip/iproute.c
@@ -382,6 +382,43 @@ static void print_rt_pref(FILE *fp, unsigned int pref)
}
}
+static void print_cache_flags(FILE *fp, __u32 flags)
+{
+ flags &= ~0xFFFF;
+
+ fprintf(fp, "%s cache ", _SL_);
+
+ if (flags == 0)
+ return;
+
+ putc('<', fp);
+
+#define PRTFL(fl, flname) \
+ if (flags & RTCF_##fl) { \
+ flags &= ~RTCF_##fl; \
+ fprintf(fp, "%s%s", flname, flags ? "," : "> "); \
+ }
+
+ PRTFL(LOCAL, "local");
+ PRTFL(REJECT, "reject");
+ PRTFL(MULTICAST, "mc");
+ PRTFL(BROADCAST, "brd");
+ PRTFL(DNAT, "dst-nat");
+ PRTFL(SNAT, "src-nat");
+ PRTFL(MASQ, "masq");
+ PRTFL(DIRECTDST, "dst-direct");
+ PRTFL(DIRECTSRC, "src-direct");
+ PRTFL(REDIRECTED, "redirected");
+ PRTFL(DOREDIRECT, "redirect");
+ PRTFL(FAST, "fastroute");
+ PRTFL(NOTIFY, "notify");
+ PRTFL(TPROXY, "proxy");
+#undef PRTFL
+
+ if (flags)
+ fprintf(fp, "%#x> ", flags);
+}
+
int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
{
FILE *fp = (FILE *)arg;
@@ -544,33 +581,9 @@ int print_route(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
if (tb[RTA_UID])
fprintf(fp, "uid %u ", rta_getattr_u32(tb[RTA_UID]));
- if ((r->rtm_flags&RTM_F_CLONED) && r->rtm_family == AF_INET) {
- __u32 flags = r->rtm_flags&~0xFFFF;
- int first = 1;
+ if ((r->rtm_flags & RTM_F_CLONED) && r->rtm_family == AF_INET) {
+ print_cache_flags(fp, r->rtm_flags);
- fprintf(fp, "%s cache ", _SL_);
-
-#define PRTFL(fl, flname) if (flags&RTCF_##fl) { \
- flags &= ~RTCF_##fl; \
- fprintf(fp, "%s" flname "%s", first ? "<" : "", flags ? "," : "> "); \
- first = 0; }
- PRTFL(LOCAL, "local");
- PRTFL(REJECT, "reject");
- PRTFL(MULTICAST, "mc");
- PRTFL(BROADCAST, "brd");
- PRTFL(DNAT, "dst-nat");
- PRTFL(SNAT, "src-nat");
- PRTFL(MASQ, "masq");
- PRTFL(DIRECTDST, "dst-direct");
- PRTFL(DIRECTSRC, "src-direct");
- PRTFL(REDIRECTED, "redirected");
- PRTFL(DOREDIRECT, "redirect");
- PRTFL(FAST, "fastroute");
- PRTFL(NOTIFY, "notify");
- PRTFL(TPROXY, "proxy");
-
- if (flags)
- fprintf(fp, "%s%x> ", first ? "<" : "", flags);
if (tb[RTA_CACHEINFO]) {
struct rta_cacheinfo *ci = RTA_DATA(tb[RTA_CACHEINFO]);
--
2.15.1
Powered by blists - more mailing lists