]> rtime.felk.cvut.cz Git - lisovros/iproute2_canprio.git/commitdiff
Modify neighbour proxy show
authorTony Zelenoff <antonz@parallels.com>
Thu, 26 Jan 2012 04:50:04 +0000 (04:50 +0000)
committerStephen Hemminger <shemminger@vyatta.com>
Thu, 9 Feb 2012 23:06:52 +0000 (15:06 -0800)
New "ip neigh show proxy" command now can show proxies which
were added with "ip neigh add proxy" command. Kernel code to
support this feature sent a bit earlier to netdev.

Signed-off-by: Tony Zelenoff <antonz@parallels.com>
ip/ipneigh.c

index c8f745ea8a348ce5b7fd0bca77ad19c1385b835e..313cc63ce5e6312c064efb9831f3807dd60af5d1 100644 (file)
@@ -209,6 +209,7 @@ int print_neigh(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
        if (filter.index && filter.index != r->ndm_ifindex)
                return 0;
        if (!(filter.state&r->ndm_state) &&
+           !(r->ndm_flags & NTF_PROXY) &&
            (r->ndm_state || !(filter.state&0x100)) &&
              (r->ndm_family != AF_DECnet))
                return 0;
@@ -267,6 +268,9 @@ int print_neigh(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
        if (r->ndm_flags & NTF_ROUTER) {
                fprintf(fp, " router");
        }
+       if (r->ndm_flags & NTF_PROXY) {
+               fprintf(fp, " proxy");
+       }
        if (tb[NDA_CACHEINFO] && show_stats) {
                struct nda_cacheinfo *ci = RTA_DATA(tb[NDA_CACHEINFO]);
                int hz = get_user_hz();
@@ -314,6 +318,7 @@ int do_show_or_flush(int argc, char **argv, int flush)
 {
        char *filter_dev = NULL;
        int state_given = 0;
+       struct ndmsg ndm = { 0 };
 
        ipneigh_reset_filter();
 
@@ -354,7 +359,9 @@ int do_show_or_flush(int argc, char **argv, int flush)
                        if (state == 0)
                                state = 0x100;
                        filter.state |= state;
-               } else {
+               } else if (strcmp(*argv, "proxy") == 0)
+                       ndm.ndm_flags = NTF_PROXY;
+               else {
                        if (strcmp(*argv, "to") == 0) {
                                NEXT_ARG();
                        }
@@ -418,7 +425,9 @@ int do_show_or_flush(int argc, char **argv, int flush)
                return 1;
        }
 
-       if (rtnl_wilddump_request(&rth, filter.family, RTM_GETNEIGH) < 0) {
+       ndm.ndm_family = filter.family;
+
+       if (rtnl_dump_request(&rth, RTM_GETNEIGH, &ndm, sizeof(struct ndmsg)) < 0) {
                perror("Cannot send dump request");
                exit(1);
        }