Add support for configuring frame rate per traffic flow for IXIA
[yardstick.git] / yardstick / network_services / traffic_profile / ixia_rfc2544.py
index b8aa78d..14edf2d 100644 (file)
@@ -28,6 +28,8 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
     DOWNLINK = 'downlink'
     DROP_PERCENT_ROUND = 6
     RATE_ROUND = 5
+    STATUS_SUCCESS = "Success"
+    STATUS_FAIL = "Failure"
 
     def __init__(self, yaml_data):
         super(IXIARFC2544Profile, self).__init__(yaml_data)
@@ -76,6 +78,12 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
                 'outer_l4': {},
             }
 
+            frame_rate = value.get('frame_rate')
+            if frame_rate:
+                flow_rate, flow_rate_unit = self.config.parse_rate(frame_rate)
+                result[traffickey]['rate'] = flow_rate
+                result[traffickey]['rate_unit'] = flow_rate_unit
+
             outer_l2 = value.get('outer_l2')
             if outer_l2:
                 result[traffickey]['outer_l2'].update({
@@ -111,6 +119,7 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
                     'dstmask': dstmask,
                     'type': key,
                     'proto': outer_l3.get('proto'),
+                    'priority': outer_l3.get('priority')
                 })
 
             outer_l4 = value.get('outer_l4')
@@ -174,7 +183,7 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
         self._ixia_traffic_generate(traffic, ixia_obj)
         return first_run
 
-    def get_drop_percentage(self, samples, tol_min, tolerance,
+    def get_drop_percentage(self, samples, tol_min, tolerance, precision,
                             first_run=False):
         completed = False
         drop_percent = 100
@@ -208,6 +217,10 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
         else:
             completed = True
 
+        LOG.debug("tolerance=%s, tolerance_precision=%s drop_percent=%s "
+                  "completed=%s", tolerance, precision, drop_percent,
+                  completed)
+
         latency_ns_avg = float(
             sum([samples[iface]['Store-Forward_Avg_latency_ns']
             for iface in samples])) / num_ifaces
@@ -218,6 +231,10 @@ class IXIARFC2544Profile(trex_traffic_profile.TrexProfile):
             sum([samples[iface]['Store-Forward_Max_latency_ns']
             for iface in samples])) / num_ifaces
 
+        samples['Status'] = self.STATUS_FAIL
+        if round(drop_percent, precision) <= tolerance:
+            samples['Status'] = self.STATUS_SUCCESS
+
         samples['TxThroughput'] = tx_throughput
         samples['RxThroughput'] = rx_throughput
         samples['DropPercentage'] = drop_percent