]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ip monitor: Dont print timestamp or banner-label for cloned routes
authorvadimk <vadim4j@gmail.com>
Thu, 4 Sep 2014 19:48:08 +0000 (22:48 +0300)
committerStephen Hemminger <stephen@networkplumber.org>
Sun, 28 Sep 2014 22:57:52 +0000 (15:57 -0700)
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 <vadim4j@gmail.com>
ip/ipmonitor.c

index 70f2a7adbae1f1c00ca1774919e3b250b44fe489..3cdbe1b9a3d5f8551bc6ff1fb318d10b2ffbcceb 100644 (file)
@@ -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)