diff -Nru sysstat-11.4.1/activity.c sysstat-11.4.3/activity.c
--- sysstat-11.4.1/activity.c	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/activity.c	2017-01-11 13:53:40.000000000 +0100
@@ -156,6 +156,7 @@
 	.f_render	= render_irq_stats,
 	.f_xml_print	= xml_print_irq_stats,
 	.f_json_print	= json_print_irq_stats,
+	.f_svg_print	= NULL,
 	.hdr_line	= "INTR;intr/s",
 	.name		= "A_IRQ",
 	.g_nr		= 0,
@@ -396,6 +397,7 @@
 	.f_render	= render_serial_stats,
 	.f_xml_print	= xml_print_serial_stats,
 	.f_json_print	= json_print_serial_stats,
+	.f_svg_print	= NULL,
 	.hdr_line	= "TTY;rcvin/s;txmtin/s;framerr/s;prtyerr/s;brk/s;ovrun/s",
 	.name		= "A_SERIAL",
 	.g_nr		= 0,
@@ -1254,6 +1256,7 @@
 	.f_render	= render_pwr_wghfreq_stats,
 	.f_xml_print	= xml_print_pwr_wghfreq_stats,
 	.f_json_print	= json_print_pwr_wghfreq_stats,
+	.f_svg_print	= NULL,
 	.hdr_line	= "CPU;wghMHz",
 	.name		= "A_PWR_WGHFREQ",
 	.g_nr		= 0,
@@ -1287,6 +1290,7 @@
 	.f_render	= render_pwr_usb_stats,
 	.f_xml_print	= xml_print_pwr_usb_stats,
 	.f_json_print	= json_print_pwr_usb_stats,
+	.f_svg_print	= NULL,
 	.hdr_line	= "manufact;product;BUS;idvendor;idprod;maxpower",
 	.name		= "A_PWR_USB",
 	.g_nr		= 0,
diff -Nru sysstat-11.4.1/CHANGES sysstat-11.4.3/CHANGES
--- sysstat-11.4.1/CHANGES	2016-09-23 14:51:16.000000000 +0200
+++ sysstat-11.4.3/CHANGES	2017-01-11 13:54:26.000000000 +0100
@@ -1,5 +1,23 @@
 Changes:
 
+2017/01/11: Version 11.4.3 - Sebastien Godard (sysstat <at> orange.fr)
+	* sar: Better handle dynamically registered devices.
+	* Sort keywords definition in sar, sadc and mpstat manual pages.
+	* SVG: Change some colors to make graphs easier to distinguish.
+	* SVG: Init f_svg_print() function pointer to NULL.
+	* sar: Fix incorrect gcc warning in svg_stats.c.
+	* Small fix in iostat manual page.
+	* Cosmetic changes in source code.
+
+2016/11/04: Version 11.4.2 - Sebastien Godard (sysstat <at> orange.fr)
+	* [Michal Sekletar]: sar: make buffers that hold timestamps
+	  bigger.
+	* [Shantanu Goel]: sar: /proc/vmstat fix for Linux 4.8.
+	* [Breno Leitao]: sar: Improve cpuinfo read for POWER architecture.
+	* sadf: Use a decimal point instead of a coma in JSON output.
+	* pidstat: Use either the short or the full command line when
+	  looking for a pattern with options -C or -G.
+
 2016/09/23: Version 11.4.1 - Sebastien Godard (sysstat <at> orange.fr)
 	* sadf: Fix broken datafile conversion from old formats.
 	* sadf: Fix fields list displayed by sadf -d for filesystem
diff -Nru sysstat-11.4.1/cifsiostat.c sysstat-11.4.3/cifsiostat.c
--- sysstat-11.4.1/cifsiostat.c	2016-09-23 14:39:22.000000000 +0200
+++ sysstat-11.4.3/cifsiostat.c	2017-01-11 13:53:40.000000000 +0100
@@ -53,7 +53,7 @@
 int flags = 0;		/* Flag for common options and system state */
 
 long interval = 0;
-char timestamp[64];
+char timestamp[TIMESTAMP_LEN];
 
 struct sigaction alrm_act;
 
diff -Nru sysstat-11.4.1/common.c sysstat-11.4.3/common.c
--- sysstat-11.4.1/common.c	2016-09-23 14:39:22.000000000 +0200
+++ sysstat-11.4.3/common.c	2017-01-11 13:53:40.000000000 +0100
@@ -367,7 +367,7 @@
 int print_gal_header(struct tm *rectime, char *sysname, char *release,
 		     char *nodename, char *machine, int cpu_nr)
 {
-	char cur_date[64];
+	char cur_date[TIMESTAMP_LEN];
 	int rc = 0;
 
 	if (rectime == NULL) {
@@ -1026,16 +1026,16 @@
  *
  * IN:
  * @num		Number of values to print.
- * @width	Output width.
+ * @wi		Output width.
  ***************************************************************************
 */
-void cprintf_u64(int num, int width, ...)
+void cprintf_u64(int num, int wi, ...)
 {
 	int i;
 	uint64_t val;
 	va_list args;
 
-	va_start(args, width);
+	va_start(args, wi);
 
 	for (i = 0; i < num; i++) {
 		val = va_arg(args, unsigned long long);
@@ -1045,7 +1045,7 @@
 		else {
 			printf("%s", sc_int_stat);
 		}
-		printf(" %*"PRIu64, width, val);
+		printf(" %*"PRIu64, wi, val);
 		printf("%s", sc_normal);
 	}
 
@@ -1058,21 +1058,21 @@
  *
  * IN:
  * @num		Number of values to print.
- * @width	Output width.
+ * @wi		Output width.
  ***************************************************************************
 */
-void cprintf_x(int num, int width, ...)
+void cprintf_x(int num, int wi, ...)
 {
 	int i;
 	unsigned int val;
 	va_list args;
 
-	va_start(args, width);
+	va_start(args, wi);
 
 	for (i = 0; i < num; i++) {
 		val = va_arg(args, unsigned int);
 		printf("%s", sc_int_stat);
-		printf(" %*x", width, val);
+		printf(" %*x", wi, val);
 		printf("%s", sc_normal);
 	}
 
@@ -1085,7 +1085,7 @@
  *
  * IN:
  * @num		Number of values to print.
- * @width	Output width.
+ * @wi		Output width.
  * @wd		Number of decimal places.
  ***************************************************************************
 */
@@ -1119,7 +1119,7 @@
  *
  * IN:
  * @num		Number of values to print.
- * @width	Output width.
+ * @wi		Output width.
  * @wd		Number of decimal places.
  ***************************************************************************
 */
diff -Nru sysstat-11.4.1/common.h sysstat-11.4.3/common.h
--- sysstat-11.4.1/common.h	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/common.h	2017-01-11 13:53:40.000000000 +0100
@@ -31,6 +31,9 @@
 
 #define DISP_HDR	1
 
+/* Timestamp buffer length */
+#define TIMESTAMP_LEN	64
+
 /* Number of seconds per day */
 #define SEC_PER_DAY	3600 * 24
 
diff -Nru sysstat-11.4.1/configure sysstat-11.4.3/configure
--- sysstat-11.4.1/configure	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/configure	2017-01-11 13:53:40.000000000 +0100
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for sysstat 11.4.1.
+# Generated by GNU Autoconf 2.69 for sysstat 11.4.3.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -577,8 +577,8 @@
 # Identity of this package.
 PACKAGE_NAME='sysstat'
 PACKAGE_TARNAME='sysstat'
-PACKAGE_VERSION='11.4.1'
-PACKAGE_STRING='sysstat 11.4.1'
+PACKAGE_VERSION='11.4.3'
+PACKAGE_STRING='sysstat 11.4.3'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -1308,7 +1308,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures sysstat 11.4.1 to adapt to many kinds of systems.
+\`configure' configures sysstat 11.4.3 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1369,7 +1369,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of sysstat 11.4.1:";;
+     short | recursive ) echo "Configuration of sysstat 11.4.3:";;
    esac
   cat <<\_ACEOF
 
@@ -1489,7 +1489,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-sysstat configure 11.4.1
+sysstat configure 11.4.3
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1908,7 +1908,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by sysstat $as_me 11.4.1, which was
+It was created by sysstat $as_me 11.4.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -5984,7 +5984,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by sysstat $as_me 11.4.1, which was
+This file was extended by sysstat $as_me 11.4.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -6037,7 +6037,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-sysstat config.status 11.4.1
+sysstat config.status 11.4.3
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -Nru sysstat-11.4.1/configure.in sysstat-11.4.3/configure.in
--- sysstat-11.4.1/configure.in	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/configure.in	2017-01-11 13:53:40.000000000 +0100
@@ -4,7 +4,7 @@
 # Modified by Sebastien Godard (sysstat <at> orange.fr)
 
 # Initialization of $PACKAGE_VERSION and $PACKAGE_NAME variables
-AC_INIT(sysstat, 11.4.1)
+AC_INIT(sysstat, 11.4.3)
 
 # Ensure that a recent enough version of Autoconf is being used
 AC_PREREQ(2.53)
diff -Nru sysstat-11.4.1/debian/changelog sysstat-11.4.3/debian/changelog
--- sysstat-11.4.1/debian/changelog	2016-10-09 18:00:03.000000000 +0200
+++ sysstat-11.4.3/debian/changelog	2017-01-28 10:43:40.000000000 +0100
@@ -1,3 +1,9 @@
+sysstat (11.4.3-1) unstable; urgency=medium
+
+  * New upstream (stable) version.
+
+ -- Robert Luberda <robert@debian.org>  Sat, 28 Jan 2017 10:43:40 +0100
+
 sysstat (11.4.1-1) unstable; urgency=medium
 
   * New upstream (stable) version.
diff -Nru sysstat-11.4.1/debian/patches/06-exec.patch sysstat-11.4.3/debian/patches/06-exec.patch
--- sysstat-11.4.1/debian/patches/06-exec.patch	2016-10-09 18:00:03.000000000 +0200
+++ sysstat-11.4.3/debian/patches/06-exec.patch	2017-01-28 10:43:40.000000000 +0100
@@ -10,7 +10,7 @@
  1 file changed, 1 deletion(-)
 
 diff --git a/sar.c b/sar.c
-index 6898584..caeb179 100644
+index 9c4e7e2..a2f261e 100644
 --- a/sar.c
 +++ b/sar.c
 @@ -1484,7 +1484,6 @@ int main(int argc, char **argv)
diff -Nru sysstat-11.4.1/debian/patches/09-format-warning.patch sysstat-11.4.3/debian/patches/09-format-warning.patch
--- sysstat-11.4.1/debian/patches/09-format-warning.patch	2016-10-09 18:00:03.000000000 +0200
+++ sysstat-11.4.3/debian/patches/09-format-warning.patch	2017-01-28 10:43:40.000000000 +0100
@@ -8,7 +8,7 @@
  1 file changed, 1 insertion(+), 5 deletions(-)
 
 diff --git a/rndr_stats.c b/rndr_stats.c
-index f30b668..e14c9f3 100644
+index 9f0b5ad..ee6cc9e 100644
 --- a/rndr_stats.c
 +++ b/rndr_stats.c
 @@ -133,11 +133,7 @@ static void render(int isdb, char *pre, int rflags, const char *pptxt,
diff -Nru sysstat-11.4.1/debian/patches/13-remove-sccsid.patch sysstat-11.4.3/debian/patches/13-remove-sccsid.patch
--- sysstat-11.4.1/debian/patches/13-remove-sccsid.patch	2016-10-09 18:00:03.000000000 +0200
+++ sysstat-11.4.3/debian/patches/13-remove-sccsid.patch	2017-01-28 10:43:40.000000000 +0100
@@ -18,7 +18,7 @@
  8 files changed, 24 deletions(-)
 
 diff --git a/cifsiostat.c b/cifsiostat.c
-index 6e1693d..31f4e8e 100644
+index 0249ccb..40da3a6 100644
 --- a/cifsiostat.c
 +++ b/cifsiostat.c
 @@ -41,9 +41,6 @@
@@ -32,7 +32,7 @@
  struct cifs_stats *st_cifs[2];
  struct io_hdr_stats *st_hdr_cifs;
 diff --git a/iostat.c b/iostat.c
-index d383fcc..9f68fc7 100644
+index 9992ea9..639c3e4 100644
 --- a/iostat.c
 +++ b/iostat.c
 @@ -48,9 +48,6 @@
@@ -46,7 +46,7 @@
  unsigned long long uptime[2]  = {0, 0};
  unsigned long long uptime0[2] = {0, 0};
 diff --git a/mpstat.c b/mpstat.c
-index 168e905..3c5156d 100644
+index abcd9aa..a6f93d6 100644
 --- a/mpstat.c
 +++ b/mpstat.c
 @@ -42,9 +42,6 @@
@@ -60,7 +60,7 @@
  unsigned long long uptime0[3] = {0, 0, 0};
  
 diff --git a/pidstat.c b/pidstat.c
-index 5dea8ee..4b9ab16 100644
+index 546f1bc..a645331 100644
 --- a/pidstat.c
 +++ b/pidstat.c
 @@ -47,9 +47,6 @@
@@ -88,7 +88,7 @@
  unsigned int flags = 0;
  
 diff --git a/sadf.c b/sadf.c
-index 0939cd9..9160fdd 100644
+index 58803e6..a143363 100644
 --- a/sadf.c
 +++ b/sadf.c
 @@ -41,9 +41,6 @@
@@ -102,7 +102,7 @@
  
  unsigned int flags = 0;
 diff --git a/sar.c b/sar.c
-index caeb179..e9f4718 100644
+index a2f261e..fc43476 100644
 --- a/sar.c
 +++ b/sar.c
 @@ -42,9 +42,6 @@
@@ -116,7 +116,7 @@
  long interval = -1, count = 0;
  
 diff --git a/tapestat.c b/tapestat.c
-index 1af8c52..12b373e 100644
+index bbe05f0..28aa8a4 100644
 --- a/tapestat.c
 +++ b/tapestat.c
 @@ -52,9 +52,6 @@
diff -Nru sysstat-11.4.1/iostat.c sysstat-11.4.3/iostat.c
--- sysstat-11.4.1/iostat.c	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/iostat.c	2017-01-11 13:53:40.000000000 +0100
@@ -69,7 +69,7 @@
 unsigned int dm_major;	/* Device-mapper major number */
 
 long interval = 0;
-char timestamp[64];
+char timestamp[TIMESTAMP_LEN];
 
 struct sigaction alrm_act;
 
diff -Nru sysstat-11.4.1/json_stats.c sysstat-11.4.3/json_stats.c
--- sysstat-11.4.1/json_stats.c	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/json_stats.c	2017-01-11 13:53:40.000000000 +0100
@@ -692,11 +692,13 @@
 				      unsigned long long itv)
 {
 	int i, j;
-	struct stats_disk *sdc,	*sdp;
+	struct stats_disk *sdc,	*sdp, sdpzero;
 	struct ext_disk_stats xds;
 	int sep = FALSE;
 	char *dev_name, *persist_dev_name;
 
+	memset(&sdpzero, 0, STATS_DISK_SIZE);
+
 	xprintf(tab++, "\"disk\": [");
 
 	for (i = 0; i < a->nr; i++) {
@@ -707,7 +709,13 @@
 			continue;
 
 		j = check_disk_reg(a, curr, !curr, i);
-		sdp = (struct stats_disk *) ((char *) a->buf[!curr] + j * a->msize);
+		if (j < 0) {
+			/* This is a newly registered interface. Previous stats are zero */
+			sdp = &sdpzero;
+		}
+		else {
+			sdp = (struct stats_disk *) ((char *) a->buf[!curr] + j * a->msize);
+		}
 
 		/* Compute extended statistics values */
 		compute_ext_disk_stats(sdc, sdp, itv, &xds);
@@ -779,10 +787,12 @@
 					 unsigned long long itv)
 {
 	int i, j;
-	struct stats_net_dev *sndc, *sndp;
+	struct stats_net_dev *sndc, *sndp, sndzero;
 	int sep = FALSE;
 	double rxkb, txkb, ifutil;
 
+	memset(&sndzero, 0, STATS_NET_DEV_SIZE);
+
 	if (!IS_SELECTED(a->options) || (a->nr <= 0))
 		goto close_json_markup;
 
@@ -796,10 +806,16 @@
 		sndc = (struct stats_net_dev *) ((char *) a->buf[curr] + i * a->msize);
 
 		if (!strcmp(sndc->interface, ""))
-			continue;
+			break;
 
 		j = check_net_dev_reg(a, curr, !curr, i);
-		sndp = (struct stats_net_dev *) ((char *) a->buf[!curr] + j * a->msize);
+		if (j < 0) {
+			/* This is a newly registered interface. Previous stats are zero */
+			sndp = &sndzero;
+		}
+		else {
+			sndp = (struct stats_net_dev *) ((char *) a->buf[!curr] + j * a->msize);
+		}
 
 		if (sep) {
 			printf(",\n");
@@ -856,12 +872,14 @@
 					  unsigned long long itv)
 {
 	int i, j;
-	struct stats_net_edev *snedc, *snedp;
+	struct stats_net_edev *snedc, *snedp, snedzero;
 	int sep = FALSE;
 
 	if (!IS_SELECTED(a->options) || (a->nr <= 0))
 		goto close_json_markup;
 
+	memset(&snedzero, 0, STATS_NET_EDEV_SIZE);
+
 	json_markup_network(tab, OPEN_JSON_MARKUP);
 	tab++;
 
@@ -872,10 +890,16 @@
 		snedc = (struct stats_net_edev *) ((char *) a->buf[curr] + i * a->msize);
 
 		if (!strcmp(snedc->interface, ""))
-			continue;
+			break;
 
 		j = check_net_edev_reg(a, curr, !curr, i);
-		snedp = (struct stats_net_edev *) ((char *) a->buf[!curr] + j * a->msize);
+		if (j < 0) {
+			/* This is a newly registered interface. Previous stats are zero */
+			snedp = &snedzero;
+		}
+		else {
+			snedp = (struct stats_net_edev *) ((char *) a->buf[!curr] + j * a->msize);
+		}
 
 		if (sep) {
 			printf(",\n");
diff -Nru sysstat-11.4.1/man/iostat.in sysstat-11.4.3/man/iostat.in
--- sysstat-11.4.1/man/iostat.in	2016-09-23 14:39:22.000000000 +0200
+++ sysstat-11.4.3/man/iostat.in	2017-01-11 13:42:17.000000000 +0100
@@ -1,4 +1,4 @@
-.TH IOSTAT 1 "OCTOBER 2015" Linux "Linux User's Manual" -*- nroff -*-
+.TH IOSTAT 1 "NOVEMBER 2016" Linux "Linux User's Manual" -*- nroff -*-
 .SH NAME
 iostat \- Report Central Processing Unit (CPU) statistics and input/output
 statistics for devices and partitions.
@@ -288,6 +288,10 @@
 .B ALL
 keyword means that all the block devices defined by the system shall be
 included in the group.
+.IP -H
+This option must be used with option -g and indicates that only global
+statistics for the group are to be displayed, and not statistics for
+individual devices in the group.
 .IP -h
 Make the Device Utilization Report easier to read by a human.
 .IP "-j { ID | LABEL | PATH | UUID | ... } [ device [...] | ALL ]"
@@ -299,12 +303,6 @@
 .IR /dev/disk .
 Optionally, multiple devices can be specified in the chosen persistent name type.
 Because persistent device names are usually long, option
-.IP -H
-This option must be used with option -g and indicates that only global
-statistics for the group are to be displayed, and not statistics for
-individual devices in the group.
-.B -h
-is enabled implicitly with this option.
 .IP -k
 Display statistics in kilobytes per second.
 .IP -m
diff -Nru sysstat-11.4.1/man/mpstat.1 sysstat-11.4.3/man/mpstat.1
--- sysstat-11.4.1/man/mpstat.1	2016-09-23 14:39:22.000000000 +0200
+++ sysstat-11.4.3/man/mpstat.1	2017-01-11 13:42:17.000000000 +0100
@@ -1,4 +1,4 @@
-.TH MPSTAT 1 "MARCH 2016" Linux "Linux User's Manual" -*- nroff -*-
+.TH MPSTAT 1 "DECEMBER 2016" Linux "Linux User's Manual" -*- nroff -*-
 .SH NAME
 mpstat \- Report processors related statistics.
 .SH SYNOPSIS
@@ -52,10 +52,23 @@
 Report interrupts statistics.
 
 Possible keywords are
-.BR SUM ,
-.BR CPU
+.BR CPU ,
+.BR SCPU ,
 and
-.BR SCPU .
+.BR SUM .
+
+With the
+.B CPU
+keyword, the number of each individual interrupt received per
+second by the CPU or CPUs is displayed. Interrupts are those listed
+in /proc/interrupts file.
+
+With the
+.B SCPU
+keyword, the number of each individual software interrupt received per
+second by the CPU or CPUs is displayed. This option works only
+with kernels 2.6.31 and later. Software interrupts are those listed
+in /proc/softirqs file.
 
 With the
 .B SUM
@@ -79,19 +92,6 @@
 the CPU or CPUs.
 .RE
 
-With the
-.B CPU
-keyword, the number of each individual interrupt received per
-second by the CPU or CPUs is displayed. Interrupts are those listed
-in /proc/interrupts file.
-
-With the
-.B SCPU
-keyword, the number of each individual software interrupt received per
-second by the CPU or CPUs is displayed. This option works only
-with kernels 2.6.31 and later. Software interrupts are those listed
-in /proc/softirqs file.
-
 The
 .B ALL
 keyword is equivalent to specifying all the keywords above and
diff -Nru sysstat-11.4.1/man/sadc.in sysstat-11.4.3/man/sadc.in
--- sysstat-11.4.1/man/sadc.in	2015-02-13 16:03:09.000000000 +0100
+++ sysstat-11.4.3/man/sadc.in	2016-12-05 17:57:19.000000000 +0100
@@ -1,10 +1,10 @@
-.TH SADC 8 "JANUARY 2015" Linux "Linux User's Manual" -*- nroff -*-
+.TH SADC 8 "DECEMBER 2016" Linux "Linux User's Manual" -*- nroff -*-
 .SH NAME
 sadc \- System activity data collector.
 .SH SYNOPSIS
 .B @SA_LIB_DIR@/sadc [ -C
 .I comment
-.B ] [ -D ] [ -F ] [ -L ] [ -V ] [ -S { INT | DISK | SNMP | IPV6 | POWER | XDISK | ALL | XALL [,...] } ] [
+.B ] [ -D ] [ -F ] [ -L ] [ -V ] [ -S { DISK | INT | IPV6 | POWER | SNMP | XDISK | ALL | XALL [,...] } ] [
 .I interval
 .B [
 .I count
@@ -124,25 +124,23 @@
 .B sadc
 might still be running when cron starts a new one. Without locking,
 this situation can result in a corrupted system activity file.
-.IP "-S { INT | DISK | SNMP | IPV6 | POWER | XDISK | ALL | XALL [,...] }"
+.IP "-S { DISK | INT | IPV6 | POWER | SNMP | XDISK | ALL | XALL [,...] }"
 Specify which optional activities should be collected by
 .BR sadc .
 Some activities are optional to prevent data files from growing too large.
 The
-.B INT
+.B DISK
 keyword indicates that
 .B sadc
-should collect data for system interrupts.
+should collect data for block devices.
 The
-.B DISK
+.B INT
 keyword indicates that
 .B sadc
-should collect data for block devices.
+should collect data for system interrupts.
 The
-.B SNMP
-and
 .B IPV6
-keywords indicate respectively that SNMP and IPv6 statistics should be
+keyword indicates that IPv6 statistics should be
 collected by
 .BR sadc .
 The
@@ -151,6 +149,11 @@
 .B sadc
 should collect power management statistics.
 The
+.B SNMP
+keyword indicates that SNMP statistics should be
+collected by
+.BR sadc .
+The
 .B ALL
 keyword is equivalent to specifying all the keywords above and therefore
 all previous activities are collected.
diff -Nru sysstat-11.4.1/man/sar.in sysstat-11.4.3/man/sar.in
--- sysstat-11.4.1/man/sar.in	2016-06-03 08:50:23.000000000 +0200
+++ sysstat-11.4.3/man/sar.in	2017-01-11 13:42:17.000000000 +0100
@@ -1,4 +1,4 @@
-.TH SAR 1 "JUNE 2016" Linux "Linux User's Manual" -*- nroff -*-
+.TH SAR 1 "DECEMBER 2016" Linux "Linux User's Manual" -*- nroff -*-
 .SH NAME
 sar \- Collect, report, or save system activity information.
 .SH SYNOPSIS
@@ -626,24 +626,24 @@
 Possible keywords are
 .BR DEV ,
 .BR EDEV ,
+.BR FC ,
+.BR ICMP ,
+.BR EICMP ,
+.BR ICMP6 ,
+.BR EICMP6 ,
+.BR IP ,
+.BR EIP ,
+.BR IP6 ,
+.BR EIP6 ,
 .BR NFS ,
 .BR NFSD ,
 .BR SOCK ,
-.BR IP ,
-.BR EIP ,
-.BR ICMP ,
-.BR EICMP ,
+.BR SOCK6 ,
 .BR TCP ,
 .BR ETCP ,
-.BR UDP ,
-.BR SOCK6 ,
-.BR IP6 ,
-.BR EIP6 ,
-.BR ICMP6 ,
-.BR EICMP6 ,
-.BR UDP6
+.BR UDP
 and
-.BR FC .
+.BR UDP6 .
 
 With the
 .B DEV
@@ -754,573 +754,546 @@
 .RE
 
 With the
-.B NFS
-keyword, statistics about NFS client activity are reported.
+.B FC
+keyword, statistics about fibre channel traffic are reported.
+Note that fibre channel statistics depend on
+.BR sadc 's
+option "-S DISK" to be collected.
 The following values are displayed:
 
-.B call/s
-.RS
-Number of RPC requests made per second.
-.RE
-
-.B retrans/s
+.B FCHOST
 .RS
-Number of RPC requests per second, those which needed to be retransmitted (for
-example because of a server timeout).
+Name of the fibre channel host bus adapter (HBA) interface for which statistics are reported.
 .RE
 
-.B read/s
+.B fch_rxf/s
 .RS
-Number of 'read' RPC calls made per second.
+The total number of frames received per second.
 .RE
 
-.B write/s
+.B fch_txf/s
 .RS
-Number of 'write' RPC calls made per second.
+The total number of frames transmitted per second.
 .RE
 
-.B access/s
+.B fch_rxw/s
 .RS
-Number of 'access' RPC calls made per second.
+The total number of transmission words received per second.
 .RE
 
-.B getatt/s
+.B fch_txw/s
 .RS
-Number of 'getattr' RPC calls made per second.
+The total number of transmission words transmitted per second.
 .RE
 
 With the
-.B NFSD
-keyword, statistics about NFS server activity are reported.
-The following values are displayed:
-
-.B scall/s
-.RS
-Number of RPC requests received per second.
-.RE
-
-.B badcall/s
-.RS
-Number of bad RPC requests received per second, those whose
-processing generated an error.
-.RE
-
-.B packet/s
-.RS
-Number of network packets received per second.
-.RE
+.B ICMP
+keyword, statistics about ICMPv4 network traffic are reported.
+Note that ICMPv4 statistics depend on
+.BR sadc 's
+option "-S SNMP"
+to be collected.
+The following values are displayed (formal SNMP names between
+square brackets):
 
-.B udp/s
+.B imsg/s
 .RS
-Number of UDP packets received per second.
+The total number of ICMP messages which the entity
+received per second [icmpInMsgs].
+Note that this counter includes all those counted by ierr/s.
 .RE
 
-.B tcp/s
+.B omsg/s
 .RS
-Number of TCP packets received per second.
+The total number of ICMP messages which this entity
+attempted to send per second [icmpOutMsgs].
+Note that this counter includes all those counted by oerr/s.
 .RE
 
-.B hit/s
+.B iech/s
 .RS
-Number of reply cache hits per second.
+The number of ICMP Echo (request) messages received per second [icmpInEchos].
 .RE
 
-.B miss/s
+.B iechr/s
 .RS
-Number of reply cache misses per second.
+The number of ICMP Echo Reply messages received per second [icmpInEchoReps].
 .RE
 
-.B sread/s
+.B oech/s
 .RS
-Number of 'read' RPC calls received per second.
+The number of ICMP Echo (request) messages sent per second [icmpOutEchos].
 .RE
 
-.B swrite/s
+.B oechr/s
 .RS
-Number of 'write' RPC calls received per second.
+The number of ICMP Echo Reply messages sent per second [icmpOutEchoReps].
 .RE
 
-.B saccess/s
+.B itm/s
 .RS
-Number of 'access' RPC calls received per second.
+The number of ICMP Timestamp (request) messages received per second [icmpInTimestamps].
 .RE
 
-.B sgetatt/s
+.B itmr/s
 .RS
-Number of 'getattr' RPC calls received per second.
+The number of ICMP Timestamp Reply messages received per second [icmpInTimestampReps].
 .RE
 
-With the
-.B SOCK
-keyword, statistics on sockets in use are reported
-(IPv4).
-The following values are displayed:
-
-.B totsck
+.B otm/s
 .RS
-Total number of sockets used by the system.
+The number of ICMP Timestamp (request) messages sent per second [icmpOutTimestamps].
 .RE
 
-.B tcpsck
+.B otmr/s
 .RS
-Number of TCP sockets currently in use.
+The number of ICMP Timestamp Reply messages sent per second [icmpOutTimestampReps].
 .RE
 
-.B udpsck
+.B iadrmk/s
 .RS
-Number of UDP sockets currently in use.
+The number of ICMP Address Mask Request messages received per second [icmpInAddrMasks].
 .RE
 
-.B rawsck
+.B iadrmkr/s
 .RS
-Number of RAW sockets currently in use.
+The number of ICMP Address Mask Reply messages received per second [icmpInAddrMaskReps].
 .RE
 
-.B ip-frag
+.B oadrmk/s
 .RS
-Number of IP fragments currently in queue.
+The number of ICMP Address Mask Request messages sent per second [icmpOutAddrMasks].
 .RE
 
-.B tcp-tw
+.B oadrmkr/s
 .RS
-Number of TCP sockets in TIME_WAIT state.
+The number of ICMP Address Mask Reply messages sent per second [icmpOutAddrMaskReps].
 .RE
 
 With the
-.B IP
-keyword, statistics about IPv4 network traffic are reported.
-Note that IPv4 statistics depend on
-.BR sadc 's
-option "-S SNMP"
-to be collected.
+.B EICMP
+keyword, statistics about ICMPv4 error messages are reported.
+Note that ICMPv4 statistics depend on
+.BR  sadc 's
+option "-S SNMP" to be collected.
 The following values are displayed (formal SNMP names between
 square brackets):
 
-.B irec/s
+.B ierr/s
 .RS
-The total number of input datagrams received from interfaces
-per second, including those received in error [ipInReceives].
+The number of ICMP messages per second which the entity received but
+determined as having ICMP-specific errors (bad ICMP
+checksums, bad length, etc.) [icmpInErrors].
 .RE
 
-.B fwddgm/s
+.B oerr/s
 .RS
-The number of input datagrams per second, for which this entity was not
-their final IP destination, as a result of which an attempt
-was made to find a route to forward them to that final
-destination [ipForwDatagrams].
+The number of ICMP messages per second which this entity did not send
+due to problems discovered within ICMP such as a lack of buffers [icmpOutErrors].
 .RE
 
-.B idel/s
+.B idstunr/s
 .RS
-The total number of input datagrams successfully delivered per second
-to IP user-protocols (including ICMP) [ipInDelivers].
+The number of ICMP Destination Unreachable messages
+received per second [icmpInDestUnreachs].
 .RE
 
-.B orq/s
+.B odstunr/s
 .RS
-The total number of IP datagrams which local IP user-protocols (including ICMP)
-supplied per second to IP in requests for transmission [ipOutRequests].
-Note that this counter does not include any datagrams counted in fwddgm/s.
+The number of ICMP Destination Unreachable messages sent per second [icmpOutDestUnreachs].
 .RE
 
-.B asmrq/s
+.B itmex/s
 .RS
-The number of IP fragments received per second which needed to be
-reassembled at this entity [ipReasmReqds].
+The number of ICMP Time Exceeded messages received per second [icmpInTimeExcds].
 .RE
 
-.B asmok/s
+.B otmex/s
 .RS
-The number of IP datagrams successfully re-assembled per second [ipReasmOKs].
+The number of ICMP Time Exceeded messages sent per second [icmpOutTimeExcds].
 .RE
 
-.B fragok/s
+.B iparmpb/s
 .RS
-The number of IP datagrams that have been successfully
-fragmented at this entity per second [ipFragOKs].
+The number of ICMP Parameter Problem messages received per second [icmpInParmProbs].
 .RE
 
-.B fragcrt/s
+.B oparmpb/s
 .RS
-The number of IP datagram fragments that have been
-generated per second as a result of fragmentation at this entity [ipFragCreates].
+The number of ICMP Parameter Problem messages sent per second [icmpOutParmProbs].
 .RE
 
-With the
-.B EIP
-keyword, statistics about IPv4 network errors are reported.
-Note that IPv4 statistics depend on
-.BR sadc 's
-option "-S SNMP" to be collected.
-The following values are displayed (formal SNMP names between
-square brackets):
-
-.B ihdrerr/s
+.B isrcq/s
 .RS
-The number of input datagrams discarded per second due to errors in
-their IP headers, including bad checksums, version number
-mismatch, other format errors, time-to-live exceeded, errors
-discovered in processing their IP options, etc. [ipInHdrErrors]
+The number of ICMP Source Quench messages received per second [icmpInSrcQuenchs].
 .RE
 
-.B iadrerr/s
+.B osrcq/s
 .RS
-The number of input datagrams discarded per second because the IP
-address in their IP header's destination field was not a
-valid address to be received at this entity. This count
-includes invalid addresses (e.g., 0.0.0.0) and addresses of
-unsupported Classes (e.g., Class E). For entities which are
-not IP routers and therefore do not forward datagrams, this
-counter includes datagrams discarded because the destination
-address was not a local address [ipInAddrErrors].
+The number of ICMP Source Quench messages sent per second [icmpOutSrcQuenchs].
 .RE
 
-.B iukwnpr/s
+.B iredir/s
 .RS
-The number of locally-addressed datagrams received
-successfully but discarded per second because of an unknown or
-unsupported protocol [ipInUnknownProtos].
+The number of ICMP Redirect messages received per second [icmpInRedirects].
 .RE
 
-.B idisc/s
+.B oredir/s
 .RS
-The number of input IP datagrams per second for which no problems were
-encountered to prevent their continued processing, but which
-were discarded (e.g., for lack of buffer space) [ipInDiscards].
-Note that this counter does not include any datagrams discarded while
-awaiting re-assembly.
+The number of ICMP Redirect messages sent per second [icmpOutRedirects].
 .RE
 
-.B odisc/s
-.RS
-The number of output IP datagrams per second for which no problem was
-encountered to prevent their transmission to their
-destination, but which were discarded (e.g., for lack of
-buffer space) [ipOutDiscards].
-Note that this counter would include
-datagrams counted in fwddgm/s if any such packets met
-this (discretionary) discard criterion.
-.RE
+With the
+.B ICMP6
+keyword, statistics about ICMPv6 network traffic are reported.
+Note that ICMPv6 statistics depend on
+.BR sadc 's
+option "-S IPV6" to be collected.
+The following values are displayed (formal SNMP names between
+square brackets):
 
-.B onort/s
+.B imsg6/s
 .RS
-The number of IP datagrams discarded per second because no route could
-be found to transmit them to their destination [ipOutNoRoutes].
-Note that this counter includes any packets counted in fwddgm/s
-which meet this 'no-route' criterion.
-Note that this includes any datagrams which a host cannot route because all
-of its default routers are down.
+The total number of ICMP messages received
+by the interface per second which includes all those
+counted by ierr6/s [ipv6IfIcmpInMsgs].
 .RE
 
-.B asmf/s
+.B omsg6/s
 .RS
-The number of failures detected per second by the IP re-assembly
-algorithm (for whatever reason: timed out, errors, etc) [ipReasmFails].
-Note that this is not necessarily a count of discarded IP
-fragments since some algorithms can lose track of the number of
-fragments by combining them as they are received.
+The total number of ICMP messages which this
+interface attempted to send per second [ipv6IfIcmpOutMsgs].
 .RE
 
-.B fragf/s
+.B iech6/s
 .RS
-The number of IP datagrams that have been discarded per second because
-they needed to be fragmented at this entity but could not
-be, e.g., because their Don't Fragment flag was set [ipFragFails].
+The number of ICMP Echo (request) messages
+received by the interface per second [ipv6IfIcmpInEchos].
 .RE
 
-With the
-.B ICMP
-keyword, statistics about ICMPv4 network traffic are reported.
-Note that ICMPv4 statistics depend on
-.BR sadc 's
-option "-S SNMP"
-to be collected.
-The following values are displayed (formal SNMP names between
-square brackets):
-
-.B imsg/s
+.B iechr6/s
 .RS
-The total number of ICMP messages which the entity
-received per second [icmpInMsgs].
-Note that this counter includes all those counted by ierr/s.
+The number of ICMP Echo Reply messages received
+by the interface per second [ipv6IfIcmpInEchoReplies].
 .RE
 
-.B omsg/s
+.B oechr6/s
 .RS
-The total number of ICMP messages which this entity
-attempted to send per second [icmpOutMsgs].
-Note that this counter includes all those counted by oerr/s.
+The number of ICMP Echo Reply messages sent
+by the interface per second [ipv6IfIcmpOutEchoReplies].
 .RE
 
-.B iech/s
+.B igmbq6/s
 .RS
-The number of ICMP Echo (request) messages received per second [icmpInEchos].
+The number of ICMPv6 Group Membership Query
+messages received by the interface per second
+[ipv6IfIcmpInGroupMembQueries].
 .RE
 
-.B iechr/s
+.B igmbr6/s
 .RS
-The number of ICMP Echo Reply messages received per second [icmpInEchoReps].
+The number of ICMPv6 Group Membership Response messages
+received by the interface per second
+[ipv6IfIcmpInGroupMembResponses].
 .RE
 
-.B oech/s
+.B ogmbr6/s
 .RS
-The number of ICMP Echo (request) messages sent per second [icmpOutEchos].
+The number of ICMPv6 Group Membership Response
+messages sent per second
+[ipv6IfIcmpOutGroupMembResponses].
 .RE
 
-.B oechr/s
+.B igmbrd6/s
 .RS
-The number of ICMP Echo Reply messages sent per second [icmpOutEchoReps].
+The number of ICMPv6 Group Membership Reduction messages
+received by the interface per second
+[ipv6IfIcmpInGroupMembReductions].
 .RE
 
-.B itm/s
+.B ogmbrd6/s
 .RS
-The number of ICMP Timestamp (request) messages received per second [icmpInTimestamps].
+The number of ICMPv6 Group Membership Reduction
+messages sent per second
+[ipv6IfIcmpOutGroupMembReductions].
 .RE
 
-.B itmr/s
+.B irtsol6/s
 .RS
-The number of ICMP Timestamp Reply messages received per second [icmpInTimestampReps].
+The number of ICMP Router Solicit messages
+received by the interface per second
+[ipv6IfIcmpInRouterSolicits].
 .RE
 
-.B otm/s
+.B ortsol6/s
 .RS
-The number of ICMP Timestamp (request) messages sent per second [icmpOutTimestamps].
+The number of ICMP Router Solicitation messages
+sent by the interface per second
+[ipv6IfIcmpOutRouterSolicits].
 .RE
 
-.B otmr/s
+.B irtad6/s
 .RS
-The number of ICMP Timestamp Reply messages sent per second [icmpOutTimestampReps].
+The number of ICMP Router Advertisement messages
+received by the interface per second
+[ipv6IfIcmpInRouterAdvertisements].
 .RE
 
-.B iadrmk/s
+.B inbsol6/s
 .RS
-The number of ICMP Address Mask Request messages received per second [icmpInAddrMasks].
+The number of ICMP Neighbor Solicit messages
+received by the interface per second
+[ipv6IfIcmpInNeighborSolicits].
 .RE
 
-.B iadrmkr/s
+.B onbsol6/s
 .RS
-The number of ICMP Address Mask Reply messages received per second [icmpInAddrMaskReps].
+The number of ICMP Neighbor Solicitation
+messages sent by the interface per second
+[ipv6IfIcmpOutNeighborSolicits].
 .RE
 
-.B oadrmk/s
+.B inbad6/s
 .RS
-The number of ICMP Address Mask Request messages sent per second [icmpOutAddrMasks].
+The number of ICMP Neighbor Advertisement
+messages received by the interface per second
+[ipv6IfIcmpInNeighborAdvertisements].
 .RE
 
-.B oadrmkr/s
+.B onbad6/s
 .RS
-The number of ICMP Address Mask Reply messages sent per second [icmpOutAddrMaskReps].
+The number of ICMP Neighbor Advertisement
+messages sent by the interface per second
+[ipv6IfIcmpOutNeighborAdvertisements].
 .RE
 
 With the
-.B EICMP
-keyword, statistics about ICMPv4 error messages are reported.
-Note that ICMPv4 statistics depend on
-.BR  sadc 's
-option "-S SNMP" to be collected.
+.B EICMP6
+keyword, statistics about ICMPv6 error messages are reported.
+Note that ICMPv6 statistics depend on
+.BR sadc 's
+option "-S IPV6" to be collected.
 The following values are displayed (formal SNMP names between
 square brackets):
 
-.B ierr/s
-.RS
-The number of ICMP messages per second which the entity received but
-determined as having ICMP-specific errors (bad ICMP
-checksums, bad length, etc.) [icmpInErrors].
-.RE
-
-.B oerr/s
+.B ierr6/s
 .RS
-The number of ICMP messages per second which this entity did not send
-due to problems discovered within ICMP such as a lack of buffers [icmpOutErrors].
+The number of ICMP messages per second which the interface
+received but determined as having ICMP-specific
+errors (bad ICMP checksums, bad length, etc.)
+[ipv6IfIcmpInErrors]
 .RE
 
-.B idstunr/s
+.B idtunr6/s
 .RS
-The number of ICMP Destination Unreachable messages
-received per second [icmpInDestUnreachs].
+The number of ICMP Destination Unreachable
+messages received by the interface per second
+[ipv6IfIcmpInDestUnreachs].
 .RE
 
-.B odstunr/s
+.B odtunr6/s
 .RS
-The number of ICMP Destination Unreachable messages sent per second [icmpOutDestUnreachs].
+The number of ICMP Destination Unreachable
+messages sent by the interface per second
+[ipv6IfIcmpOutDestUnreachs].
 .RE
 
-.B itmex/s
+.B itmex6/s
 .RS
-The number of ICMP Time Exceeded messages received per second [icmpInTimeExcds].
+The number of ICMP Time Exceeded messages
+received by the interface per second
+[ipv6IfIcmpInTimeExcds].
 .RE
 
-.B otmex/s
+.B otmex6/s
 .RS
-The number of ICMP Time Exceeded messages sent per second [icmpOutTimeExcds].
+The number of ICMP Time Exceeded messages sent
+by the interface per second
+[ipv6IfIcmpOutTimeExcds].
 .RE
 
-.B iparmpb/s
+.B iprmpb6/s
 .RS
-The number of ICMP Parameter Problem messages received per second [icmpInParmProbs].
+The number of ICMP Parameter Problem messages
+received by the interface per second
+[ipv6IfIcmpInParmProblems].
 .RE
 
-.B oparmpb/s
+.B oprmpb6/s
 .RS
-The number of ICMP Parameter Problem messages sent per second [icmpOutParmProbs].
+The number of ICMP Parameter Problem messages
+sent by the interface per second
+[ipv6IfIcmpOutParmProblems].
 .RE
 
-.B isrcq/s
+.B iredir6/s
 .RS
-The number of ICMP Source Quench messages received per second [icmpInSrcQuenchs].
+The number of Redirect messages received
+by the interface per second
+[ipv6IfIcmpInRedirects].
 .RE
 
-.B osrcq/s
+.B oredir6/s
 .RS
-The number of ICMP Source Quench messages sent per second [icmpOutSrcQuenchs].
+The number of Redirect messages sent by
+the interface by second
+[ipv6IfIcmpOutRedirects].
 .RE
 
-.B iredir/s
+.B ipck2b6/s
 .RS
-The number of ICMP Redirect messages received per second [icmpInRedirects].
+The number of ICMP Packet Too Big messages
+received by the interface per second
+[ipv6IfIcmpInPktTooBigs].
 .RE
 
-.B oredir/s
+.B opck2b6/s
 .RS
-The number of ICMP Redirect messages sent per second [icmpOutRedirects].
+The number of ICMP Packet Too Big messages sent
+by the interface per second
+[ipv6IfIcmpOutPktTooBigs].
 .RE
 
 With the
-.B TCP
-keyword, statistics about TCPv4 network traffic are reported.
-Note that TCPv4 statistics depend on
+.B IP
+keyword, statistics about IPv4 network traffic are reported.
+Note that IPv4 statistics depend on
 .BR sadc 's
-option "-S SNMP" to be collected.
+option "-S SNMP"
+to be collected.
 The following values are displayed (formal SNMP names between
 square brackets):
 
-.B active/s
-.RS
-The number of times TCP connections have made a direct
-transition to the SYN-SENT state from the CLOSED state per second [tcpActiveOpens].
-.RE
-
-.B passive/s
+.B irec/s
 .RS
-The number of times TCP connections have made a direct
-transition to the SYN-RCVD state from the LISTEN state per second [tcpPassiveOpens].
+The total number of input datagrams received from interfaces
+per second, including those received in error [ipInReceives].
 .RE
 
-.B iseg/s
+.B fwddgm/s
 .RS
-The total number of segments received per second, including those
-received in error [tcpInSegs].  This count includes segments received on
-currently established connections.
+The number of input datagrams per second, for which this entity was not
+their final IP destination, as a result of which an attempt
+was made to find a route to forward them to that final
+destination [ipForwDatagrams].
 .RE
 
-.B oseg/s
+.B idel/s
 .RS
-The total number of segments sent per second, including those on
-current connections but excluding those containing only
-retransmitted octets [tcpOutSegs].
+The total number of input datagrams successfully delivered per second
+to IP user-protocols (including ICMP) [ipInDelivers].
 .RE
 
-With the
-.B ETCP
-keyword, statistics about TCPv4 network errors are reported.
-Note that TCPv4 statistics depend on
-.BR sadc 's
-option "-S SNMP" to be collected.
-The following values are displayed (formal SNMP names between
-square brackets):
-
-.B atmptf/s
+.B orq/s
 .RS
-The number of times per second TCP connections have made a direct
-transition to the CLOSED state from either the SYN-SENT
-state or the SYN-RCVD state, plus the number of times per second TCP
-connections have made a direct transition to the LISTEN
-state from the SYN-RCVD state [tcpAttemptFails].
+The total number of IP datagrams which local IP user-protocols (including ICMP)
+supplied per second to IP in requests for transmission [ipOutRequests].
+Note that this counter does not include any datagrams counted in fwddgm/s.
 .RE
 
-.B estres/s
+.B asmrq/s
 .RS
-The number of times per second TCP connections have made a direct
-transition to the CLOSED state from either the ESTABLISHED
-state or the CLOSE-WAIT state [tcpEstabResets].
+The number of IP fragments received per second which needed to be
+reassembled at this entity [ipReasmReqds].
 .RE
 
-.B retrans/s
+.B asmok/s
 .RS
-The total number of segments retransmitted per second - that is, the
-number of TCP segments transmitted containing one or more
-previously transmitted octets [tcpRetransSegs].
+The number of IP datagrams successfully re-assembled per second [ipReasmOKs].
 .RE
 
-.B isegerr/s
+.B fragok/s
 .RS
-The total number of segments received in error (e.g., bad
-TCP checksums) per second [tcpInErrs].
+The number of IP datagrams that have been successfully
+fragmented at this entity per second [ipFragOKs].
 .RE
 
-.B orsts/s
+.B fragcrt/s
 .RS
-The number of TCP segments sent per second containing the RST flag [tcpOutRsts].
+The number of IP datagram fragments that have been
+generated per second as a result of fragmentation at this entity [ipFragCreates].
 .RE
 
 With the
-.B UDP
-keyword, statistics about UDPv4 network traffic are reported.
-Note that UDPv4 statistics depend on
-.BR sadc's
+.B EIP
+keyword, statistics about IPv4 network errors are reported.
+Note that IPv4 statistics depend on
+.BR sadc 's
 option "-S SNMP" to be collected.
 The following values are displayed (formal SNMP names between
 square brackets):
 
-.B idgm/s
+.B ihdrerr/s
 .RS
-The total number of UDP datagrams delivered per second to UDP users [udpInDatagrams].
+The number of input datagrams discarded per second due to errors in
+their IP headers, including bad checksums, version number
+mismatch, other format errors, time-to-live exceeded, errors
+discovered in processing their IP options, etc. [ipInHdrErrors]
 .RE
 
-.B odgm/s
+.B iadrerr/s
 .RS
-The total number of UDP datagrams sent per second from this entity [udpOutDatagrams].
+The number of input datagrams discarded per second because the IP
+address in their IP header's destination field was not a
+valid address to be received at this entity. This count
+includes invalid addresses (e.g., 0.0.0.0) and addresses of
+unsupported Classes (e.g., Class E). For entities which are
+not IP routers and therefore do not forward datagrams, this
+counter includes datagrams discarded because the destination
+address was not a local address [ipInAddrErrors].
 .RE
 
-.B noport/s
+.B iukwnpr/s
 .RS
-The total number of received UDP datagrams per second for which there
-was no application at the destination port [udpNoPorts].
+The number of locally-addressed datagrams received
+successfully but discarded per second because of an unknown or
+unsupported protocol [ipInUnknownProtos].
 .RE
 
-.B idgmerr/s
+.B idisc/s
 .RS
-The number of received UDP datagrams per second that could not be
-delivered for reasons other than the lack of an application
-at the destination port [udpInErrors].
+The number of input IP datagrams per second for which no problems were
+encountered to prevent their continued processing, but which
+were discarded (e.g., for lack of buffer space) [ipInDiscards].
+Note that this counter does not include any datagrams discarded while
+awaiting re-assembly.
 .RE
 
-With the
-.B SOCK6
-keyword, statistics on sockets in use are reported (IPv6).
-Note that IPv6 statistics depend on
-.BR sadc 's
-option "-S IPV6" to be collected.
-The following values are displayed:
-
-.B tcp6sck
+.B odisc/s
 .RS
-Number of TCPv6 sockets currently in use.
+The number of output IP datagrams per second for which no problem was
+encountered to prevent their transmission to their
+destination, but which were discarded (e.g., for lack of
+buffer space) [ipOutDiscards].
+Note that this counter would include
+datagrams counted in fwddgm/s if any such packets met
+this (discretionary) discard criterion.
 .RE
 
-.B udp6sck
+.B onort/s
 .RS
-Number of UDPv6 sockets currently in use.
+The number of IP datagrams discarded per second because no route could
+be found to transmit them to their destination [ipOutNoRoutes].
+Note that this counter includes any packets counted in fwddgm/s
+which meet this 'no-route' criterion.
+Note that this includes any datagrams which a host cannot route because all
+of its default routers are down.
 .RE
 
-.B raw6sck
+.B asmf/s
 .RS
-Number of RAWv6 sockets currently in use.
+The number of failures detected per second by the IP re-assembly
+algorithm (for whatever reason: timed out, errors, etc) [ipReasmFails].
+Note that this is not necessarily a count of discarded IP
+fragments since some algorithms can lose track of the number of
+fragments by combining them as they are received.
 .RE
 
-.B ip6-frag
+.B fragf/s
 .RS
-Number of IPv6 fragments currently in use.
+The number of IP datagrams that have been discarded per second because
+they needed to be fragmented at this entity but could not
+be, e.g., because their Don't Fragment flag was set [ipFragFails].
 .RE
 
 With the
@@ -1511,244 +1484,270 @@
 .RE
 
 With the
-.B ICMP6
-keyword, statistics about ICMPv6 network traffic are reported.
-Note that ICMPv6 statistics depend on
-.BR sadc 's
-option "-S IPV6" to be collected.
-The following values are displayed (formal SNMP names between
-square brackets):
+.B NFS
+keyword, statistics about NFS client activity are reported.
+The following values are displayed:
 
-.B imsg6/s
+.B call/s
 .RS
-The total number of ICMP messages received
-by the interface per second which includes all those
-counted by ierr6/s [ipv6IfIcmpInMsgs].
+Number of RPC requests made per second.
 .RE
 
-.B omsg6/s
+.B retrans/s
 .RS
-The total number of ICMP messages which this
-interface attempted to send per second [ipv6IfIcmpOutMsgs].
+Number of RPC requests per second, those which needed to be retransmitted (for
+example because of a server timeout).
 .RE
 
-.B iech6/s
+.B read/s
 .RS
-The number of ICMP Echo (request) messages
-received by the interface per second [ipv6IfIcmpInEchos].
+Number of 'read' RPC calls made per second.
 .RE
 
-.B iechr6/s
+.B write/s
 .RS
-The number of ICMP Echo Reply messages received
-by the interface per second [ipv6IfIcmpInEchoReplies].
+Number of 'write' RPC calls made per second.
 .RE
 
-.B oechr6/s
+.B access/s
 .RS
-The number of ICMP Echo Reply messages sent
-by the interface per second [ipv6IfIcmpOutEchoReplies].
+Number of 'access' RPC calls made per second.
 .RE
 
-.B igmbq6/s
+.B getatt/s
 .RS
-The number of ICMPv6 Group Membership Query
-messages received by the interface per second
-[ipv6IfIcmpInGroupMembQueries].
+Number of 'getattr' RPC calls made per second.
 .RE
 
-.B igmbr6/s
+With the
+.B NFSD
+keyword, statistics about NFS server activity are reported.
+The following values are displayed:
+
+.B scall/s
 .RS
-The number of ICMPv6 Group Membership Response messages
-received by the interface per second
-[ipv6IfIcmpInGroupMembResponses].
+Number of RPC requests received per second.
 .RE
 
-.B ogmbr6/s
+.B badcall/s
 .RS
-The number of ICMPv6 Group Membership Response
-messages sent per second
-[ipv6IfIcmpOutGroupMembResponses].
+Number of bad RPC requests received per second, those whose
+processing generated an error.
 .RE
 
-.B igmbrd6/s
+.B packet/s
 .RS
-The number of ICMPv6 Group Membership Reduction messages
-received by the interface per second
-[ipv6IfIcmpInGroupMembReductions].
+Number of network packets received per second.
 .RE
 
-.B ogmbrd6/s
+.B udp/s
 .RS
-The number of ICMPv6 Group Membership Reduction
-messages sent per second
-[ipv6IfIcmpOutGroupMembReductions].
+Number of UDP packets received per second.
 .RE
 
-.B irtsol6/s
+.B tcp/s
 .RS
-The number of ICMP Router Solicit messages
-received by the interface per second
-[ipv6IfIcmpInRouterSolicits].
+Number of TCP packets received per second.
 .RE
 
-.B ortsol6/s
+.B hit/s
 .RS
-The number of ICMP Router Solicitation messages
-sent by the interface per second
-[ipv6IfIcmpOutRouterSolicits].
+Number of reply cache hits per second.
 .RE
 
-.B irtad6/s
+.B miss/s
 .RS
-The number of ICMP Router Advertisement messages
-received by the interface per second
-[ipv6IfIcmpInRouterAdvertisements].
+Number of reply cache misses per second.
 .RE
 
-.B inbsol6/s
+.B sread/s
 .RS
-The number of ICMP Neighbor Solicit messages
-received by the interface per second
-[ipv6IfIcmpInNeighborSolicits].
+Number of 'read' RPC calls received per second.
 .RE
 
-.B onbsol6/s
+.B swrite/s
 .RS
-The number of ICMP Neighbor Solicitation
-messages sent by the interface per second
-[ipv6IfIcmpOutNeighborSolicits].
+Number of 'write' RPC calls received per second.
 .RE
 
-.B inbad6/s
+.B saccess/s
 .RS
-The number of ICMP Neighbor Advertisement
-messages received by the interface per second
-[ipv6IfIcmpInNeighborAdvertisements].
+Number of 'access' RPC calls received per second.
 .RE
 
-.B onbad6/s
+.B sgetatt/s
 .RS
-The number of ICMP Neighbor Advertisement
-messages sent by the interface per second
-[ipv6IfIcmpOutNeighborAdvertisements].
+Number of 'getattr' RPC calls received per second.
 .RE
 
 With the
-.B EICMP6
-keyword, statistics about ICMPv6 error messages are reported.
-Note that ICMPv6 statistics depend on
+.B SOCK
+keyword, statistics on sockets in use are reported
+(IPv4).
+The following values are displayed:
+
+.B totsck
+.RS
+Total number of sockets used by the system.
+.RE
+
+.B tcpsck
+.RS
+Number of TCP sockets currently in use.
+.RE
+
+.B udpsck
+.RS
+Number of UDP sockets currently in use.
+.RE
+
+.B rawsck
+.RS
+Number of RAW sockets currently in use.
+.RE
+
+.B ip-frag
+.RS
+Number of IP fragments currently in queue.
+.RE
+
+.B tcp-tw
+.RS
+Number of TCP sockets in TIME_WAIT state.
+.RE
+
+With the
+.B SOCK6
+keyword, statistics on sockets in use are reported (IPv6).
+Note that IPv6 statistics depend on
 .BR sadc 's
 option "-S IPV6" to be collected.
-The following values are displayed (formal SNMP names between
-square brackets):
+The following values are displayed:
 
-.B ierr6/s
+.B tcp6sck
 .RS
-The number of ICMP messages per second which the interface
-received but determined as having ICMP-specific
-errors (bad ICMP checksums, bad length, etc.)
-[ipv6IfIcmpInErrors]
+Number of TCPv6 sockets currently in use.
 .RE
 
-.B idtunr6/s
+.B udp6sck
 .RS
-The number of ICMP Destination Unreachable
-messages received by the interface per second
-[ipv6IfIcmpInDestUnreachs].
+Number of UDPv6 sockets currently in use.
 .RE
 
-.B odtunr6/s
+.B raw6sck
 .RS
-The number of ICMP Destination Unreachable
-messages sent by the interface per second
-[ipv6IfIcmpOutDestUnreachs].
+Number of RAWv6 sockets currently in use.
 .RE
 
-.B itmex6/s
+.B ip6-frag
 .RS
-The number of ICMP Time Exceeded messages
-received by the interface per second
-[ipv6IfIcmpInTimeExcds].
+Number of IPv6 fragments currently in use.
 .RE
 
-.B otmex6/s
+With the
+.B TCP
+keyword, statistics about TCPv4 network traffic are reported.
+Note that TCPv4 statistics depend on
+.BR sadc 's
+option "-S SNMP" to be collected.
+The following values are displayed (formal SNMP names between
+square brackets):
+
+.B active/s
 .RS
-The number of ICMP Time Exceeded messages sent
-by the interface per second
-[ipv6IfIcmpOutTimeExcds].
+The number of times TCP connections have made a direct
+transition to the SYN-SENT state from the CLOSED state per second [tcpActiveOpens].
 .RE
 
-.B iprmpb6/s
+.B passive/s
 .RS
-The number of ICMP Parameter Problem messages
-received by the interface per second
-[ipv6IfIcmpInParmProblems].
+The number of times TCP connections have made a direct
+transition to the SYN-RCVD state from the LISTEN state per second [tcpPassiveOpens].
 .RE
 
-.B oprmpb6/s
+.B iseg/s
 .RS
-The number of ICMP Parameter Problem messages
-sent by the interface per second
-[ipv6IfIcmpOutParmProblems].
+The total number of segments received per second, including those
+received in error [tcpInSegs].  This count includes segments received on
+currently established connections.
 .RE
 
-.B iredir6/s
+.B oseg/s
 .RS
-The number of Redirect messages received
-by the interface per second
-[ipv6IfIcmpInRedirects].
+The total number of segments sent per second, including those on
+current connections but excluding those containing only
+retransmitted octets [tcpOutSegs].
 .RE
 
-.B oredir6/s
+With the
+.B ETCP
+keyword, statistics about TCPv4 network errors are reported.
+Note that TCPv4 statistics depend on
+.BR sadc 's
+option "-S SNMP" to be collected.
+The following values are displayed (formal SNMP names between
+square brackets):
+
+.B atmptf/s
 .RS
-The number of Redirect messages sent by
-the interface by second
-[ipv6IfIcmpOutRedirects].
+The number of times per second TCP connections have made a direct
+transition to the CLOSED state from either the SYN-SENT
+state or the SYN-RCVD state, plus the number of times per second TCP
+connections have made a direct transition to the LISTEN
+state from the SYN-RCVD state [tcpAttemptFails].
 .RE
 
-.B ipck2b6/s
+.B estres/s
 .RS
-The number of ICMP Packet Too Big messages
-received by the interface per second
-[ipv6IfIcmpInPktTooBigs].
+The number of times per second TCP connections have made a direct
+transition to the CLOSED state from either the ESTABLISHED
+state or the CLOSE-WAIT state [tcpEstabResets].
 .RE
 
-.B opck2b6/s
+.B retrans/s
 .RS
-The number of ICMP Packet Too Big messages sent
-by the interface per second
-[ipv6IfIcmpOutPktTooBigs].
+The total number of segments retransmitted per second - that is, the
+number of TCP segments transmitted containing one or more
+previously transmitted octets [tcpRetransSegs].
+.RE
+
+.B isegerr/s
+.RS
+The total number of segments received in error (e.g., bad
+TCP checksums) per second [tcpInErrs].
+.RE
+
+.B orsts/s
+.RS
+The number of TCP segments sent per second containing the RST flag [tcpOutRsts].
 .RE
 
 With the
-.B UDP6
-keyword, statistics about UDPv6 network traffic are reported.
-Note that UDPv6 statistics depend on
-.BR sadc 's
-option "-S IPV6" to be collected.
+.B UDP
+keyword, statistics about UDPv4 network traffic are reported.
+Note that UDPv4 statistics depend on
+.BR sadc's
+option "-S SNMP" to be collected.
 The following values are displayed (formal SNMP names between
 square brackets):
 
-.B idgm6/s
+.B idgm/s
 .RS
-The total number of UDP datagrams delivered per second to UDP users
-[udpInDatagrams].
+The total number of UDP datagrams delivered per second to UDP users [udpInDatagrams].
 .RE
 
-.B odgm6/s
+.B odgm/s
 .RS
-The total number of UDP datagrams sent per second from this
-entity [udpOutDatagrams].
+The total number of UDP datagrams sent per second from this entity [udpOutDatagrams].
 .RE
 
-.B noport6/s
+.B noport/s
 .RS
 The total number of received UDP datagrams per second for which there
 was no application at the destination port [udpNoPorts].
 .RE
 
-.B idgmer6/s
+.B idgmerr/s
 .RS
 The number of received UDP datagrams per second that could not be
 delivered for reasons other than the lack of an application
@@ -1756,36 +1755,37 @@
 .RE
 
 With the
-.B FC
-keyword, statistics about fibre channel traffic are reported.
-Note that fibre channel statistics depend on
+.B UDP6
+keyword, statistics about UDPv6 network traffic are reported.
+Note that UDPv6 statistics depend on
 .BR sadc 's
-option "-S DISK" to be collected.
-The following values are displayed:
-
-.B FCHOST
-.RS
-Name of the fibre channel host bus adapter (HBA) interface for which statistics are reported.
-.RE
+option "-S IPV6" to be collected.
+The following values are displayed (formal SNMP names between
+square brackets):
 
-.B fch_rxf/s
+.B idgm6/s
 .RS
-The total number of frames received per second.
+The total number of UDP datagrams delivered per second to UDP users
+[udpInDatagrams].
 .RE
 
-.B fch_txf/s
+.B odgm6/s
 .RS
-The total number of frames transmitted per second.
+The total number of UDP datagrams sent per second from this
+entity [udpOutDatagrams].
 .RE
 
-.B fch_rxw/s
+.B noport6/s
 .RS
-The total number of transmission words received per second.
+The total number of received UDP datagrams per second for which there
+was no application at the destination port [udpNoPorts].
 .RE
 
-.B fch_txw/s
+.B idgmer6/s
 .RS
-The total number of transmission words transmitted per second.
+The number of received UDP datagrams per second that could not be
+delivered for reasons other than the lack of an application
+at the destination port [udpInErrors].
 .RE
 
 The
diff -Nru sysstat-11.4.1/mpstat.c sysstat-11.4.3/mpstat.c
--- sysstat-11.4.1/mpstat.c	2016-09-23 14:39:22.000000000 +0200
+++ sysstat-11.4.3/mpstat.c	2017-01-11 13:53:40.000000000 +0100
@@ -721,7 +721,7 @@
  */
 void write_stats(int curr, int dis)
 {
-	char cur_time[2][16];
+	char cur_time[2][TIMESTAMP_LEN];
 
 	/* Get previous timestamp */
 	if (is_iso_time_fmt()) {
diff -Nru sysstat-11.4.1/nls/sysstat.pot sysstat-11.4.3/nls/sysstat.pot
--- sysstat-11.4.1/nls/sysstat.pot	2016-09-23 14:52:19.000000000 +0200
+++ sysstat-11.4.3/nls/sysstat.pot	2017-01-11 13:55:20.000000000 +0100
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: sysstat <at> orange.fr\n"
-"POT-Creation-Date: 2016-09-23 14:52+0200\n"
+"POT-Creation-Date: 2017-01-11 13:55+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -47,60 +47,60 @@
 msgid "Cannot find disk data\n"
 msgstr ""
 
-#: iostat.c:1401 sa_common.c:1646
+#: iostat.c:1401 sa_common.c:1606
 #, c-format
 msgid "Invalid type of persistent device name\n"
 msgstr ""
 
-#: sadf_misc.c:752
+#: sadf_misc.c:748
 #, c-format
 msgid "System activity data file: %s (%#x)\n"
 msgstr ""
 
-#: sadf_misc.c:761
+#: sadf_misc.c:757
 #, c-format
 msgid "Genuine sa datafile: %s (%x)\n"
 msgstr ""
 
-#: sadf_misc.c:762
+#: sadf_misc.c:758
 msgid "no"
 msgstr ""
 
-#: sadf_misc.c:762
+#: sadf_misc.c:758
 msgid "yes"
 msgstr ""
 
-#: sadf_misc.c:765
+#: sadf_misc.c:761
 #, c-format
 msgid "Host: "
 msgstr ""
 
-#: sadf_misc.c:771
+#: sadf_misc.c:767
 #, c-format
 msgid "Number of CPU for last samples in file: %u\n"
 msgstr ""
 
-#: sadf_misc.c:777
+#: sadf_misc.c:773
 #, c-format
 msgid "File date: %s\n"
 msgstr ""
 
-#: sadf_misc.c:780
+#: sadf_misc.c:776
 #, c-format
 msgid "File time: "
 msgstr ""
 
-#: sadf_misc.c:785
+#: sadf_misc.c:781
 #, c-format
 msgid "Size of a long int: %d\n"
 msgstr ""
 
-#: sadf_misc.c:791
+#: sadf_misc.c:787
 #, c-format
 msgid "List of activities:\n"
 msgstr ""
 
-#: sadf_misc.c:804
+#: sadf_misc.c:800
 #, c-format
 msgid "\t[Unknown activity format]"
 msgstr ""
@@ -129,7 +129,7 @@
 msgstr ""
 
 #: sadc.c:763 sadc.c:772 sadc.c:839 ioconf.c:510 rd_stats.c:69
-#: sa_common.c:1263 count.c:118
+#: sa_common.c:1223 count.c:118
 #, c-format
 msgid "Cannot open %s: %s\n"
 msgstr ""
@@ -166,7 +166,7 @@
 "[ -P { <cpu> [,...] | ON | ALL } ]\n"
 msgstr ""
 
-#: mpstat.c:708 sar.c:358 pidstat.c:2303
+#: mpstat.c:708 sar.c:358 pidstat.c:2319
 msgid "Average:"
 msgstr ""
 
@@ -383,11 +383,11 @@
 msgid "Cannot find the data collector (%s)\n"
 msgstr ""
 
-#: pr_stats.c:2494 pr_stats.c:2506 pr_stats.c:2610 pr_stats.c:2621
+#: pr_stats.c:2519 pr_stats.c:2531 pr_stats.c:2635 pr_stats.c:2646
 msgid "Summary:"
 msgstr ""
 
-#: pr_stats.c:2549
+#: pr_stats.c:2574
 msgid "Other devices not listed here"
 msgstr ""
 
@@ -432,42 +432,42 @@
 "[ -p { <pid> [,...] | SELF | ALL } ] [ -T { TASK | CHILD | ALL } ]\n"
 msgstr ""
 
-#: sa_common.c:1059
+#: sa_common.c:1019
 #, c-format
 msgid "Error while reading system activity file: %s\n"
 msgstr ""
 
-#: sa_common.c:1069
+#: sa_common.c:1029
 #, c-format
 msgid "End of system activity file unexpected\n"
 msgstr ""
 
-#: sa_common.c:1088
+#: sa_common.c:1048
 #, c-format
 msgid "File created by sar/sadc from sysstat version %d.%d.%d"
 msgstr ""
 
-#: sa_common.c:1121
+#: sa_common.c:1081
 #, c-format
 msgid "Invalid system activity file: %s\n"
 msgstr ""
 
-#: sa_common.c:1133
+#: sa_common.c:1093
 #, c-format
 msgid "Endian format mismatch\n"
 msgstr ""
 
-#: sa_common.c:1137
+#: sa_common.c:1097
 #, c-format
 msgid "Current sysstat version cannot read the format of this file (%#x)\n"
 msgstr ""
 
-#: sa_common.c:1266
+#: sa_common.c:1226
 #, c-format
 msgid "Please check if data collecting is enabled\n"
 msgstr ""
 
-#: sa_common.c:1459
+#: sa_common.c:1419
 #, c-format
 msgid "Requested activities not available in file %s\n"
 msgstr ""
diff -Nru sysstat-11.4.1/pidstat.c sysstat-11.4.3/pidstat.c
--- sysstat-11.4.1/pidstat.c	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/pidstat.c	2017-01-11 13:53:40.000000000 +0100
@@ -277,6 +277,23 @@
 
 /*
  ***************************************************************************
+ * Get pointer on task's command string.
+ *
+ * IN:
+ * @pst		Pointer on structure with process stats and command line.
+ ***************************************************************************
+ */
+char *get_tcmd(struct pid_stats *pst)
+{
+	if (DISPLAY_CMDLINE(pidflag) && strlen(pst->cmdline))
+		/* Option "-l" used */
+		return pst->cmdline;
+	else
+		return pst->comm;
+}
+
+/*
+ ***************************************************************************
  * Display process command name or command line.
  *
  * IN:
@@ -287,12 +304,8 @@
 {
 	char *p;
 
-	if (DISPLAY_CMDLINE(pidflag) && strlen(pst->cmdline)) {
-		p = pst->cmdline;
-	}
-	else {
-		p = pst->comm;
-	}
+	/* Get pointer on task's command string */
+	p = get_tcmd(pst);
 
 	if (pst->tgid) {
 		cprintf_s(IS_ZERO, "  |__%s\n", p);
@@ -1042,6 +1055,7 @@
 	int q, rc;
 	regex_t regex;
 	struct passwd *pwdent;
+	char *pc;
 
 	*pstc = st_pid_list[curr] + p;
 
@@ -1192,7 +1206,8 @@
 			/* Error in preparing regex structure */
 			return -1;
 
-		rc = regexec(&regex, (*pstc)->comm, 0, NULL, 0);
+		pc = get_tcmd(*pstc);	/* Get pointer on task's command string */
+		rc = regexec(&regex, pc, 0, NULL, 0);
 		regfree(&regex);
 
 		if (rc)
@@ -1209,7 +1224,8 @@
 				return -1;
 			}
 
-			rc = regexec(&regex, (*pstc)->comm, 0, NULL, 0);
+			pc = get_tcmd(*pstc);	/* Get pointer on task's command string */
+			rc = regexec(&regex, pc, 0, NULL, 0);
 			regfree(&regex);
 
 			if (rc) {
@@ -2320,7 +2336,7 @@
  */
 int write_stats(int curr, int dis)
 {
-	char cur_time[2][16];
+	char cur_time[2][TIMESTAMP_LEN];
 
 	/* Get previous timestamp */
 	if (is_iso_time_fmt()) {
diff -Nru sysstat-11.4.1/pr_stats.c sysstat-11.4.3/pr_stats.c
--- sysstat-11.4.1/pr_stats.c	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/pr_stats.c	2017-01-11 13:53:40.000000000 +0100
@@ -94,116 +94,117 @@
 		 */
 
 		/* Should current CPU (including CPU "all") be displayed? */
-		if (a->bitmap->b_array[i >> 3] & (1 << (i & 0x07))) {
+		if (!(a->bitmap->b_array[i >> 3] & (1 << (i & 0x07))))
+			/* No */
+			continue;
 
-			/* Yes: Display it */
-			printf("%-11s", timestamp[curr]);
+		/* Yes: Display it */
+		printf("%-11s", timestamp[curr]);
 
-			if (!i) {
-				/* This is CPU "all" */
-				cprintf_in(IS_STR, " %s", "    all", 0);
-			}
-			else {
-				cprintf_in(IS_INT, " %7d", "", i - 1);
+		if (!i) {
+			/* This is CPU "all" */
+			cprintf_in(IS_STR, " %s", "    all", 0);
+		}
+		else {
+			cprintf_in(IS_INT, " %7d", "", i - 1);
 
+			/*
+			 * If the CPU is offline then it is omited from /proc/stat:
+			 * All the fields couldn't have been read and the sum of them is zero.
+			 * (Remember that guest/guest_nice times are already included in
+			 * user/nice modes.)
+			 */
+			if ((scc->cpu_user    + scc->cpu_nice + scc->cpu_sys   +
+			     scc->cpu_iowait  + scc->cpu_idle + scc->cpu_steal +
+			     scc->cpu_hardirq + scc->cpu_softirq) == 0) {
 				/*
-				 * If the CPU is offline then it is omited from /proc/stat:
-				 * All the fields couldn't have been read and the sum of them is zero.
-				 * (Remember that guest/guest_nice times are already included in
-				 * user/nice modes.)
+				 * Set current struct fields (which have been set to zero)
+				 * to values from previous iteration. Hence their values won't
+				 * jump from zero when the CPU comes back online.
 				 */
-				if ((scc->cpu_user    + scc->cpu_nice + scc->cpu_sys   +
-				     scc->cpu_iowait  + scc->cpu_idle + scc->cpu_steal +
-				     scc->cpu_hardirq + scc->cpu_softirq) == 0) {
-					/*
-					 * Set current struct fields (which have been set to zero)
-					 * to values from previous iteration. Hence their values won't
-					 * jump from zero when the CPU comes back online.
-					 */
-					*scc = *scp;
+				*scc = *scp;
 
-					/* %user, %nice, %system, %iowait, %steal, ..., %idle */
-					cprintf_pc(6, 9, 2,
-						   0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
-
-					if (DISPLAY_CPU_ALL(a->opt_flags)) {
-						/*
-						 * Four additional fields to display:
-						 * %irq, %soft, %guest, %gnice.
-						 */
-						cprintf_pc(4, 9, 2,
-							   0.0, 0.0, 0.0, 0.0);
-					}
-					printf("\n");
-					continue;
-				}
-
-				/* Recalculate interval for current proc */
-				g_itv = get_per_cpu_interval(scc, scp);
-
-				if (!g_itv) {
-					/*
-					 * If the CPU is tickless then there is no change in CPU values
-					 * but the sum of values is not zero.
-					 * %user, %nice, %system, %iowait, %steal, ..., %idle
-					 */
-					cprintf_pc(5, 9, 2,
-						   0.0, 0.0, 0.0, 0.0, 0.0);
+				/* %user, %nice, %system, %iowait, %steal, ..., %idle */
+				cprintf_pc(6, 9, 2,
+					   0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
 
-					if (DISPLAY_CPU_DEF(a->opt_flags)) {
-						cprintf_pc(1, 9, 2, 100.0);
-						printf("\n");
-					}
+				if (DISPLAY_CPU_ALL(a->opt_flags)) {
 					/*
 					 * Four additional fields to display:
 					 * %irq, %soft, %guest, %gnice.
 					 */
-					else if (DISPLAY_CPU_ALL(a->opt_flags)) {
-						cprintf_pc(4, 9, 2,
-							   0.0, 0.0, 0.0, 100.0);
-						printf("\n");
-					}
-					continue;
+					cprintf_pc(4, 9, 2,
+						   0.0, 0.0, 0.0, 0.0);
 				}
-			}
-
-			if (DISPLAY_CPU_DEF(a->opt_flags)) {
-				cprintf_pc(6, 9, 2,
-					   ll_sp_value(scp->cpu_user, scc->cpu_user, g_itv),
-					   ll_sp_value(scp->cpu_nice, scc->cpu_nice, g_itv),
-					   ll_sp_value(scp->cpu_sys + scp->cpu_hardirq + scp->cpu_softirq,
-						       scc->cpu_sys + scc->cpu_hardirq + scc->cpu_softirq,
-						       g_itv),
-					   ll_sp_value(scp->cpu_iowait, scc->cpu_iowait, g_itv),
-					   ll_sp_value(scp->cpu_steal, scc->cpu_steal, g_itv),
-					   scc->cpu_idle < scp->cpu_idle ?
-					   0.0 :
-					   ll_sp_value(scp->cpu_idle, scc->cpu_idle, g_itv));
 				printf("\n");
+				continue;
 			}
-			else if (DISPLAY_CPU_ALL(a->opt_flags)) {
-				cprintf_pc(10, 9, 2,
-					   (scc->cpu_user - scc->cpu_guest) < (scp->cpu_user - scp->cpu_guest) ?
-					   0.0 :
-					   ll_sp_value(scp->cpu_user - scp->cpu_guest,
-						       scc->cpu_user - scc->cpu_guest, g_itv),
-						       (scc->cpu_nice - scc->cpu_guest_nice) < (scp->cpu_nice - scp->cpu_guest_nice) ?
-					   0.0 :
-					   ll_sp_value(scp->cpu_nice - scp->cpu_guest_nice,
-						       scc->cpu_nice - scc->cpu_guest_nice, g_itv),
-					   ll_sp_value(scp->cpu_sys, scc->cpu_sys, g_itv),
-					   ll_sp_value(scp->cpu_iowait, scc->cpu_iowait, g_itv),
-					   ll_sp_value(scp->cpu_steal, scc->cpu_steal, g_itv),
-					   ll_sp_value(scp->cpu_hardirq, scc->cpu_hardirq, g_itv),
-					   ll_sp_value(scp->cpu_softirq, scc->cpu_softirq, g_itv),
-					   ll_sp_value(scp->cpu_guest, scc->cpu_guest, g_itv),
-					   ll_sp_value(scp->cpu_guest_nice, scc->cpu_guest_nice, g_itv),
-					   scc->cpu_idle < scp->cpu_idle ?
-					   0.0 :
-					   ll_sp_value(scp->cpu_idle, scc->cpu_idle, g_itv));
-				printf("\n");
+
+			/* Recalculate interval for current proc */
+			g_itv = get_per_cpu_interval(scc, scp);
+
+			if (!g_itv) {
+				/*
+				 * If the CPU is tickless then there is no change in CPU values
+				 * but the sum of values is not zero.
+				 * %user, %nice, %system, %iowait, %steal, ..., %idle
+				 */
+				cprintf_pc(5, 9, 2,
+					   0.0, 0.0, 0.0, 0.0, 0.0);
+
+				if (DISPLAY_CPU_DEF(a->opt_flags)) {
+					cprintf_pc(1, 9, 2, 100.0);
+					printf("\n");
+				}
+				/*
+				 * Four additional fields to display:
+				 * %irq, %soft, %guest, %gnice.
+				 */
+				else if (DISPLAY_CPU_ALL(a->opt_flags)) {
+					cprintf_pc(4, 9, 2,
+						   0.0, 0.0, 0.0, 100.0);
+					printf("\n");
+				}
+				continue;
 			}
 		}
+
+		if (DISPLAY_CPU_DEF(a->opt_flags)) {
+			cprintf_pc(6, 9, 2,
+				   ll_sp_value(scp->cpu_user, scc->cpu_user, g_itv),
+				   ll_sp_value(scp->cpu_nice, scc->cpu_nice, g_itv),
+				   ll_sp_value(scp->cpu_sys + scp->cpu_hardirq + scp->cpu_softirq,
+					       scc->cpu_sys + scc->cpu_hardirq + scc->cpu_softirq,
+					       g_itv),
+				   ll_sp_value(scp->cpu_iowait, scc->cpu_iowait, g_itv),
+				   ll_sp_value(scp->cpu_steal, scc->cpu_steal, g_itv),
+				   scc->cpu_idle < scp->cpu_idle ?
+				   0.0 :
+				   ll_sp_value(scp->cpu_idle, scc->cpu_idle, g_itv));
+			printf("\n");
+		}
+		else if (DISPLAY_CPU_ALL(a->opt_flags)) {
+			cprintf_pc(10, 9, 2,
+				   (scc->cpu_user - scc->cpu_guest) < (scp->cpu_user - scp->cpu_guest) ?
+				   0.0 :
+				   ll_sp_value(scp->cpu_user - scp->cpu_guest,
+					       scc->cpu_user - scc->cpu_guest, g_itv),
+					       (scc->cpu_nice - scc->cpu_guest_nice) < (scp->cpu_nice - scp->cpu_guest_nice) ?
+				   0.0 :
+				   ll_sp_value(scp->cpu_nice - scp->cpu_guest_nice,
+					       scc->cpu_nice - scc->cpu_guest_nice, g_itv),
+				   ll_sp_value(scp->cpu_sys, scc->cpu_sys, g_itv),
+				   ll_sp_value(scp->cpu_iowait, scc->cpu_iowait, g_itv),
+				   ll_sp_value(scp->cpu_steal, scc->cpu_steal, g_itv),
+				   ll_sp_value(scp->cpu_hardirq, scc->cpu_hardirq, g_itv),
+				   ll_sp_value(scp->cpu_softirq, scc->cpu_softirq, g_itv),
+				   ll_sp_value(scp->cpu_guest, scc->cpu_guest, g_itv),
+				   ll_sp_value(scp->cpu_guest_nice, scc->cpu_guest_nice, g_itv),
+				   scc->cpu_idle < scp->cpu_idle ?
+				   0.0 :
+				   ll_sp_value(scp->cpu_idle, scc->cpu_idle, g_itv));
+			printf("\n");
+		}
 	}
 }
 
@@ -923,10 +924,12 @@
 				 unsigned long long itv)
 {
 	int i, j;
-	struct stats_disk *sdc,	*sdp;
+	struct stats_disk *sdc,	*sdp, sdpzero;
 	struct ext_disk_stats xds;
 	char *dev_name, *persist_dev_name;
 
+	memset(&sdpzero, 0, STATS_DISK_SIZE);
+
 	if (dis) {
 		printf("\n%-11s       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz"
 		       "  avgqu-sz     await     svctm     %%util\n",
@@ -941,7 +944,13 @@
 			continue;
 
 		j = check_disk_reg(a, curr, prev, i);
-		sdp = (struct stats_disk *) ((char *) a->buf[prev] + j * a->msize);
+		if (j < 0) {
+			/* This is a newly registered interface. Previous stats are zero */
+			sdp = &sdpzero;
+		}
+		else {
+			sdp = (struct stats_disk *) ((char *) a->buf[prev] + j * a->msize);
+		}
 
 		/* Compute service time, etc. */
 		compute_ext_disk_stats(sdc, sdp, itv, &xds);
@@ -1000,9 +1009,11 @@
 				    unsigned long long itv)
 {
 	int i, j;
-	struct stats_net_dev *sndc, *sndp;
+	struct stats_net_dev *sndc, *sndp, sndzero;
 	double rxkb, txkb, ifutil;
 
+	memset(&sndzero, 0, STATS_NET_DEV_SIZE);
+
 	if (dis) {
 		printf("\n%-11s     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s"
 		       "   rxcmp/s   txcmp/s  rxmcst/s   %%ifutil\n", timestamp[!curr]);
@@ -1013,10 +1024,16 @@
 		sndc = (struct stats_net_dev *) ((char *) a->buf[curr] + i * a->msize);
 
 		if (!strcmp(sndc->interface, ""))
-			continue;
+			break;
 
 		j = check_net_dev_reg(a, curr, prev, i);
-		sndp = (struct stats_net_dev *) ((char *) a->buf[prev] + j * a->msize);
+		if (j < 0) {
+			/* This is a newly registered interface. Previous stats are zero */
+			sndp = &sndzero;
+		}
+		else {
+			sndp = (struct stats_net_dev *) ((char *) a->buf[prev] + j * a->msize);
+		}
 
 		printf("%-11s", timestamp[curr]);
 		cprintf_in(IS_STR, " %9s", sndc->interface, 0);
@@ -1053,7 +1070,9 @@
 				     unsigned long long itv)
 {
 	int i, j;
-	struct stats_net_edev *snedc, *snedp;
+	struct stats_net_edev *snedc, *snedp, snedzero;
+
+	memset(&snedzero, 0, STATS_NET_EDEV_SIZE);
 
 	if (dis) {
 		printf("\n%-11s     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s"
@@ -1066,10 +1085,16 @@
 		snedc = (struct stats_net_edev *) ((char *) a->buf[curr] + i * a->msize);
 
 		if (!strcmp(snedc->interface, ""))
-			continue;
+			break;
 
 		j = check_net_edev_reg(a, curr, prev, i);
-		snedp = (struct stats_net_edev *) ((char *) a->buf[prev] + j * a->msize);
+		if (j < 0) {
+			/* This is a newly registered interface. Previous stats are zero */
+			snedp = &snedzero;
+		}
+		else {
+			snedp = (struct stats_net_edev *) ((char *) a->buf[prev] + j * a->msize);
+		}
 
 		printf("%-11s", timestamp[curr]);
 		cprintf_in(IS_STR, " %9s", snedc->interface, 0);
diff -Nru sysstat-11.4.1/rd_stats.c sysstat-11.4.3/rd_stats.c
--- sysstat-11.4.1/rd_stats.c	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/rd_stats.c	2017-01-11 13:53:40.000000000 +0100
@@ -541,12 +541,12 @@
 			sscanf(strchr(line, ' '), "%lu", &pgtmp);
 			st_paging->pgsteal += pgtmp;
 		}
-		else if (!strncmp(line, "pgscan_kswapd_", 14)) {
+		else if (!strncmp(line, "pgscan_kswapd", 13)) {
 			/* Read number of pages scanned by the kswapd daemon */
 			sscanf(strchr(line, ' '), "%lu", &pgtmp);
 			st_paging->pgscan_kswapd += pgtmp;
 		}
-		else if (!strncmp(line, "pgscan_direct_", 14)) {
+		else if (!strncmp(line, "pgscan_direct", 13)) {
 			/* Read number of pages scanned directly */
 			sscanf(strchr(line, ' '), "%lu", &pgtmp);
 			st_paging->pgscan_direct += pgtmp;
@@ -1826,7 +1826,9 @@
 			sscanf(strchr(line, ':') + 1, "%u", &proc_nb);
 		}
 
-		else if (!strncmp(line, "cpu MHz\t", 8)) {
+		/* Entry in /proc/cpuinfo is different between Intel and Power architectures */
+		else if (!strncmp(line, "cpu MHz\t", 8) ||
+			 !strncmp(line, "clock\t", 6)) {
 			sscanf(strchr(line, ':') + 1, "%u.%u", &ifreq, &dfreq);
 
 			if (proc_nb < (nbr - 1)) {
diff -Nru sysstat-11.4.1/rndr_stats.c sysstat-11.4.3/rndr_stats.c
--- sysstat-11.4.1/rndr_stats.c	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/rndr_stats.c	2017-01-11 13:53:40.000000000 +0100
@@ -1047,12 +1047,14 @@
 				  int curr, unsigned long long itv)
 {
 	int i, j;
-	struct stats_disk *sdc,	*sdp;
+	struct stats_disk *sdc,	*sdp, sdpzero;
 	struct ext_disk_stats xds;
 	char *dev_name, *persist_dev_name;
 	int pt_newlin
 		= (DISPLAY_HORIZONTALLY(flags) ? PT_NOFLAG : PT_NEWLIN);
 
+	memset(&sdpzero, 0, STATS_DISK_SIZE);
+
 	for (i = 0; i < a->nr; i++) {
 
 		sdc = (struct stats_disk *) ((char *) a->buf[curr] + i * a->msize);
@@ -1061,7 +1063,13 @@
 			continue;
 
 		j = check_disk_reg(a, curr, !curr, i);
-		sdp = (struct stats_disk *) ((char *) a->buf[!curr] + j * a->msize);
+		if (j < 0) {
+			/* This is a newly registered interface. Previous stats are zero */
+			sdp = &sdpzero;
+		}
+		else {
+			sdp = (struct stats_disk *) ((char *) a->buf[!curr] + j * a->msize);
+		}
 
 		/* Compute extended stats (service time, etc.) */
 		compute_ext_disk_stats(sdc, sdp, itv, &xds);
@@ -1161,20 +1169,28 @@
 				     int curr, unsigned long long itv)
 {
 	int i, j;
-	struct stats_net_dev *sndc, *sndp;
+	struct stats_net_dev *sndc, *sndp, sndzero;
 	double rxkb, txkb, ifutil;
 	int pt_newlin
 		= (DISPLAY_HORIZONTALLY(flags) ? PT_NOFLAG : PT_NEWLIN);
 
+	memset(&sndzero, 0, STATS_NET_DEV_SIZE);
+
 	for (i = 0; i < a->nr; i++) {
 
 		sndc = (struct stats_net_dev *) ((char *) a->buf[curr] + i * a->msize);
 
 		if (!strcmp(sndc->interface, ""))
-			continue;
+			break;
 
 		j = check_net_dev_reg(a, curr, !curr, i);
-		sndp = (struct stats_net_dev *) ((char *) a->buf[!curr] + j * a->msize);
+		if (j < 0) {
+			/* This is a newly registered interface. Previous stats are zero */
+			sndp = &sndzero;
+		}
+		else {
+			sndp = (struct stats_net_dev *) ((char *) a->buf[!curr] + j * a->msize);
+		}
 
 		render(isdb, pre, PT_NOFLAG,
 		       "%s\trxpck/s", "%s",
@@ -1253,19 +1269,27 @@
 				      int curr, unsigned long long itv)
 {
 	int i, j;
-	struct stats_net_edev *snedc, *snedp;
+	struct stats_net_edev *snedc, *snedp, snedzero;
 	int pt_newlin
 		= (DISPLAY_HORIZONTALLY(flags) ? PT_NOFLAG : PT_NEWLIN);
 
+	memset(&snedzero, 0, STATS_NET_EDEV_SIZE);
+
 	for (i = 0; i < a->nr; i++) {
 
 		snedc = (struct stats_net_edev *) ((char *) a->buf[curr] + i * a->msize);
 
 		if (!strcmp(snedc->interface, ""))
-			continue;
+			break;
 
 		j = check_net_edev_reg(a, curr, !curr, i);
-		snedp = (struct stats_net_edev *) ((char *) a->buf[!curr] + j * a->msize);
+		if (j < 0) {
+			/* This is a newly registered interface. Previous stats are zero */
+			snedp = &snedzero;
+		}
+		else {
+			snedp = (struct stats_net_edev *) ((char *) a->buf[!curr] + j * a->msize);
+		}
 
 		render(isdb, pre, PT_NOFLAG,
 		       "%s\trxerr/s", "%s",
diff -Nru sysstat-11.4.1/sa_common.c sysstat-11.4.3/sa_common.c
--- sysstat-11.4.1/sa_common.c	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/sa_common.c	2017-01-11 13:53:40.000000000 +0100
@@ -627,14 +627,20 @@
  *
  * RETURNS:
  * Position of current network interface in array of sample statistics used
- * as reference.
+ * as reference, or -1 if it is a new interface (it was not present in array
+ * of stats used as reference).
+ *
+ * Note: A newly registered interface, if it is supernumerary, may make the
+ * last interface in the array going out of the list. Yet an interface going
+ * out of the list still exists in the /proc/net/dev file. Should it go back
+ * in the list (e.g. if some other interfaces have been unregistered) then
+ * its counters will jump as if starting from zero.
  ***************************************************************************
  */
-unsigned int check_net_dev_reg(struct activity *a, int curr, int ref,
-			       unsigned int pos)
+int check_net_dev_reg(struct activity *a, int curr, int ref, int pos)
 {
 	struct stats_net_dev *sndc, *sndp;
-	unsigned int index = 0;
+	int index = 0;
 
 	sndc = (struct stats_net_dev *) ((char *) a->buf[curr] + pos * a->msize);
 
@@ -707,23 +713,8 @@
 		index++;
 	}
 
-	/* Network interface not found: Look for the first free structure */
-	for (index = 0; index < a->nr; index++) {
-		sndp = (struct stats_net_dev *) ((char *) a->buf[ref] + index * a->msize);
-		if (!strcmp(sndp->interface, ""))
-			break;
-	}
-	if (index >= a->nr) {
-		/* No free structure: Default is structure of same rank */
-		index = pos;
-	}
-
-	sndp = (struct stats_net_dev *) ((char *) a->buf[ref] + index * a->msize);
-	/* Since the name is not the same, reset all the structure */
-	memset(sndp, 0, STATS_NET_DEV_SIZE);
-	strncpy(sndp->interface, sndc->interface, MAX_IFACE_LEN - 1);
-
-	return  index;
+	/* This is a newly registered interface */
+	return -1;
 }
 
 /*
@@ -739,14 +730,13 @@
  *
  * RETURNS:
  * Position of current network interface in array of sample statistics used
- * as reference.
+ * as reference, or -1 if it is a newly registered interface.
  ***************************************************************************
  */
-unsigned int check_net_edev_reg(struct activity *a, int curr, int ref,
-				unsigned int pos)
+int check_net_edev_reg(struct activity *a, int curr, int ref, int pos)
 {
 	struct stats_net_edev *snedc, *snedp;
-	unsigned int index = 0;
+	int index = 0;
 
 	snedc = (struct stats_net_edev *) ((char *) a->buf[curr] + pos * a->msize);
 
@@ -779,23 +769,8 @@
 		index++;
 	}
 
-	/* Network interface not found: Look for the first free structure */
-	for (index = 0; index < a->nr; index++) {
-		snedp = (struct stats_net_edev *) ((char *) a->buf[ref] + index * a->msize);
-		if (!strcmp(snedp->interface, ""))
-			break;
-	}
-	if (index >= a->nr) {
-		/* No free structure: Default is structure of same rank */
-		index = pos;
-	}
-
-	snedp = (struct stats_net_edev *) ((char *) a->buf[ref] + index * a->msize);
-	/* Since the name is not the same, reset all the structure */
-	memset(snedp, 0, STATS_NET_EDEV_SIZE);
-	strncpy(snedp->interface, snedc->interface, MAX_IFACE_LEN - 1);
-
-	return  index;
+	/* This is a newly registered interface */
+	return -1;
 }
 
 /*
@@ -810,7 +785,8 @@
  * @pos		Index on current disk.
  *
  * RETURNS:
- * Position of current disk in array of sample statistics used as reference.
+ * Position of current disk in array of sample statistics used as reference
+ * or -1 if it is a newly registered device.
  ***************************************************************************
  */
 int check_disk_reg(struct activity *a, int curr, int ref, int pos)
@@ -844,24 +820,8 @@
 		index++;
 	}
 
-	/* Disk not found: Look for the first free structure */
-	for (index = 0; index < a->nr; index++) {
-		sdp = (struct stats_disk *) ((char *) a->buf[ref] + index * a->msize);
-		if (!(sdp->major + sdp->minor))
-			break;
-	}
-	if (index >= a->nr) {
-		/* No free structure found: Default is structure of same rank */
-		index = pos;
-	}
-
-	sdp = (struct stats_disk *) ((char *) a->buf[ref] + index * a->msize);
-	/* Since the device is not the same, reset all the structure */
-	memset(sdp, 0, STATS_DISK_SIZE);
-	sdp->major = sdc->major;
-	sdp->minor = sdc->minor;
-
-	return index;
+	/* This is a newly registered device */
+	return -1;
 }
 
 /*
@@ -2286,7 +2246,7 @@
 			 struct file_magic *file_magic, struct file_header *file_hdr,
 			 struct activity *act[], struct report_format *ofmt)
 {
-	char cur_date[32], cur_time[32];
+	char cur_date[TIMESTAMP_LEN], cur_time[TIMESTAMP_LEN];
 	int dp = 1;
 	unsigned int new_cpu_nr;
 
@@ -2308,7 +2268,7 @@
 	else {
 		/* Set date and time strings to be displayed for current record */
 		set_record_timestamp_string(l_flags, record_hdr,
-					    cur_date, cur_time, 32, rectime);
+					    cur_date, cur_time, TIMESTAMP_LEN, rectime);
 	}
 
 	if (rtype == R_RESTART) {
diff -Nru sysstat-11.4.1/sadf.c sysstat-11.4.3/sadf.c
--- sysstat-11.4.1/sadf.c	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/sadf.c	2017-01-11 13:53:40.000000000 +0100
@@ -641,7 +641,7 @@
 {
 	int i;
 	unsigned long long dt, itv, g_itv;
-	char cur_date[32], cur_time[32], *pre = NULL;
+	char cur_date[TIMESTAMP_LEN], cur_time[TIMESTAMP_LEN], *pre = NULL;
 	static int cross_day = FALSE;
 
 	if (reset_cd) {
@@ -705,7 +705,7 @@
 
 	/* Set date and time strings for current record */
 	set_record_timestamp_string(flags, &record_hdr[curr],
-				    cur_date, cur_time, 32, rectime);
+				    cur_date, cur_time, TIMESTAMP_LEN, rectime);
 
 	if (*fmt[f_position]->f_timestamp) {
 		pre = (char *) (*fmt[f_position]->f_timestamp)(parm, F_BEGIN, cur_date, cur_time,
@@ -1012,6 +1012,11 @@
 	long cnt = 1;
 	off_t fpos;
 
+	if (format == F_JSON_OUTPUT) {
+		/* Use a decimal point to make JSON code compliant with RFC7159 */
+		setlocale(LC_NUMERIC, "C");
+	}
+
 	/* Save current file position */
 	if ((fpos = lseek(ifd, 0, SEEK_CUR)) < 0) {
 		perror("lseek");
diff -Nru sysstat-11.4.1/sadf_misc.c sysstat-11.4.3/sadf_misc.c
--- sysstat-11.4.1/sadf_misc.c	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/sadf_misc.c	2017-01-11 13:53:40.000000000 +0100
@@ -529,11 +529,9 @@
  * @action	Action expected from current function.
  * @cur_date	Date string of current comment.
  * @cur_time	Time string of current comment.
- * @utc		True if @cur_time is expressed in UTC.
  * @itv		Interval of time with preceding record.
- *
- * OUT:
- * @tab		Number of tabulations.
+ * @file_hdr	System activity file standard header (unused here).
+ * @flags	Flags for common options.
  ***************************************************************************
  */
 __tm_funct_t print_xml_timestamp(void *parm, int action, char *cur_date,
@@ -563,11 +561,9 @@
  * @action	Action expected from current function.
  * @cur_date	Date string of current comment.
  * @cur_time	Time string of current comment.
- * @utc		True if @cur_time is expressed in UTC.
  * @itv		Interval of time with preceding record.
- *
- * OUT:
- * @tab		Number of tabulations.
+ * @file_hdr	System activity file standard header (unused here).
+ * @flags	Flags for common options.
  ***************************************************************************
  */
 __tm_funct_t print_json_timestamp(void *parm, int action, char *cur_date,
@@ -608,7 +604,7 @@
  * @id_seq	Activity sequence (unused here).
  *
  * OUT:
- * @tab		Number of tabulations.
+ * @parm	Number of tabulations.
  ***************************************************************************
  */
 __printf_funct_t print_xml_header(void *parm, int action, char *dfile,
@@ -617,7 +613,7 @@
 				  struct activity *act[], unsigned int id_seq[])
 {
 	struct tm rectime, *loc_t;
-	char cur_time[32];
+	char cur_time[TIMESTAMP_LEN];
 	int *tab = (int *) parm;
 
 	if (action & F_BEGIN) {
@@ -675,7 +671,7 @@
  * @id_seq	Activity sequence (unused here).
  *
  * OUT:
- * @tab		Number of tabulations.
+ * @parm	Number of tabulations.
  ***************************************************************************
  */
 __printf_funct_t print_json_header(void *parm, int action, char *dfile,
@@ -684,7 +680,7 @@
 				   struct activity *act[], unsigned int id_seq[])
 {
 	struct tm rectime, *loc_t;
-	char cur_time[32];
+	char cur_time[TIMESTAMP_LEN];
 	int *tab = (int *) parm;
 
 	if (action & F_BEGIN) {
@@ -745,7 +741,7 @@
 {
 	int i, p;
 	struct tm rectime, *loc_t;
-	char cur_time[32];
+	char cur_time[TIMESTAMP_LEN];
 
 	/* Actions F_MAIN and F_END ignored */
 	if (action & F_BEGIN) {
diff -Nru sysstat-11.4.1/sa.h sysstat-11.4.3/sa.h
--- sysstat-11.4.1/sa.h	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/sa.h	2017-01-11 13:53:40.000000000 +0100
@@ -224,7 +224,6 @@
 #define BITMAP_SIZE(m)	((((m) + 1) / 8) + 1)
 
 #define UTSNAME_LEN	65
-#define TIMESTAMP_LEN	16
 #define HEADER_LINE_LEN	512
 
 /*
@@ -1078,10 +1077,10 @@
 void check_file_actlst
 	(int *, char *, struct activity * [], struct file_magic *, struct file_header *,
 	 struct file_activity **, unsigned int [], int);
-unsigned int check_net_dev_reg
-	(struct activity *, int, int, unsigned int);
-unsigned int check_net_edev_reg
-	(struct activity *, int, int, unsigned int);
+int check_net_dev_reg
+	(struct activity *, int, int, int);
+int check_net_edev_reg
+	(struct activity *, int, int, int);
 double compute_ifutil
 	(struct stats_net_dev *, double, double);
 void copy_structures
diff -Nru sysstat-11.4.1/sar.c sysstat-11.4.3/sar.c
--- sysstat-11.4.1/sar.c	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/sar.c	2017-01-11 13:53:40.000000000 +0100
@@ -449,14 +449,14 @@
 					   &rectime, NULL))
 		return 0;
 	set_record_timestamp_string(flags, &record_hdr[!curr],
-				    NULL, timestamp[!curr], 16, &rectime);
+				    NULL, timestamp[!curr], TIMESTAMP_LEN, &rectime);
 
 	/* Get then set current timestamp */
 	if (sa_get_record_timestamp_struct(flags + S_F_LOCAL_TIME, &record_hdr[curr],
 					   &rectime, NULL))
 		return 0;
 	set_record_timestamp_string(flags, &record_hdr[curr],
-				    NULL, timestamp[curr], 16, &rectime);
+				    NULL, timestamp[curr], TIMESTAMP_LEN, &rectime);
 
 	/* Check if we are beginning a new day */
 	if (use_tm_start && record_hdr[!curr].ust_time &&
diff -Nru sysstat-11.4.1/svg_stats.c sysstat-11.4.3/svg_stats.c
--- sysstat-11.4.1/svg_stats.c	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/svg_stats.c	2017-01-11 13:53:40.000000000 +0100
@@ -44,7 +44,7 @@
 unsigned int svg_colors[] = {0x00cc00, 0xff00bf, 0x00ffff, 0xff0000,
 			     0xe85f00, 0x0000ff, 0x006020, 0x7030a0,
 			     0xffff00, 0x666635, 0xd60093, 0x00bfbf,
-			     0xcc3300, 0xbfbfbf, 0xffffbf, 0xff3300};
+			     0xcc3300, 0x50040f, 0xffffbf, 0x193d55};
 #define SVG_COLORS_IDX_MASK	0x0f
 
 /*
@@ -64,15 +64,16 @@
  * @cs		Pointer on current sample statistics structure.
  * @ps		Pointer on previous sample statistics structure (may be NULL).
  * @itv		Interval of time in jiffies.
- * @minv	Array containing min values already found for this activity.
- * @maxv	Array containing max values already found for this activity.
+ * @spmin	Array containing min values already found for this activity.
+ * @spmax	Array containing max values already found for this activity.
+ * @g_fields	Index in spmin/spmax arrays where extrema values for each
+ *		activity metric will be saved. As a consequence spmin/spmax
+ *		arrays mau contain values in a different order than that of
+ *		the fields in the statistics structure.
  *
  * OUT:
- * @minv	Array containg the possible new min values for current activity.
- * @maxv	Array containg the possible new max values for current activity.
- *
- * NB: @minv and @maxv arrays contain values in the same order as the fields
- * in the statistics structure.
+ * @spmin	Array containg the possible new min values for current activity.
+ * @spmax	Array containg the possible new max values for current activity.
  ***************************************************************************
  */
 void save_extrema(int llu_nr, int lu_nr, int u_nr, void *cs, void *ps,
@@ -159,13 +160,13 @@
  ***************************************************************************
  * Find the min and max values of all the graphs that will be drawn in the
  * same view. The graphs have their own min and max values in
- * minv[pos...pos+n-1] and maxv[pos...pos+n-1]. 
+ * spmin[pos...pos+n-1] and spmax[pos...pos+n-1]. 
  *
  * IN:
  * @pos		Position in array for the first graph extrema value.
  * @n		Number of graphs to scan.
- * @minv	Array containing min values for graphs.
- * @maxv	Array containing max values for graphs.
+ * @spmin	Array containing min values for graphs.
+ * @spmax	Array containing max values for graphs.
  *
  * OUT:
  * @gmin	Global min value found.
@@ -617,7 +618,7 @@
 {
 	struct record_header stamp;
 	struct tm rectime;
-	char cur_time[32];
+	char cur_time[TIMESTAMP_LEN];
 	int j;
 
 	stamp.ust_time = svg_p->ust_time_ref; /* Only ust_time field needs to be set. TRUE_TIME not allowed */
@@ -626,7 +627,7 @@
 
 		/* Display vertical lines */
 		sa_get_record_timestamp_struct(flags, &stamp, &rectime, NULL);
-		set_record_timestamp_string(flags, &stamp, NULL, cur_time, 32, &rectime);
+		set_record_timestamp_string(flags, &stamp, NULL, cur_time, TIMESTAMP_LEN, &rectime);
 		printf("<polyline points=\"%ld,0 %ld,%d\" style=\"vector-effect: non-scaling-stroke; "
 		       "stroke: #202020\" transform=\"scale(%f,1)\"/>\n",
 		       xpos * j, xpos * j, -SVG_G_YSIZE, xfactor);
@@ -1914,7 +1915,7 @@
 __print_funct_t svg_print_disk_stats(struct activity *a, int curr, int action, struct svg_parm *svg_p,
 				     unsigned long long itv, struct record_header *record_hdr)
 {
-	struct stats_disk *sdc, *sdp;
+	struct stats_disk *sdc, *sdp, sdpzero;
 	struct ext_disk_stats xds;
 	int group[] = {1, 2, 2, 2, 1};
 	int g_type[] = {SVG_LINE_GRAPH, SVG_LINE_GRAPH, SVG_LINE_GRAPH,
@@ -1949,6 +1950,7 @@
 	}
 
 	if (action & F_MAIN) {
+		memset(&sdpzero, 0, STATS_DISK_SIZE);
 		restart = svg_p->restart;
 		/*
 		 * Mark previously registered devices as now
@@ -1989,7 +1991,13 @@
 			unregistered = outsize + pos + 8;
 
 			j = check_disk_reg(a, curr, !curr, i);
-			sdp = (struct stats_disk *) ((char *) a->buf[!curr] + j * a->msize);
+			if (j < 0) {
+				/* This is a newly registered interface. Previous stats are zero */
+				sdp = &sdpzero;
+			}
+			else {
+				sdp = (struct stats_disk *) ((char *) a->buf[!curr] + j * a->msize);
+			}
 
 			/*
 			 * If current device was marked as previously unregistered,
@@ -2146,7 +2154,7 @@
 __print_funct_t svg_print_net_dev_stats(struct activity *a, int curr, int action, struct svg_parm *svg_p,
 					unsigned long long itv, struct record_header *record_hdr)
 {
-	struct stats_net_dev *sndc, *sndp;
+	struct stats_net_dev *sndc, *sndp, sndzero;
 	int group[] = {2, 2, 3, 1};
 	int g_type[] = {SVG_LINE_GRAPH, SVG_LINE_GRAPH, SVG_LINE_GRAPH,
 			SVG_BAR_GRAPH};
@@ -2177,6 +2185,7 @@
 	}
 
 	if (action & F_MAIN) {
+		memset(&sndzero, 0, STATS_NET_DEV_SIZE);
 		restart = svg_p->restart;
 		/*
 		 * Mark previously registered interfaces as now
@@ -2193,8 +2202,8 @@
 		for (i = 0; i < a->nr; i++) {
 			sndc = (struct stats_net_dev *) ((char *) a->buf[curr] + i * a->msize);
 			if (!strcmp(sndc->interface, ""))
-				/* Empty structure: Ignore it */
-				continue;
+				/* Empty structure: This is the end of the list */
+				break;
 
 			/* Look for corresponding graph */
 			for (k = 0; k < a->nr; k++) {
@@ -2219,7 +2228,13 @@
 			unregistered = outsize + pos + 8;
 
 			j = check_net_dev_reg(a, curr, !curr, i);
-			sndp = (struct stats_net_dev *) ((char *) a->buf[!curr] + j * a->msize);
+			if (j < 0) {
+				/* This is a newly registered interface. Previous stats are zero */
+				sndp = &sndzero;
+			}
+			else {
+				sndp = (struct stats_net_dev *) ((char *) a->buf[!curr] + j * a->msize);
+			}
 
 			/*
 			 * If current interface was marked as previously unregistered,
@@ -2342,7 +2357,7 @@
 __print_funct_t svg_print_net_edev_stats(struct activity *a, int curr, int action, struct svg_parm *svg_p,
 					 unsigned long long itv, struct record_header *record_hdr)
 {
-	struct stats_net_edev *snedc, *snedp;
+	struct stats_net_edev *snedc, *snedp, snedzero;
 	int group[] = {2, 2, 2, 3};
 	int g_type[] = {SVG_LINE_GRAPH, SVG_LINE_GRAPH, SVG_LINE_GRAPH,
 			SVG_LINE_GRAPH};
@@ -2372,6 +2387,7 @@
 	}
 
 	if (action & F_MAIN) {
+		memset(&snedzero, 0, STATS_NET_EDEV_SIZE);
 		restart = svg_p->restart;
 		/*
 		 * Mark previously registered interfaces as now
@@ -2388,8 +2404,8 @@
 		for (i = 0; i < a->nr; i++) {
 			snedc = (struct stats_net_edev *) ((char *) a->buf[curr] + i * a->msize);
 			if (!strcmp(snedc->interface, ""))
-				/* Empty structure: Ignore it */
-				continue;
+				/* Empty structure: This is the end of the list */
+				break;
 
 			/* Look for corresponding graph */
 			for (k = 0; k < a->nr; k++) {
@@ -2414,7 +2430,13 @@
 			unregistered = outsize + pos + 9;
 
 			j = check_net_edev_reg(a, curr, !curr, i);
-			snedp = (struct stats_net_edev *) ((char *) a->buf[!curr] + j * a->msize);
+			if (j < 0) {
+				/* This is a newly registered interface. Previous stats are zero */
+				snedp = &snedzero;
+			}
+			else {
+				snedp = (struct stats_net_edev *) ((char *) a->buf[!curr] + j * a->msize);
+			}
 
 			/*
 			 * If current interface was marked as previously unregistered,
@@ -4444,7 +4466,7 @@
 	static double *spmin, *spmax;
 	static char **out;
 	static int *outsize;
-	char *item_name;
+	char *item_name = NULL;
 	double tval;
 	int i, k, pos, restart;
 
diff -Nru sysstat-11.4.1/sysstat-11.4.1.lsm sysstat-11.4.3/sysstat-11.4.1.lsm
--- sysstat-11.4.1/sysstat-11.4.1.lsm	2016-09-23 14:53:51.000000000 +0200
+++ sysstat-11.4.3/sysstat-11.4.1.lsm	1970-01-01 01:00:00.000000000 +0100
@@ -1,36 +0,0 @@
-Begin4
-Title:		sysstat - the sar, sadf, mpstat, iostat, tapestat, pidstat and cifsiostat commands for Linux
-Version:	11.4.1
-Entered-date:	2016-09-23
-Description:	The sysstat package contains the sar, sadf, mpstat, iostat, tapestat,
-		pidstat, cifsiostat and sa tools for Linux.
-		The sar command collects and reports system activity
-		information.
-		The information collected by sar can be saved in a file
-		in a binary format for future inspection.
-		The statistics reported by sar concern I/O transfer rates,
-		paging activity, process-related activities, interrupts,
-		network activity, memory and swap space utilization, CPU
-		utilization, kernel activities and TTY statistics, among
-		others. Both UP and SMP machines are fully supported.
-		The iostat command reports CPU utilization
-		and I/O statistics for disks. The tapestat command reports
-		statistics for tape drives. The mpstat command reports
-		global and per-processor statistics. The sadf command
-		is used to display data collected by sar in various
-		formats (XML, database-friendly, etc.) and to draw graphs (SVG).
-		The tapestat command reports statistics for tape drives connected
-		to the system.
-		The pidstat command reports statistics for Linux tasks (processes).
-		The cifsiostat command reports I/O statistics for CIFS filesystems.
-		NB: Send bugs, patches, suggestions and/or questions to
-		(sysstat [at] orange.fr).
-		URL: http://pagesperso-orange.fr/sebastien.godard/
-Keywords:	system administration, sar, sadf, iostat, tapestat, mpstat, pidstat, cifsiostat, system accounting, performance, tuning
-Author:		sysstat [at] orange.fr (Sebastien Godard)
-Maintained-by:	sysstat [at] orange.fr (Sebastien Godard)
-Primary-site:	http://pagesperso-orange.fr/sebastien.godard/
-		336kiB sysstat-11.4.1.tar.xz
-Alternate-site:
-Copying-policy:	GPL
-End
diff -Nru sysstat-11.4.1/sysstat-11.4.1.spec sysstat-11.4.3/sysstat-11.4.1.spec
--- sysstat-11.4.1/sysstat-11.4.1.spec	2016-09-23 14:52:11.000000000 +0200
+++ sysstat-11.4.3/sysstat-11.4.1.spec	1970-01-01 01:00:00.000000000 +0100
@@ -1,81 +0,0 @@
-Summary: 	SAR, SADF, MPSTAT, IOSTAT, TAPESTAT, PIDSTAT and CIFSIOSTAT for Linux
-Name: 		sysstat
-Version: 	11.4.1
-Release: 	1
-License: 	GPL
-Group: 		Applications/System
-Source0: 	%{name}-%{version}.tar.gz
-URL:		http://pagesperso-orange.fr/sebastien.godard/
-Packager:	Sebastien Godard <sysstat _at_ orange.fr>
-BuildRoot:	%{_tmppath}/%{name}-%{version}-root-%(id -u -n)
-Requires:	gettext
-
-%description
-The sysstat package contains the sar, sadf, mpstat, iostat, tapestat,
-pidstat, cifsiostat and sa tools for Linux.
-The sar command collects and reports system activity information.
-The information collected by sar can be saved in a file in a binary
-format for future inspection. The statistics reported by sar concern
-I/O transfer rates, paging activity, process-related activities,
-interrupts, network activity, memory and swap space utilization, CPU
-utilization, kernel activities and TTY statistics, among others. Both
-UP and SMP machines are fully supported.
-The sadf command may  be used to display data collected by sar in
-various formats (CSV, XML, etc.) and to draw graphs (SVG).
-The iostat command reports CPU utilization and I/O statistics for disks.
-The tapestat command reports statistics for tapes connected to the system.
-The mpstat command reports global and per-processor statistics.
-The pidstat command reports statistics for Linux tasks (processes).
-The cifsiostat command reports I/O statistics for CIFS filesystems.
-
-%prep
-%setup
-
-%build
-# To include cron installation, add options --enable-install-cron and --enable-copy-only
-./configure --prefix=%{_prefix} \
-	--disable-file-attr \
-	sa_lib_dir=%{_libdir}/sa \
-	--mandir=%{_mandir} \
-	DESTDIR=$RPM_BUILD_ROOT
-make
-
-%install
-rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT/var/log/sa
-
-make install
-
-mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d
-install -m 755  sysstat $RPM_BUILD_ROOT/etc/rc.d/init.d/sysstat
-mkdir -p $RPM_BUILD_ROOT/etc/sysconfig
-install -m 644 sysstat.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/sysstat
-install -m 644 sysstat.ioconf $RPM_BUILD_ROOT/etc/sysconfig/sysstat.ioconf
-mkdir -p $RPM_BUILD_ROOT/etc/cron.d
-install -m 644 cron/sysstat.crond.sample $RPM_BUILD_ROOT/etc/cron.d/sysstat
-mkdir -p $RPM_BUILD_ROOT/etc/rc2.d
-cd $RPM_BUILD_ROOT/etc/rc2.d && ln -sf ../init.d/sysstat S01sysstat
-mkdir -p $RPM_BUILD_ROOT/etc/rc3.d
-cd $RPM_BUILD_ROOT/etc/rc3.d && ln -sf ../init.d/sysstat S01sysstat
-mkdir -p $RPM_BUILD_ROOT/etc/rc5.d
-cd $RPM_BUILD_ROOT/etc/rc5.d && ln -sf ../init.d/sysstat S01sysstat
-
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-%files
-%defattr(644,root,root,755)
-%doc %{_datadir}/doc/sysstat-%{version}/*
-%attr(755,root,root) %{_bindir}/*
-%attr(755,root,root) %{_libdir}/sa/*
-%attr(644,root,root) %{_mandir}/man*/*
-%attr(644,root,root) %{_datadir}/locale/*/LC_MESSAGES/sysstat.mo
-%attr(755,root,root) %dir /var/log/sa
-%attr(755,root,root) /etc/rc.d/init.d/sysstat
-%attr(644,root,root) /etc/sysconfig/sysstat
-%attr(644,root,root) /etc/sysconfig/sysstat.ioconf
-/etc/rc2.d/S01sysstat
-/etc/rc3.d/S01sysstat
-/etc/rc5.d/S01sysstat
-%config(noreplace) %attr(0644,root,root) /etc/cron.d/sysstat
-
diff -Nru sysstat-11.4.1/sysstat-11.4.3.lsm sysstat-11.4.3/sysstat-11.4.3.lsm
--- sysstat-11.4.1/sysstat-11.4.3.lsm	1970-01-01 01:00:00.000000000 +0100
+++ sysstat-11.4.3/sysstat-11.4.3.lsm	2017-01-11 13:56:07.000000000 +0100
@@ -0,0 +1,36 @@
+Begin4
+Title:		sysstat - the sar, sadf, mpstat, iostat, tapestat, pidstat and cifsiostat commands for Linux
+Version:	11.4.3
+Entered-date:	2017-01-11
+Description:	The sysstat package contains the sar, sadf, mpstat, iostat, tapestat,
+		pidstat, cifsiostat and sa tools for Linux.
+		The sar command collects and reports system activity
+		information.
+		The information collected by sar can be saved in a file
+		in a binary format for future inspection.
+		The statistics reported by sar concern I/O transfer rates,
+		paging activity, process-related activities, interrupts,
+		network activity, memory and swap space utilization, CPU
+		utilization, kernel activities and TTY statistics, among
+		others. Both UP and SMP machines are fully supported.
+		The iostat command reports CPU utilization
+		and I/O statistics for disks. The tapestat command reports
+		statistics for tape drives. The mpstat command reports
+		global and per-processor statistics. The sadf command
+		is used to display data collected by sar in various
+		formats (XML, database-friendly, etc.) and to draw graphs (SVG).
+		The tapestat command reports statistics for tape drives connected
+		to the system.
+		The pidstat command reports statistics for Linux tasks (processes).
+		The cifsiostat command reports I/O statistics for CIFS filesystems.
+		NB: Send bugs, patches, suggestions and/or questions to
+		(sysstat [at] orange.fr).
+		URL: http://pagesperso-orange.fr/sebastien.godard/
+Keywords:	system administration, sar, sadf, iostat, tapestat, mpstat, pidstat, cifsiostat, system accounting, performance, tuning
+Author:		sysstat [at] orange.fr (Sebastien Godard)
+Maintained-by:	sysstat [at] orange.fr (Sebastien Godard)
+Primary-site:	http://pagesperso-orange.fr/sebastien.godard/
+		337kiB sysstat-11.4.3.tar.xz
+Alternate-site:
+Copying-policy:	GPL
+End
diff -Nru sysstat-11.4.1/sysstat-11.4.3.spec sysstat-11.4.3/sysstat-11.4.3.spec
--- sysstat-11.4.1/sysstat-11.4.3.spec	1970-01-01 01:00:00.000000000 +0100
+++ sysstat-11.4.3/sysstat-11.4.3.spec	2017-01-11 13:55:04.000000000 +0100
@@ -0,0 +1,81 @@
+Summary: 	SAR, SADF, MPSTAT, IOSTAT, TAPESTAT, PIDSTAT and CIFSIOSTAT for Linux
+Name: 		sysstat
+Version: 	11.4.3
+Release: 	1
+License: 	GPL
+Group: 		Applications/System
+Source0: 	%{name}-%{version}.tar.gz
+URL:		http://pagesperso-orange.fr/sebastien.godard/
+Packager:	Sebastien Godard <sysstat _at_ orange.fr>
+BuildRoot:	%{_tmppath}/%{name}-%{version}-root-%(id -u -n)
+Requires:	gettext
+
+%description
+The sysstat package contains the sar, sadf, mpstat, iostat, tapestat,
+pidstat, cifsiostat and sa tools for Linux.
+The sar command collects and reports system activity information.
+The information collected by sar can be saved in a file in a binary
+format for future inspection. The statistics reported by sar concern
+I/O transfer rates, paging activity, process-related activities,
+interrupts, network activity, memory and swap space utilization, CPU
+utilization, kernel activities and TTY statistics, among others. Both
+UP and SMP machines are fully supported.
+The sadf command may  be used to display data collected by sar in
+various formats (CSV, XML, etc.) and to draw graphs (SVG).
+The iostat command reports CPU utilization and I/O statistics for disks.
+The tapestat command reports statistics for tapes connected to the system.
+The mpstat command reports global and per-processor statistics.
+The pidstat command reports statistics for Linux tasks (processes).
+The cifsiostat command reports I/O statistics for CIFS filesystems.
+
+%prep
+%setup
+
+%build
+# To include cron installation, add options --enable-install-cron and --enable-copy-only
+./configure --prefix=%{_prefix} \
+	--disable-file-attr \
+	sa_lib_dir=%{_libdir}/sa \
+	--mandir=%{_mandir} \
+	DESTDIR=$RPM_BUILD_ROOT
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+install -d $RPM_BUILD_ROOT/var/log/sa
+
+make install
+
+mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d
+install -m 755  sysstat $RPM_BUILD_ROOT/etc/rc.d/init.d/sysstat
+mkdir -p $RPM_BUILD_ROOT/etc/sysconfig
+install -m 644 sysstat.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/sysstat
+install -m 644 sysstat.ioconf $RPM_BUILD_ROOT/etc/sysconfig/sysstat.ioconf
+mkdir -p $RPM_BUILD_ROOT/etc/cron.d
+install -m 644 cron/sysstat.crond.sample $RPM_BUILD_ROOT/etc/cron.d/sysstat
+mkdir -p $RPM_BUILD_ROOT/etc/rc2.d
+cd $RPM_BUILD_ROOT/etc/rc2.d && ln -sf ../init.d/sysstat S01sysstat
+mkdir -p $RPM_BUILD_ROOT/etc/rc3.d
+cd $RPM_BUILD_ROOT/etc/rc3.d && ln -sf ../init.d/sysstat S01sysstat
+mkdir -p $RPM_BUILD_ROOT/etc/rc5.d
+cd $RPM_BUILD_ROOT/etc/rc5.d && ln -sf ../init.d/sysstat S01sysstat
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(644,root,root,755)
+%doc %{_datadir}/doc/sysstat-%{version}/*
+%attr(755,root,root) %{_bindir}/*
+%attr(755,root,root) %{_libdir}/sa/*
+%attr(644,root,root) %{_mandir}/man*/*
+%attr(644,root,root) %{_datadir}/locale/*/LC_MESSAGES/sysstat.mo
+%attr(755,root,root) %dir /var/log/sa
+%attr(755,root,root) /etc/rc.d/init.d/sysstat
+%attr(644,root,root) /etc/sysconfig/sysstat
+%attr(644,root,root) /etc/sysconfig/sysstat.ioconf
+/etc/rc2.d/S01sysstat
+/etc/rc3.d/S01sysstat
+/etc/rc5.d/S01sysstat
+%config(noreplace) %attr(0644,root,root) /etc/cron.d/sysstat
+
diff -Nru sysstat-11.4.1/tapestat.c sysstat-11.4.3/tapestat.c
--- sysstat-11.4.1/tapestat.c	2016-09-23 14:39:22.000000000 +0200
+++ sysstat-11.4.3/tapestat.c	2017-01-11 13:53:40.000000000 +0100
@@ -59,7 +59,7 @@
 int flags = 0;		/* Flag for common options and system state */
 
 long interval = 0;
-char timestamp[64];
+char timestamp[TIMESTAMP_LEN];
 
 struct sigaction alrm_act;
 
diff -Nru sysstat-11.4.1/xml_stats.c sysstat-11.4.3/xml_stats.c
--- sysstat-11.4.1/xml_stats.c	2016-09-23 14:50:15.000000000 +0200
+++ sysstat-11.4.3/xml_stats.c	2017-01-11 13:53:40.000000000 +0100
@@ -674,10 +674,12 @@
 				     unsigned long long itv)
 {
 	int i, j;
-	struct stats_disk *sdc,	*sdp;
+	struct stats_disk *sdc,	*sdp, sdpzero;
 	struct ext_disk_stats xds;
 	char *dev_name, *persist_dev_name;
 
+	memset(&sdpzero, 0, STATS_DISK_SIZE);
+
 	xprintf(tab++, "<disk per=\"second\">");
 
 	for (i = 0; i < a->nr; i++) {
@@ -688,7 +690,13 @@
 			continue;
 
 		j = check_disk_reg(a, curr, !curr, i);
-		sdp = (struct stats_disk *) ((char *) a->buf[!curr] + j * a->msize);
+		if (j < 0) {
+			/* This is a newly registered interface. Previous stats are zero */
+			sdp = &sdpzero;
+		}
+		else {
+			sdp = (struct stats_disk *) ((char *) a->buf[!curr] + j * a->msize);
+		}
 
 		/* Compute extended statistics values */
 		compute_ext_disk_stats(sdc, sdp, itv, &xds);
@@ -754,12 +762,14 @@
 					unsigned long long itv)
 {
 	int i, j;
-	struct stats_net_dev *sndc, *sndp;
+	struct stats_net_dev *sndc, *sndp, sndzero;
 	double rxkb, txkb, ifutil;
 
 	if (!IS_SELECTED(a->options) || (a->nr <= 0))
 		goto close_xml_markup;
 
+	memset(&sndzero, 0, STATS_NET_DEV_SIZE);
+
 	xml_markup_network(tab, OPEN_XML_MARKUP);
 	tab++;
 
@@ -768,10 +778,16 @@
 		sndc = (struct stats_net_dev *) ((char *) a->buf[curr] + i * a->msize);
 
 		if (!strcmp(sndc->interface, ""))
-			continue;
+			break;
 
 		j = check_net_dev_reg(a, curr, !curr, i);
-		sndp = (struct stats_net_dev *) ((char *) a->buf[!curr] + j * a->msize);
+		if (j < 0) {
+			/* This is a newly registered interface. Previous stats are zero */
+			sndp = &sndzero;
+		}
+		else {
+			sndp = (struct stats_net_dev *) ((char *) a->buf[!curr] + j * a->msize);
+		}
 
 		rxkb = S_VALUE(sndp->rx_bytes, sndc->rx_bytes, itv);
 		txkb = S_VALUE(sndp->tx_bytes, sndc->tx_bytes, itv);
@@ -819,11 +835,13 @@
 					 unsigned long long itv)
 {
 	int i, j;
-	struct stats_net_edev *snedc, *snedp;
+	struct stats_net_edev *snedc, *snedp, snedzero;
 
 	if (!IS_SELECTED(a->options) || (a->nr <= 0))
 		goto close_xml_markup;
 
+	memset(&snedzero, 0, STATS_NET_EDEV_SIZE);
+
 	xml_markup_network(tab, OPEN_XML_MARKUP);
 	tab++;
 
@@ -832,10 +850,16 @@
 		snedc = (struct stats_net_edev *) ((char *) a->buf[curr] + i * a->msize);
 
 		if (!strcmp(snedc->interface, ""))
-			continue;
+			break;
 
 		j = check_net_edev_reg(a, curr, !curr, i);
-		snedp = (struct stats_net_edev *) ((char *) a->buf[!curr] + j * a->msize);
+		if (j < 0) {
+			/* This is a newly registered interface. Previous stats are zero */
+			snedp = &snedzero;
+		}
+		else {
+			snedp = (struct stats_net_edev *) ((char *) a->buf[!curr] + j * a->msize);
+		}
 
 		xprintf(tab, "<net-edev iface=\"%s\" "
 			"rxerr=\"%.2f\" "
