diff options
author | Christian Trautman <ctrautma@redhat.com> | 2016-11-21 09:28:41 -0500 |
---|---|---|
committer | Christian Trautman <ctrautma@redhat.com> | 2016-11-21 09:32:27 -0500 |
commit | 04a0e5c51eb28e11c3337fc3b85fc16167c4af95 (patch) | |
tree | bb9d2f37cc27e5725db86341e0acb36623946aff | |
parent | 1356d7c2bccabdd6239d1ae8628f869556ed2938 (diff) |
Xena_cont_accuracy: Modify continuous from duration to packet limit
First of a few patches planned to help increase Xena continuous
traffic accuracy. Modifies port limits to packet calculated limits
versus time based limits which can be wildly inaccurate. Also
modifies some port settings to be more inline with how rfc2544
settings are applied on Xena. Increased time delay by one
second to allow packets to finish transmitting before stat
collection occurs.
JIRA: VSPerf-423
Change-Id: I214b13d743a84a0733e885ccfc5bdd57812d7104
Signed-off-by: Christian Trautman <ctrautma@redhat.com>
-rw-r--r-- | tools/pkt_gen/xena/XenaDriver.py | 28 | ||||
-rwxr-xr-x | tools/pkt_gen/xena/xena.py | 22 |
2 files changed, 46 insertions, 4 deletions
diff --git a/tools/pkt_gen/xena/XenaDriver.py b/tools/pkt_gen/xena/XenaDriver.py index d3862312..04a99e9d 100644 --- a/tools/pkt_gen/xena/XenaDriver.py +++ b/tools/pkt_gen/xena/XenaDriver.py @@ -61,6 +61,10 @@ CMD_RESERVE = 'p_reservation reserve' CMD_RELEASE = 'p_reservation release' CMD_RELINQUISH = 'p_reservation relinquish' CMD_RESET = 'p_reset' +CMD_SET_PORT_ARP_REPLY = 'p_arpreply' +CMD_SET_PORT_ARP_V6_REPLY = 'p_arpv6reply' +CMD_SET_PORT_PING_REPLY = 'p_pingreply' +CMD_SET_PORT_PING_V6_REPLY = 'p_pingv6reply' CMD_SET_PORT_TIME_LIMIT = 'p_txtimelimit' CMD_SET_STREAM_HEADER_PROTOCOL = 'ps_headerprotocol' CMD_SET_STREAM_ON_OFF = 'ps_enable' @@ -532,6 +536,30 @@ class XenaPort(object): command = make_port_command(CMD_RESET, self) return self._manager.driver.ask_verify(command) + def set_port_arp_reply(self, on=True, v6=False): + """ + Set the port arpreply value + :param on: Enable or disable the arp reply on the port + :param v6: set the value on the ip v6, disabled will set at ip v4 + :return: Boolean True if response OK, False if error + """ + command = make_port_command('{} {}'.format( + CMD_SET_PORT_ARP_V6_REPLY if v6 else CMD_SET_PORT_ARP_REPLY, + "on" if on else "off"), self) + return self._manager.driver.ask_verify(command) + + def set_port_ping_reply(self, on=True, v6=False): + """ + Set the port ping reply value + :param on: Enable or disable the ping reply on the port + :param v6: set the value on the ip v6, disabled will set at ip v4 + :return: Boolean True if response OK, False if error + """ + command = make_port_command('{} {}'.format( + CMD_SET_PORT_PING_V6_REPLY if v6 else CMD_SET_PORT_PING_REPLY, + "on" if on else "off"), self) + return self._manager.driver.ask_verify(command) + def set_port_ip(self, ip_addr, cidr, gateway, wild='255'): """ Set the port ip address of the specific port diff --git a/tools/pkt_gen/xena/xena.py b/tools/pkt_gen/xena/xena.py index 8d45053e..798bb832 100755 --- a/tools/pkt_gen/xena/xena.py +++ b/tools/pkt_gen/xena/xena.py @@ -421,7 +421,20 @@ class Xena(ITrafficGenerator): :return: None """ stream.set_on() - stream.set_packet_limit(packet_limit) + if packet_limit != -1: + stream.set_packet_limit(packet_limit) + else: + speed = port.get_port_speed() / 8 # convert to bytes + gap = port.get_inter_frame_gap() + pkt_size = self._params['traffic']['l2']['framesize'] + packets = int(((speed / (pkt_size + gap)) * self._duration) * + (self._params['traffic']['frame_rate'] / 100)) + stream.set_packet_limit(packets) + + port.set_port_arp_reply(on=True) + port.set_port_arp_reply(on=True, v6=True) + port.set_port_ping_reply(on=True) + port.set_port_ping_reply(on=True, v6=True) stream.set_rate_fraction( 10000 * self._params['traffic']['frame_rate']) @@ -431,10 +444,11 @@ class Xena(ITrafficGenerator): 'ETHERNET VLAN IP UDP' if self._params['traffic']['vlan'][ 'enabled'] else 'ETHERNET IP UDP') stream.set_packet_length( - 'fixed', self._params['traffic']['l2']['framesize'], 16383) + 'fixed', self._params['traffic']['l2']['framesize'], + self._params['traffic']['l2']['framesize']) stream.set_packet_payload('incrementing', '0x00') stream.set_payload_id(payload_id) - port.set_port_time_limit(self._duration * 1000000) + port.set_port_time_limit(0) if self._params['traffic']['l2']['framesize'] == 64: # set micro tpld @@ -459,7 +473,7 @@ class Xena(ITrafficGenerator): if not self.xmanager.ports[1].traffic_on(): self._logger.error( "Failure to start port 1. Check settings and retry.") - sleep(self._duration) + sleep(self._duration + 1) # getting results if self._params['traffic']['bidir'] == 'True': # need to aggregate out both ports stats and assign that data |