From 1dac7817b44f0dea2828c2b897c7b3c81550e057 Mon Sep 17 00:00:00 2001 From: Tony Zelenoff Date: Thu, 26 Jan 2012 04:50:04 +0000 Subject: [PATCH] Modify neighbour proxy show 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 --- ip/ipneigh.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/ip/ipneigh.c b/ip/ipneigh.c index c8f745e..313cc63 100644 --- a/ip/ipneigh.c +++ b/ip/ipneigh.c @@ -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); } -- 2.39.2