From 3d14c60db72806048d6c345a92c7c715d6457daa Mon Sep 17 00:00:00 2001
From: Radek Zetik <radekx.zetik@intel.com>
Date: Wed, 3 Feb 2016 11:28:51 +0000
Subject: [PATCH] VSPERF: Report percentage frameloss from IXIA/IXNET

The patch introduces frame_loss_percent result value.
The implementation is done for Ixia and IxNet
traffic generators. The value is visible in list
of result values at the end of the test, in csv,
rst and md files.

JIRA: VSPERF-201

Change-Id: I9b6795d427b199cb62ed66b7a137e412e36dc757
Signed-off-by: Radek Zetik <radekx.zetik@intel.com>
Reviewed-by: Maryam Tahhan <maryam.tahhan@intel.com>
Reviewed-by: Brian Castelli <brian.castelli@spirent.com>
Reviewed-by: Al Morton <acmorton@att.com>
Reviewed-by: Tv Rao <tv.rao@freescale.com>
Reviewed-by: Billy O Mahony <billy.o.mahony@intel.com>
---
 core/results/results_constants.py | 4 +++-
 tools/pkt_gen/ixia/ixia.py        | 5 +++++
 tools/pkt_gen/ixnet/ixnet.py      | 3 +++
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/core/results/results_constants.py b/core/results/results_constants.py
index 8f139f14..fcf068b7 100644
--- a/core/results/results_constants.py
+++ b/core/results/results_constants.py
@@ -37,6 +37,7 @@ class ResultsConstants(object):
     MIN_LATENCY_NS = 'min_latency_ns'
     MAX_LATENCY_NS = 'max_latency_ns'
     AVG_LATENCY_NS = 'avg_latency_ns'
+    FRAME_LOSS_PERCENT = 'frame_loss_percent'
     #Burst traffic
     TX_FRAMES = 'tx_frames'
     RX_FRAMES = 'rx_frames'
@@ -79,4 +80,5 @@ class ResultsConstants(object):
                 ResultsConstants.THROUGHPUT_RX_PERCENT,
                 ResultsConstants.MIN_LATENCY_NS,
                 ResultsConstants.MAX_LATENCY_NS,
-                ResultsConstants.AVG_LATENCY_NS]
+                ResultsConstants.AVG_LATENCY_NS,
+                ResultsConstants.FRAME_LOSS_PERCENT]
diff --git a/tools/pkt_gen/ixia/ixia.py b/tools/pkt_gen/ixia/ixia.py
index 10ed1fb2..b9b3dd17 100755
--- a/tools/pkt_gen/ixia/ixia.py
+++ b/tools/pkt_gen/ixia/ixia.py
@@ -289,6 +289,10 @@ class Ixia(trafficgen.ITrafficGenerator):
         """
         assert len(result) == 8  # fail-fast if underlying Tcl code changes
 
+        if float(result[0]) == 0:
+            loss_rate = 100
+        else:
+            loss_rate = (float(result[0]) - float(result[1])) / float(result[0]) * 100
         result_dict = OrderedDict()
         # drop the first 4 elements as we don't use/need them. In
         # addition, IxExplorer does not support latency or % line rate
@@ -297,6 +301,7 @@ class Ixia(trafficgen.ITrafficGenerator):
         result_dict[ResultsConstants.TX_RATE_FPS] = result[5]
         result_dict[ResultsConstants.THROUGHPUT_RX_MBPS] = result[6]
         result_dict[ResultsConstants.TX_RATE_MBPS] = result[7]
+        result_dict[ResultsConstants.FRAME_LOSS_PERCENT] = loss_rate
         result_dict[ResultsConstants.TX_RATE_PERCENT] = \
                                             ResultsConstants.UNKNOWN_VALUE
         result_dict[ResultsConstants.THROUGHPUT_RX_PERCENT] = \
diff --git a/tools/pkt_gen/ixnet/ixnet.py b/tools/pkt_gen/ixnet/ixnet.py
index 96936e14..c8dbb3d1 100755
--- a/tools/pkt_gen/ixnet/ixnet.py
+++ b/tools/pkt_gen/ixnet/ixnet.py
@@ -375,6 +375,7 @@ class IxNet(trafficgen.ITrafficGenerator):
                         results[ResultsConstants.THROUGHPUT_RX_MBPS] = row[6]
                         results[ResultsConstants.TX_RATE_PERCENT] = row[3]
                         results[ResultsConstants.THROUGHPUT_RX_PERCENT] = row[4]
+                        results[ResultsConstants.FRAME_LOSS_PERCENT] = row[10]
                         results[ResultsConstants.MIN_LATENCY_NS] = row[11]
                         results[ResultsConstants.MAX_LATENCY_NS] = row[12]
                         results[ResultsConstants.AVG_LATENCY_NS] = row[13]
@@ -484,6 +485,7 @@ class IxNet(trafficgen.ITrafficGenerator):
             """
             results = OrderedDict()
             results[ResultsConstants.B2B_FRAMES] = 0
+            results[ResultsConstants.B2B_FRAME_LOSS_PERCENT] = 100
 
             with open(path, 'r') as in_file:
                 reader = csv.reader(in_file, delimiter=',')
@@ -495,6 +497,7 @@ class IxNet(trafficgen.ITrafficGenerator):
                         if int(row[12]) > \
                          int(results[ResultsConstants.B2B_FRAMES]):
                             results[ResultsConstants.B2B_FRAMES] = int(row[12])
+                            results[ResultsConstants.B2B_FRAME_LOSS_PERCENT] = float(row[14])
 
             return results
 
-- 
2.16.6