diff options
author | Vratko Polak <vrpolak@cisco.com> | 2019-04-16 16:32:59 +0200 |
---|---|---|
committer | Vratko Polak <vrpolak@cisco.com> | 2019-04-17 10:39:18 +0000 |
commit | 258f2666143138f20d84665fcfed53475bc88041 (patch) | |
tree | be45d45e1913bd0c9c738662efea52deb16ffa9c /resources/libraries/python | |
parent | c481185ca0662f4e7800af2ae6a8f3f81c753470 (diff) |
Clean up traffic_profile vs osi_layer
The two types were not well distinguished before.
Error introduced in:
https://gerrit.fd.io/r/#/c/17811/84/resources/libraries/robot/performance/performance_setup.robot@255
Error hotfixed in:
https://gerrit.fd.io/r/#/c/18847/4/resources/libraries/robot/shared/default.robot@109
+ Rename some arguments and improve method docstrings.
Newly introduced argument name osi_layer should be dissimilar enough.
Change-Id: Ie0f6f97dc010fc6477f09c54574970f1d15462e2
Signed-off-by: Vratko Polak <vrpolak@cisco.com>
Diffstat (limited to 'resources/libraries/python')
-rw-r--r-- | resources/libraries/python/DropRateSearch.py | 44 | ||||
-rw-r--r-- | resources/libraries/python/InterfaceUtil.py | 11 | ||||
-rw-r--r-- | resources/libraries/python/TrafficGenerator.py | 20 |
3 files changed, 36 insertions, 39 deletions
diff --git a/resources/libraries/python/DropRateSearch.py b/resources/libraries/python/DropRateSearch.py index d090306cc5..e87ef95434 100644 --- a/resources/libraries/python/DropRateSearch.py +++ b/resources/libraries/python/DropRateSearch.py @@ -109,21 +109,21 @@ class DropRateSearch(object): @abstractmethod def measure_loss(self, rate, frame_size, loss_acceptance, - loss_acceptance_type, traffic_type, skip_warmup=False): + loss_acceptance_type, traffic_profile, skip_warmup=False): """Send traffic from TG and measure count of dropped frames. :param rate: Offered traffic load. :param frame_size: Size of frame. :param loss_acceptance: Permitted drop ratio or frames count. :param loss_acceptance_type: Type of permitted loss. - :param traffic_type: Traffic profile ([2,3]-node-L[2,3], ...). + :param traffic_profile: Module name to use for traffic generation. :param skip_warmup: Start TRex without warmup traffic if true. :type rate: int :type frame_size: str :type loss_acceptance: float :type loss_acceptance_type: LossAcceptanceType - :type traffic_type: str - :type traffic_type: bool + :type traffic_profile: str + :type skip_warmup: bool :returns: Drop threshold exceeded? (True/False) :rtype: bool """ @@ -381,13 +381,13 @@ class DropRateSearch(object): else: raise ValueError("Unknown search result type") - def linear_search(self, start_rate, traffic_type): + def linear_search(self, start_rate, traffic_profile): """Linear search of rate with loss below acceptance criteria. :param start_rate: Initial rate. - :param traffic_type: Traffic profile. + :param traffic_profile: Module name to use for traffic generation. :type start_rate: float - :type traffic_type: str + :type traffic_profile: str :returns: nothing :raises ValueError: If start rate is not in range. """ @@ -405,7 +405,7 @@ class DropRateSearch(object): for dummy in range(self._max_attempts): res.append(self.measure_loss( rate, self._frame_size, self._loss_acceptance, - self._loss_acceptance_type, traffic_type)) + self._loss_acceptance_type, traffic_profile)) res = self._get_res_based_on_search_type(res) @@ -447,18 +447,18 @@ class DropRateSearch(object): return self._search_result_rate, self.get_latency() raise Exception('Search FAILED') - def binary_search(self, b_min, b_max, traffic_type, skip_max_rate=False, + def binary_search(self, b_min, b_max, traffic_profile, skip_max_rate=False, skip_warmup=False): """Binary search of rate with loss below acceptance criteria. :param b_min: Min range rate. :param b_max: Max range rate. - :param traffic_type: Traffic profile. + :param traffic_profile: Module name to use for traffic generation. :param skip_max_rate: Start with max rate first :param skip_warmup: Start TRex without warmup traffic if true. :type b_min: float :type b_max: float - :type traffic_type: str + :type traffic_profile: str :type skip_max_rate: bool :type skip_warmup: bool :returns: nothing @@ -489,33 +489,33 @@ class DropRateSearch(object): res = [] for dummy in range(self._max_attempts): - res.append(self.measure_loss(rate, self._frame_size, - self._loss_acceptance, - self._loss_acceptance_type, - traffic_type, skip_warmup=skip_warmup)) + res.append(self.measure_loss( + rate, self._frame_size, self._loss_acceptance, + self._loss_acceptance_type, traffic_profile, + skip_warmup=skip_warmup)) res = self._get_res_based_on_search_type(res) # loss occurred and it was above acceptance criteria if not res: - self.binary_search(b_min, rate, traffic_type, True, True) + self.binary_search(b_min, rate, traffic_profile, True, True) # there was no loss / loss below acceptance criteria else: self._search_result_rate = rate - self.binary_search(rate, b_max, traffic_type, True, True) + self.binary_search(rate, b_max, traffic_profile, True, True) - def combined_search(self, start_rate, traffic_type): + def combined_search(self, start_rate, traffic_profile): """Combined search of rate with loss below acceptance criteria. :param start_rate: Initial rate. - :param traffic_type: Traffic profile. + :param traffic_profile: Module name to use for traffic generation. :type start_rate: float - :type traffic_type: str + :type traffic_profile: str :returns: nothing :raises RuntimeError: If linear search failed. """ - self.linear_search(start_rate, traffic_type) + self.linear_search(start_rate, traffic_profile) if self._search_result in [SearchResults.SUCCESS, SearchResults.SUSPICIOUS]: @@ -535,7 +535,7 @@ class DropRateSearch(object): self._search_result_rate = None # we will use binary search to refine search in one linear step - self.binary_search(b_min, b_max, traffic_type, True) + self.binary_search(b_min, b_max, traffic_profile, True) # linear and binary search succeed if self._search_result == SearchResults.SUCCESS: diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py index d78984b1ca..1b1dda5726 100644 --- a/resources/libraries/python/InterfaceUtil.py +++ b/resources/libraries/python/InterfaceUtil.py @@ -1325,22 +1325,19 @@ class InterfaceUtil(object): exec_cmd_no_error(node, cmd, sudo=True) @staticmethod - def init_avf_interface(node, ifc_key, numvfs=1, traffic_type='L2'): + def init_avf_interface(node, ifc_key, numvfs=1, osi_layer='L2'): """Init PCI device by creating VFs and bind them to vfio-pci for AVF driver testing on DUT. :param node: DUT node. :param ifc_key: Interface key from topology file. :param numvfs: Number of VFs to initialize, 0 - disable the VFs. - :param traffic_type: Expected type of traffic, affects spoofing. + :param osi_layer: OSI Layer type to initialize TG with. Default value "L2" sets linux interface spoof off. - Other values do not do that. - Note: This is NOT the usual traffic profile - (which is python module name to initialize TG with). :type node: dict :type ifc_key: str :type numvfs: int - :type traffic_type: str + :type osi_layer: str :returns: Virtual Function topology interface keys. :rtype: list """ @@ -1379,7 +1376,7 @@ class InterfaceUtil(object): format(pci=pf_pci_addr) InterfaceUtil.set_linux_interface_trust_on(node, pf_dev, vf_id=vf_id) - if traffic_type == 'L2': + if osi_layer == 'L2': InterfaceUtil.set_linux_interface_spoof_off(node, pf_dev, vf_id=vf_id) InterfaceUtil.set_linux_interface_mac(node, pf_dev, vf_mac_addr, diff --git a/resources/libraries/python/TrafficGenerator.py b/resources/libraries/python/TrafficGenerator.py index 5f92888fe8..84b9f1ff32 100644 --- a/resources/libraries/python/TrafficGenerator.py +++ b/resources/libraries/python/TrafficGenerator.py @@ -170,7 +170,7 @@ class TrafficGenerator(AbstractMeasurer): def initialize_traffic_generator( self, tg_node, tg_if1, tg_if2, tg_if1_adj_node, tg_if1_adj_if, - tg_if2_adj_node, tg_if2_adj_if, test_type, tg_if1_dst_mac=None, + tg_if2_adj_node, tg_if2_adj_if, osi_layer, tg_if1_dst_mac=None, tg_if2_dst_mac=None): """TG initialization. @@ -183,7 +183,7 @@ class TrafficGenerator(AbstractMeasurer): :param tg_if1_adj_if: TG if1 adjecent interface. :param tg_if2_adj_node: TG if2 adjecent node. :param tg_if2_adj_if: TG if2 adjecent interface. - :param test_type: 'L2', 'L3' or 'L7' - OSI Layer testing type. + :param osi_layer: 'L2', 'L3' or 'L7' - OSI Layer testing type. :param tg_if1_dst_mac: Interface 1 destination MAC address. :param tg_if2_dst_mac: Interface 2 destination MAC address. :type tg_node: dict @@ -193,7 +193,7 @@ class TrafficGenerator(AbstractMeasurer): :type tg_if1_adj_if: str :type tg_if2_adj_node: dict :type tg_if2_adj_if: str - :type test_type: str + :type osi_layer: str :type tg_if1_dst_mac: str :type tg_if2_dst_mac: str :returns: nothing @@ -220,15 +220,15 @@ class TrafficGenerator(AbstractMeasurer): if1_addr = Topology().get_interface_mac(tg_node, tg_if1) if2_addr = Topology().get_interface_mac(tg_node, tg_if2) - if test_type == 'L2': + if osi_layer == 'L2': if1_adj_addr = if2_addr if2_adj_addr = if1_addr - elif test_type == 'L3': + elif osi_layer == 'L3': if1_adj_addr = Topology().get_interface_mac(tg_if1_adj_node, tg_if1_adj_if) if2_adj_addr = Topology().get_interface_mac(tg_if2_adj_node, tg_if2_adj_if) - elif test_type == 'L7': + elif osi_layer == 'L7': if1_addr = Topology().get_interface_ip4(tg_node, tg_if1) if2_addr = Topology().get_interface_ip4(tg_node, tg_if2) if1_adj_addr = Topology().get_interface_ip4(tg_if1_adj_node, @@ -249,7 +249,7 @@ class TrafficGenerator(AbstractMeasurer): if1_adj_addr, if2_adj_addr = if2_adj_addr, if1_adj_addr self._ifaces_reordered = True - if test_type == 'L2' or test_type == 'L3': + if osi_layer == 'L2' or osi_layer == 'L3': (ret, _, _) = ssh.exec_command( "sudo sh -c 'cat << EOF > /etc/trex_cfg.yaml\n" "- port_limit: 2\n" @@ -266,7 +266,7 @@ class TrafficGenerator(AbstractMeasurer): "0x"+if1_addr.replace(":", ",0x"), "0x"+if2_adj_addr.replace(":", ",0x"), "0x"+if2_addr.replace(":", ",0x"))) - elif test_type == 'L7': + elif osi_layer == 'L7': (ret, _, _) = ssh.exec_command( "sudo sh -c 'cat << EOF > /etc/trex_cfg.yaml\n" "- port_limit: 2\n" @@ -299,13 +299,13 @@ class TrafficGenerator(AbstractMeasurer): raise RuntimeError('trex-cfg failed') # start TRex - if test_type == 'L2' or test_type == 'L3': + if osi_layer == 'L2' or osi_layer == 'L3': (ret, _, _) = ssh.exec_command( "sh -c 'cd {0}/scripts/ && " "sudo nohup ./t-rex-64 -i -c 7 --iom 0 > /tmp/trex.log " "2>&1 &' > /dev/null"\ .format(Constants.TREX_INSTALL_DIR)) - elif test_type == 'L7': + elif osi_layer == 'L7': (ret, _, _) = ssh.exec_command( "sh -c 'cd {0}/scripts/ && " "sudo nohup ./t-rex-64 --astf -i -c 7 --iom 0 > " |