From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 9C4A21B192 for ; Thu, 21 Sep 2017 11:00:54 +0200 (CEST) Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Sep 2017 02:00:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,424,1500966000"; d="scan'208";a="314576823" Received: from dpdk-test47.sh.intel.com ([10.67.118.152]) by fmsmga004.fm.intel.com with ESMTP; 21 Sep 2017 02:00:52 -0700 From: wang fei To: dts@dpdk.org Cc: wang fei Date: Thu, 21 Sep 2017 19:33:20 +0800 Message-Id: <1505993600-40579-1-git-send-email-feix.y.wang@intel.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [dts] =?utf-8?q?=5Bpatch_v2=5D_framework/pktgen=2Epy=3A_remove_?= =?utf-8?b?4oCcIF9fbmFtZV9fID09IOKAnF9fbWFpbl9f4oCdIHBhcnQgICAgICAg?= =?utf-8?q?_______________modify_create=5Fvm=28=29_as_a_private_met?= =?utf-8?q?hod______________________modify_some_variables_as_privat?= =?utf-8?q?e_variables______________________modify_=5Fretrieve=5Fpo?= =?utf-8?q?rt=5Fstatistic=28=29_returning_to_a_dict_object=C2=A0?= X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Sep 2017 09:00:55 -0000 Signed-off-by: wang fei --- 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,stream_id4], delay=5) - #trex.measure_throughput(stream_ids=[stream_id1,stream_id2], delay=5) - # comeback to framework - trex.quit_generator() -- 2.7.4