]> git.proxmox.com Git - mirror_iproute2.git/commitdiff
iplink: bridge: export read-only timers
authorNikolay Aleksandrov <nikolay@cumulusnetworks.com>
Mon, 8 Feb 2016 23:14:21 +0000 (00:14 +0100)
committerStephen Hemminger <stephen@networkplumber.org>
Tue, 9 Feb 2016 18:42:03 +0000 (10:42 -0800)
Netlink already provides hello_timer, tcn_timer, topology_change_timer
and gc_timer, so let's make them visible.

Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
include/utils.h
ip/iplink_bridge.c

index 7310f4e0e5dbde640b79d97bc4d3603c28f0e23c..c43427c35a6ccaf9d11995a156aafdc66a78e2d8 100644 (file)
@@ -175,6 +175,24 @@ static inline __u32 nl_mgrp(__u32 group)
        return group ? (1 << (group - 1)) : 0;
 }
 
+/* courtesy of bridge-utils */
+static inline unsigned long __tv_to_jiffies(const struct timeval *tv)
+{
+       unsigned long long jif;
+
+       jif = 1000000ULL * tv->tv_sec + tv->tv_usec;
+
+       return jif/10000;
+}
+
+static inline void __jiffies_to_tv(struct timeval *tv, unsigned long jiffies)
+{
+       unsigned long long tvusec;
+
+       tvusec = 10000ULL*jiffies;
+       tv->tv_sec = tvusec/1000000;
+       tv->tv_usec = tvusec - 1000000 * tv->tv_sec;
+}
 
 int print_timestamp(FILE *fp);
 void print_nlmsg_timestamp(FILE *fp, const struct nlmsghdr *n);
index 33ffa6c27f030481e192ed004ab77812430b7531..cd16557514177f79e942e3318e14de7ad459f9a1 100644 (file)
@@ -197,6 +197,40 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
        if (tb[IFLA_BR_TOPOLOGY_CHANGE_DETECTED])
                fprintf(f, "topology_change_detected %u ",
                        rta_getattr_u8(tb[IFLA_BR_TOPOLOGY_CHANGE_DETECTED]));
+
+       if (tb[IFLA_BR_HELLO_TIMER]) {
+               struct timeval tv;
+
+               __jiffies_to_tv(&tv, rta_getattr_u64(tb[IFLA_BR_HELLO_TIMER]));
+               fprintf(f, "hello_timer %4i.%.2i ", (int)tv.tv_sec,
+                       (int)tv.tv_usec/10000);
+       }
+
+       if (tb[IFLA_BR_TCN_TIMER]) {
+               struct timeval tv;
+
+               __jiffies_to_tv(&tv, rta_getattr_u64(tb[IFLA_BR_TCN_TIMER]));
+               fprintf(f, "tcn_timer %4i.%.2i ", (int)tv.tv_sec,
+                       (int)tv.tv_usec/10000);
+       }
+
+       if (tb[IFLA_BR_TOPOLOGY_CHANGE_TIMER]) {
+               unsigned long jiffies;
+               struct timeval tv;
+
+               jiffies = rta_getattr_u64(tb[IFLA_BR_TOPOLOGY_CHANGE_TIMER]);
+               __jiffies_to_tv(&tv, jiffies);
+               fprintf(f, "topology_change_timer %4i.%.2i ", (int)tv.tv_sec,
+                       (int)tv.tv_usec/10000);
+       }
+
+       if (tb[IFLA_BR_GC_TIMER]) {
+               struct timeval tv;
+
+               __jiffies_to_tv(&tv, rta_getattr_u64(tb[IFLA_BR_GC_TIMER]));
+               fprintf(f, "gc_timer %4i.%.2i ", (int)tv.tv_sec,
+                       (int)tv.tv_usec/10000);
+       }
 }
 
 static void bridge_print_help(struct link_util *lu, int argc, char **argv,