]> git.proxmox.com Git - mirror_frr.git/commitdiff
bgpd: peer_uptime overflows after 1 year
authorPaul Jakma <paul@opensourcerouting.org>
Tue, 26 May 2015 14:19:38 +0000 (15:19 +0100)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 19 May 2016 14:41:13 +0000 (10:41 -0400)
* bgpd.c: (peer_uptime) Wraps after 1 year, and doesn't indicate years.
  Fix. Assume a year is 365 days, for an easy life.

Fixes: Bug #836
Reported-by: Rolf Hanßen
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
bgpd/bgpd.c

index 30bfd67fc27ea2f106c13db9b2d6dd65edfd9664..61bed4fc535b8f27af2ef90ef1fb7446fba21517 100644 (file)
@@ -6084,17 +6084,20 @@ peer_uptime (time_t uptime2, char *buf, size_t len, u_char use_json, json_object
 
   /* Making formatted timer strings. */
 #define ONE_DAY_SECOND 60*60*24
-#define ONE_WEEK_SECOND 60*60*24*7
+#define ONE_WEEK_SECOND ONE_DAY_SECOND*7
+#define ONE_YEAR_SECOND ONE_DAY_SECOND*365
 
   if (use_json)
     {
       unsigned long time_store;
-      unsigned long day_msec    = 86400000;
-      unsigned long hour_msec   = 3600000;
-      unsigned long minute_msec = 60000;
       unsigned long sec_msec    = 1000;
+      unsigned long minute_msec = sec_msec * 60;
+      unsigned long hour_msec   = minute_msec * 60;
+      unsigned long day_msec    = hour_msec * 24;
+      unsigned long year_msec   = day_msec *365;
 
       time_store =
+       year_msec * tm->tm_year +
        day_msec * tm->tm_yday +
        hour_msec * tm->tm_hour +
        minute_msec * tm->tm_min +
@@ -6108,9 +6111,13 @@ peer_uptime (time_t uptime2, char *buf, size_t len, u_char use_json, json_object
   else if (uptime1 < ONE_WEEK_SECOND)
     snprintf (buf, len, "%dd%02dh%02dm",
              tm->tm_yday, tm->tm_hour, tm->tm_min);
-  else
+  else if (uptime1 < ONE_YEAR_SECOND)
     snprintf (buf, len, "%02dw%dd%02dh",
              tm->tm_yday/7, tm->tm_yday - ((tm->tm_yday/7) * 7), tm->tm_hour);
+  else
+    snprintf (buf, len, "%02dy%02dw%dd",
+             tm->tm_year - 70, tm->tm_yday/7,
+             tm->tm_yday - ((tm->tm_yday/7) * 7));
 
   return buf;
 }