]> rtime.felk.cvut.cz Git - lisovros/iproute2_canprio.git/blobdiff - ip/ipneigh.c
Modify neighbour proxy show
[lisovros/iproute2_canprio.git] / 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);
        }