summaryrefslogtreecommitdiff
path: root/usr/src/lib/libdladm/common/libdlstat.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libdladm/common/libdlstat.c')
-rw-r--r--usr/src/lib/libdladm/common/libdlstat.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/usr/src/lib/libdladm/common/libdlstat.c b/usr/src/lib/libdladm/common/libdlstat.c
index 53d4f9cedf..880a2edd57 100644
--- a/usr/src/lib/libdladm/common/libdlstat.c
+++ b/usr/src/lib/libdladm/common/libdlstat.c
@@ -677,15 +677,18 @@ dladm_stats_total(pktsum_t *s1, pktsum_t *s2, pktsum_t *s3)
s1->snaptime = s2->snaptime;
}
+#define DIFF_STAT(s2, s3) ((s2) > (s3) ? (s2 - s3) : 0)
+
+
/* Compute differences between 2 pktsums (s1 = s2 - s3) */
void
dladm_stats_diff(pktsum_t *s1, pktsum_t *s2, pktsum_t *s3)
{
- s1->rbytes = s2->rbytes - s3->rbytes;
- s1->ipackets = s2->ipackets - s3->ipackets;
- s1->ierrors = s2->ierrors - s3->ierrors;
- s1->obytes = s2->obytes - s3->obytes;
- s1->opackets = s2->opackets - s3->opackets;
- s1->oerrors = s2->oerrors - s3->oerrors;
- s1->snaptime = s2->snaptime - s3->snaptime;
+ s1->rbytes = DIFF_STAT(s2->rbytes, s3->rbytes);
+ s1->ipackets = DIFF_STAT(s2->ipackets, s3->ipackets);
+ s1->ierrors = DIFF_STAT(s2->ierrors, s3->ierrors);
+ s1->obytes = DIFF_STAT(s2->obytes, s3->obytes);
+ s1->opackets = DIFF_STAT(s2->opackets, s3->opackets);
+ s1->oerrors = DIFF_STAT(s2->oerrors, s3->oerrors);
+ s1->snaptime = DIFF_STAT(s2->snaptime, s3->snaptime);
}