From: vadimk Date: Thu, 4 Sep 2014 19:48:08 +0000 (+0300) Subject: ip monitor: Dont print timestamp or banner-label for cloned routes X-Git-Tag: v3.17.0~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2271779d8008d4e6041d0dddeefb1b026669d18c;p=thirdparty%2Fiproute2.git ip monitor: Dont print timestamp or banner-label for cloned routes This is ugly fix but solves the case when timestamp or banner-label is printed before the cloned route will be skipped by iproute filter which filters out all cached routes by default. In such case timestamp will be printed twice: Timestamp: Thu Sep 4 19:46:59 2014 457933 usec Timestamp: Thu Sep 4 19:47:07 2014 977970 usec 10.3.5.1 dev wlp3s0 lladdr XX:XX:XX:XX:XX:XX STALE Signed-off-by: Vadim Kochan --- diff --git a/ip/ipmonitor.c b/ip/ipmonitor.c index 70f2a7adb..3cdbe1b9a 100644 --- a/ip/ipmonitor.c +++ b/ip/ipmonitor.c @@ -41,9 +41,6 @@ static int accept_msg(const struct sockaddr_nl *who, { FILE *fp = (FILE*)arg; - if (timestamp) - print_timestamp(fp); - if (n->nlmsg_type == RTM_NEWROUTE || n->nlmsg_type == RTM_DELROUTE) { struct rtmsg *r = NLMSG_DATA(n); int len = n->nlmsg_len - NLMSG_LENGTH(sizeof(*r)); @@ -53,6 +50,12 @@ static int accept_msg(const struct sockaddr_nl *who, return -1; } + if (r->rtm_flags & RTM_F_CLONED) + return 0; + + if (timestamp) + print_timestamp(fp); + if (r->rtm_family == RTNL_FAMILY_IPMR || r->rtm_family == RTNL_FAMILY_IP6MR) { if (prefix_banner) @@ -66,6 +69,10 @@ static int accept_msg(const struct sockaddr_nl *who, return 0; } } + + if (timestamp) + print_timestamp(fp); + if (n->nlmsg_type == RTM_NEWLINK || n->nlmsg_type == RTM_DELLINK) { ll_remember_index(who, n, NULL); if (prefix_banner)