[dts] [patch v2] framework/pktgen.py: remove “ __name__ == “__main__” part modify create_vm() as a private method modify some variables as private variables modify _retrieve_port_statistic
Liu, Yong
yong.liu at intel.com
Fri Sep 22 10:56:21 CEST 2017
Fei,
Your patch hasn’t been merged. Just add description in commit log is enough.
Thanks,
Marvin
> -----Original Message-----
> From: dts [mailto:dts-bounces at dpdk.org] On Behalf Of wang fei
> Sent: Thursday, September 21, 2017 7:33 PM
> To: dts at dpdk.org
> Cc: Wang, FeiX Y <feix.y.wang at intel.com>
> Subject: [dts] [patch v2] framework/pktgen.py: remove “ __name__ ==
> “__main__” part modify create_vm() as a private method modify some
> variables as private variables modify _retrieve_port_statistic(...
>
> Signed-off-by: wang fei <feix.y.wang at intel.com>
> ---
> framework/pktgen.py | 105 ++++++++++++++++++-----------------------------
> -----
> 1 file changed, 36 insertions(+), 69 deletions(-)
>
> diff --git a/framework/pktgen.py b/framework/pktgen.py
> index 03550bd..4ba6b25 100644
> --- a/framework/pktgen.py
> +++ b/framework/pktgen.py
> @@ -94,7 +94,7 @@ class PacketGenerator(object):
> pass
>
> @abstractmethod
> - def _start_transmission(self, stream_ids, delay=50):
> + def _start_transmission(self, stream_ids):
> pass
>
> @abstractmethod
> @@ -136,10 +136,10 @@ class PacketGenerator(object):
>
> time.sleep(delay)
> for stream_id in stream_ids:
> - rxbps_rates, rxpps_rates =
> self._retrieve_port_statistic(stream_id)
> + rx_statistics = self._retrieve_port_statistic(stream_id)
>
> - bps_rx.append(rxbps_rates)
> - pps_rx.append(rxpps_rates)
> + bps_rx.append(rx_statistics["rate_rx_bits"])
> + pps_rx.append(rx_statistics["rate_rx_pkts"])
> self._stop_transmission(stream_id)
> bps_rx_total = self._summary_statistic(bps_rx)
> pps_rx_total = self._summary_statistic(pps_rx)
> @@ -148,8 +148,6 @@ class PacketGenerator(object):
>
> return bps_rx_total, pps_rx_total
>
> -
> -
> def _summary_statistic(self, array=[]):
> """
> Summary all values in statistic array
> @@ -158,7 +156,6 @@ class PacketGenerator(object):
> for value in array:
> summary += value
>
> -
> return summary
>
> def _get_stream(self, stream_id):
> @@ -182,17 +179,17 @@ class TrexPacketGenerator(PacketGenerator):
> self._ports = []
> self._traffic_ports = []
> self._transmit_streams = {}
> - self.trex_app = "scripts/t-rex-64"
> + self._trex_app = "scripts/t-rex-64"
>
> - self.conf_inst = self._get_generator_conf_instance("trex")
> - self.conf = self.conf_inst.load_pktgen_config()
> - self.options_keys = [ 'rate', 'ip', 'vlan']
> - self.ip_keys = ['start', 'end','action', 'mask', 'step']
> - self.vlan_keys = ['start', 'end', 'action', 'step', 'count']
> + self._conf_inst = self._get_generator_conf_instance("trex")
> + self._conf = self._conf_inst.load_pktgen_config()
> + self._options_keys = [ 'rate', 'ip', 'vlan']
> + self._ip_keys = ['start', 'end','action', 'mask', 'step']
> + self._vlan_keys = ['start', 'end', 'action', 'step', 'count']
> super(TrexPacketGenerator, self).__init__(tester)
>
> def connect(self):
> - self._conn = STLClient(server=self.conf["server"])
> + self._conn = STLClient(server=self._conf["server"])
> time.sleep(30)
> self._conn.connect()
> for p in self._conn.get_all_ports():
> @@ -205,11 +202,11 @@ class TrexPacketGenerator(PacketGenerator):
>
> def _check_options(self, opts={}):
> for key in opts:
> - if key in self.options_keys:
> + if key in self._options_keys:
> if key == 'ip':
> ip = opts['ip']
> for ip_key in ip:
> - if not ip_key in self.ip_keys:
> + if not ip_key in self._ip_keys:
> print " %s is invalid ip option" % ip_key
> return False
> if key == 'action':
> @@ -219,7 +216,7 @@ class TrexPacketGenerator(PacketGenerator):
> elif key == 'vlan':
> vlan = opts['vlan']
> for vlan_key in vlan:
> - if not vlan_key in self.vlan_keys:
> + if not vlan_key in self._vlan_keys:
> print " %s is invalid vlan option" % vlan_key
> return False
> if key == 'action':
> @@ -231,7 +228,7 @@ class TrexPacketGenerator(PacketGenerator):
> return False
> return True
>
> - def create_vm (self, ip_src_range, ip_dst_range, action='inc',
> step=1):
> + def _create_vm (self, ip_src_range, ip_dst_range, action='inc',
> step=1):
> if not ip_src_range and not ip_dst_range:
> return None
>
> @@ -255,14 +252,14 @@ class TrexPacketGenerator(PacketGenerator):
> def prepare_generator(self):
> app_param_temp = "-i"
>
> - for key in self.conf:
> + for key in self._conf:
> #key, value = pktgen_conf
> if key == 'config_file':
> - app_param_temp = app_param_temp + " --cfg " +
> self.conf[key]
> + app_param_temp = app_param_temp + " --cfg " +
> self._conf[key]
> elif key == 'core_num':
> - app_param_temp = app_param_temp + " -c " + self.conf[key]
> + app_param_temp = app_param_temp + " -c " + self._conf[key]
>
> - app = self.conf['trex_root_path'] + os.sep + self.trex_app
> + app = self._conf['trex_root_path'] + os.sep + self._trex_app
>
> cmd = app + " " + app_param_temp
>
> @@ -298,15 +295,15 @@ class TrexPacketGenerator(PacketGenerator):
> step_temp = ip['step'].split('.')
>
> #get the subnet range of src and dst ip
> - if self.conf.has_key("ip_src"):
> - ip_src = self.conf['ip_src']
> + if self._conf.has_key("ip_src"):
> + ip_src = self._conf['ip_src']
> ip_src_range_string =
> IPy.IP(IPy.IP(ip_src).make_net(mask).strNormal()).strNormal(3)
> ip_src_range_temp = ip_src_range_string.split('-')
> ip_src_range['start'] = ip_src_range_temp[0]
> ip_src_range['end'] = ip_src_range_temp[1]
>
> - if self.conf.has_key("ip_dst"):
> - ip_dst = self.conf['ip_dst']
> + if self._conf.has_key("ip_dst"):
> + ip_dst = self._conf['ip_dst']
> ip_dst_range_string =
> IPy.IP(IPy.IP(ip_dst).make_net(mask).strNormal()).strNormal(3)
> ip_dst_range_temp = ip_dst_range_string.split('-')
> ip_dst_range['start'] = ip_dst_range_temp[0]
> @@ -314,22 +311,22 @@ class TrexPacketGenerator(PacketGenerator):
>
> pcap_file = stream['pcap_file']
>
> - vm = self.create_vm(ip_src_range, ip_dst_range,
> action=ip['action'], step=step_temp[3])
> + vm = self._create_vm(ip_src_range, ip_dst_range,
> action=ip['action'], step=step_temp[3])
>
> stl_stream = STLStream(packet = STLPktBuilder(pkt = pcap_file,
> vm=vm), mode = STLTXCont(percentage=100))
>
> self._transmit_streams[stream_id] = stl_stream
>
> - def _start_transmission(self, stream_ids, delay=50):
> + def _start_transmission(self, stream_ids):
> self._conn.reset(ports=self._ports)
> self._conn.clear_stats()
> self._conn.set_port_attr(self._ports, promiscuous=True)
> - duration_int = int(self.conf["duration"])
> + duration_int = int(self._conf["duration"])
> rate = "100%"
> warmup = 15
>
> - if self.conf.has_key("warmup"):
> - warmup = int(self.conf["warmup"])
> + if self._conf.has_key("warmup"):
> + warmup = int(self._conf["warmup"])
>
> for p in self._ports:
> for stream_id in stream_ids:
> @@ -339,8 +336,8 @@ class TrexPacketGenerator(PacketGenerator):
> rate = stream["options"]["rate"]
> self._traffic_ports.append(p)
>
> - if self.conf.has_key("core_mask"):
> - self._conn.start(ports=self._traffic_ports, mult=rate,
> duration=warmup, core_mask=self.conf["core_mask"])
> + if self._conf.has_key("core_mask"):
> + self._conn.start(ports=self._traffic_ports, mult=rate,
> duration=warmup, core_mask=self._conf["core_mask"])
> self._conn.wait_on_traffic(ports=self._traffic_ports,
> timeout=warmup+30)
> else:
> self._conn.start(ports=self._traffic_ports, mult=rate,
> duration=warmup)
> @@ -348,8 +345,8 @@ class TrexPacketGenerator(PacketGenerator):
>
> self._conn.clear_stats()
>
> - if self.conf.has_key("core_mask"):
> - self._conn.start(ports=self._traffic_ports, mult=rate,
> duration=duration_int, core_mask=self.conf["core_mask"])
> + if self._conf.has_key("core_mask"):
> + self._conn.start(ports=self._traffic_ports, mult=rate,
> duration=duration_int, core_mask=self._conf["core_mask"])
> else:
> self._conn.start(ports=self._traffic_ports, mult=rate,
> duration=duration_int)
>
> @@ -361,6 +358,7 @@ class TrexPacketGenerator(PacketGenerator):
> self._conn.stop(ports=self._traffic_ports, rx_delay_ms=5000)
>
> def _retrieve_port_statistic(self, stream_id):
> + rx_statistics = {}
> stats = self._conn.get_stats()
> stream = self._get_stream(stream_id)
> port_id = stream["rx_port"]
> @@ -369,7 +367,9 @@ class TrexPacketGenerator(PacketGenerator):
> rate_rx_pkts = port_stats["rx_pps"]
> rate_rx_bits = port_stats["rx_bps_L1"]
> print "rx_port: %d, rate_rx_pkts: %f, rate_rx_bits:%f " %
> (port_id,rate_rx_pkts,rate_rx_bits)
> - return rate_rx_bits, rate_rx_pkts
> + rx_statistics["rate_rx_bits"] = rate_rx_bits
> + rx_statistics["rate_rx_pkts"] = rate_rx_pkts
> + return rx_statistics
>
> def quit_generator(self):
> self.disconnect()
> @@ -385,36 +385,3 @@ def getPacketGenerator(tester, pktgen_type="trex"):
> return IxiaPacketGenerator(tester)
> elif pktgen_type == "trex":
> return TrexPacketGenerator(tester)
> -
> -
> -if __name__ == "__main__":
> - # init pktgen stream options
> - options = {
> - 'rate' : '100%',
> - 'ip': {'action': 'inc', 'mask' : '255.255.255.0', 'step':'0.0.0.1'}
> - }
> - crbsconf = CrbsConf()
> - crb = (crbsconf.load_crbs_config())[0]
> - tester = Tester(crb, None)
> - # framework initial
> - trex = getPacketGenerator(tester, pktgen_type="trex")
> -
> - conf_inst = trex._get_generator_conf_instance("trex")
> - conf = conf_inst.load_pktgen_config()
> - # prepare running environment
> - trex.prepare_generator()
> -
> - #config stream and convert options into pktgen commands
> - stream_id1 = trex.add_stream(0, 1, conf['pcap_file'])
> - trex.config_stream(stream_id=stream_id1, opts=options)
> - stream_id2 = trex.add_stream(1, 0, conf['pcap_file'])
> - trex.config_stream(stream_id=stream_id2, opts=options)
> - stream_id3 = trex.add_stream(0, 1, conf['pcap_file'])
> - trex.config_stream(stream_id=stream_id3, opts=options)
> - stream_id4 = trex.add_stream(1, 0, conf['pcap_file'])
> - trex.config_stream(stream_id=stream_id4, opts=options)
> - #pktgen.prepare_transmission(stream_ids=[stream_id])
> -
> trex.measure_throughput(stream_ids=[stream_id1,stream_id2,stream_id3,strea
> m_id4], delay=5)
> - #trex.measure_throughput(stream_ids=[stream_id1,stream_id2], delay=5)
> - # comeback to framework
> - trex.quit_generator()
> --
> 2.7.4
More information about the dts
mailing list