[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20130822102354.31b0161d@samsung-9>
Date: Thu, 22 Aug 2013 10:23:54 -0700
From: Stephen Hemminger <stephen@...workplumber.org>
To: netdev@...r.kernel.org
Subject: [RFC] iproute2: display devconf info
Would this be useful, it allows displaying devconf information with ip command.
Open to suggestions about format, and how to condense the display.
$ ip -d addr show dev wlan0
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
ipv4 conf:
forwarding:1
accept redirects:1
secure redirects:1
send redirects:1
shared media:1
accept source route:1
ipv6 conf:
hoplimit:64
mtu6:1500
accept ra:2
accept redirects:1
autoconf:1
dad transmits:1
rtr solicits:3
rtr solicit interval:4000
rtr solicit delay:1000
use tempaddr:2
temp valid lft:604800
temp prefered lft:86400
regen max retry:3
max desync factor:600
max addresses:16
accept ra defrtr:1
accept ra pinfo:1
accept ra rtr pref:1
rtr probe interval:60000
accept dad:1
inet 192.168.1.189/24 brd 192.168.1.255 scope global wlan0
valid_lft forever preferred_lft forever
inet6 fe80::c685:8ff:feca:841f/64 scope link
valid_lft forever preferred_lft forever
---
ip/ipaddress.c | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 123 insertions(+)
diff --git a/ip/ipaddress.c b/ip/ipaddress.c
index 1c3e4da..f49e246 100644
--- a/ip/ipaddress.c
+++ b/ip/ipaddress.c
@@ -386,6 +386,126 @@ static void print_link_stats(FILE *fp, const struct rtnl_link_stats *s)
}
}
+static const char *ipv4_devconf[] = {
+ "forwarding",
+ "mc forwarding",
+ "proxy arp",
+ "accept redirects",
+ "secure redirects",
+ "send redirects",
+ "shared media",
+ "rp filter",
+ "accept source route",
+ "bootp relay",
+ "log martians",
+ "tag",
+ "arpfilter",
+ "medium id",
+ "noxfrm",
+ "nopolicy",
+ "force igmp version",
+ "arp announce",
+ "arp ignore",
+ "promote secondaries",
+ "arp accept",
+ "arp notify",
+ "accept local",
+ "src vmark",
+ "proxy arp pvlan",
+ "route localnet",
+};
+
+static void print_inet_conf(FILE *fp, struct rtattr *ininfo)
+{
+ struct rtattr *rta, *tb[IFLA_INET_MAX+1];
+
+ parse_rtattr_nested(tb, IFLA_INET_MAX, ininfo);
+
+ if ((rta = tb[IFLA_INET_CONF])) {
+ const __u32 *conf = (__u32 *)RTA_DATA(rta);
+ unsigned i;
+
+ fprintf(fp, "\n ipv4 conf:");
+ for (i = 0; i < rta->rta_len && i < ARRAY_SIZE(ipv4_devconf); i++) {
+ if (conf[i] != 0)
+ fprintf(fp, "\n %s:%u",
+ ipv4_devconf[i], conf[i]);
+ }
+ }
+}
+
+static const char *ipv6_devconf[] = {
+ "forwarding",
+ "hoplimit",
+ "mtu6",
+ "accept ra",
+ "accept redirects",
+ "autoconf",
+ "dad transmits",
+ "rtr solicits",
+ "rtr solicit interval",
+ "rtr solicit delay",
+ "use tempaddr",
+ "temp valid lft",
+ "temp prefered lft",
+ "regen max retry",
+ "max desync factor",
+ "max addresses",
+ "force mld version",
+ "accept ra defrtr",
+ "accept ra pinfo",
+ "accept ra rtr pref",
+ "rtr probe interval",
+ "accept ra rt info max plen",
+ "proxy ndp",
+ "optimistic dad",
+ "accept source route",
+ "mc forwarding",
+ "disable ipv6",
+ "accept dad",
+ "force tllao",
+ "ndisc notify",
+};
+
+static void print_inet6_conf(FILE *fp, struct rtattr *in6info)
+{
+ struct rtattr *rta, *tb[IFLA_INET6_MAX+1];
+
+ parse_rtattr_nested(tb, IFLA_INET6_MAX, in6info);
+
+ if ((rta = tb[IFLA_INET6_CONF])) {
+ const __u32 *conf = (__u32 *)RTA_DATA(rta);
+ unsigned i;
+
+ fprintf(fp, "\n ipv6 conf:");
+ for (i = 0; i < rta->rta_len && i < ARRAY_SIZE(ipv6_devconf); i++) {
+ if (conf[i] != 0)
+ fprintf(fp, "\n %s:%u",
+ ipv6_devconf[i], conf[i]);
+ }
+ }
+}
+
+static void print_afinfo(FILE *fp, struct rtattr *afinfo)
+{
+ struct rtattr *tb[AF_MAX+1];
+
+ if (afinfo->rta_type != IFLA_AF_SPEC) {
+ fprintf(stderr, "BUG: rta type is %d\n", afinfo->rta_type);
+ return;
+ }
+
+ parse_rtattr_nested(tb, AF_MAX, afinfo);
+
+ if (tb[AF_INET] &&
+ (!filter.family || filter.family == AF_INET))
+ print_inet_conf(fp, tb[AF_INET]);
+
+ if (tb[AF_INET6] &&
+ (!filter.family || filter.family == AF_INET))
+ print_inet6_conf(fp, tb[AF_INET6]);
+}
+
int print_linkinfo(const struct sockaddr_nl *who,
struct nlmsghdr *n, void *arg)
{
@@ -509,6 +629,9 @@ int print_linkinfo(const struct sockaddr_nl *who,
print_link_stats(fp, RTA_DATA(tb[IFLA_STATS]));
}
+ if (show_details && tb[IFLA_AF_SPEC])
+ print_afinfo(fp, tb[IFLA_AF_SPEC]);
+
if (do_link && tb[IFLA_VFINFO_LIST] && tb[IFLA_NUM_VF]) {
struct rtattr *i, *vflist = tb[IFLA_VFINFO_LIST];
int rem = RTA_PAYLOAD(vflist);
--
1.7.10.4
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists