From: yufengmx <yufengx.mo@intel.com>
To: dts@dpdk.org
Cc: yufengmx <yufengx.mo@intel.com>
Subject: [dts] [PATCH V1 5/7] framework/pktgen_ixia: fix internal bug
Date: Tue, 6 Aug 2019 15:51:26 +0800 [thread overview]
Message-ID: <1565077888-4431-6-git-send-email-yufengx.mo@intel.com> (raw)
In-Reply-To: <1565077888-4431-1-git-send-email-yufengx.mo@intel.com>
*. set part of information logger display to debug level.
*. set PacketGenerator class logger as Ixia class logger.
*. remove un-used libs import.
*. fix pep8 issue.
Signed-off-by: yufengmx <yufengx.mo@intel.com>
---
framework/pktgen_ixia.py | 190 ++++++++++++++++++++++++-----------------------
1 file changed, 97 insertions(+), 93 deletions(-)
diff --git a/framework/pktgen_ixia.py b/framework/pktgen_ixia.py
index 467188c..22d1f2c 100644
--- a/framework/pktgen_ixia.py
+++ b/framework/pktgen_ixia.py
@@ -36,7 +36,6 @@ from pprint import pformat
from ssh_connection import SSHConnection
from settings import SCAPY2IXIA
-from logger import getLogger
from utils import (convert_int2ip, convert_ip2int,
convert_mac2long, convert_mac2str)
@@ -52,15 +51,15 @@ class Ixia(SSHConnection):
IXIA performance measurement class.
"""
- def __init__(self, tester, ixiaPorts):
+ def __init__(self, tester, ixiaPorts, logger):
self.tester = tester
self.NAME = PKTGEN_IXIA
- self.logger = getLogger(self.NAME)
super(Ixia, self).__init__(
- self.get_ip_address(),
- self.NAME,
- self.tester.get_username(),
- self.get_password())
+ self.get_ip_address(),
+ self.NAME,
+ self.tester.get_username(),
+ self.get_password())
+ self.logger = logger
super(Ixia, self).init_log(self.logger)
self.tcl_cmds = []
@@ -177,8 +176,8 @@ class Ixia(SSHConnection):
"""
macAddr = macAddr.upper()
return "%s %s %s %s %s %s" % (
- macAddr[:2], macAddr[3:5], macAddr[6:8],
- macAddr[9:11], macAddr[12:14], macAddr[15:17])
+ macAddr[:2], macAddr[3:5], macAddr[6:8],
+ macAddr[9:11], macAddr[12:14], macAddr[15:17])
def set_ether_fields(self, fields, default_fields):
"""
@@ -204,15 +203,15 @@ class Ixia(SSHConnection):
prefix = 'sa' if name == 'src' else 'da'
if action == 'dec' and mac_end:
cmds.append('stream config -{0} "{1}"'.format(
- prefix, mac_end))
+ prefix, mac_end))
else:
cmds.append('stream config -{0} "{1}"'.format(
- prefix, mac_start))
+ prefix, mac_start))
if step:
cmds.append('stream config -{0}Step {1}'.format(prefix, step))
if action:
cmds.append('stream config -{0}RepeatCounter {1}'.format(
- prefix, addr_mode.get(action)))
+ prefix, addr_mode.get(action)))
if mac_end:
mac_start_int = convert_mac2long(mac_start)
mac_end_int = convert_mac2long(mac_end)
@@ -225,7 +224,7 @@ class Ixia(SSHConnection):
if flow_num:
cmds.append('stream config -num{0} {1}'.format(
- prefix.upper(), flow_num))
+ prefix.upper(), flow_num))
# clear default field after it has been set
default_fields.pop(name)
# if some filed not set, set it here
@@ -233,7 +232,8 @@ class Ixia(SSHConnection):
for name, config in default_fields.iteritems():
ip_start = config.get('start')
prefix = 'sa' if name == 'src' else 'da'
- cmds.append('stream config -{0} "{1}"'.format(prefix, ip_start))
+ cmds.append(
+ 'stream config -{0} "{1}"'.format(prefix, ip_start))
return cmds
@@ -250,8 +250,8 @@ class Ixia(SSHConnection):
# if vm has been set, pick pcap fields' as default value
if fields:
default_fields = {
- 'src': { 'action': 'default', 'start': src,},
- 'dst': { 'action': 'default', 'start': dst,},}
+ 'src': {'action': 'default', 'start': src, },
+ 'dst': {'action': 'default', 'start': dst, }, }
# set custom setting for field actions
cmds = self.set_ether_fields(fields, default_fields)
# set them in tcl commands group
@@ -273,7 +273,7 @@ class Ixia(SSHConnection):
# no change to IP address regardless of IpAddrRepeatCount
'idle': 'ipIdle',
# set default
- 'default': 'ipIdle',}
+ 'default': 'ipIdle', }
cmds = []
for name, config in fields.iteritems():
default_config = default_fields.get(name)
@@ -290,9 +290,10 @@ class Ixia(SSHConnection):
else:
flow_num = None
- mask = config.get('mask')
+ mask = config.get('mask')
_step = config.get('step')
- step = int(_step) if _step and isinstance(_step, (str, unicode)) else \
+ step = int(_step) \
+ if _step and isinstance(_step, (str, unicode)) else \
_step or 1
action = config.get('action')
# get ixia command prefix
@@ -300,16 +301,16 @@ class Ixia(SSHConnection):
# set command
if action == 'dec' and ip_end:
cmds.append('ip config -{0}IpAddr "{1}"'.format(
- prefix, ip_end))
+ prefix, ip_end))
else:
cmds.append('ip config -{0}IpAddr "{1}"'.format(
- prefix, ip_start))
+ prefix, ip_start))
if flow_num:
cmds.append('ip config -{0}IpAddrRepeatCount {1}'.format(
- prefix, flow_num))
+ prefix, flow_num))
cmds.append('ip config -{0}IpAddrMode {1}'.format(
- prefix, addr_mode.get(action or 'default')))
+ prefix, addr_mode.get(action or 'default')))
if mask:
cmds.append("ip config -{0}IpMask '{1}'".format(prefix, mask))
@@ -324,7 +325,7 @@ class Ixia(SSHConnection):
prefix = 'source' if name == 'src' else 'dest'
cmds.append('ip config -{0}IpAddr "{1}"'.format(prefix, ip_start))
cmds.append('ip config -{0}IpAddrMode {1}'.format(
- prefix, addr_mode.get('default')))
+ prefix, addr_mode.get('default')))
return cmds
@@ -340,8 +341,8 @@ class Ixia(SSHConnection):
if fields:
# pick pcap fields' as default value
default_fields = {
- 'src': { 'action': 'default', 'start': src,},
- 'dst': { 'action': 'default', 'start': dst,},}
+ 'src': {'action': 'default', 'start': src, },
+ 'dst': {'action': 'default', 'start': dst, }, }
# set custom setting for field actions
cmds = self.set_ip_fields(fields, default_fields)
# append custom setting
@@ -366,9 +367,9 @@ class Ixia(SSHConnection):
self.add_tcl_cmd("protocol config -name ipV6")
self.add_tcl_cmd('ipV6 setDefault')
self.add_tcl_cmd('ipV6 config -destAddr "%s"' %
- self.ipv6_to_tcl_format(dst))
+ self.ipv6_to_tcl_format(dst))
self.add_tcl_cmd('ipV6 config -sourceAddr "%s"' %
- self.ipv6_to_tcl_format(src))
+ self.ipv6_to_tcl_format(src))
self.add_tcl_cmd('ipV6 config -flowLabel %d' % fl)
self.add_tcl_cmd('ipV6 config -nextHeader %d' % nh)
self.add_tcl_cmd('ipV6 config -hopLimit %d' % hlim)
@@ -425,7 +426,7 @@ class Ixia(SSHConnection):
# Generate random VlanID tag for each frame
'random': 'vCtrRandom',
# No change to VlanID tag regardless of repeat
- 'idle': 'vIdle',}
+ 'idle': 'vIdle', }
cmds = []
for name, config in fields.iteritems():
fv_name = '8021Q.{0}'.format(name)
@@ -440,7 +441,6 @@ class Ixia(SSHConnection):
flow_num = None
step = config.get('step') or 1
action = config.get('action')
- #------------------------------------------------
# set command
if step:
cmds.append('vlan config -step {0}'.format(step))
@@ -448,7 +448,7 @@ class Ixia(SSHConnection):
cmds.append('vlan config -repeat {0}'.format(flow_num))
if action:
cmds.append('vlan config -mode {0}'.format(
- addr_mode.get(action)))
+ addr_mode.get(action)))
return cmds
def dot1q(self, port, vm, prio, id, vlan, type):
@@ -490,7 +490,7 @@ class Ixia(SSHConnection):
transmit_mode = stream_config.get('transmit_mode') or TRANSMIT_CONT
if transmit_mode == TRANSMIT_S_BURST:
cmds = self.config_single_burst_stream(
- stream_config.get('txmode'), rate_percent)
+ stream_config.get('txmode'), rate_percent)
self.add_tcl_cmds(cmds)
else:
self.config_ixia_stream(
@@ -521,20 +521,21 @@ class Ixia(SSHConnection):
def config_single_burst_stream(self, txmode, rate_percent):
""" configure burst stream. """
gapUnits = {
- # (default) Sets units of time for gap to nanoseconds
- 'ns': 'gapNanoSeconds',
- # Sets units of time for gap to microseconds
- 'us': 'gapMicroSeconds',
- # Sets units of time for gap to milliseconds
- 'm': 'gapMilliSeconds',
- # Sets units of time for gap to seconds
- 's': 'gapSeconds',}
+ # (default) Sets units of time for gap to nanoseconds
+ 'ns': 'gapNanoSeconds',
+ # Sets units of time for gap to microseconds
+ 'us': 'gapMicroSeconds',
+ # Sets units of time for gap to milliseconds
+ 'm': 'gapMilliSeconds',
+ # Sets units of time for gap to seconds
+ 's': 'gapSeconds', }
pkt_count = 1
burst_count = txmode.get('total_pkts', 32)
frameType = txmode.get('frameType') or {}
time_unit = frameType.get('type', 'ns')
gapUnit = gapUnits.get(time_unit) \
- if time_unit in gapUnits.keys() else gapUnits.get('ns')
+ if time_unit in gapUnits.keys() else \
+ gapUnits.get('ns')
# The inter-stream gap is the delay in clock ticks between stream.
# This delay comes after the receive trigger is enabled. Setting this
# option to 0 means no delay. (default = 960.0)
@@ -556,11 +557,11 @@ class Ixia(SSHConnection):
"stream config -numBursts {0}".format(burst_count),
"stream config -ifg {0}".format(ifg),
"stream config -ifgType gapFixed",
-# "stream config -enableIbg true", # reserve
-# "stream config -ibg {0}".format(ibg), # reserve
-# "stream config -enableIsg true", # reserve
-# "stream config -isg {0}".format(isg), # reserve
- "stream config -frameSizeType sizeFixed",]
+ #"stream config -enableIbg true", # reserve
+ #"stream config -ibg {0}".format(ibg), # reserve
+ #"stream config -enableIsg true", # reserve
+ #"stream config -isg {0}".format(isg), # reserve
+ "stream config -frameSizeType sizeFixed", ]
return frame_cmds
@@ -598,7 +599,7 @@ class Ixia(SSHConnection):
return False
out = self.send_expect(
- "set chasId [ixGetChassisID %s]" % self.tclServerIP, "% ")
+ "set chasId [ixGetChassisID %s]" % self.tclServerIP, "% ")
self.chasId = int(out.strip())
self.send_expect("ixClearOwnership [list %s]" % string.join(
@@ -636,10 +637,10 @@ class Ixia(SSHConnection):
self.add_tcl_cmd("port config -autonegotiate false")
self.add_tcl_cmd("port config -enableRsFec true")
self.add_tcl_cmd("port set %d %d %d" % (
- self.chasId,item['card'], item['port']))
+ self.chasId, item['card'], item['port']))
pl.append('[list %d %d %d]' % (
- self.chasId, item['card'], item['port']))
+ self.chasId, item['card'], item['port']))
self.add_tcl_cmd("set portList [list %s]" % string.join(pl, ' '))
@@ -727,7 +728,7 @@ class Ixia(SSHConnection):
return port_info
def get_ixia_port(self, port):
- port_info= self.get_ixia_port_info(port)
+ port_info = self.get_ixia_port_info(port)
ixia_port = "%d %d %d" % (self.chasId,
port_info['card'], port_info['port'])
return ixia_port
@@ -771,7 +772,7 @@ class Ixia(SSHConnection):
Run latency performance test and return latency statistics.
"""
rxPortlist, txPortlist = self._configure_everything(
- portList, ratePercent, True)
+ portList, ratePercent, True)
return self.get_packet_latency(rxPortlist)
def get_packet_latency(self, rxPortlist):
@@ -795,7 +796,7 @@ class Ixia(SSHConnection):
Run throughput performance test and return throughput statistics.
"""
rxPortlist, txPortlist = self._configure_everything(
- port_list, rate_percent)
+ port_list, rate_percent)
return self.get_transmission_results(rxPortlist, txPortlist, delay)
def is_packet_ordered(self, port_list, delay):
@@ -831,7 +832,7 @@ class Ixia(SSHConnection):
Prepare and configure IXIA ports for performance test.
"""
rxPortlist, txPortlist = self.prepare_port_list(
- port_list, rate_percent, latency)
+ port_list, rate_percent, latency)
self.prepare_ixia_for_transmission(txPortlist, rxPortlist)
self.configure_transmission()
self.start_transmission()
@@ -872,7 +873,7 @@ class Ixia(SSHConnection):
# port init
self.config_port([self.get_ixia_port_info(port)
- for port in txPortlist.union(rxPortlist)])
+ for port in txPortlist.union(rxPortlist)])
# calculate total streams of ports
for (txPort, rxPort, pcapFile, option) in portList:
@@ -908,7 +909,7 @@ class Ixia(SSHConnection):
"""
self.add_tcl_cmd("ixClearStats portList")
self.set_ixia_port_list([self.get_ixia_port(port)
- for port in txPortlist])
+ for port in txPortlist])
self.add_tcl_cmd("ixWriteConfigToHardware portList")
# Wait for changes to take affect and make sure links are up
self.add_tcl_cmd("after 1000")
@@ -957,12 +958,12 @@ class Ixia(SSHConnection):
"""
self.send_expect("source ./ixTcl1.0/ixiaDCB.tcl", "% ")
self.send_expect("configIxia %d %s" % (
- self.chasId,
- string.join(["%s" % (
- repr(self.conRelation[port][n]))
- for port in [rxPort, txPort]
- for n in range(3)])),
- "% ", 100)
+ self.chasId,
+ string.join(["%s" % (
+ repr(self.conRelation[port][n]))
+ for port in [rxPort, txPort]
+ for n in range(3)])),
+ "% ", 100)
def config_port_dcb(self, direction, tc):
"""
@@ -993,24 +994,26 @@ class Ixia(SSHConnection):
"pauseControl config -pauseControlType ieee8023x",
'pauseControl config -da "{0}"'.format(dst_mac),
"pauseControl config -pauseTime {0}".format(pause_time),
- "pauseControl set {0}".format(ixia_port),]
+ "pauseControl set {0}".format(ixia_port), ]
self.add_tcl_cmds(flow_ctrl_cmds)
def cfgStreamDcb(self, stream, rate, prio, types):
"""
Configure Stream for DCB.
"""
- self.send_expect("configStream %s %s %s %s" % (stream, rate, prio, types), "% ", 100)
+ self.send_expect("configStream %s %s %s %s" %
+ (stream, rate, prio, types), "% ", 100)
def get_connection_relation(self, dutPorts):
"""
Get the connect relations between DUT and Ixia.
"""
for port in dutPorts:
- info = self.tester.get_pci(self.tester.get_local_port(port)).split('.')
+ info = self.tester.get_pci(
+ self.tester.get_local_port(port)).split('.')
self.conRelation[port] = [
- int(info[0]), int(info[1]),
- repr(self.tester.dut.get_mac_address(port).replace(':', ' ').upper())]
+ int(info[0]), int(info[1]),
+ repr(self.tester.dut.get_mac_address(port).replace(':', ' ').upper())]
return self.conRelation
def config_pktGroup_rx(self, ixia_port):
@@ -1018,7 +1021,8 @@ class Ixia(SSHConnection):
Sets the transmit Packet Group configuration of the stream
Default streamID is 1
"""
- self.add_tcl_cmd("port config -receiveMode $::portRxModeWidePacketGroup")
+ self.add_tcl_cmd(
+ "port config -receiveMode $::portRxModeWidePacketGroup")
self.add_tcl_cmd("port set %s" % ixia_port)
self.add_tcl_cmd("packetGroup setDefault")
self.add_tcl_cmd("packetGroup config -latencyControl cutThrough")
@@ -1046,7 +1050,8 @@ class Ixia(SSHConnection):
"""
ixia_port = self.get_ixia_port(port_number)
self.send_expect("ixStopPortPacketGroups %s" % ixia_port, "%", 100)
- self.send_expect("packetGroupStats get %s 0 16384" % ixia_port, "%", 100)
+ self.send_expect(
+ "packetGroupStats get %s 0 16384" % ixia_port, "%", 100)
self.send_expect("packetGroupStats getGroup 0", "%", 100)
def close(self):
@@ -1089,7 +1094,7 @@ class Ixia(SSHConnection):
"""
ixia_port = self.get_ixia_port(port_number)
command = 'captureBuffer get {0} {1} {2}'.format(
- ixia_port, first_frame, last_frame)
+ ixia_port, first_frame, last_frame)
self.send_expect(command, '%', 60)
def ixia_export_buffer_to_file(self, frames_filename):
@@ -1194,7 +1199,7 @@ class Ixia(SSHConnection):
nic_single_core_perf test case use
"""
rxPortlist, txPortlist = self.prepare_port_list(
- port_list, rate_percent, latency)
+ port_list, rate_percent, latency)
self.prepare_ixia_for_transmission(txPortlist, rxPortlist)
self.start_transmission()
self.clear_tcl_commands()
@@ -1233,9 +1238,9 @@ class Ixia(SSHConnection):
return rxPackets
- #---------------------------------------------------------
+ #
# extend methods for pktgen subclass `IxiaPacketGenerator
- #---------------------------------------------------------
+ #
def disconnect(self):
''' quit from ixia server '''
pass
@@ -1251,7 +1256,7 @@ class Ixia(SSHConnection):
return
for item in self.ports:
cmd = 'port reset {0} {1} {2}'.format(
- self.chasId, item['card'], item['port'])
+ self.chasId, item['card'], item['port'])
self.send_expect(cmd, "%", 10)
def reset(self, ports=None):
@@ -1302,7 +1307,7 @@ class Ixia(SSHConnection):
'rx_bps': 0,
'rx_pps': 0,
'tx_bps': 0,
- 'tx_pps': 0,}
+ 'tx_pps': 0, }
time.sleep(0.5)
return stats
@@ -1331,7 +1336,7 @@ class Ixia(SSHConnection):
'rx_bps': bpsRate,
'rx_pps': rate,
'tx_bps': 0,
- 'tx_pps': 0,}
+ 'tx_pps': 0, }
return stats
@@ -1342,7 +1347,7 @@ class Ixia(SSHConnection):
methods = {
'throughput': self.get_throughput_stat,
'loss': self.get_loss_stat,
- 'latency': self.get_latency_stat,}
+ 'latency': self.get_latency_stat, }
if mode not in methods.keys():
msg = "not support mode <{0}>".format(mode)
raise Exception(msg)
@@ -1357,6 +1362,7 @@ class IxiaPacketGenerator(PacketGenerator):
"""
Ixia packet generator
"""
+
def __init__(self, tester):
# ixia management
self.pktgen_type = PKTGEN_IXIA
@@ -1374,8 +1380,8 @@ class IxiaPacketGenerator(PacketGenerator):
# check configuration options
self.options_keys = [
'txmode', 'ip', 'vlan', 'transmit_mode', 'rate']
- self.ip_keys = ['start', 'end','action', 'step', 'mask',]
- self.vlan_keys = ['start', 'end', 'action', 'step', 'count',]
+ self.ip_keys = ['start', 'end', 'action', 'step', 'mask', ]
+ self.vlan_keys = ['start', 'end', 'action', 'step', 'count', ]
super(IxiaPacketGenerator, self).__init__(tester)
self.tester = tester
@@ -1394,7 +1400,7 @@ class IxiaPacketGenerator(PacketGenerator):
def _connect(self, tester, conf):
# initialize ixia class
- self._conn = Ixia(tester, conf)
+ self._conn = Ixia(tester, conf, self.logger)
for p in self._conn.get_ports():
self._ports.append(p)
@@ -1440,7 +1446,7 @@ class IxiaPacketGenerator(PacketGenerator):
'''
for name, _port_obj in self._conn.ports.iteritems():
_pci = _port_obj.info['pci_addr']
- self.logger.info((_pci, pci))
+ self.logger.debug((_pci, pci))
if _pci == pci:
return True
else:
@@ -1460,7 +1466,7 @@ class IxiaPacketGenerator(PacketGenerator):
# close it and wait for more discussion about pktgen framework
return None
conf = {}
- #get the subnet range of src and dst ip
+ # get the subnet range of src and dst ip
if self.conf.has_key("ip_src"):
conf['src'] = {}
ip_src = self.conf['ip_src']
@@ -1529,8 +1535,8 @@ class IxiaPacketGenerator(PacketGenerator):
msg = [
"Tx Port %d stats: " % (tx_port_id),
"tx_port: %d, tx_bps: %f, tx_pps: %f " % (
- tx_port_id, tx_bps, tx_pps)]
- self.logger.info(pformat(port_stats))
+ tx_port_id, tx_bps, tx_pps)]
+ self.logger.debug(pformat(port_stats))
self.logger.info(os.linesep.join(msg))
# rx bps/pps
rx_port_id = stream["rx_port"]
@@ -1543,9 +1549,9 @@ class IxiaPacketGenerator(PacketGenerator):
msg = [
"Rx Port %d stats: " % (rx_port_id),
"rx_port: %d, rx_bps: %f, rx_pps: %f" % (
- rx_port_id, rx_bps, rx_pps)]
+ rx_port_id, rx_bps, rx_pps)]
- self.logger.info(pformat(port_stats))
+ self.logger.debug(pformat(port_stats))
self.logger.info(os.linesep.join(msg))
return rx_bps, rx_pps
@@ -1585,7 +1591,7 @@ class IxiaPacketGenerator(PacketGenerator):
latency_stats = {
'min': port_stats.get('total_min'),
'max': port_stats.get('total_max'),
- 'average':port_stats.get('average'),}
+ 'average': port_stats.get('average'), }
return latency_stats
@@ -1625,7 +1631,7 @@ class IxiaPacketGenerator(PacketGenerator):
self._traffic_opt['flow_control'] = options.get('flow_control') or {}
# if vm config by pktgen config file, set it here to take the place
# of setting on suite
- if self._vm_conf: # TBD, remove this process later
+ if self._vm_conf: # TBD, remove this process later
config['fields_config'] = self._vm_conf
# get stream rate percent
stream_config = options.get('stream_config')
@@ -1636,13 +1642,12 @@ class IxiaPacketGenerator(PacketGenerator):
if not port_config:
msg = 'no stream options for ixia packet generator'
raise Exception(msg)
- #-------------------------------------------------------------------
port_lists = []
for port_id, option in port_config.iteritems():
port_lists += option
self._conn.clear_tcl_buffer()
rxPortlist, txPortlist = self._conn.prepare_port_list(
- port_lists, rate_percent or 100, latency)
+ port_lists, rate_percent or 100, latency)
self._conn.prepare_ixia_for_transmission(txPortlist, rxPortlist)
# preset port status before running traffic
self._preset_ixia_port()
@@ -1652,7 +1657,6 @@ class IxiaPacketGenerator(PacketGenerator):
rate_percent = options.get('rate') or '100'
# run ixia server
try:
- ###########################################
# Start traffic on port(s)
self.logger.info("begin traffic ......")
run_opt = {
@@ -1672,8 +1676,8 @@ class IxiaPacketGenerator(PacketGenerator):
''' ixia traffic statistics '''
stats = self._conn.get_stats(self._traffic_ports, mode)
stream = self._get_stream(stream_id)
- self.logger.info(pformat(stream))
- self.logger.info(pformat(stats))
+ self.logger.debug(pformat(stream))
+ self.logger.debug(pformat(stats))
if mode == 'throughput':
return self._throughput_stats(stream, stats)
elif mode == 'loss':
@@ -1724,4 +1728,4 @@ class IxiaPacketGenerator(PacketGenerator):
''' close ixia session '''
if self._conn is not None:
self._disconnect()
- return
\ No newline at end of file
+ return
--
1.9.3
next prev parent reply other threads:[~2019-08-06 8:01 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-06 7:51 [dts] [PATCH V1 0/7] dts/pktgen: fix internal bugs yufengmx
2019-08-06 7:51 ` [dts] [PATCH V1 1/7] framework/logger: add pktgen logger and remove duplicate yufengmx
2019-08-06 7:51 ` [dts] [PATCH V1 2/7] framework/dut: fix logger quit issue yufengmx
2019-08-06 7:51 ` [dts] [PATCH V1 3/7] framework/tester: " yufengmx
2019-08-06 7:51 ` [dts] [PATCH V1 4/7] framework/pktgen_base: fix internal bug yufengmx
2019-08-06 7:51 ` yufengmx [this message]
2019-08-06 7:51 ` [dts] [PATCH V1 6/7] framework/pktgen_trex: " yufengmx
2019-08-06 7:51 ` [dts] [PATCH V1 7/7] framework/pktgen: fix pep8 issue yufengmx
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1565077888-4431-6-git-send-email-yufengx.mo@intel.com \
--to=yufengx.mo@intel.com \
--cc=dts@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).