[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