]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ipnetconf: by default dump all entries
authorNicolas Dichtel <nicolas.dichtel@6wind.com>
Fri, 17 May 2013 08:47:33 +0000 (01:47 -0700)
committerStephen Hemminger <stephen@networkplumber.org>
Fri, 17 May 2013 15:38:36 +0000 (08:38 -0700)
This is now possible, because the dump function has been added in kernel.
Note that IPv4 and IPv6 entries are displayed.

Before this patch, only all entries were displayed.

Example:
$ ip netconf
ipv4 dev lo forwarding on rp_filter off mc_forwarding 0
ipv4 dev eth0 forwarding on rp_filter off mc_forwarding 1
ipv4 all forwarding on rp_filter off mc_forwarding 1
ipv4 default forwarding on rp_filter off mc_forwarding 0
ipv6 dev lo forwarding on mc_forwarding 0
ipv6 dev eth0 forwarding on mc_forwarding 0
ipv6 all forwarding on mc_forwarding 0
ipv6 default forwarding on mc_forwarding 0

Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
ip/ipnetconf.c

index 8ceadfe4360bc09b3491d9ea127722b7b970d814..9a77ecbf787f6515daaa30990c51938f4a21b157 100644 (file)
@@ -136,7 +136,6 @@ static int do_show(int argc, char **argv)
        filter.family = preferred_family;
        if (filter.family == AF_UNSPEC)
                filter.family = AF_INET;
-       filter.ifindex = NETCONFA_IFINDEX_ALL;
 
        while (argc > 0) {
                if (strcmp(*argv, "dev") == 0) {
@@ -152,17 +151,34 @@ static int do_show(int argc, char **argv)
        }
 
        ll_init_map(&rth);
-       memset(&req, 0, sizeof(req));
-       req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct netconfmsg));
-       req.n.nlmsg_flags = NLM_F_REQUEST|NLM_F_ACK;
-       req.n.nlmsg_type = RTM_GETNETCONF;
-       req.ncm.ncm_family = filter.family;
-       addattr_l(&req.n, sizeof(req), NETCONFA_IFINDEX, &filter.ifindex,
-                 sizeof(filter.ifindex));
-
-       rtnl_send(&rth, &req.n, req.n.nlmsg_len);
-       rtnl_listen(&rth, print_netconf, stdout);
-
+       if (filter.ifindex) {
+               memset(&req, 0, sizeof(req));
+               req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct netconfmsg));
+               req.n.nlmsg_flags = NLM_F_REQUEST|NLM_F_ACK;
+               req.n.nlmsg_type = RTM_GETNETCONF;
+               req.ncm.ncm_family = filter.family;
+               if (filter.ifindex)
+                       addattr_l(&req.n, sizeof(req), NETCONFA_IFINDEX,
+                                 &filter.ifindex, sizeof(filter.ifindex));
+
+               rtnl_send(&rth, &req.n, req.n.nlmsg_len);
+               rtnl_listen(&rth, print_netconf, stdout);
+       } else {
+dump:
+               if (rtnl_wilddump_request(&rth, filter.family, RTM_GETNETCONF) < 0) {
+                       perror("Cannot send dump request");
+                       exit(1);
+               }
+               if (rtnl_dump_filter(&rth, print_netconf, stdout) < 0) {
+                       fprintf(stderr, "Dump terminated\n");
+                       exit(1);
+               }
+               if (preferred_family == AF_UNSPEC) {
+                       preferred_family = AF_INET6;
+                       filter.family = AF_INET6;
+                       goto dump;
+               }
+       }
        return 0;
 }