Merge "Collectd"
authorRoss Brattain <ross.b.brattain@intel.com>
Thu, 10 Aug 2017 03:57:47 +0000 (03:57 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Thu, 10 Aug 2017 03:57:47 +0000 (03:57 +0000)
58 files changed:
api/resources/write_hosts.py
etc/yardstick/nodes/pod.yaml.nsb.sample.ixia [new file with mode: 0644]
requirements.txt
samples/vnf_samples/nsut/acl/acl-tg-topology-3node.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/acl-tg-topology.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/acl.cfg [new file with mode: 0644]
samples/vnf_samples/nsut/acl/acl_1rule.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/acl_config/acl_config [new file with mode: 0644]
samples/vnf_samples/nsut/acl/acl_config/acl_script [new file with mode: 0644]
samples/vnf_samples/nsut/acl/acl_rules.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/acl_vnf_topology_ixia.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/acl_vnf_topology_ixload.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/acl_worstcaserules.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/ixia_traffic.cfg [new file with mode: 0644]
samples/vnf_samples/nsut/acl/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_packetsize.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_trex.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/tc_heat_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/acl/tc_heat_trex_external_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml [new file with mode: 0644]
samples/vnf_samples/traffic_profiles/acl/HTTP-vACL_IPv4_2Ports.rxf [new file with mode: 0644]
samples/vnf_samples/traffic_profiles/acl/acl_ipv4_profile_1flows.ixncfg [new file with mode: 0644]
samples/vnf_samples/traffic_profiles/ixia_ipv4_latency.yaml [new file with mode: 0644]
samples/vnf_samples/vnf_descriptors/acl_vnf.yaml [new file with mode: 0644]
samples/vnf_samples/vnf_descriptors/ixia_rfc2544_tpl.yaml [new file with mode: 0644]
samples/vnf_samples/vnf_descriptors/tg_ixload.yaml [new file with mode: 0644]
samples/vnf_samples/vnf_descriptors/tg_ixload_4port.yaml [new file with mode: 0644]
tests/opnfv/test_cases/opnfv_yardstick_tc025.yaml
tests/opnfv/test_cases/opnfv_yardstick_tc054.yaml
tests/unit/common/test_utils.py
tests/unit/network_services/helpers/acl_vnf_topology_ixia.yaml [new file with mode: 0644]
tests/unit/network_services/libs/__init__.py [new file with mode: 0644]
tests/unit/network_services/libs/ixia_libs/__init__.py [new file with mode: 0644]
tests/unit/network_services/libs/ixia_libs/test_IxNet.py [new file with mode: 0644]
tests/unit/network_services/traffic_profile/test_http_ixload.py [new file with mode: 0644]
tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py [new file with mode: 0644]
tests/unit/network_services/vnf_generic/vnf/acl_1rule.yaml [new file with mode: 0644]
tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py [new file with mode: 0644]
tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py [new file with mode: 0644]
tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py [new file with mode: 0644]
yardstick/benchmark/core/task.py
yardstick/benchmark/scenarios/availability/monitor/monitor_command.py
yardstick/common/constants.py
yardstick/common/utils.py
yardstick/network_services/libs/__init__.py [new file with mode: 0644]
yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py [new file with mode: 0644]
yardstick/network_services/libs/ixia_libs/IxNet/__init__.py [new file with mode: 0644]
yardstick/network_services/libs/ixia_libs/__init__.py [new file with mode: 0644]
yardstick/network_services/traffic_profile/http_ixload.py [new file with mode: 0644]
yardstick/network_services/traffic_profile/ixia_rfc2544.py [new file with mode: 0644]
yardstick/network_services/vnf_generic/vnf/acl_vnf.py [new file with mode: 0644]
yardstick/network_services/vnf_generic/vnf/tg_ixload.py [new file with mode: 0644]
yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py [new file with mode: 0644]

index e4b6984..a3025d3 100644 (file)
@@ -13,11 +13,19 @@ import json
 
 
 def write_hosts(hosts_ip):
-    hosts_list = ('\n{} {}'.format(ip, host_name)
+
+    yardstick_flag = "# SUT hosts info for Yardstick"
+    hosts_list = ('\n{} {} {}'.format(ip, host_name, yardstick_flag)
                   for host_name, ip in hosts_ip.items())
-    with open("/etc/hosts", 'a') as f:
+
+    with open("/etc/hosts", 'r') as f:
+        origin_lines = [line for line in f if yardstick_flag not in line]
+
+    with open("/etc/hosts", 'w') as f:
+        f.writelines(origin_lines)
+        f.write(yardstick_flag)
         f.writelines(hosts_list)
-        f.write("\n")
+
 
 if __name__ == "__main__":
     write_hosts(json.load(sys.stdin))
diff --git a/etc/yardstick/nodes/pod.yaml.nsb.sample.ixia b/etc/yardstick/nodes/pod.yaml.nsb.sample.ixia
new file mode 100644 (file)
index 0000000..57a8305
--- /dev/null
@@ -0,0 +1,90 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+nodes:
+-
+    name: trafficgen_1
+    role: IxNet
+    ip: 1.2.1.1 #ixia machine ip
+    user: user
+    password: r00t
+    key_filename: /root/.ssh/id_rsa
+    tg_config:
+        ixchassis: "1.2.1.7" #ixia chassis ip
+        tcl_port: "8009" # tcl server port
+        lib_path: "/opt/ixia/ixos-api/8.01.0.2/lib/ixTcl1.0"
+        root_dir: "/opt/ixia/ixos-api/8.01.0.2/"
+        py_bin_path: "/opt/ixia/ixload/8.01.106.3/bin/"
+        py_lib_path: "/opt/ixia/ixnetwork/8.01.1029.14/lib/PythonApi"
+        dut_result_dir: "/mnt/ixia"
+        version: 8.1
+    interfaces:
+        xe0:  # logical name from topology.yaml and vnfd.yaml
+            vpci: "2:5" # Card:port
+            driver:    "none"
+            dpdk_port_num: 0
+            local_ip: "152.16.100.20"
+            netmask:   "255.255.0.0"
+            local_mac: "00:98:10:64:14:00"
+        xe1:  # logical name from topology.yaml and vnfd.yaml
+            vpci: "2:6" # [(Card, port)]
+            driver:    "none"
+            dpdk_port_num: 1
+            local_ip: "152.40.40.20"
+            netmask:   "255.255.0.0"
+            local_mac: "00:98:28:28:14:00"
+-
+    name: vnf
+    role: VirtualNetworkFunction
+    ip: 192.168.100.101
+    user: root
+    password: r00t
+    host: 192.168.100.101
+    key_filename: /root/.ssh/id_rsa
+    interfaces:
+        xe0:  # logical name from topology.yaml and vnfd.yaml
+            vpci:      "0000:07:00.2"
+            driver:    "i40e"
+            dpdk_port_num: 0
+            local_ip: "152.16.100.10"
+            netmask:   "255.255.0.0"
+            local_mac: "00:00:00:00:00:03"
+
+        xe1:  # logical name from topology.yaml and vnfd.yaml
+            vpci:      "0000:07:00.3"
+            driver:    "i40e"
+            dpdk_port_num: 1
+            local_ip: "152.40.40.10"
+            netmask:   "255.255.0.0"
+            local_mac: "00:00:00:00:00:04"
+
+    routing_table:
+    - network: "152.16.100.20"
+      netmask: "255.255.0.0"
+      gateway: "152.16.100.20"
+      if: "xe0"
+    - network: "152.40.40.20"
+      netmask: "255.255.0.0"
+      gateway: "152.40.40.20"
+      if: "xe1"
+
+    nd_route_tbl:
+    - network: "0064:ff9b:0:0:0:0:9810:6414"
+      netmask: "112"
+      gateway: "0064:ff9b:0:0:0:0:9810:6414"
+      if: "xe0"
+    - network: "0064:ff9b:0:0:0:0:9828:2814"
+      netmask: "112"
+      gateway: "0064:ff9b:0:0:0:0:9828:2814"
+      if: "xe1"
index d03c437..d90a9e5 100644 (file)
@@ -60,7 +60,6 @@ oslo.utils==3.22.0
 paramiko==2.1.1
 pbr==1.10.0
 pep8==1.7.0
-ping==0.2; python_version <= '2.7'
 pika==0.10.0
 positional==1.1.1
 prettytable==0.7.2
diff --git a/samples/vnf_samples/nsut/acl/acl-tg-topology-3node.yaml b/samples/vnf_samples/nsut/acl/acl-tg-topology-3node.yaml
new file mode 100644 (file)
index 0000000..f8c01da
--- /dev/null
@@ -0,0 +1,53 @@
+# Copyright (c) 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+nsd:nsd-catalog:
+    nsd:
+    -   id: 3tg-topology
+        name: 3tg-topology
+        short-name: 3tg-topology
+        description: 3tg-topology
+        constituent-vnfd:
+        -   member-vnf-index: '1'
+            vnfd-id-ref: tg__1
+            VNF model: ../../vnf_descriptors/tg_rfc2544_tpl.yaml      #VNF type
+        -   member-vnf-index: '2'
+            vnfd-id-ref: vnf__1
+            VNF model: ../../vnf_descriptors/acl_vnf.yaml      #VNF type
+        -   member-vnf-index: '3'
+            vnfd-id-ref: tg__2
+            VNF model: ../../vnf_descriptors/udp_replay_vnf.yaml      #VNF type
+
+        vld:
+        -   id: private_1
+            name: tg__1 to vnf__1 link 1
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: tg__1
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: vnf__1
+
+        -   id: public_1
+            name: vnf__1 to tg__2 link 2
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe1
+                vnfd-id-ref: vnf__1
+            -   member-vnf-index-ref: '3'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: tg__2
diff --git a/samples/vnf_samples/nsut/acl/acl-tg-topology.yaml b/samples/vnf_samples/nsut/acl/acl-tg-topology.yaml
new file mode 100644 (file)
index 0000000..9bc3e85
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+nsd:nsd-catalog:
+    nsd:
+    -   id: 3tg-topology
+        name: 3tg-topology
+        short-name: 3tg-topology
+        description: 3tg-topology
+        constituent-vnfd:
+        -   member-vnf-index: '1'
+            vnfd-id-ref: tg__1
+            VNF model: ../../vnf_descriptors/tg_rfc2544_tpl.yaml      #VNF type
+        -   member-vnf-index: '2'
+            vnfd-id-ref: vnf__1
+            VNF model: ../../vnf_descriptors/acl_vnf.yaml      #VNF type
+
+        vld:
+        -   id: private_1
+            name: tg__1 to vnf__1 link 1
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: tg__1
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: vnf__1
+
+        -   id: public_1
+            name: vnf__1 to tg__1 link 2
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe1
+                vnfd-id-ref: vnf__1
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe1
+                vnfd-id-ref: tg__1
diff --git a/samples/vnf_samples/nsut/acl/acl.cfg b/samples/vnf_samples/nsut/acl/acl.cfg
new file mode 100644 (file)
index 0000000..fd3c51e
--- /dev/null
@@ -0,0 +1,55 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+[PIPELINE0]
+type = MASTER
+core = 0
+[PIPELINE1]
+type =  ARPICMP
+core = 1
+pktq_in  = SWQ4
+pktq_out = TXQ0.0 TXQ1.0 TXQ2.0 TXQ3.0
+arp_route_tbl = (c0102814,fffff000,1,c0102814) (c0106414,fffff000,0,c0106414)
+nd_route_tbl = (0064:ff9b:0:0:0:0:9810:6414,120,0,0064:ff9b:0:0:0:0:9810:6414)
+pktq_in_prv =  RXQ0.0
+prv_to_pub_map = (0,1)
+[PIPELINE2]
+type = TXRX
+core = 2
+pipeline_txrx_type = RXRX
+dest_if_offset = 176
+pktq_in  = RXQ0.0 RXQ1.0 RXQ2.0 RXQ3.0
+pktq_out = SWQ0   SWQ1   SWQ2   SWQ3   SWQ4
+[PIPELINE3]
+type = LOADB
+core = 3
+pktq_in  = SWQ0 SWQ1 SWQ2 SWQ3
+pktq_out = SWQ4 SWQ5 SWQ6 SWQ7 SWQ8 SWQ9 SWQ10 SWQ11
+outport_offset = 136; 8
+n_vnf_threads = 2
+[PIPELINE4]
+type = ACL
+core = 4
+pktq_in = SWQ2 SWQ3
+pktq_out = SWQ8 SWQ9
+traffic_type = 4
+pkt_type = ipv4
+n_flows = 2000000
+[PIPELINE5]
+type = TXRX
+core = 5
+pipeline_txrx_type = TXTX
+dest_if_offset = 176
+pktq_in  = SWQ8 SWQ9 SWQ10 SWQ11 SWQ12 SWQ13
+pktq_out = TXQ0.0 TXQ1.0 TXQ0.1 TXQ1.1 TXQ0.2 TXQ1.2
diff --git a/samples/vnf_samples/nsut/acl/acl_1rule.yaml b/samples/vnf_samples/nsut/acl/acl_1rule.yaml
new file mode 100644 (file)
index 0000000..b184a29
--- /dev/null
@@ -0,0 +1,47 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+access-list1:
+  acl:
+    access-list-entries:
+    - ace:
+        ace-oper-data:
+          match-counter: 0
+        actions: drop,count
+        matches:
+          destination-ipv4-network: 152.16.40.20/24
+          destination-port-range:
+            lower-port: 0
+            upper-port: 65535
+          source-ipv4-network: 0.0.0.0/0
+          source-port-range:
+            lower-port: 0
+            upper-port: 65535
+        rule-name: rule1588
+    - ace:
+        ace-oper-data:
+          match-counter: 0
+        actions: drop,count
+        matches:
+          destination-ipv4-network: 0.0.0.0/0
+          destination-port-range:
+            lower-port: 0
+            upper-port: 65535
+          source-ipv4-network: 152.16.100.20/24
+          source-port-range:
+            lower-port: 0
+            upper-port: 65535
+        rule-name: rule1589
+    acl-name: sample-ipv4-acl
+    acl-type: ipv4-acl
diff --git a/samples/vnf_samples/nsut/acl/acl_config/acl_config b/samples/vnf_samples/nsut/acl/acl_config/acl_config
new file mode 100644 (file)
index 0000000..52b6a50
--- /dev/null
@@ -0,0 +1,61 @@
+; Copyright (c) 2017 Intel Corporation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;      http:#www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+
+[PIPELINE0]
+type = MASTER
+core = s{socket}c0
+[PIPELINE1]
+type = ARPICMP
+core = s{socket}c1
+pktq_in  = SWQ2
+pktq_out = SWQ7
+# debug output
+# ({port1_dst_ip},{port1_netmask},1,{port1_dst_ip}) ({port0_dst_ip},{port0_netmask},0,{port0_dst_ip})
+arp_route_tbl = ({port0_dst_ip_hex},{port0_netmask_hex},0,{port0_dst_ip_hex}) ({port1_dst_ip_hex},{port1_netmask_hex},1,{port1_dst_ip_hex})
+#ports_mac_list = port0_local_mac port1_local_mac
+ports_mac_list = {port0_local_mac} {port1_local_mac}
+pktq_in_prv =  RXQ0.0 RXQ1.0
+prv_to_pub_map = (0,1)
+prv_que_handler = (0)
+
+[PIPELINE2]
+type = TXRX
+core = s{socket}c2
+pktq_in  = RXQ0.0 RXQ1.0
+pktq_out = SWQ0 SWQ1 SWQ2
+pipeline_txrx_type = RXRX
+dest_if_offset=176
+[PIPELINE3]
+type = LOADB
+core = s{socket}c3
+pktq_in  = SWQ0 SWQ1
+pktq_out = SWQ3 SWQ4
+outport_offset = 136
+phyport_offset = 204
+n_vnf_threads = 1
+prv_que_handler = (0)
+[PIPELINE4]
+type = ACL
+core = s{socket}c4
+pktq_in  = SWQ3 SWQ4
+pktq_out = SWQ5 SWQ6
+n_flows = 1000000
+pkt_type = ipv4
+traffic_type = 4
+[PIPELINE5]
+type = TXRX
+core = s{socket}c5
+pktq_in  = SWQ5 SWQ6 SWQ7
+pktq_out = TXQ0.0 TXQ1.0
+pipeline_txrx_type = TXTX
diff --git a/samples/vnf_samples/nsut/acl/acl_config/acl_script b/samples/vnf_samples/nsut/acl/acl_config/acl_script
new file mode 100644 (file)
index 0000000..4d75536
--- /dev/null
@@ -0,0 +1,53 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License")#
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http:#www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+link 0 down
+link 0 config {port0_local_ip} {port0_prefixlen}
+link 0 up
+link 1 down
+link 1 config {port1_local_ip} {port1_prefixlen}
+link 1 up
+
+p action add 0 accept
+p action add 0 fwd 0
+p action add 0 count
+
+p action add 1 accept
+p action add 1 fwd 1
+p action add 1 count
+
+#p acl add 1 0.0.0.0 0 0.0.0.0 0 0 65535 0 65535 0 0 0
+#p acl add 1 0.0.0.0 0 0.0.0.0 0 0 65535 0 65535 0 0 1
+
+# action rule matches dest port
+p acl add 1 {port1_local_network} {port1_prefix} 0.0.0.0 0 0 65535 0 65535 0 0 0
+p acl add 1 0.0.0.0 0 {port1_local_network} {port1_prefix} 0 65535 0 65535 0 0 1
+
+p acl add 1 {port0_local_network} {port0_prefix} 0.0.0.0 0 0 65535 0 65535 0 0 1
+p acl add 1 0.0.0.0 0 {port0_local_network} {port0_prefix} 0 65535 0 65535 0 0 0
+
+p acl add 1 {port0_local_network} {port0_prefix} {port1_local_network} {port1_prefix} 0 65535 0 65535 0 0 1
+p acl add 1 {port1_local_network} {port1_prefix} {port0_local_network} {port0_prefix} 0 65535 0 65535 0 0 0
+
+# gateway is the remote port
+p 1 arpadd 0 {port0_gateway} {port0_local_mac}
+p 1 arpadd 0 {port0_local_ip} {port0_local_mac}
+p 1 arpadd 0 {port0_dst_ip} {port0_dst_mac}
+p 1 arpadd 1 {port1_gateway} {port1_local_mac}
+p 1 arpadd 1 {port1_local_ip} {port1_local_mac}
+p 1 arpadd 1 {port1_dst_ip} {port1_dst_mac}
+
+p acl applyruleset
+
+#p acl dbg 1
diff --git a/samples/vnf_samples/nsut/acl/acl_rules.yaml b/samples/vnf_samples/nsut/acl/acl_rules.yaml
new file mode 100644 (file)
index 0000000..b184a29
--- /dev/null
@@ -0,0 +1,47 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+access-list1:
+  acl:
+    access-list-entries:
+    - ace:
+        ace-oper-data:
+          match-counter: 0
+        actions: drop,count
+        matches:
+          destination-ipv4-network: 152.16.40.20/24
+          destination-port-range:
+            lower-port: 0
+            upper-port: 65535
+          source-ipv4-network: 0.0.0.0/0
+          source-port-range:
+            lower-port: 0
+            upper-port: 65535
+        rule-name: rule1588
+    - ace:
+        ace-oper-data:
+          match-counter: 0
+        actions: drop,count
+        matches:
+          destination-ipv4-network: 0.0.0.0/0
+          destination-port-range:
+            lower-port: 0
+            upper-port: 65535
+          source-ipv4-network: 152.16.100.20/24
+          source-port-range:
+            lower-port: 0
+            upper-port: 65535
+        rule-name: rule1589
+    acl-name: sample-ipv4-acl
+    acl-type: ipv4-acl
diff --git a/samples/vnf_samples/nsut/acl/acl_vnf_topology_ixia.yaml b/samples/vnf_samples/nsut/acl/acl_vnf_topology_ixia.yaml
new file mode 100644 (file)
index 0000000..606d557
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+nsd:nsd-catalog:
+    nsd:
+    -   id: VACL
+        name: VACL
+        short-name: VACL
+        description: scenario with VACL,L3fwd and VNF
+        constituent-vnfd:
+        -   member-vnf-index: '1'
+            vnfd-id-ref: tg__1
+            VNF model: ../../vnf_descriptors/ixia_rfc2544_tpl.yaml
+        -   member-vnf-index: '2'
+            vnfd-id-ref: vnf__1
+            VNF model: ../../vnf_descriptors/acl_vnf.yaml
+
+        vld:
+        -   id: private_1
+            name: tg__1 to vnf__1 link 1
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: tg__1                  #TREX
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: vnf__1                  #VNF
+
+        -   id: public_1
+            name: vnf__1 to tg__1 link 2
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe1
+                vnfd-id-ref: vnf__1                  #L3fwd
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe1
+                vnfd-id-ref: tg__1                  #VACL VNF
diff --git a/samples/vnf_samples/nsut/acl/acl_vnf_topology_ixload.yaml b/samples/vnf_samples/nsut/acl/acl_vnf_topology_ixload.yaml
new file mode 100644 (file)
index 0000000..2fc173a
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+nsd:nsd-catalog:
+    nsd:
+    -   id: VACL
+        name: VACL
+        short-name: VACL
+        description: scenario with HTTP and vACL VNF
+        constituent-vnfd:
+        -   member-vnf-index: '1'
+            vnfd-id-ref: tg__1
+            VNF model: ../../vnf_descriptors/tg_ixload.yaml
+        -   member-vnf-index: '2'
+            vnfd-id-ref: vnf__1
+            VNF model: ../../vnf_descriptors/acl_vnf.yaml
+
+        vld:
+        -   id: private_1
+            name: tg__1 to vnf__1 link 1
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: tg__1                   # HTTP Client
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: vnf__1                  # VNF
+
+        -   id: public_1
+            name: vnf__1 to tg__1 link 2
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe1
+                vnfd-id-ref: vnf__1                  # HTTP Server
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe1
+                vnfd-id-ref: tg__1                   # VACL VNF
diff --git a/samples/vnf_samples/nsut/acl/acl_worstcaserules.yaml b/samples/vnf_samples/nsut/acl/acl_worstcaserules.yaml
new file mode 100644 (file)
index 0000000..b184a29
--- /dev/null
@@ -0,0 +1,47 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+access-list1:
+  acl:
+    access-list-entries:
+    - ace:
+        ace-oper-data:
+          match-counter: 0
+        actions: drop,count
+        matches:
+          destination-ipv4-network: 152.16.40.20/24
+          destination-port-range:
+            lower-port: 0
+            upper-port: 65535
+          source-ipv4-network: 0.0.0.0/0
+          source-port-range:
+            lower-port: 0
+            upper-port: 65535
+        rule-name: rule1588
+    - ace:
+        ace-oper-data:
+          match-counter: 0
+        actions: drop,count
+        matches:
+          destination-ipv4-network: 0.0.0.0/0
+          destination-port-range:
+            lower-port: 0
+            upper-port: 65535
+          source-ipv4-network: 152.16.100.20/24
+          source-port-range:
+            lower-port: 0
+            upper-port: 65535
+        rule-name: rule1589
+    acl-name: sample-ipv4-acl
+    acl-type: ipv4-acl
diff --git a/samples/vnf_samples/nsut/acl/ixia_traffic.cfg b/samples/vnf_samples/nsut/acl/ixia_traffic.cfg
new file mode 100644 (file)
index 0000000..f749865
--- /dev/null
@@ -0,0 +1,51 @@
+{
+    "private_1": {
+        "id": 1,
+        "bidir": "False",
+        "duration": 60,
+        "iload": "100",
+        "outer_l2": {
+            "dstmac": "00:00:00:00:00:03",
+            "framesPerSecond": true,
+            "framesize": 64,
+            "srcmac": "00:00:00:00:00:01"
+        },
+        "outer_l3": {
+            "dscp": 0,
+            "dstip4": "152.16.40.20",
+            "proto": "udp",
+            "srcip4": "152.16.100.20",
+            "ttl": 32
+        },
+        "outer_l4": {
+            "dstport": "2001",
+            "srcport": "1234"
+        },
+        "traffic_type": "continuous"
+    },
+    "public_1": {
+        "id": 2,
+        "bidir": "False",
+        "duration": 60,
+        "iload": "100",
+        "outer_l2": {
+            "dstmac": "00:00:00:00:00:04",
+            "framesPerSecond": true,
+            "framesize": 64,
+            "srcmac": "00:00:00:00:00:01"
+        },
+        "outer_l3": {
+            "count": 1024,
+            "dscp": 0,
+            "dstip4": "152.16.100.20",
+            "proto": "udp",
+            "srcip4": "152.16.40.20",
+            "ttl": 32
+        },
+        "outer_l4": {
+            "dstport": "1234",
+            "srcport": "2001"
+        },
+        "traffic_type": "continuous"
+    }
+}
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml
new file mode 100644 (file)
index 0000000..cf2dbfc
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf
+  traffic_profile: "../../traffic_profiles/http_tests/HTTP_1b-requests_65000_concurrency.yaml"
+  topology: acl_vnf_topology_ixload.yaml
+  nodes:
+    tg__1: trafficgen_1.yardstick
+    vnf__1: vnf.yardstick
+  options:
+    packetsize: 64
+    traffic_type: 4
+    vnf__1:
+      rules: acl_1rule.yaml
+      vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Duration
+    duration: 10
+  ixia_profile: ../../traffic_profiles/acl/HTTP-vACL_IPv4_2Ports.rxf # Need vlan update
+context:
+  type: Node
+  name: yardstick
+  nfvi_type: baremetal
+  file: /etc/yardstick/nodes/pod.yaml
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml
new file mode 100644 (file)
index 0000000..477bd8f
--- /dev/null
@@ -0,0 +1,44 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf
+  traffic_profile: "../../traffic_profiles/ixia_ipv4_latency.yaml"
+  topology: acl_vnf_topology_ixia.yaml
+  nodes:
+    tg__1: trafficgen_1.yardstick
+    vnf__1: vnf.yardstick
+  options:
+    packetsize: 64
+    traffic_type: 4
+    rfc2544:
+      allowed_drop_rate: 0.0001 - 0.0001
+    vnf__1:
+      rules: acl_1rule.yaml
+      vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Iteration
+    iterations: 10
+    interval: 35
+  traffic_options:
+    flow: "../../traffic_profiles/ipv4_1flow_Packets.yaml"
+    imix: "../../traffic_profiles/imix_voice.yaml"
+  ixia_profile: ../../traffic_profiles/acl/acl_ipv4_profile_1flows.ixncfg
+context:
+  type: Node
+  name: yardstick
+  nfvi_type: baremetal
+  file: /etc/yardstick/nodes/pod.yaml
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml
new file mode 100644 (file)
index 0000000..6957681
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright (c) 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the License);
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf
+  traffic_profile: ../../traffic_profiles/ipv4_throughput.yaml
+  topology: acl-tg-topology.yaml
+  nodes:
+    tg__1: trafficgen_1.yardstick
+    vnf__1: vnf.yardstick
+  tc_options:
+    rfc2544:
+      allowed_drop_rate: 0.0001 - 0.0001
+  vnf_options:
+    acl:
+      rules: acl_1rule.yaml
+      cfg: acl_config
+  runner:
+    type: Duration
+    duration: 400
+    interval: 35
+  traffic_options:
+    flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
+    imix: ../../traffic_profiles/imix_voice.yaml
+context:
+  type: Node
+  name: yardstick
+  nfvi_type: baremetal
+  file: /etc/yardstick/nodes/pod.yaml
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml
new file mode 100644 (file)
index 0000000..8d7fe3c
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf
+  traffic_profile: ../../traffic_profiles/ipv4_throughput.yaml
+  topology: acl-tg-topology.yaml
+  nodes:
+    tg__1: trafficgen_1.yardstick
+    vnf__1: vnf.yardstick
+  options:
+    packetsize: 64
+    traffic_type: 4
+    rfc2544:
+      allowed_drop_rate: 0.0001 - 0.0001
+    vnf__1:
+      rules: acl_1rule.yaml
+      vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Iteration
+    iterations: 10
+    interval: 35
+  traffic_options:
+    flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
+    imix: ../../traffic_profiles/imix_voice.yaml
+context:
+  type: Node
+  name: yardstick
+  nfvi_type: baremetal
+  file: /etc/yardstick/nodes/pod.yaml
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml
new file mode 100644 (file)
index 0000000..6b21ba5
--- /dev/null
@@ -0,0 +1,45 @@
+# Copyright (c) 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the License);
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf
+  traffic_profile: ../../traffic_profiles/ipv4_throughput.yaml
+  topology: acl-tg-topology-3node.yaml
+  nodes:
+    tg__1: trafficgen_1.yardstick
+    vnf__1: vnf.yardstick
+    tg__2: trafficgen_2.yardstick
+  options:
+    packetsize: 64
+    traffic_type: 4
+    rfc2544:
+      allowed_drop_rate: 0.0001 - 0.0001
+      corelated_traffic: true
+    vnf__1:
+      rules: acl_1rule.yaml
+      vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Iteration
+    iterations: 10
+    interval: 35
+  traffic_options:
+    flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
+    imix: ../../traffic_profiles/imix_voice.yaml
+context:
+  type: Node
+  name: yardstick
+  nfvi_type: baremetal
+  file: /etc/yardstick/nodes/pod_3node.yaml
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml
new file mode 100644 (file)
index 0000000..df7a909
--- /dev/null
@@ -0,0 +1,45 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+schema: yardstick:task:0.1
+scenarios:
+{% for worker_thread in [1, 2, 3 , 4, 5, 6] %}
+- type: NSPerf
+  traffic_profile: ../../traffic_profiles/ipv4_throughput.yaml
+  topology: acl-tg-topology.yaml
+  nodes:
+    tg__1: trafficgen_1.yardstick
+    vnf__1: vnf.yardstick
+  options:
+    packetsize: 64
+    traffic_type: 4
+    rfc2544:
+      allowed_drop_rate: 0.0001 - 0.0001
+    vnf__1:
+      rules: acl_1rule.yaml
+      vnf_config: {lb_config: 'HW', lb_count: 1, worker_config: '1C/1T', worker_threads: {{worker_thread}}}
+  runner:
+    type: Iteration
+    iterations: 10
+    interval: 35
+  traffic_options:
+    flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
+    imix: ../../traffic_profiles/imix_voice.yaml
+{% endfor %}
+context:
+  type: Node
+  name: yardstick
+  nfvi_type: baremetal
+  file: /etc/yardstick/nodes/pod.yaml
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_packetsize.yaml
new file mode 100644 (file)
index 0000000..96b3f68
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright (c) 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the License);
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf
+  traffic_profile: ../../traffic_profiles/ipv4_throughput.yaml
+  topology: acl-tg-topology.yaml
+  nodes:
+    tg__1: trafficgen_1.yardstick
+    vnf__1: vnf.yardstick
+  tc_options:
+    rfc2544:
+      allowed_drop_rate: 0.0001 - 0.0001
+  vnf_options:
+    acl:
+      rules: acl_worstcaserules.yaml
+      cfg: acl_config
+  runner:
+    type: Duration
+    duration: 400
+    interval: 35
+  traffic_options:
+    flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
+    imix: ../../traffic_profiles/imix_voice.yaml
+context:
+  type: Node
+  name: yardstick
+  nfvi_type: baremetal
+  file: /etc/yardstick/nodes/pod.yaml
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_ipv4_worstcaserules_1flow_64B_trex.yaml
new file mode 100644 (file)
index 0000000..8d7fe3c
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf
+  traffic_profile: ../../traffic_profiles/ipv4_throughput.yaml
+  topology: acl-tg-topology.yaml
+  nodes:
+    tg__1: trafficgen_1.yardstick
+    vnf__1: vnf.yardstick
+  options:
+    packetsize: 64
+    traffic_type: 4
+    rfc2544:
+      allowed_drop_rate: 0.0001 - 0.0001
+    vnf__1:
+      rules: acl_1rule.yaml
+      vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Iteration
+    iterations: 10
+    interval: 35
+  traffic_options:
+    flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
+    imix: ../../traffic_profiles/imix_voice.yaml
+context:
+  type: Node
+  name: yardstick
+  nfvi_type: baremetal
+  file: /etc/yardstick/nodes/pod.yaml
diff --git a/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/acl/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml
new file mode 100644 (file)
index 0000000..ab688a2
--- /dev/null
@@ -0,0 +1,45 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf
+  traffic_profile: ../../traffic_profiles/ipv4_throughput.yaml
+  topology: acl-tg-topology.yaml
+  nodes:
+    tg__1: trafficgen_1.yardstick
+    vnf__1: vnf.yardstick
+  tc_options:
+    rfc2544:
+      allowed_drop_rate: 0.0001 - 0.0001
+    latency: true
+  vnf_options:
+    acl:
+      rules: acl_1rule.yaml
+      cfg: acl_config
+  options:
+    packetsize: 64
+  runner:
+    type: Iteration
+    iterations: 28
+    interval: 35
+  traffic_options:
+    flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
+    imix: ../../traffic_profiles/imix_voice.yaml
+context:
+  type: Node
+  name: yardstick
+  nfvi_type: baremetal
+  file: /etc/yardstick/nodes/pod.yaml
diff --git a/samples/vnf_samples/nsut/acl/tc_heat_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/acl/tc_heat_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml
new file mode 100644 (file)
index 0000000..10eba4c
--- /dev/null
@@ -0,0 +1,84 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the License);
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf
+  traffic_profile: ../../traffic_profiles/ipv4_throughput.yaml
+  topology: acl-tg-topology.yaml
+  nodes:
+    tg__1: trafficgen_1.yardstick
+    vnf__1: vnf.yardstick
+  options:
+    packetsize: 64
+    traffic_type: 4
+    rfc2544:
+      allowed_drop_rate: 0.0001 - 0.0001
+    vnf__1:
+      rules: acl_1rule.yaml
+      vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Iteration
+    iterations: 10
+    interval: 35
+  traffic_options:
+    flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
+    imix: ../../traffic_profiles/imix_voice.yaml
+context:
+  # put node context first, so we don't HEAT deploy if node has errors
+  name: yardstick
+  flavor: yardstick-dpdk-flavor
+#  flavor:
+#    name: yardstick-dpdk-flavor
+#    vcpus: 10
+#    ram: 20480
+#    disk: 4
+#    extra_specs:
+#      hw:cpu_sockets: 1
+#      hw:cpu_cores: 10
+#      hw:cpu_threads: 1
+#  #      hw:mem_page_size: large
+  user: ubuntu
+  placement_groups:
+    pgrp1:
+      policy: "availability"
+  servers:
+    vnf:
+      floating_ip: true
+      placement: "pgrp1"
+      image: yardstick-vnfs
+    trafficgen_1:
+      floating_ip: true
+      placement: "pgrp1"
+      image: yardstick-trex
+  networks:
+    mgmt:
+      cidr: '10.0.1.0/24'
+      external_network: "yardstick-public"
+    xe0:
+      cidr: '10.0.2.0/24'
+      vld_id: public
+#      port_security_enabled: False
+      allowed_address_pairs:
+        - ip_address:
+            '0.0.0.0/0'
+    xe1:
+      cidr: '10.0.3.0/24'
+      vld_id: private
+#      port_security_enabled: False
+      allowed_address_pairs:
+        - ip_address:
+            '0.0.0.0/0'
+
diff --git a/samples/vnf_samples/nsut/acl/tc_heat_trex_external_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml b/samples/vnf_samples/nsut/acl/tc_heat_trex_external_rfc2544_ipv4_1rule_1flow_64B_packetsize.yaml
new file mode 100644 (file)
index 0000000..3344a1d
--- /dev/null
@@ -0,0 +1,74 @@
+# Copyright (c) 2016 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the License);
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf
+  traffic_profile: ../../traffic_profiles/ipv4_throughput.yaml
+  topology: acl-tg-topology.yaml
+  nodes:
+    tg__1: trafficgen_1.baremetal
+    vnf__1: vnf.yardstick
+  tc_options:
+    rfc2544:
+      allowed_drop_rate: 0.0001 - 0.0001
+  vnf_options:
+    acl:
+      rules: acl_1rule.yaml
+      cfg: acl_config
+  runner:
+    type: Duration
+    duration: 400
+    interval: 35
+  traffic_options:
+    flow: ../../traffic_profiles/ipv4_1flow_Packets.yaml
+    imix: ../../traffic_profiles/imix_voice.yaml
+contexts:
+  # put node context first, so we don't HEAT deploy if node has errors
+  - name: baremetal
+    type: Node
+    file: trex-baremetal.yml
+  - name: yardstick
+    image: yardstick-acl
+    flavor: yardstick-flavor
+#    flavor:
+#  #    name: yardstick-dpdk-flavor
+#      vcpus: 6
+#      ram: 20480
+#      disk: 4
+#      extra_specs:
+#        hw:cpu_sockets: 1
+#        hw:cpu_cores: 6
+#        hw:cpu_threads: 1
+#  #      hw:mem_page_size: large
+    user: ubuntu
+    placement_groups:
+      pgrp1:
+        policy: "availability"
+    servers:
+      vnf:
+        floating_ip: true
+        placement: "pgrp1"
+    networks:
+      mgmt:
+        cidr: '10.0.1.0/24'
+        external_network: "yardstick-public"
+      xe0:
+        cidr: '10.0.2.0/24'
+        vld_id: public
+      xe1:
+        cidr: '10.0.3.0/24'
+        vld_id: private
+
diff --git a/samples/vnf_samples/traffic_profiles/acl/HTTP-vACL_IPv4_2Ports.rxf b/samples/vnf_samples/traffic_profiles/acl/HTTP-vACL_IPv4_2Ports.rxf
new file mode 100644 (file)
index 0000000..9934797
--- /dev/null
@@ -0,0 +1,1335 @@
+<?xml version="1.0" ?>
+<root ver="[21, [1, [0, [0]]]]" type="ixRepository">
+ <_smSessionXml ver="[0, [1, [0, [0]]]]" type="ixSMSessionXML">
+  <xml type="str">&lt;rpf&gt;&#13;&#10;  &lt;Ixia.Aptixia.StackManager.SMSession type=&quot;Ixia.Aptixia.StackManager.SMSession&quot; objectid=&quot;a1e46af9-15aa-4923-8410-c81d0cdf0836&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;    &lt;doWaitLinkUp type=&quot;Bool&quot;&gt;0&lt;/doWaitLinkUp&gt;&#13;&#10;    &lt;doGratArp type=&quot;Bool&quot;&gt;0&lt;/doGratArp&gt;&#13;&#10;    &lt;subscribeToGratArpNotifications type=&quot;Bool&quot;&gt;0&lt;/subscribeToGratArpNotifications&gt;&#13;&#10;    &lt;doInterfaceCheck type=&quot;Bool&quot;&gt;0&lt;/doInterfaceCheck&gt;&#13;&#10;    &lt;rebootPortsBeforeConfigure type=&quot;Bool&quot;&gt;0&lt;/rebootPortsBeforeConfigure&gt;&#13;&#10;    &lt;testDuration type=&quot;Int&quot;&gt;10000&lt;/testDuration&gt;&#13;&#10;    &lt;checkLinkState type=&quot;Bool&quot;&gt;0&lt;/checkLinkState&gt;&#13;&#10;    &lt;portGroupList type=&quot;ListNode&quot;&gt;&#13;&#10;      &lt;Ixia.Aptixia.StackManager.PortGroup type=&quot;Ixia.Aptixia.StackManager.PortGroup&quot; objectid=&quot;865be042-32d5-426a-9e75-0908c943801f&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;        &lt;name type=&quot;String&quot;&gt;client network&lt;/name&gt;&#13;&#10;        &lt;category type=&quot;String&quot; /&gt;&#13;&#10;        &lt;stack type=&quot;Ixia.Aptixia.StackManager.L1EthernetPlugin&quot; objectid=&quot;1dcd6e1b-17cd-45a1-875a-cbea40d3468c&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;autoNegotiate type=&quot;Bool&quot;&gt;1&lt;/autoNegotiate&gt;&#13;&#10;          &lt;speed type=&quot;String&quot;&gt;k100FD&lt;/speed&gt;&#13;&#10;          &lt;advertise10Half type=&quot;Bool&quot;&gt;1&lt;/advertise10Half&gt;&#13;&#10;          &lt;advertise10Full type=&quot;Bool&quot;&gt;1&lt;/advertise10Full&gt;&#13;&#10;          &lt;advertise100Half type=&quot;Bool&quot;&gt;1&lt;/advertise100Half&gt;&#13;&#10;          &lt;advertise100Full type=&quot;Bool&quot;&gt;1&lt;/advertise100Full&gt;&#13;&#10;          &lt;advertise1000Full type=&quot;Bool&quot;&gt;1&lt;/advertise1000Full&gt;&#13;&#10;          &lt;cardDualPhy type=&quot;Ixia.Aptixia.StackManager.DualPhyPlugin&quot; objectid=&quot;b458c333-b4d4-48ef-bd38-3b456f72f8c8&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;medium type=&quot;String&quot;&gt;auto&lt;/medium&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/cardDualPhy&gt;&#13;&#10;          &lt;cardElm type=&quot;Ixia.Aptixia.StackManager.EthernetELMPlugin&quot; objectid=&quot;28c0383a-76a7-4750-8162-2ad946ddac97&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;negotiateMasterSlave type=&quot;Bool&quot;&gt;1&lt;/negotiateMasterSlave&gt;&#13;&#10;            &lt;negotiationType type=&quot;String&quot;&gt;master&lt;/negotiationType&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/cardElm&gt;&#13;&#10;          &lt;enableFlowControl type=&quot;Bool&quot;&gt;0&lt;/enableFlowControl&gt;&#13;&#10;          &lt;directedAddress type=&quot;String&quot;&gt;01:80:C2:00:00:01&lt;/directedAddress&gt;&#13;&#10;          &lt;dataCenter type=&quot;Ixia.Aptixia.StackManager.DataCenterSettings&quot; objectid=&quot;b9a0be2e-3880-4100-9e29-9b474f9301f4&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;dcSupported type=&quot;Bool&quot;&gt;1&lt;/dcSupported&gt;&#13;&#10;            &lt;dcEnabled type=&quot;Bool&quot;&gt;0&lt;/dcEnabled&gt;&#13;&#10;            &lt;dcFlowControl type=&quot;Ixia.Aptixia.StackManager.DataCenterSettingsSkeleton+eFlowControlType&quot;&gt;0&lt;/dcFlowControl&gt;&#13;&#10;            &lt;dcMode type=&quot;Ixia.Aptixia.StackManager.DataCenterSettingsSkeleton+eDataCenterMode&quot;&gt;2&lt;/dcMode&gt;&#13;&#10;            &lt;dcPfcMapping type=&quot;IntList&quot; /&gt;&#13;&#10;            &lt;dcPfcPauseEnable type=&quot;Bool&quot;&gt;0&lt;/dcPfcPauseEnable&gt;&#13;&#10;            &lt;dcPfcPauseDelay type=&quot;Int&quot;&gt;1&lt;/dcPfcPauseDelay&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/dataCenter&gt;&#13;&#10;          &lt;childrenList type=&quot;ListNode&quot;&gt;&#13;&#10;            &lt;Ixia.Aptixia.StackManager.L2EthernetPlugin type=&quot;Ixia.Aptixia.StackManager.L2EthernetPlugin&quot; objectid=&quot;e0232591-010e-492c-8a28-75e436f4adb2&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;              &lt;macRangeList type=&quot;ListNode&quot;&gt;&#13;&#10;                &lt;Ixia.Aptixia.StackManager.MacRange type=&quot;Ixia.Aptixia.StackManager.MacRange&quot; objectid=&quot;3011c8a8-a9fd-4b76-a27d-91948113ed4f&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;                  &lt;enabled type=&quot;Bool&quot;&gt;1&lt;/enabled&gt;&#13;&#10;                  &lt;name type=&quot;String&quot;&gt;MAC-R1&lt;/name&gt;&#13;&#10;                  &lt;mac type=&quot;String&quot;&gt;00:98:10:64:14:00&lt;/mac&gt;&#13;&#10;                  &lt;incrementBy type=&quot;String&quot;&gt;00:00:00:00:00:01&lt;/incrementBy&gt;&#13;&#10;                  &lt;mtu type=&quot;Int&quot;&gt;1500&lt;/mtu&gt;&#13;&#10;                  &lt;count type=&quot;Int&quot;&gt;1&lt;/count&gt;&#13;&#10;                  &lt;vlanRange type=&quot;Ixia.Aptixia.StackManager.VlanIdRange&quot; objectid=&quot;adb27552-7165-46a3-bc9e-04914adf40ac&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;                    &lt;name type=&quot;String&quot;&gt;VLAN-R1&lt;/name&gt;&#13;&#10;                    &lt;enabled type=&quot;Bool&quot;&gt;0&lt;/enabled&gt;&#13;&#10;                    &lt;firstId type=&quot;Int&quot;&gt;1&lt;/firstId&gt;&#13;&#10;                    &lt;incrementStep type=&quot;Int&quot;&gt;100&lt;/incrementStep&gt;&#13;&#10;                    &lt;increment type=&quot;Int&quot;&gt;1&lt;/increment&gt;&#13;&#10;                    &lt;uniqueCount type=&quot;Int&quot;&gt;4094&lt;/uniqueCount&gt;&#13;&#10;                    &lt;priority type=&quot;Int&quot;&gt;0&lt;/priority&gt;&#13;&#10;                    &lt;tpid type=&quot;String&quot;&gt;0x8100&lt;/tpid&gt;&#13;&#10;                    &lt;innerEnable type=&quot;Bool&quot;&gt;0&lt;/innerEnable&gt;&#13;&#10;                    &lt;innerFirstId type=&quot;Int&quot;&gt;1&lt;/innerFirstId&gt;&#13;&#10;                    &lt;innerIncrementStep type=&quot;Int&quot;&gt;1&lt;/innerIncrementStep&gt;&#13;&#10;                    &lt;innerIncrement type=&quot;Int&quot;&gt;1&lt;/innerIncrement&gt;&#13;&#10;                    &lt;innerUniqueCount type=&quot;Int&quot;&gt;4094&lt;/innerUniqueCount&gt;&#13;&#10;                    &lt;innerPriority type=&quot;Int&quot;&gt;0&lt;/innerPriority&gt;&#13;&#10;                    &lt;idIncrMode type=&quot;Int&quot;&gt;1&lt;/idIncrMode&gt;&#13;&#10;                    &lt;innerTpid type=&quot;String&quot;&gt;0x8100&lt;/innerTpid&gt;&#13;&#10;                    &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;                  &lt;/vlanRange&gt;&#13;&#10;                  &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;                &lt;/Ixia.Aptixia.StackManager.MacRange&gt;&#13;&#10;              &lt;/macRangeList&gt;&#13;&#10;              &lt;vlanRangeList type=&quot;ListNode&quot;&gt;&#13;&#10;                &lt;Ixia.Aptixia.StackManager.VlanIdRange type=&quot;Ixia.Aptixia.StackManager.VlanIdRange&quot; objectid=&quot;adb27552-7165-46a3-bc9e-04914adf40ac&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;              &lt;/vlanRangeList&gt;&#13;&#10;              &lt;childrenList type=&quot;ListNode&quot;&gt;&#13;&#10;                &lt;Ixia.Aptixia.StackManager.IpV4V6Plugin type=&quot;Ixia.Aptixia.StackManager.IpV4V6Plugin&quot; objectid=&quot;a916ae0f-0731-405d-ad19-eaade6c515f1&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;                  &lt;rangeList type=&quot;ListNode&quot;&gt;&#13;&#10;                    &lt;Ixia.Aptixia.StackManager.IpV4V6Range type=&quot;Ixia.Aptixia.StackManager.IpV4V6Range&quot; objectid=&quot;a3559674-8d95-4020-90b3-b42eacaef105&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;                      &lt;enabled type=&quot;Bool&quot;&gt;1&lt;/enabled&gt;&#13;&#10;                      &lt;name type=&quot;String&quot;&gt;IP-R1&lt;/name&gt;&#13;&#10;                      &lt;ipType type=&quot;String&quot;&gt;IPv4&lt;/ipType&gt;&#13;&#10;                      &lt;ipAddress type=&quot;String&quot;&gt;152.16.100.20&lt;/ipAddress&gt;&#13;&#10;                      &lt;prefix type=&quot;Int&quot;&gt;24&lt;/prefix&gt;&#13;&#10;                      &lt;incrementBy type=&quot;String&quot;&gt;0.0.0.1&lt;/incrementBy&gt;&#13;&#10;                      &lt;count type=&quot;Int&quot;&gt;1&lt;/count&gt;&#13;&#10;                      &lt;autoCountEnabled type=&quot;Bool&quot;&gt;0&lt;/autoCountEnabled&gt;&#13;&#10;                      &lt;gatewayAddress type=&quot;String&quot;&gt;152.16.100.10&lt;/gatewayAddress&gt;&#13;&#10;                      &lt;gatewayIncrement type=&quot;String&quot;&gt;0.0.0.0&lt;/gatewayIncrement&gt;&#13;&#10;                      &lt;gatewayIncrementMode type=&quot;String&quot;&gt;perSubnet&lt;/gatewayIncrementMode&gt;&#13;&#10;                      &lt;enableGatewayArp type=&quot;Bool&quot;&gt;0&lt;/enableGatewayArp&gt;&#13;&#10;                      &lt;generateStatistics type=&quot;Bool&quot;&gt;0&lt;/generateStatistics&gt;&#13;&#10;                      &lt;mss type=&quot;Int&quot;&gt;1460&lt;/mss&gt;&#13;&#10;                      &lt;randomizeAddress type=&quot;Bool&quot;&gt;0&lt;/randomizeAddress&gt;&#13;&#10;                      &lt;randomizeSeed type=&quot;Int&quot;&gt;2596329041&lt;/randomizeSeed&gt;&#13;&#10;                      &lt;autoMacGeneration type=&quot;Bool&quot;&gt;1&lt;/autoMacGeneration&gt;&#13;&#10;                      &lt;macRange type=&quot;Ixia.Aptixia.StackManager.MacRange&quot; objectid=&quot;3011c8a8-a9fd-4b76-a27d-91948113ed4f&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;                      &lt;vlanRange type=&quot;Ixia.Aptixia.StackManager.VlanIdRange&quot; objectid=&quot;adb27552-7165-46a3-bc9e-04914adf40ac&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;                      &lt;atmRange type=&quot;Ixia.Aptixia.StackManager.AtmRange&quot; objectid=&quot;00000000-0000-0000-0000-000000000000&quot; /&gt;&#13;&#10;                      &lt;pvcRange type=&quot;Ixia.Aptixia.StackManager.PvcRange&quot; objectid=&quot;00000000-0000-0000-0000-000000000000&quot; /&gt;&#13;&#10;                      &lt;autoIpTypeEnabled type=&quot;Bool&quot;&gt;0&lt;/autoIpTypeEnabled&gt;&#13;&#10;                      &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;                    &lt;/Ixia.Aptixia.StackManager.IpV4V6Range&gt;&#13;&#10;                  &lt;/rangeList&gt;&#13;&#10;                  &lt;rangeGroups type=&quot;ListNode&quot;&gt;&#13;&#10;                    &lt;Ixia.Aptixia.StackManager.RangeGroup type=&quot;Ixia.Aptixia.StackManager.RangeGroup&quot; objectid=&quot;aa33a76b-9c7f-48d9-a537-8d6eeec03662&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;                      &lt;name type=&quot;String&quot;&gt;DistGroup1&lt;/name&gt;&#13;&#10;                      &lt;distribType type=&quot;Ixia.Aptixia.StackManager.RangeGroupSkeleton+eDistributionType&quot;&gt;0&lt;/distribType&gt;&#13;&#10;                      &lt;rangeList type=&quot;ListNode&quot;&gt;&#13;&#10;                        &lt;Ixia.Aptixia.StackManager.IpV4V6Range type=&quot;Ixia.Aptixia.StackManager.IpV4V6Range&quot; objectid=&quot;a3559674-8d95-4020-90b3-b42eacaef105&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;                      &lt;/rangeList&gt;&#13;&#10;                    &lt;/Ixia.Aptixia.StackManager.RangeGroup&gt;&#13;&#10;                  &lt;/rangeGroups&gt;&#13;&#10;                  &lt;childrenList type=&quot;ListNode&quot; /&gt;&#13;&#10;                  &lt;extensionList type=&quot;ListNode&quot; /&gt;&#13;&#10;                  &lt;dscMode type=&quot;Bool&quot;&gt;0&lt;/dscMode&gt;&#13;&#10;                  &lt;name type=&quot;String&quot;&gt;IP-1&lt;/name&gt;&#13;&#10;                  &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;                &lt;/Ixia.Aptixia.StackManager.IpV4V6Plugin&gt;&#13;&#10;              &lt;/childrenList&gt;&#13;&#10;              &lt;extensionList type=&quot;ListNode&quot; /&gt;&#13;&#10;              &lt;dscMode type=&quot;Bool&quot;&gt;0&lt;/dscMode&gt;&#13;&#10;              &lt;name type=&quot;String&quot;&gt;MAC/VLAN-1&lt;/name&gt;&#13;&#10;              &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;            &lt;/Ixia.Aptixia.StackManager.L2EthernetPlugin&gt;&#13;&#10;          &lt;/childrenList&gt;&#13;&#10;          &lt;extensionList type=&quot;ListNode&quot; /&gt;&#13;&#10;          &lt;dscMode type=&quot;Bool&quot;&gt;0&lt;/dscMode&gt;&#13;&#10;          &lt;name type=&quot;String&quot;&gt;Ethernet-1&lt;/name&gt;&#13;&#10;          &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;        &lt;/stack&gt;&#13;&#10;        &lt;globalPluginList type=&quot;ListNode&quot;&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.IxLoadSettingsPlugin type=&quot;Ixia.Aptixia.StackManager.IxLoadSettingsPlugin&quot; objectid=&quot;9c6c8594-548e-4ea5-a478-0bfb6252c1ce&quot; version=&quot;1.0.0&quot;&gt;&#13;&#10;            &lt;teardownInterfaceWithUser type=&quot;Bool&quot;&gt;0&lt;/teardownInterfaceWithUser&gt;&#13;&#10;            &lt;interfaceBehavior type=&quot;Int&quot;&gt;0&lt;/interfaceBehavior&gt;&#13;&#10;            &lt;name type=&quot;String&quot;&gt;Settings-2&lt;/name&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.IxLoadSettingsPlugin&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.DnsPlugin type=&quot;Ixia.Aptixia.StackManager.DnsPlugin&quot; objectid=&quot;693c7b7b-327b-4d59-b187-57d7600308e3&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;domain type=&quot;String&quot; /&gt;&#13;&#10;            &lt;timeout type=&quot;Int&quot;&gt;30000&lt;/timeout&gt;&#13;&#10;            &lt;nameServerList type=&quot;ListNode&quot; /&gt;&#13;&#10;            &lt;searchList type=&quot;ListNode&quot; /&gt;&#13;&#10;            &lt;hostList type=&quot;ListNode&quot; /&gt;&#13;&#10;            &lt;name type=&quot;String&quot;&gt;DNS-2&lt;/name&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.DnsPlugin&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.FilterPlugin type=&quot;Ixia.Aptixia.StackManager.FilterPlugin&quot; objectid=&quot;0f6ebdb4-7909-447a-b80a-e132dae33a9b&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;auto type=&quot;Bool&quot;&gt;1&lt;/auto&gt;&#13;&#10;            &lt;all type=&quot;Bool&quot;&gt;0&lt;/all&gt;&#13;&#10;            &lt;pppoecontrol type=&quot;Bool&quot;&gt;0&lt;/pppoecontrol&gt;&#13;&#10;            &lt;pppoenetwork type=&quot;Bool&quot;&gt;0&lt;/pppoenetwork&gt;&#13;&#10;            &lt;isis type=&quot;Bool&quot;&gt;0&lt;/isis&gt;&#13;&#10;            &lt;ip type=&quot;String&quot; /&gt;&#13;&#10;            &lt;tcp type=&quot;String&quot; /&gt;&#13;&#10;            &lt;udp type=&quot;String&quot; /&gt;&#13;&#10;            &lt;mac type=&quot;String&quot; /&gt;&#13;&#10;            &lt;icmp type=&quot;String&quot; /&gt;&#13;&#10;            &lt;name type=&quot;String&quot;&gt;Filter-1&lt;/name&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.FilterPlugin&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.TCPPlugin type=&quot;Ixia.Aptixia.StackManager.TCPPlugin&quot; objectid=&quot;7a893f25-0ac6-41c7-ab5a-511c2068582a&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;bestPerfSettings type=&quot;Bool&quot;&gt;0&lt;/bestPerfSettings&gt;&#13;&#10;            &lt;accept_ra_all type=&quot;Bool&quot;&gt;0&lt;/accept_ra_all&gt;&#13;&#10;            &lt;tcp_abort_on_overflow type=&quot;Bool&quot;&gt;0&lt;/tcp_abort_on_overflow&gt;&#13;&#10;            &lt;tcp_adv_win_scale type=&quot;Int&quot;&gt;2&lt;/tcp_adv_win_scale&gt;&#13;&#10;            &lt;tcp_app_win type=&quot;Int&quot;&gt;31&lt;/tcp_app_win&gt;&#13;&#10;            &lt;tcp_bic type=&quot;Int&quot;&gt;0&lt;/tcp_bic&gt;&#13;&#10;            &lt;tcp_bic_fast_convergence type=&quot;Int&quot;&gt;1&lt;/tcp_bic_fast_convergence&gt;&#13;&#10;            &lt;tcp_bic_low_window type=&quot;Int&quot;&gt;14&lt;/tcp_bic_low_window&gt;&#13;&#10;            &lt;tcp_dsack type=&quot;Bool&quot;&gt;1&lt;/tcp_dsack&gt;&#13;&#10;            &lt;tcp_ecn type=&quot;Bool&quot;&gt;0&lt;/tcp_ecn&gt;&#13;&#10;            &lt;tcp_fack type=&quot;Bool&quot;&gt;1&lt;/tcp_fack&gt;&#13;&#10;            &lt;tcp_fin_timeout type=&quot;Int&quot;&gt;60&lt;/tcp_fin_timeout&gt;&#13;&#10;            &lt;tcp_frto type=&quot;Int&quot;&gt;0&lt;/tcp_frto&gt;&#13;&#10;            &lt;tcp_keepalive_intvl type=&quot;Int&quot;&gt;7200&lt;/tcp_keepalive_intvl&gt;&#13;&#10;            &lt;tcp_keepalive_probes type=&quot;Int&quot;&gt;75&lt;/tcp_keepalive_probes&gt;&#13;&#10;            &lt;tcp_keepalive_time type=&quot;Int&quot;&gt;9&lt;/tcp_keepalive_time&gt;&#13;&#10;            &lt;tcp_low_latency type=&quot;Int&quot;&gt;0&lt;/tcp_low_latency&gt;&#13;&#10;            &lt;tcp_max_orphans type=&quot;Int&quot;&gt;8192&lt;/tcp_max_orphans&gt;&#13;&#10;            &lt;tcp_max_syn_backlog type=&quot;Int&quot;&gt;1024&lt;/tcp_max_syn_backlog&gt;&#13;&#10;            &lt;tcp_max_tw_buckets type=&quot;Int&quot;&gt;180000&lt;/tcp_max_tw_buckets&gt;&#13;&#10;            &lt;tcp_mem_low type=&quot;Int&quot;&gt;24576&lt;/tcp_mem_low&gt;&#13;&#10;            &lt;tcp_mem_pressure type=&quot;Int&quot;&gt;32768&lt;/tcp_mem_pressure&gt;&#13;&#10;            &lt;tcp_mem_high type=&quot;Int&quot;&gt;49152&lt;/tcp_mem_high&gt;&#13;&#10;            &lt;tcp_moderate_rcvbuf type=&quot;Int&quot;&gt;0&lt;/tcp_moderate_rcvbuf&gt;&#13;&#10;            &lt;tcp_no_metrics_save type=&quot;Bool&quot;&gt;0&lt;/tcp_no_metrics_save&gt;&#13;&#10;            &lt;tcp_orphan_retries type=&quot;Int&quot;&gt;0&lt;/tcp_orphan_retries&gt;&#13;&#10;            &lt;tcp_reordering type=&quot;Int&quot;&gt;3&lt;/tcp_reordering&gt;&#13;&#10;            &lt;tcp_retrans_collapse type=&quot;Bool&quot;&gt;1&lt;/tcp_retrans_collapse&gt;&#13;&#10;            &lt;tcp_retries1 type=&quot;Int&quot;&gt;3&lt;/tcp_retries1&gt;&#13;&#10;            &lt;tcp_retries2 type=&quot;Int&quot;&gt;15&lt;/tcp_retries2&gt;&#13;&#10;            &lt;tcp_rfc1337 type=&quot;Bool&quot;&gt;0&lt;/tcp_rfc1337&gt;&#13;&#10;            &lt;tcp_rmem_min type=&quot;Int&quot;&gt;4096&lt;/tcp_rmem_min&gt;&#13;&#10;            &lt;tcp_rmem_default type=&quot;Int&quot;&gt;1024&lt;/tcp_rmem_default&gt;&#13;&#10;            &lt;tcp_rmem_max type=&quot;Int&quot;&gt;262144&lt;/tcp_rmem_max&gt;&#13;&#10;            &lt;tcp_sack type=&quot;Bool&quot;&gt;1&lt;/tcp_sack&gt;&#13;&#10;            &lt;tcp_stdurg type=&quot;Bool&quot;&gt;0&lt;/tcp_stdurg&gt;&#13;&#10;            &lt;tcp_synack_retries type=&quot;Int&quot;&gt;5&lt;/tcp_synack_retries&gt;&#13;&#10;            &lt;tcp_syn_retries type=&quot;Int&quot;&gt;5&lt;/tcp_syn_retries&gt;&#13;&#10;            &lt;tcp_timestamps type=&quot;Bool&quot;&gt;1&lt;/tcp_timestamps&gt;&#13;&#10;            &lt;tcp_tw_recycle type=&quot;Bool&quot;&gt;1&lt;/tcp_tw_recycle&gt;&#13;&#10;            &lt;tcp_tw_reuse type=&quot;Bool&quot;&gt;0&lt;/tcp_tw_reuse&gt;&#13;&#10;            &lt;tcp_vegas_alpha type=&quot;Int&quot;&gt;2&lt;/tcp_vegas_alpha&gt;&#13;&#10;            &lt;tcp_vegas_beta type=&quot;Int&quot;&gt;6&lt;/tcp_vegas_beta&gt;&#13;&#10;            &lt;tcp_vegas_cong_avoid type=&quot;Int&quot;&gt;0&lt;/tcp_vegas_cong_avoid&gt;&#13;&#10;            &lt;tcp_vegas_gamma type=&quot;Int&quot;&gt;2&lt;/tcp_vegas_gamma&gt;&#13;&#10;            &lt;tcp_westwood type=&quot;Int&quot;&gt;0&lt;/tcp_westwood&gt;&#13;&#10;            &lt;tcp_window_scaling type=&quot;Bool&quot;&gt;0&lt;/tcp_window_scaling&gt;&#13;&#10;            &lt;ip_no_pmtu_disc type=&quot;Bool&quot;&gt;1&lt;/ip_no_pmtu_disc&gt;&#13;&#10;            &lt;tcp_wmem_min type=&quot;Int&quot;&gt;4096&lt;/tcp_wmem_min&gt;&#13;&#10;            &lt;tcp_wmem_default type=&quot;Int&quot;&gt;1024&lt;/tcp_wmem_default&gt;&#13;&#10;            &lt;tcp_wmem_max type=&quot;Int&quot;&gt;262144&lt;/tcp_wmem_max&gt;&#13;&#10;            &lt;tcp_ipfrag_time type=&quot;Int&quot;&gt;30&lt;/tcp_ipfrag_time&gt;&#13;&#10;            &lt;tcp_port_min type=&quot;Int&quot;&gt;1024&lt;/tcp_port_min&gt;&#13;&#10;            &lt;tcp_port_max type=&quot;Int&quot;&gt;65535&lt;/tcp_port_max&gt;&#13;&#10;            &lt;tcp_rto_min type=&quot;Int&quot;&gt;1000&lt;/tcp_rto_min&gt;&#13;&#10;            &lt;tcp_rto_max type=&quot;Int&quot;&gt;120000&lt;/tcp_rto_max&gt;&#13;&#10;            &lt;tcp_tw_rfc1323_strict type=&quot;Bool&quot;&gt;0&lt;/tcp_tw_rfc1323_strict&gt;&#13;&#10;            &lt;udp_port_randomization type=&quot;Bool&quot;&gt;0&lt;/udp_port_randomization&gt;&#13;&#10;            &lt;disable_min_max_buffer_size type=&quot;Bool&quot;&gt;1&lt;/disable_min_max_buffer_size&gt;&#13;&#10;            &lt;llm_hdr_gap type=&quot;Int&quot;&gt;8&lt;/llm_hdr_gap&gt;&#13;&#10;            &lt;llm_hdr_gap_ns type=&quot;Int&quot;&gt;10&lt;/llm_hdr_gap_ns&gt;&#13;&#10;            &lt;inter_packet_granular_delay type=&quot;Double&quot;&gt;0&lt;/inter_packet_granular_delay&gt;&#13;&#10;            &lt;delayed_acks type=&quot;Bool&quot;&gt;1&lt;/delayed_acks&gt;&#13;&#10;            &lt;accept_ra_default type=&quot;Bool&quot;&gt;0&lt;/accept_ra_default&gt;&#13;&#10;            &lt;rps_needed type=&quot;Bool&quot;&gt;0&lt;/rps_needed&gt;&#13;&#10;            &lt;delayed_acks_segments type=&quot;Int&quot;&gt;0&lt;/delayed_acks_segments&gt;&#13;&#10;            &lt;delayed_acks_timeout type=&quot;Int&quot;&gt;0&lt;/delayed_acks_timeout&gt;&#13;&#10;            &lt;tcp_large_icwnd type=&quot;Int&quot;&gt;0&lt;/tcp_large_icwnd&gt;&#13;&#10;            &lt;tcp_mgmt_rmem type=&quot;Int&quot;&gt;87380&lt;/tcp_mgmt_rmem&gt;&#13;&#10;            &lt;tcp_mgmt_wmem type=&quot;Int&quot;&gt;32768&lt;/tcp_mgmt_wmem&gt;&#13;&#10;            &lt;adjust_tcp_buffers type=&quot;Bool&quot;&gt;1&lt;/adjust_tcp_buffers&gt;&#13;&#10;            &lt;name type=&quot;String&quot;&gt;TCP-2&lt;/name&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.TCPPlugin&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.GratArpPlugin type=&quot;Ixia.Aptixia.StackManager.GratArpPlugin&quot; objectid=&quot;fc54eec4-41ef-4b6c-9415-bf639013b52d&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;enabled type=&quot;Bool&quot;&gt;1&lt;/enabled&gt;&#13;&#10;            &lt;forwardGratArp type=&quot;Bool&quot;&gt;0&lt;/forwardGratArp&gt;&#13;&#10;            &lt;rateControlEnabled type=&quot;Bool&quot;&gt;0&lt;/rateControlEnabled&gt;&#13;&#10;            &lt;maxFramesPerSecond type=&quot;Int&quot;&gt;0&lt;/maxFramesPerSecond&gt;&#13;&#10;            &lt;name type=&quot;String&quot;&gt;GratARP-1&lt;/name&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.GratArpPlugin&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.MeshingPlugin type=&quot;Ixia.Aptixia.StackManager.MeshingPlugin&quot; objectid=&quot;b0ccbeae-9db2-4416-bbed-80dcb2a7a9ed&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;trafficMaps type=&quot;ListNode&quot;&gt;&#13;&#10;              &lt;Ixia.Aptixia.StackManager.MeshingTrafficMap type=&quot;Ixia.Aptixia.StackManager.MeshingTrafficMap&quot; objectid=&quot;ea086372-6f3e-4867-932d-bfa5aff92921&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;                &lt;name type=&quot;String&quot;&gt;newClientActivity1!HTTP server_newServerActivity1&lt;/name&gt;&#13;&#10;                &lt;configMapFilename type=&quot;String&quot;&gt;newClientActivity1Script.configmap&lt;/configMapFilename&gt;&#13;&#10;                &lt;sourceActivityId type=&quot;Int&quot;&gt;0&lt;/sourceActivityId&gt;&#13;&#10;                &lt;ipPreference type=&quot;Ixia.Aptixia.StackManager.MeshingTrafficMapSkeleton+eIpPreference&quot;&gt;2&lt;/ipPreference&gt;&#13;&#10;                &lt;portRangesString type=&quot;String&quot; /&gt;&#13;&#10;                &lt;meshingType type=&quot;Ixia.Aptixia.StackManager.MeshingTrafficMapSkeleton+eMeshingType&quot;&gt;2&lt;/meshingType&gt;&#13;&#10;                &lt;destinationActivityId type=&quot;Int&quot;&gt;0&lt;/destinationActivityId&gt;&#13;&#10;              &lt;/Ixia.Aptixia.StackManager.MeshingTrafficMap&gt;&#13;&#10;            &lt;/trafficMaps&gt;&#13;&#10;            &lt;activityRangeMapInfoList type=&quot;ListNode&quot; /&gt;&#13;&#10;            &lt;name type=&quot;String&quot;&gt;Meshing-2&lt;/name&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.MeshingPlugin&gt;&#13;&#10;        &lt;/globalPluginList&gt;&#13;&#10;        &lt;portList type=&quot;StringList&quot;&gt;&#13;&#10;          &lt;String&gt;10.223.166.127;2;5&lt;/String&gt;&#13;&#10;        &lt;/portList&gt;&#13;&#10;        &lt;typeSpecificData type=&quot;ListNode&quot;&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.IPSecPortGroupData type=&quot;Ixia.Aptixia.StackManager.IPSecPortGroupData&quot; objectid=&quot;df783f7c-615e-47c1-b7f0-1174985ea22e&quot; version=&quot;8.1.7&quot;&gt;&#13;&#10;            &lt;role type=&quot;String&quot;&gt;Initiator&lt;/role&gt;&#13;&#10;            &lt;associates type=&quot;ListNode&quot; /&gt;&#13;&#10;            &lt;overrideGlobalOptions type=&quot;Bool&quot;&gt;0&lt;/overrideGlobalOptions&gt;&#13;&#10;            &lt;useMaxInitiationRate type=&quot;Bool&quot;&gt;0&lt;/useMaxInitiationRate&gt;&#13;&#10;            &lt;maxInitiationRate type=&quot;Int&quot;&gt;50&lt;/maxInitiationRate&gt;&#13;&#10;            &lt;useMaxPendingTunnels type=&quot;Bool&quot;&gt;0&lt;/useMaxPendingTunnels&gt;&#13;&#10;            &lt;maxPendingTunnels type=&quot;Int&quot;&gt;50&lt;/maxPendingTunnels&gt;&#13;&#10;            &lt;teardownRate type=&quot;Int&quot;&gt;10&lt;/teardownRate&gt;&#13;&#10;            &lt;enableESPPerStreamStats type=&quot;Bool&quot;&gt;0&lt;/enableESPPerStreamStats&gt;&#13;&#10;            &lt;enableESPReplayStats type=&quot;Bool&quot;&gt;0&lt;/enableESPReplayStats&gt;&#13;&#10;            &lt;activities type=&quot;ListNode&quot; /&gt;&#13;&#10;            &lt;pcpuLogLevel type=&quot;String&quot;&gt;0&lt;/pcpuLogLevel&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.IPSecPortGroupData&gt;&#13;&#10;        &lt;/typeSpecificData&gt;&#13;&#10;        &lt;virtualMode type=&quot;Bool&quot;&gt;0&lt;/virtualMode&gt;&#13;&#10;        &lt;allowedVirtualModeTypes type=&quot;StringList&quot; /&gt;&#13;&#10;        &lt;doOwnership type=&quot;Bool&quot;&gt;0&lt;/doOwnership&gt;&#13;&#10;        &lt;branchToNicMap type=&quot;ListNode&quot; /&gt;&#13;&#10;        &lt;cpuAggregation type=&quot;Bool&quot;&gt;0&lt;/cpuAggregation&gt;&#13;&#10;        &lt;activePort type=&quot;String&quot; /&gt;&#13;&#10;        &lt;networkLayersManager type=&quot;Ixia.Aptixia.StackManager.NetworkLayersManager&quot; objectid=&quot;3d3cf9ef-8aab-4388-9252-4baea80122d3&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;        &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;      &lt;/Ixia.Aptixia.StackManager.PortGroup&gt;&#13;&#10;      &lt;Ixia.Aptixia.StackManager.PortGroup type=&quot;Ixia.Aptixia.StackManager.PortGroup&quot; objectid=&quot;c4ecfc60-64ac-4dc2-9410-e0f58d84f229&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;        &lt;name type=&quot;String&quot;&gt;server network&lt;/name&gt;&#13;&#10;        &lt;category type=&quot;String&quot; /&gt;&#13;&#10;        &lt;stack type=&quot;Ixia.Aptixia.StackManager.L1EthernetPlugin&quot; objectid=&quot;1bd9f1bc-9959-464e-b1e8-ddb0bb4d0181&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;autoNegotiate type=&quot;Bool&quot;&gt;1&lt;/autoNegotiate&gt;&#13;&#10;          &lt;speed type=&quot;String&quot;&gt;k100FD&lt;/speed&gt;&#13;&#10;          &lt;advertise10Half type=&quot;Bool&quot;&gt;1&lt;/advertise10Half&gt;&#13;&#10;          &lt;advertise10Full type=&quot;Bool&quot;&gt;1&lt;/advertise10Full&gt;&#13;&#10;          &lt;advertise100Half type=&quot;Bool&quot;&gt;1&lt;/advertise100Half&gt;&#13;&#10;          &lt;advertise100Full type=&quot;Bool&quot;&gt;1&lt;/advertise100Full&gt;&#13;&#10;          &lt;advertise1000Full type=&quot;Bool&quot;&gt;1&lt;/advertise1000Full&gt;&#13;&#10;          &lt;cardDualPhy type=&quot;Ixia.Aptixia.StackManager.DualPhyPlugin&quot; objectid=&quot;4fe8412b-7d4c-4ebe-a0d4-480a4401b3d0&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;medium type=&quot;String&quot;&gt;auto&lt;/medium&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;4&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/cardDualPhy&gt;&#13;&#10;          &lt;cardElm type=&quot;Ixia.Aptixia.StackManager.EthernetELMPlugin&quot; objectid=&quot;4dfec118-30e8-4494-b7c7-e28518e7848a&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;negotiateMasterSlave type=&quot;Bool&quot;&gt;1&lt;/negotiateMasterSlave&gt;&#13;&#10;            &lt;negotiationType type=&quot;String&quot;&gt;master&lt;/negotiationType&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;4&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/cardElm&gt;&#13;&#10;          &lt;enableFlowControl type=&quot;Bool&quot;&gt;0&lt;/enableFlowControl&gt;&#13;&#10;          &lt;directedAddress type=&quot;String&quot;&gt;01:80:C2:00:00:01&lt;/directedAddress&gt;&#13;&#10;          &lt;dataCenter type=&quot;Ixia.Aptixia.StackManager.DataCenterSettings&quot; objectid=&quot;123fecc5-cb5e-43e9-92a1-b053dc56d0f3&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;dcSupported type=&quot;Bool&quot;&gt;1&lt;/dcSupported&gt;&#13;&#10;            &lt;dcEnabled type=&quot;Bool&quot;&gt;0&lt;/dcEnabled&gt;&#13;&#10;            &lt;dcFlowControl type=&quot;Ixia.Aptixia.StackManager.DataCenterSettingsSkeleton+eFlowControlType&quot;&gt;0&lt;/dcFlowControl&gt;&#13;&#10;            &lt;dcMode type=&quot;Ixia.Aptixia.StackManager.DataCenterSettingsSkeleton+eDataCenterMode&quot;&gt;2&lt;/dcMode&gt;&#13;&#10;            &lt;dcPfcMapping type=&quot;IntList&quot; /&gt;&#13;&#10;            &lt;dcPfcPauseEnable type=&quot;Bool&quot;&gt;0&lt;/dcPfcPauseEnable&gt;&#13;&#10;            &lt;dcPfcPauseDelay type=&quot;Int&quot;&gt;1&lt;/dcPfcPauseDelay&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;4&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/dataCenter&gt;&#13;&#10;          &lt;childrenList type=&quot;ListNode&quot;&gt;&#13;&#10;            &lt;Ixia.Aptixia.StackManager.L2EthernetPlugin type=&quot;Ixia.Aptixia.StackManager.L2EthernetPlugin&quot; objectid=&quot;35ff711b-53f7-4c74-9e8b-98d35adaa6bf&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;              &lt;macRangeList type=&quot;ListNode&quot;&gt;&#13;&#10;                &lt;Ixia.Aptixia.StackManager.MacRange type=&quot;Ixia.Aptixia.StackManager.MacRange&quot; objectid=&quot;f91c9f52-8150-4d0f-b657-498ed241835c&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;                  &lt;enabled type=&quot;Bool&quot;&gt;1&lt;/enabled&gt;&#13;&#10;                  &lt;name type=&quot;String&quot;&gt;MAC-R2&lt;/name&gt;&#13;&#10;                  &lt;mac type=&quot;String&quot;&gt;00:98:28:28:14:00&lt;/mac&gt;&#13;&#10;                  &lt;incrementBy type=&quot;String&quot;&gt;00:00:00:00:00:01&lt;/incrementBy&gt;&#13;&#10;                  &lt;mtu type=&quot;Int&quot;&gt;1500&lt;/mtu&gt;&#13;&#10;                  &lt;count type=&quot;Int&quot;&gt;1&lt;/count&gt;&#13;&#10;                  &lt;vlanRange type=&quot;Ixia.Aptixia.StackManager.VlanIdRange&quot; objectid=&quot;57fa3f41-7695-42d7-ac26-68924bb1e8bb&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;                    &lt;name type=&quot;String&quot;&gt;VLAN-R2&lt;/name&gt;&#13;&#10;                    &lt;enabled type=&quot;Bool&quot;&gt;0&lt;/enabled&gt;&#13;&#10;                    &lt;firstId type=&quot;Int&quot;&gt;1&lt;/firstId&gt;&#13;&#10;                    &lt;incrementStep type=&quot;Int&quot;&gt;32&lt;/incrementStep&gt;&#13;&#10;                    &lt;increment type=&quot;Int&quot;&gt;1&lt;/increment&gt;&#13;&#10;                    &lt;uniqueCount type=&quot;Int&quot;&gt;4094&lt;/uniqueCount&gt;&#13;&#10;                    &lt;priority type=&quot;Int&quot;&gt;0&lt;/priority&gt;&#13;&#10;                    &lt;tpid type=&quot;String&quot;&gt;0x8100&lt;/tpid&gt;&#13;&#10;                    &lt;innerEnable type=&quot;Bool&quot;&gt;0&lt;/innerEnable&gt;&#13;&#10;                    &lt;innerFirstId type=&quot;Int&quot;&gt;1&lt;/innerFirstId&gt;&#13;&#10;                    &lt;innerIncrementStep type=&quot;Int&quot;&gt;1&lt;/innerIncrementStep&gt;&#13;&#10;                    &lt;innerIncrement type=&quot;Int&quot;&gt;1&lt;/innerIncrement&gt;&#13;&#10;                    &lt;innerUniqueCount type=&quot;Int&quot;&gt;4094&lt;/innerUniqueCount&gt;&#13;&#10;                    &lt;innerPriority type=&quot;Int&quot;&gt;0&lt;/innerPriority&gt;&#13;&#10;                    &lt;idIncrMode type=&quot;Int&quot;&gt;1&lt;/idIncrMode&gt;&#13;&#10;                    &lt;innerTpid type=&quot;String&quot;&gt;0x8100&lt;/innerTpid&gt;&#13;&#10;                    &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;                  &lt;/vlanRange&gt;&#13;&#10;                  &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;                &lt;/Ixia.Aptixia.StackManager.MacRange&gt;&#13;&#10;              &lt;/macRangeList&gt;&#13;&#10;              &lt;vlanRangeList type=&quot;ListNode&quot;&gt;&#13;&#10;                &lt;Ixia.Aptixia.StackManager.VlanIdRange type=&quot;Ixia.Aptixia.StackManager.VlanIdRange&quot; objectid=&quot;57fa3f41-7695-42d7-ac26-68924bb1e8bb&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;              &lt;/vlanRangeList&gt;&#13;&#10;              &lt;childrenList type=&quot;ListNode&quot;&gt;&#13;&#10;                &lt;Ixia.Aptixia.StackManager.IpV4V6Plugin type=&quot;Ixia.Aptixia.StackManager.IpV4V6Plugin&quot; objectid=&quot;b85b184d-9bb4-48c2-a029-e633fee7a3c8&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;                  &lt;rangeList type=&quot;ListNode&quot;&gt;&#13;&#10;                    &lt;Ixia.Aptixia.StackManager.IpV4V6Range type=&quot;Ixia.Aptixia.StackManager.IpV4V6Range&quot; objectid=&quot;1d9bf537-0c3d-4fdf-9b85-0a622cc77649&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;                      &lt;enabled type=&quot;Bool&quot;&gt;1&lt;/enabled&gt;&#13;&#10;                      &lt;name type=&quot;String&quot;&gt;IP-R2&lt;/name&gt;&#13;&#10;                      &lt;ipType type=&quot;String&quot;&gt;IPv4&lt;/ipType&gt;&#13;&#10;                      &lt;ipAddress type=&quot;String&quot;&gt;152.40.40.20&lt;/ipAddress&gt;&#13;&#10;                      &lt;prefix type=&quot;Int&quot;&gt;24&lt;/prefix&gt;&#13;&#10;                      &lt;incrementBy type=&quot;String&quot;&gt;0.0.0.1&lt;/incrementBy&gt;&#13;&#10;                      &lt;count type=&quot;Int&quot;&gt;1&lt;/count&gt;&#13;&#10;                      &lt;autoCountEnabled type=&quot;Bool&quot;&gt;0&lt;/autoCountEnabled&gt;&#13;&#10;                      &lt;gatewayAddress type=&quot;String&quot;&gt;152.40.40.10&lt;/gatewayAddress&gt;&#13;&#10;                      &lt;gatewayIncrement type=&quot;String&quot;&gt;0.0.0.0&lt;/gatewayIncrement&gt;&#13;&#10;                      &lt;gatewayIncrementMode type=&quot;String&quot;&gt;perSubnet&lt;/gatewayIncrementMode&gt;&#13;&#10;                      &lt;enableGatewayArp type=&quot;Bool&quot;&gt;0&lt;/enableGatewayArp&gt;&#13;&#10;                      &lt;generateStatistics type=&quot;Bool&quot;&gt;0&lt;/generateStatistics&gt;&#13;&#10;                      &lt;mss type=&quot;Int&quot;&gt;1460&lt;/mss&gt;&#13;&#10;                      &lt;randomizeAddress type=&quot;Bool&quot;&gt;0&lt;/randomizeAddress&gt;&#13;&#10;                      &lt;randomizeSeed type=&quot;Int&quot;&gt;463911585&lt;/randomizeSeed&gt;&#13;&#10;                      &lt;autoMacGeneration type=&quot;Bool&quot;&gt;1&lt;/autoMacGeneration&gt;&#13;&#10;                      &lt;macRange type=&quot;Ixia.Aptixia.StackManager.MacRange&quot; objectid=&quot;f91c9f52-8150-4d0f-b657-498ed241835c&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;                      &lt;vlanRange type=&quot;Ixia.Aptixia.StackManager.VlanIdRange&quot; objectid=&quot;57fa3f41-7695-42d7-ac26-68924bb1e8bb&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;                      &lt;atmRange type=&quot;Ixia.Aptixia.StackManager.AtmRange&quot; objectid=&quot;00000000-0000-0000-0000-000000000000&quot; /&gt;&#13;&#10;                      &lt;pvcRange type=&quot;Ixia.Aptixia.StackManager.PvcRange&quot; objectid=&quot;00000000-0000-0000-0000-000000000000&quot; /&gt;&#13;&#10;                      &lt;autoIpTypeEnabled type=&quot;Bool&quot;&gt;0&lt;/autoIpTypeEnabled&gt;&#13;&#10;                      &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;                    &lt;/Ixia.Aptixia.StackManager.IpV4V6Range&gt;&#13;&#10;                  &lt;/rangeList&gt;&#13;&#10;                  &lt;rangeGroups type=&quot;ListNode&quot;&gt;&#13;&#10;                    &lt;Ixia.Aptixia.StackManager.RangeGroup type=&quot;Ixia.Aptixia.StackManager.RangeGroup&quot; objectid=&quot;b2c21c73-bfe3-4fbc-9804-b5a8b307d893&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;                      &lt;name type=&quot;String&quot;&gt;DistGroup1&lt;/name&gt;&#13;&#10;                      &lt;distribType type=&quot;Ixia.Aptixia.StackManager.RangeGroupSkeleton+eDistributionType&quot;&gt;0&lt;/distribType&gt;&#13;&#10;                      &lt;rangeList type=&quot;ListNode&quot;&gt;&#13;&#10;                        &lt;Ixia.Aptixia.StackManager.IpV4V6Range type=&quot;Ixia.Aptixia.StackManager.IpV4V6Range&quot; objectid=&quot;1d9bf537-0c3d-4fdf-9b85-0a622cc77649&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;                      &lt;/rangeList&gt;&#13;&#10;                    &lt;/Ixia.Aptixia.StackManager.RangeGroup&gt;&#13;&#10;                  &lt;/rangeGroups&gt;&#13;&#10;                  &lt;childrenList type=&quot;ListNode&quot; /&gt;&#13;&#10;                  &lt;extensionList type=&quot;ListNode&quot; /&gt;&#13;&#10;                  &lt;dscMode type=&quot;Bool&quot;&gt;0&lt;/dscMode&gt;&#13;&#10;                  &lt;name type=&quot;String&quot;&gt;IP-2&lt;/name&gt;&#13;&#10;                  &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;                &lt;/Ixia.Aptixia.StackManager.IpV4V6Plugin&gt;&#13;&#10;              &lt;/childrenList&gt;&#13;&#10;              &lt;extensionList type=&quot;ListNode&quot; /&gt;&#13;&#10;              &lt;dscMode type=&quot;Bool&quot;&gt;0&lt;/dscMode&gt;&#13;&#10;              &lt;name type=&quot;String&quot;&gt;MAC/VLAN-2&lt;/name&gt;&#13;&#10;              &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;            &lt;/Ixia.Aptixia.StackManager.L2EthernetPlugin&gt;&#13;&#10;          &lt;/childrenList&gt;&#13;&#10;          &lt;extensionList type=&quot;ListNode&quot; /&gt;&#13;&#10;          &lt;dscMode type=&quot;Bool&quot;&gt;0&lt;/dscMode&gt;&#13;&#10;          &lt;name type=&quot;String&quot;&gt;Ethernet-2&lt;/name&gt;&#13;&#10;          &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;        &lt;/stack&gt;&#13;&#10;        &lt;globalPluginList type=&quot;ListNode&quot;&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.IxLoadSettingsPlugin type=&quot;Ixia.Aptixia.StackManager.IxLoadSettingsPlugin&quot; objectid=&quot;993e33c6-e1f7-4967-982e-82a032f8c61a&quot; version=&quot;1.0.0&quot;&gt;&#13;&#10;            &lt;teardownInterfaceWithUser type=&quot;Bool&quot;&gt;0&lt;/teardownInterfaceWithUser&gt;&#13;&#10;            &lt;interfaceBehavior type=&quot;Int&quot;&gt;0&lt;/interfaceBehavior&gt;&#13;&#10;            &lt;name type=&quot;String&quot;&gt;Settings-4&lt;/name&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.IxLoadSettingsPlugin&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.DnsPlugin type=&quot;Ixia.Aptixia.StackManager.DnsPlugin&quot; objectid=&quot;36ca84d7-ff44-45b7-b75d-aec38b753161&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;domain type=&quot;String&quot; /&gt;&#13;&#10;            &lt;timeout type=&quot;Int&quot;&gt;30000&lt;/timeout&gt;&#13;&#10;            &lt;nameServerList type=&quot;ListNode&quot; /&gt;&#13;&#10;            &lt;searchList type=&quot;ListNode&quot; /&gt;&#13;&#10;            &lt;hostList type=&quot;ListNode&quot; /&gt;&#13;&#10;            &lt;name type=&quot;String&quot;&gt;DNS-4&lt;/name&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.DnsPlugin&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.FilterPlugin type=&quot;Ixia.Aptixia.StackManager.FilterPlugin&quot; objectid=&quot;25c5acdd-9dd3-4802-93b6-b10651820b66&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;auto type=&quot;Bool&quot;&gt;1&lt;/auto&gt;&#13;&#10;            &lt;all type=&quot;Bool&quot;&gt;0&lt;/all&gt;&#13;&#10;            &lt;pppoecontrol type=&quot;Bool&quot;&gt;0&lt;/pppoecontrol&gt;&#13;&#10;            &lt;pppoenetwork type=&quot;Bool&quot;&gt;0&lt;/pppoenetwork&gt;&#13;&#10;            &lt;isis type=&quot;Bool&quot;&gt;0&lt;/isis&gt;&#13;&#10;            &lt;ip type=&quot;String&quot; /&gt;&#13;&#10;            &lt;tcp type=&quot;String&quot; /&gt;&#13;&#10;            &lt;udp type=&quot;String&quot; /&gt;&#13;&#10;            &lt;mac type=&quot;String&quot; /&gt;&#13;&#10;            &lt;icmp type=&quot;String&quot; /&gt;&#13;&#10;            &lt;name type=&quot;String&quot;&gt;Filter-2&lt;/name&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.FilterPlugin&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.TCPPlugin type=&quot;Ixia.Aptixia.StackManager.TCPPlugin&quot; objectid=&quot;6259328b-97c2-4390-8ab1-f16bf3459219&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;bestPerfSettings type=&quot;Bool&quot;&gt;0&lt;/bestPerfSettings&gt;&#13;&#10;            &lt;accept_ra_all type=&quot;Bool&quot;&gt;0&lt;/accept_ra_all&gt;&#13;&#10;            &lt;tcp_abort_on_overflow type=&quot;Bool&quot;&gt;0&lt;/tcp_abort_on_overflow&gt;&#13;&#10;            &lt;tcp_adv_win_scale type=&quot;Int&quot;&gt;2&lt;/tcp_adv_win_scale&gt;&#13;&#10;            &lt;tcp_app_win type=&quot;Int&quot;&gt;31&lt;/tcp_app_win&gt;&#13;&#10;            &lt;tcp_bic type=&quot;Int&quot;&gt;0&lt;/tcp_bic&gt;&#13;&#10;            &lt;tcp_bic_fast_convergence type=&quot;Int&quot;&gt;1&lt;/tcp_bic_fast_convergence&gt;&#13;&#10;            &lt;tcp_bic_low_window type=&quot;Int&quot;&gt;14&lt;/tcp_bic_low_window&gt;&#13;&#10;            &lt;tcp_dsack type=&quot;Bool&quot;&gt;1&lt;/tcp_dsack&gt;&#13;&#10;            &lt;tcp_ecn type=&quot;Bool&quot;&gt;0&lt;/tcp_ecn&gt;&#13;&#10;            &lt;tcp_fack type=&quot;Bool&quot;&gt;1&lt;/tcp_fack&gt;&#13;&#10;            &lt;tcp_fin_timeout type=&quot;Int&quot;&gt;60&lt;/tcp_fin_timeout&gt;&#13;&#10;            &lt;tcp_frto type=&quot;Int&quot;&gt;0&lt;/tcp_frto&gt;&#13;&#10;            &lt;tcp_keepalive_intvl type=&quot;Int&quot;&gt;7200&lt;/tcp_keepalive_intvl&gt;&#13;&#10;            &lt;tcp_keepalive_probes type=&quot;Int&quot;&gt;75&lt;/tcp_keepalive_probes&gt;&#13;&#10;            &lt;tcp_keepalive_time type=&quot;Int&quot;&gt;9&lt;/tcp_keepalive_time&gt;&#13;&#10;            &lt;tcp_low_latency type=&quot;Int&quot;&gt;0&lt;/tcp_low_latency&gt;&#13;&#10;            &lt;tcp_max_orphans type=&quot;Int&quot;&gt;8192&lt;/tcp_max_orphans&gt;&#13;&#10;            &lt;tcp_max_syn_backlog type=&quot;Int&quot;&gt;1024&lt;/tcp_max_syn_backlog&gt;&#13;&#10;            &lt;tcp_max_tw_buckets type=&quot;Int&quot;&gt;180000&lt;/tcp_max_tw_buckets&gt;&#13;&#10;            &lt;tcp_mem_low type=&quot;Int&quot;&gt;24576&lt;/tcp_mem_low&gt;&#13;&#10;            &lt;tcp_mem_pressure type=&quot;Int&quot;&gt;32768&lt;/tcp_mem_pressure&gt;&#13;&#10;            &lt;tcp_mem_high type=&quot;Int&quot;&gt;49152&lt;/tcp_mem_high&gt;&#13;&#10;            &lt;tcp_moderate_rcvbuf type=&quot;Int&quot;&gt;0&lt;/tcp_moderate_rcvbuf&gt;&#13;&#10;            &lt;tcp_no_metrics_save type=&quot;Bool&quot;&gt;0&lt;/tcp_no_metrics_save&gt;&#13;&#10;            &lt;tcp_orphan_retries type=&quot;Int&quot;&gt;0&lt;/tcp_orphan_retries&gt;&#13;&#10;            &lt;tcp_reordering type=&quot;Int&quot;&gt;3&lt;/tcp_reordering&gt;&#13;&#10;            &lt;tcp_retrans_collapse type=&quot;Bool&quot;&gt;1&lt;/tcp_retrans_collapse&gt;&#13;&#10;            &lt;tcp_retries1 type=&quot;Int&quot;&gt;3&lt;/tcp_retries1&gt;&#13;&#10;            &lt;tcp_retries2 type=&quot;Int&quot;&gt;15&lt;/tcp_retries2&gt;&#13;&#10;            &lt;tcp_rfc1337 type=&quot;Bool&quot;&gt;0&lt;/tcp_rfc1337&gt;&#13;&#10;            &lt;tcp_rmem_min type=&quot;Int&quot;&gt;4096&lt;/tcp_rmem_min&gt;&#13;&#10;            &lt;tcp_rmem_default type=&quot;Int&quot;&gt;1024&lt;/tcp_rmem_default&gt;&#13;&#10;            &lt;tcp_rmem_max type=&quot;Int&quot;&gt;262144&lt;/tcp_rmem_max&gt;&#13;&#10;            &lt;tcp_sack type=&quot;Bool&quot;&gt;1&lt;/tcp_sack&gt;&#13;&#10;            &lt;tcp_stdurg type=&quot;Bool&quot;&gt;0&lt;/tcp_stdurg&gt;&#13;&#10;            &lt;tcp_synack_retries type=&quot;Int&quot;&gt;5&lt;/tcp_synack_retries&gt;&#13;&#10;            &lt;tcp_syn_retries type=&quot;Int&quot;&gt;5&lt;/tcp_syn_retries&gt;&#13;&#10;            &lt;tcp_timestamps type=&quot;Bool&quot;&gt;1&lt;/tcp_timestamps&gt;&#13;&#10;            &lt;tcp_tw_recycle type=&quot;Bool&quot;&gt;1&lt;/tcp_tw_recycle&gt;&#13;&#10;            &lt;tcp_tw_reuse type=&quot;Bool&quot;&gt;0&lt;/tcp_tw_reuse&gt;&#13;&#10;            &lt;tcp_vegas_alpha type=&quot;Int&quot;&gt;2&lt;/tcp_vegas_alpha&gt;&#13;&#10;            &lt;tcp_vegas_beta type=&quot;Int&quot;&gt;6&lt;/tcp_vegas_beta&gt;&#13;&#10;            &lt;tcp_vegas_cong_avoid type=&quot;Int&quot;&gt;0&lt;/tcp_vegas_cong_avoid&gt;&#13;&#10;            &lt;tcp_vegas_gamma type=&quot;Int&quot;&gt;2&lt;/tcp_vegas_gamma&gt;&#13;&#10;            &lt;tcp_westwood type=&quot;Int&quot;&gt;0&lt;/tcp_westwood&gt;&#13;&#10;            &lt;tcp_window_scaling type=&quot;Bool&quot;&gt;0&lt;/tcp_window_scaling&gt;&#13;&#10;            &lt;ip_no_pmtu_disc type=&quot;Bool&quot;&gt;1&lt;/ip_no_pmtu_disc&gt;&#13;&#10;            &lt;tcp_wmem_min type=&quot;Int&quot;&gt;4096&lt;/tcp_wmem_min&gt;&#13;&#10;            &lt;tcp_wmem_default type=&quot;Int&quot;&gt;1024&lt;/tcp_wmem_default&gt;&#13;&#10;            &lt;tcp_wmem_max type=&quot;Int&quot;&gt;262144&lt;/tcp_wmem_max&gt;&#13;&#10;            &lt;tcp_ipfrag_time type=&quot;Int&quot;&gt;30&lt;/tcp_ipfrag_time&gt;&#13;&#10;            &lt;tcp_port_min type=&quot;Int&quot;&gt;1024&lt;/tcp_port_min&gt;&#13;&#10;            &lt;tcp_port_max type=&quot;Int&quot;&gt;65535&lt;/tcp_port_max&gt;&#13;&#10;            &lt;tcp_rto_min type=&quot;Int&quot;&gt;1000&lt;/tcp_rto_min&gt;&#13;&#10;            &lt;tcp_rto_max type=&quot;Int&quot;&gt;120000&lt;/tcp_rto_max&gt;&#13;&#10;            &lt;tcp_tw_rfc1323_strict type=&quot;Bool&quot;&gt;0&lt;/tcp_tw_rfc1323_strict&gt;&#13;&#10;            &lt;udp_port_randomization type=&quot;Bool&quot;&gt;0&lt;/udp_port_randomization&gt;&#13;&#10;            &lt;disable_min_max_buffer_size type=&quot;Bool&quot;&gt;1&lt;/disable_min_max_buffer_size&gt;&#13;&#10;            &lt;llm_hdr_gap type=&quot;Int&quot;&gt;8&lt;/llm_hdr_gap&gt;&#13;&#10;            &lt;llm_hdr_gap_ns type=&quot;Int&quot;&gt;10&lt;/llm_hdr_gap_ns&gt;&#13;&#10;            &lt;inter_packet_granular_delay type=&quot;Double&quot;&gt;0&lt;/inter_packet_granular_delay&gt;&#13;&#10;            &lt;delayed_acks type=&quot;Bool&quot;&gt;1&lt;/delayed_acks&gt;&#13;&#10;            &lt;accept_ra_default type=&quot;Bool&quot;&gt;0&lt;/accept_ra_default&gt;&#13;&#10;            &lt;rps_needed type=&quot;Bool&quot;&gt;0&lt;/rps_needed&gt;&#13;&#10;            &lt;delayed_acks_segments type=&quot;Int&quot;&gt;0&lt;/delayed_acks_segments&gt;&#13;&#10;            &lt;delayed_acks_timeout type=&quot;Int&quot;&gt;0&lt;/delayed_acks_timeout&gt;&#13;&#10;            &lt;tcp_large_icwnd type=&quot;Int&quot;&gt;0&lt;/tcp_large_icwnd&gt;&#13;&#10;            &lt;tcp_mgmt_rmem type=&quot;Int&quot;&gt;87380&lt;/tcp_mgmt_rmem&gt;&#13;&#10;            &lt;tcp_mgmt_wmem type=&quot;Int&quot;&gt;32768&lt;/tcp_mgmt_wmem&gt;&#13;&#10;            &lt;adjust_tcp_buffers type=&quot;Bool&quot;&gt;1&lt;/adjust_tcp_buffers&gt;&#13;&#10;            &lt;name type=&quot;String&quot;&gt;TCP-4&lt;/name&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.TCPPlugin&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.GratArpPlugin type=&quot;Ixia.Aptixia.StackManager.GratArpPlugin&quot; objectid=&quot;3eedf749-efa4-43a0-87ae-e110a77c88d4&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;enabled type=&quot;Bool&quot;&gt;1&lt;/enabled&gt;&#13;&#10;            &lt;forwardGratArp type=&quot;Bool&quot;&gt;0&lt;/forwardGratArp&gt;&#13;&#10;            &lt;rateControlEnabled type=&quot;Bool&quot;&gt;0&lt;/rateControlEnabled&gt;&#13;&#10;            &lt;maxFramesPerSecond type=&quot;Int&quot;&gt;0&lt;/maxFramesPerSecond&gt;&#13;&#10;            &lt;name type=&quot;String&quot;&gt;GratARP-2&lt;/name&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.GratArpPlugin&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.MeshingPlugin type=&quot;Ixia.Aptixia.StackManager.MeshingPlugin&quot; objectid=&quot;284f9992-65d8-4027-a155-709f1965f892&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;trafficMaps type=&quot;ListNode&quot; /&gt;&#13;&#10;            &lt;activityRangeMapInfoList type=&quot;ListNode&quot; /&gt;&#13;&#10;            &lt;name type=&quot;String&quot;&gt;Meshing-1&lt;/name&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.MeshingPlugin&gt;&#13;&#10;        &lt;/globalPluginList&gt;&#13;&#10;        &lt;portList type=&quot;StringList&quot;&gt;&#13;&#10;          &lt;String&gt;10.223.166.127;2;6&lt;/String&gt;&#13;&#10;        &lt;/portList&gt;&#13;&#10;        &lt;typeSpecificData type=&quot;ListNode&quot;&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.IPSecPortGroupData type=&quot;Ixia.Aptixia.StackManager.IPSecPortGroupData&quot; objectid=&quot;f65f12f2-018c-46f5-a9c5-a1f6f7151909&quot; version=&quot;8.1.7&quot;&gt;&#13;&#10;            &lt;role type=&quot;String&quot;&gt;Initiator&lt;/role&gt;&#13;&#10;            &lt;associates type=&quot;ListNode&quot; /&gt;&#13;&#10;            &lt;overrideGlobalOptions type=&quot;Bool&quot;&gt;0&lt;/overrideGlobalOptions&gt;&#13;&#10;            &lt;useMaxInitiationRate type=&quot;Bool&quot;&gt;0&lt;/useMaxInitiationRate&gt;&#13;&#10;            &lt;maxInitiationRate type=&quot;Int&quot;&gt;50&lt;/maxInitiationRate&gt;&#13;&#10;            &lt;useMaxPendingTunnels type=&quot;Bool&quot;&gt;0&lt;/useMaxPendingTunnels&gt;&#13;&#10;            &lt;maxPendingTunnels type=&quot;Int&quot;&gt;50&lt;/maxPendingTunnels&gt;&#13;&#10;            &lt;teardownRate type=&quot;Int&quot;&gt;10&lt;/teardownRate&gt;&#13;&#10;            &lt;enableESPPerStreamStats type=&quot;Bool&quot;&gt;0&lt;/enableESPPerStreamStats&gt;&#13;&#10;            &lt;enableESPReplayStats type=&quot;Bool&quot;&gt;0&lt;/enableESPReplayStats&gt;&#13;&#10;            &lt;activities type=&quot;ListNode&quot; /&gt;&#13;&#10;            &lt;pcpuLogLevel type=&quot;String&quot;&gt;0&lt;/pcpuLogLevel&gt;&#13;&#10;            &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.IPSecPortGroupData&gt;&#13;&#10;        &lt;/typeSpecificData&gt;&#13;&#10;        &lt;virtualMode type=&quot;Bool&quot;&gt;0&lt;/virtualMode&gt;&#13;&#10;        &lt;allowedVirtualModeTypes type=&quot;StringList&quot; /&gt;&#13;&#10;        &lt;doOwnership type=&quot;Bool&quot;&gt;0&lt;/doOwnership&gt;&#13;&#10;        &lt;branchToNicMap type=&quot;ListNode&quot; /&gt;&#13;&#10;        &lt;cpuAggregation type=&quot;Bool&quot;&gt;0&lt;/cpuAggregation&gt;&#13;&#10;        &lt;activePort type=&quot;String&quot; /&gt;&#13;&#10;        &lt;networkLayersManager type=&quot;Ixia.Aptixia.StackManager.NetworkLayersManager&quot; objectid=&quot;60b1273d-78d3-4813-8cea-ec9a7101b8a3&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;        &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;      &lt;/Ixia.Aptixia.StackManager.PortGroup&gt;&#13;&#10;    &lt;/portGroupList&gt;&#13;&#10;    &lt;externalProperties type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyManager&quot; objectid=&quot;1f2452bf-e52a-4db2-ba47-e5cc8bf61b5e&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;      &lt;properties type=&quot;ListNode&quot;&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;145671ff-93a5-4ecc-8c83-59b2c3c67be9&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;IxCatLTEUEUeRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;9f07a941-ad2f-46b0-8c75-911862a21039&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;SixRdRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;a221ab5c-faae-4940-bfad-5d41d44f1427&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;L2tpRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;d811442b-bfb8-42f0-bbf8-6bdb6fc9b66b&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;DHCPServerRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;f252cff3-b919-4e74-9f62-9e9c5ab5d324&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;MobileSubscribersRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;493ce043-b982-4a43-a2d4-619e51fbc5a6&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;IPSecRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;500dfc8b-2e6a-401f-84c0-f6907f60c00e&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;EGTPSgsnS3RangeUe&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;693cb176-f3d8-4073-8a02-fabdc0bdd3fb&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;EGTPRange_SGW&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;ec983bf9-07f0-46b2-99a0-354114f42501&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;EmulatedRouterRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;5d0f0eb8-40af-4292-8ff2-a57e7903601d&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;PppoxRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;653fae09-ba19-443c-8f8b-9483c0b86b9a&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;GTPNGAPRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;c886be8c-c207-4bb4-90d5-17be54556d58&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;IxCatRNCIuPSUeRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;00e75214-5166-406b-90e5-2b83567ae5cf&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;GTPNGUERange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;50d10ee7-45ce-46d2-ae8d-ecd3b1806067&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;EGTPUERange_S5S8_SGW&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;c2f310a4-6ea4-4459-be3b-f3b3365c590a&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;GTPGRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;7e458bed-5e36-42d6-812d-3794be52766e&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;EGTPPcrfRange_S5S8_PGW&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;7d225fda-6432-4de3-9750-c19bbc957703&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;DSLiteRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;e25dd669-ffc5-493d-a2b5-fd5627bf2ee8&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;EGTPSGSNRangeUe&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;7ac0b7d4-6df9-4e1f-86d2-f0a494b3f20b&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;SlaacRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;25699a2c-ab22-417b-9072-894523e98008&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;EGTPUERange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;05f1053a-5774-409f-b07e-add07df64338&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;PSTNDigitalRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;482a10c3-0ac7-44d9-9fa9-b43ba3a9901d&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;DHCPRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;a0f03753-923d-4421-8c4f-0ed78f00fc44&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;AtmRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;fb5cd68e-b4b0-4fd4-ae18-4100c0035642&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;IxCatMMEApnRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;62677b6a-080e-4cc3-919b-71fa90ae410f&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;IxCatENodeBUuApnRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;2e0fd6e3-470e-48df-ab8d-cc21b9d80393&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;GTPSUERange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;175f3104-0d2a-44f9-b712-fed3b170f8cb&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;IpV4V6Range&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;d1f37e1e-db44-4bac-acb8-b242dee8e371&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;MacRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;61ccdebc-84e6-464d-be14-2b3ddedab9d2&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;DualStackIPRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;d0678cd8-998e-42ab-8f0d-bfcb5370eac2&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;EGTPUERange_S2a_TWAN&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;d8350364-51c6-4a1b-af9f-72c9c235a636&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;IxCatSGSNIuPSApnRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;613d02a1-db1e-415d-b4bb-8b73b4477cf4&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;IxCatENodeBSimUeRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;9a41f718-b55e-44c7-a0cc-b1fcf8204c20&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;S6dRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;4c26fe62-a63d-4c40-8e15-c58ad8fba8d0&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;UERangeBase&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;5c2ca63f-3335-4ab7-963e-440817448538&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;EGTPMmeS10RangeUe&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;51a5eccc-a68d-4730-8a48-32019c547c28&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;S6aRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;3010c4ad-f31e-4676-9e61-bb25cf9c1bbb&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;BmScRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;ef1677e4-f390-4a78-b61a-f7650cf5faea&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;MBmsGwRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalPropertyInfo type=&quot;Ixia.Aptixia.StackManager.ExternalPropertyInfo&quot; objectid=&quot;24322b98-7a2a-4d2d-a4ee-4cde0f0e8b64&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;targetType type=&quot;String&quot;&gt;PptpRange&lt;/targetType&gt;&#13;&#10;          &lt;valueType type=&quot;String&quot;&gt;ExternalValueBoolean&lt;/valueType&gt;&#13;&#10;          &lt;description type=&quot;String&quot;&gt;Enable collection of interface statistics on this range&lt;/description&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalPropertyInfo&gt;&#13;&#10;      &lt;/properties&gt;&#13;&#10;      &lt;values type=&quot;ListNode&quot;&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalProperty type=&quot;Ixia.Aptixia.StackManager.ExternalProperty&quot; objectid=&quot;6804ae67-3bd7-471b-8796-ee1e4773c2f1&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;target type=&quot;Ixia.Aptixia.StackManager.IpV4V6Range&quot; objectid=&quot;a3559674-8d95-4020-90b3-b42eacaef105&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;          &lt;value type=&quot;Ixia.Aptixia.StackManager.ExternalValueBoolean&quot; objectid=&quot;7efcd429-2c48-41bd-bdc5-489dbfcfc49a&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;value type=&quot;Bool&quot;&gt;0&lt;/value&gt;&#13;&#10;          &lt;/value&gt;&#13;&#10;          &lt;enabled type=&quot;Bool&quot;&gt;1&lt;/enabled&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalProperty&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalProperty type=&quot;Ixia.Aptixia.StackManager.ExternalProperty&quot; objectid=&quot;a63d8276-65bc-4bc2-8202-6461c6399ef9&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;target type=&quot;Ixia.Aptixia.StackManager.IpV4V6Range&quot; objectid=&quot;1d9bf537-0c3d-4fdf-9b85-0a622cc77649&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;          &lt;value type=&quot;Ixia.Aptixia.StackManager.ExternalValueBoolean&quot; objectid=&quot;09d7b134-2921-4759-bbdb-ff3a5a1966d7&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;value type=&quot;Bool&quot;&gt;0&lt;/value&gt;&#13;&#10;          &lt;/value&gt;&#13;&#10;          &lt;enabled type=&quot;Bool&quot;&gt;1&lt;/enabled&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalProperty&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalProperty type=&quot;Ixia.Aptixia.StackManager.ExternalProperty&quot; objectid=&quot;0cd9f099-242e-4b03-965f-d343c60181e6&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;target type=&quot;Ixia.Aptixia.StackManager.MacRange&quot; objectid=&quot;3011c8a8-a9fd-4b76-a27d-91948113ed4f&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;          &lt;value type=&quot;Ixia.Aptixia.StackManager.ExternalValueBoolean&quot; objectid=&quot;503aa008-2481-419f-a223-c90b2c25c17e&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;value type=&quot;Bool&quot;&gt;0&lt;/value&gt;&#13;&#10;          &lt;/value&gt;&#13;&#10;          &lt;enabled type=&quot;Bool&quot;&gt;0&lt;/enabled&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalProperty&gt;&#13;&#10;        &lt;Ixia.Aptixia.StackManager.ExternalProperty type=&quot;Ixia.Aptixia.StackManager.ExternalProperty&quot; objectid=&quot;0b8d2c01-19ac-4f28-924e-660676d978da&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;          &lt;propertyName type=&quot;String&quot;&gt;Publish Statistics&lt;/propertyName&gt;&#13;&#10;          &lt;target type=&quot;Ixia.Aptixia.StackManager.MacRange&quot; objectid=&quot;f91c9f52-8150-4d0f-b657-498ed241835c&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;          &lt;value type=&quot;Ixia.Aptixia.StackManager.ExternalValueBoolean&quot; objectid=&quot;41c694b3-bb55-48fe-9604-8b003540242f&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;            &lt;value type=&quot;Bool&quot;&gt;0&lt;/value&gt;&#13;&#10;          &lt;/value&gt;&#13;&#10;          &lt;enabled type=&quot;Bool&quot;&gt;0&lt;/enabled&gt;&#13;&#10;        &lt;/Ixia.Aptixia.StackManager.ExternalProperty&gt;&#13;&#10;      &lt;/values&gt;&#13;&#10;    &lt;/externalProperties&gt;&#13;&#10;    &lt;availableNetworkTimelines type=&quot;ListNode&quot; /&gt;&#13;&#10;    &lt;typeSpecificData type=&quot;ListNode&quot;&gt;&#13;&#10;      &lt;Ixia.Aptixia.StackManager.MacSessionData type=&quot;Ixia.Aptixia.StackManager.MacSessionData&quot; objectid=&quot;a9c7aa59-e015-4ffd-bb82-5d877ae9c1a8&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;        &lt;duplicateCheckingScope type=&quot;Ixia.Aptixia.StackManager.MacSessionDataSkeleton+eMacValidationOptions&quot;&gt;2&lt;/duplicateCheckingScope&gt;&#13;&#10;        &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;      &lt;/Ixia.Aptixia.StackManager.MacSessionData&gt;&#13;&#10;      &lt;Ixia.Aptixia.StackManager.IpSessionData type=&quot;Ixia.Aptixia.StackManager.IpSessionData&quot; objectid=&quot;34a78d72-1fc5-4875-9fe1-b4db66b1b4c4&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;        &lt;duplicateCheckingScope type=&quot;Ixia.Aptixia.StackManager.IpSessionDataSkeleton+eIpValidationOptions&quot;&gt;2&lt;/duplicateCheckingScope&gt;&#13;&#10;        &lt;enableGatewayArp type=&quot;Bool&quot;&gt;0&lt;/enableGatewayArp&gt;&#13;&#10;        &lt;gatewayArpRequestRate type=&quot;Int&quot;&gt;300&lt;/gatewayArpRequestRate&gt;&#13;&#10;        &lt;maxOutstandingGatewayArpRequests type=&quot;Int&quot;&gt;300&lt;/maxOutstandingGatewayArpRequests&gt;&#13;&#10;        &lt;ignoreUnresolvedIPs type=&quot;Bool&quot;&gt;0&lt;/ignoreUnresolvedIPs&gt;&#13;&#10;        &lt;sendAllRequests type=&quot;Bool&quot;&gt;0&lt;/sendAllRequests&gt;&#13;&#10;        &lt;individualARPTimeOut type=&quot;Int&quot;&gt;500&lt;/individualARPTimeOut&gt;&#13;&#10;        &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;2&lt;/ixLoadRestObjectId&gt;&#13;&#10;      &lt;/Ixia.Aptixia.StackManager.IpSessionData&gt;&#13;&#10;      &lt;Ixia.Aptixia.StackManager.IxLoadSessionData type=&quot;Ixia.Aptixia.StackManager.IxLoadSessionData&quot; objectid=&quot;1e24447f-69f1-4030-8b2d-25a18c7160ca&quot; version=&quot;1.0.0&quot;&gt;&#13;&#10;        &lt;portGroupList type=&quot;ListNode&quot;&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.PortGroup type=&quot;Ixia.Aptixia.StackManager.PortGroup&quot; objectid=&quot;865be042-32d5-426a-9e75-0908c943801f&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.PortGroup type=&quot;Ixia.Aptixia.StackManager.PortGroup&quot; objectid=&quot;c4ecfc60-64ac-4dc2-9410-e0f58d84f229&quot; version=&quot;6.70.420&quot; /&gt;&#13;&#10;        &lt;/portGroupList&gt;&#13;&#10;        &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;      &lt;/Ixia.Aptixia.StackManager.IxLoadSessionData&gt;&#13;&#10;      &lt;Ixia.Aptixia.StackManager.ImpairSessionData type=&quot;Ixia.Aptixia.StackManager.ImpairSessionData&quot; objectid=&quot;94b53c2c-0747-41c2-838d-0e0e15f31766&quot; version=&quot;6.70.13&quot;&gt;&#13;&#10;        &lt;profiles type=&quot;ListNode&quot;&gt;&#13;&#10;          &lt;Ixia.Aptixia.StackManager.ImpairProfile type=&quot;Ixia.Aptixia.StackManager.ImpairProfile&quot; objectid=&quot;90dd3511-93c1-49fa-8e38-db774db9fe17&quot; version=&quot;6.70.13&quot;&gt;&#13;&#10;            &lt;name type=&quot;String&quot;&gt;DefaultProfile&lt;/name&gt;&#13;&#10;            &lt;defaultp type=&quot;Bool&quot;&gt;1&lt;/defaultp&gt;&#13;&#10;            &lt;seed type=&quot;Int&quot;&gt;0&lt;/seed&gt;&#13;&#10;            &lt;addDelay type=&quot;Bool&quot;&gt;1&lt;/addDelay&gt;&#13;&#10;            &lt;delay type=&quot;Int&quot;&gt;20&lt;/delay&gt;&#13;&#10;            &lt;jitter type=&quot;Int&quot;&gt;0&lt;/jitter&gt;&#13;&#10;            &lt;addDrop type=&quot;Bool&quot;&gt;0&lt;/addDrop&gt;&#13;&#10;            &lt;drop type=&quot;Double&quot;&gt;10&lt;/drop&gt;&#13;&#10;            &lt;addDropSequence type=&quot;Bool&quot;&gt;0&lt;/addDropSequence&gt;&#13;&#10;            &lt;dropSequenceSkip type=&quot;Int&quot;&gt;10&lt;/dropSequenceSkip&gt;&#13;&#10;            &lt;dropSequenceLength type=&quot;Int&quot;&gt;1&lt;/dropSequenceLength&gt;&#13;&#10;            &lt;addReorder type=&quot;Bool&quot;&gt;0&lt;/addReorder&gt;&#13;&#10;            &lt;gap type=&quot;Int&quot;&gt;10&lt;/gap&gt;&#13;&#10;            &lt;reorder type=&quot;Int&quot;&gt;20&lt;/reorder&gt;&#13;&#10;            &lt;reorderLength type=&quot;Int&quot;&gt;1&lt;/reorderLength&gt;&#13;&#10;            &lt;addReorderPI type=&quot;Bool&quot;&gt;0&lt;/addReorderPI&gt;&#13;&#10;            &lt;reorderPISkip type=&quot;Int&quot;&gt;10&lt;/reorderPISkip&gt;&#13;&#10;            &lt;reorderPILength type=&quot;Int&quot;&gt;1&lt;/reorderPILength&gt;&#13;&#10;            &lt;reorderPIInterval type=&quot;Int&quot;&gt;1&lt;/reorderPIInterval&gt;&#13;&#10;            &lt;reorderPITimeout type=&quot;Int&quot;&gt;1000&lt;/reorderPITimeout&gt;&#13;&#10;            &lt;addDuplicate type=&quot;Bool&quot;&gt;0&lt;/addDuplicate&gt;&#13;&#10;            &lt;duplicate type=&quot;Double&quot;&gt;10&lt;/duplicate&gt;&#13;&#10;            &lt;addFragment type=&quot;Bool&quot;&gt;0&lt;/addFragment&gt;&#13;&#10;            &lt;fragment type=&quot;Double&quot;&gt;10&lt;/fragment&gt;&#13;&#10;            &lt;mtu type=&quot;Int&quot;&gt;1000&lt;/mtu&gt;&#13;&#10;            &lt;addFragmentSequence type=&quot;Bool&quot;&gt;0&lt;/addFragmentSequence&gt;&#13;&#10;            &lt;fragmentSequenceSkip type=&quot;Int&quot;&gt;10&lt;/fragmentSequenceSkip&gt;&#13;&#10;            &lt;fragmentSequenceLength type=&quot;Int&quot;&gt;1&lt;/fragmentSequenceLength&gt;&#13;&#10;            &lt;mtuSequence type=&quot;Int&quot;&gt;1000&lt;/mtuSequence&gt;&#13;&#10;            &lt;sendFragmentsInReverseOrder type=&quot;Bool&quot;&gt;0&lt;/sendFragmentsInReverseOrder&gt;&#13;&#10;            &lt;sendFirstFragmentOnly type=&quot;Bool&quot;&gt;0&lt;/sendFirstFragmentOnly&gt;&#13;&#10;            &lt;sendOverlappingFragments type=&quot;Bool&quot;&gt;0&lt;/sendOverlappingFragments&gt;&#13;&#10;            &lt;addBandwidth type=&quot;Bool&quot;&gt;0&lt;/addBandwidth&gt;&#13;&#10;            &lt;bandwidth type=&quot;Double&quot;&gt;1&lt;/bandwidth&gt;&#13;&#10;            &lt;bandwidthUnits type=&quot;String&quot;&gt;mbps&lt;/bandwidthUnits&gt;&#13;&#10;            &lt;addBandwidthIn type=&quot;Bool&quot;&gt;0&lt;/addBandwidthIn&gt;&#13;&#10;            &lt;bandwidthIn type=&quot;Double&quot;&gt;1&lt;/bandwidthIn&gt;&#13;&#10;            &lt;bandwidthUnitsIn type=&quot;String&quot;&gt;mbps&lt;/bandwidthUnitsIn&gt;&#13;&#10;            &lt;destinationIp type=&quot;String&quot;&gt;any&lt;/destinationIp&gt;&#13;&#10;            &lt;sourceIp type=&quot;String&quot;&gt;any&lt;/sourceIp&gt;&#13;&#10;            &lt;sourcePort type=&quot;Int&quot;&gt;0&lt;/sourcePort&gt;&#13;&#10;            &lt;destinationPort type=&quot;Int&quot;&gt;0&lt;/destinationPort&gt;&#13;&#10;            &lt;protocol type=&quot;String&quot;&gt;any&lt;/protocol&gt;&#13;&#10;            &lt;typeOfService type=&quot;String&quot;&gt;any&lt;/typeOfService&gt;&#13;&#10;            &lt;addTcpFlagsFilter type=&quot;Bool&quot;&gt;0&lt;/addTcpFlagsFilter&gt;&#13;&#10;            &lt;selectTcpFlags type=&quot;String&quot;&gt;SYN;RST;ACK&lt;/selectTcpFlags&gt;&#13;&#10;            &lt;expectTcpFlags type=&quot;String&quot;&gt;SYN&lt;/expectTcpFlags&gt;&#13;&#10;            &lt;impairOrder type=&quot;String&quot;&gt;Delay;Drop;DropSeq;Reorder;ReorderPI;Duplicate;Fragment;FragmentSeq;Bandwidth&lt;/impairOrder&gt;&#13;&#10;          &lt;/Ixia.Aptixia.StackManager.ImpairProfile&gt;&#13;&#10;        &lt;/profiles&gt;&#13;&#10;        &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;      &lt;/Ixia.Aptixia.StackManager.ImpairSessionData&gt;&#13;&#10;      &lt;Ixia.Aptixia.StackManager.IPSecSessionData type=&quot;Ixia.Aptixia.StackManager.IPSecSessionData&quot; objectid=&quot;bd2f0ea4-4278-49c8-9600-18cd2c8ed639&quot; version=&quot;8.1.7&quot;&gt;&#13;&#10;        &lt;ipsecTunnelSetup type=&quot;Ixia.Aptixia.StackManager.IPSecTunnelSetup&quot; objectid=&quot;1bacc8a0-dda0-4e0c-b013-4d8618dc80b6&quot; version=&quot;8.1.7&quot;&gt;&#13;&#10;          &lt;tunnelSetupTimeout type=&quot;Int&quot;&gt;30&lt;/tunnelSetupTimeout&gt;&#13;&#10;          &lt;tunnelRetransmissionTimeout type=&quot;Int&quot;&gt;30&lt;/tunnelRetransmissionTimeout&gt;&#13;&#10;          &lt;numRetries type=&quot;Int&quot;&gt;0&lt;/numRetries&gt;&#13;&#10;          &lt;retryInterval type=&quot;Int&quot;&gt;10&lt;/retryInterval&gt;&#13;&#10;          &lt;retryDelay type=&quot;Int&quot;&gt;10&lt;/retryDelay&gt;&#13;&#10;          &lt;testType type=&quot;String&quot;&gt;P2D&lt;/testType&gt;&#13;&#10;          &lt;sendCiscoVid type=&quot;Bool&quot;&gt;0&lt;/sendCiscoVid&gt;&#13;&#10;          &lt;useMaxInitiationRate type=&quot;Bool&quot;&gt;0&lt;/useMaxInitiationRate&gt;&#13;&#10;          &lt;useMaxPendingTunnels type=&quot;Bool&quot;&gt;0&lt;/useMaxPendingTunnels&gt;&#13;&#10;          &lt;enableRekey type=&quot;Bool&quot;&gt;1&lt;/enableRekey&gt;&#13;&#10;          &lt;rekeyRetries type=&quot;Int&quot;&gt;3&lt;/rekeyRetries&gt;&#13;&#10;          &lt;rekeyFuzzPercentage type=&quot;Int&quot;&gt;0&lt;/rekeyFuzzPercentage&gt;&#13;&#10;          &lt;rekeyMargin type=&quot;Int&quot;&gt;10&lt;/rekeyMargin&gt;&#13;&#10;        &lt;/ipsecTunnelSetup&gt;&#13;&#10;        &lt;ipsecCertificates type=&quot;Ixia.Aptixia.StackManager.IPSecCertificates&quot; objectid=&quot;2e324324-bf74-4ad3-afbb-62e44f01c31a&quot; version=&quot;8.1.7&quot;&gt;&#13;&#10;          &lt;uniqueCert type=&quot;Bool&quot;&gt;0&lt;/uniqueCert&gt;&#13;&#10;          &lt;certSource type=&quot;String&quot;&gt;kNewCert&lt;/certSource&gt;&#13;&#10;          &lt;caURL type=&quot;String&quot; /&gt;&#13;&#10;          &lt;caDN type=&quot;String&quot; /&gt;&#13;&#10;          &lt;certSubjectDN type=&quot;String&quot; /&gt;&#13;&#10;          &lt;certSubjectAltDN type=&quot;String&quot; /&gt;&#13;&#10;          &lt;remoteIkeId type=&quot;String&quot; /&gt;&#13;&#10;          &lt;bitSize type=&quot;String&quot;&gt;k512&lt;/bitSize&gt;&#13;&#10;          &lt;saveCert type=&quot;Bool&quot;&gt;1&lt;/saveCert&gt;&#13;&#10;          &lt;cacheCertFolder type=&quot;String&quot;&gt;C:\Program Files\Ixia\CachedCerts&lt;/cacheCertFolder&gt;&#13;&#10;          &lt;certParentFolder type=&quot;String&quot;&gt;C:\Program Files\Ixia\CachedCerts&lt;/certParentFolder&gt;&#13;&#10;          &lt;certNumber type=&quot;String&quot; /&gt;&#13;&#10;          &lt;caCertNumber type=&quot;String&quot; /&gt;&#13;&#10;          &lt;earlyExpDate type=&quot;String&quot; /&gt;&#13;&#10;          &lt;lateExpDate type=&quot;String&quot; /&gt;&#13;&#10;          &lt;usePerRangeCertNameExp type=&quot;Bool&quot;&gt;0&lt;/usePerRangeCertNameExp&gt;&#13;&#10;          &lt;checkCrl type=&quot;Bool&quot;&gt;0&lt;/checkCrl&gt;&#13;&#10;          &lt;crlOverrideEnable type=&quot;Bool&quot;&gt;0&lt;/crlOverrideEnable&gt;&#13;&#10;          &lt;crlOverrideUrl type=&quot;String&quot; /&gt;&#13;&#10;          &lt;checkOcsp type=&quot;Bool&quot;&gt;0&lt;/checkOcsp&gt;&#13;&#10;          &lt;ocspOverrideEnable type=&quot;Bool&quot;&gt;0&lt;/ocspOverrideEnable&gt;&#13;&#10;          &lt;ocspOverrideUrl type=&quot;String&quot; /&gt;&#13;&#10;          &lt;unknownIsRevoked type=&quot;Bool&quot;&gt;0&lt;/unknownIsRevoked&gt;&#13;&#10;          &lt;certProto type=&quot;String&quot;&gt;kSCEP&lt;/certProto&gt;&#13;&#10;        &lt;/ipsecCertificates&gt;&#13;&#10;        &lt;ipsecCertManager type=&quot;Ixia.Aptixia.StackManager.IPSecCertManager&quot; objectid=&quot;f3dc4ef0-e9a1-48a2-b69f-c5d2b485e897&quot; version=&quot;8.1.7&quot;&gt;&#13;&#10;          &lt;caURL type=&quot;String&quot; /&gt;&#13;&#10;          &lt;caDN type=&quot;String&quot;&gt;CN=RootCA,C=RO,L=Bucharest,O=Ixia,OU=IxLoad,IP:201.121.87.2,email:ixia@ixiacom.com&lt;/caDN&gt;&#13;&#10;          &lt;certSubjectDN type=&quot;String&quot;&gt;CN=IxiaVPN,C=RO,L=Bucharest,O=Ixia&lt;/certSubjectDN&gt;&#13;&#10;          &lt;keyGenAlgo type=&quot;String&quot;&gt;kRSA_512&lt;/keyGenAlgo&gt;&#13;&#10;          &lt;cacheCertFolder type=&quot;String&quot;&gt;C:\Program Files\Ixia\CachedCerts&lt;/cacheCertFolder&gt;&#13;&#10;          &lt;caKeyFile type=&quot;String&quot;&gt;C:\Program Files\Ixia\ca-priv.key&lt;/caKeyFile&gt;&#13;&#10;          &lt;caCrtFile type=&quot;String&quot;&gt;C:\Program Files\Ixia\ca-cert.crt&lt;/caCrtFile&gt;&#13;&#10;          &lt;certNumber type=&quot;Int&quot;&gt;1&lt;/certNumber&gt;&#13;&#10;          &lt;certProto type=&quot;String&quot;&gt;kSCEP&lt;/certProto&gt;&#13;&#10;          &lt;createRootCA type=&quot;Bool&quot;&gt;0&lt;/createRootCA&gt;&#13;&#10;          &lt;uniqueCert type=&quot;Bool&quot;&gt;0&lt;/uniqueCert&gt;&#13;&#10;          &lt;descFilePath type=&quot;String&quot;&gt;C:\Program Files\Ixia\CachedCerts\sample.desc&lt;/descFilePath&gt;&#13;&#10;          &lt;useDescFile type=&quot;Bool&quot;&gt;0&lt;/useDescFile&gt;&#13;&#10;        &lt;/ipsecCertManager&gt;&#13;&#10;        &lt;eapSimTuples type=&quot;ListNode&quot; /&gt;&#13;&#10;        &lt;eapAkaTuples type=&quot;ListNode&quot; /&gt;&#13;&#10;        &lt;maxInitiationRate type=&quot;Int&quot;&gt;50&lt;/maxInitiationRate&gt;&#13;&#10;        &lt;maxPendingTunnels type=&quot;Int&quot;&gt;50&lt;/maxPendingTunnels&gt;&#13;&#10;        &lt;negotiationStartDelay type=&quot;Int&quot;&gt;0&lt;/negotiationStartDelay&gt;&#13;&#10;        &lt;teardownRate type=&quot;Int&quot;&gt;10&lt;/teardownRate&gt;&#13;&#10;        &lt;burstInitiation type=&quot;Bool&quot;&gt;0&lt;/burstInitiation&gt;&#13;&#10;        &lt;parallelInitiation type=&quot;Bool&quot;&gt;0&lt;/parallelInitiation&gt;&#13;&#10;        &lt;enableExtraPortLogging type=&quot;Bool&quot;&gt;0&lt;/enableExtraPortLogging&gt;&#13;&#10;        &lt;enableWildcardTsi type=&quot;Bool&quot;&gt;0&lt;/enableWildcardTsi&gt;&#13;&#10;        &lt;enableWildcardTsr type=&quot;Bool&quot;&gt;0&lt;/enableWildcardTsr&gt;&#13;&#10;        &lt;enablePlutoWildcardTsi type=&quot;Bool&quot;&gt;0&lt;/enablePlutoWildcardTsi&gt;&#13;&#10;        &lt;enablePlutoModeCfgWildcardTsr type=&quot;Bool&quot;&gt;1&lt;/enablePlutoModeCfgWildcardTsr&gt;&#13;&#10;        &lt;enablePlutoS2SWildcardTsr type=&quot;Bool&quot;&gt;0&lt;/enablePlutoS2SWildcardTsr&gt;&#13;&#10;        &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;      &lt;/Ixia.Aptixia.StackManager.IPSecSessionData&gt;&#13;&#10;    &lt;/typeSpecificData&gt;&#13;&#10;    &lt;statViewManager type=&quot;Ixia.Aptixia.StackManager.StatViewManager&quot; objectid=&quot;7256ce27-286c-475d-b198-09b4ae306f73&quot; version=&quot;6.70.420&quot;&gt;&#13;&#10;      &lt;enableStats type=&quot;Bool&quot;&gt;1&lt;/enableStats&gt;&#13;&#10;      &lt;enableOverviewStats type=&quot;Bool&quot;&gt;1&lt;/enableOverviewStats&gt;&#13;&#10;      &lt;enablePerSessionStats type=&quot;Bool&quot;&gt;1&lt;/enablePerSessionStats&gt;&#13;&#10;    &lt;/statViewManager&gt;&#13;&#10;    &lt;waitForLinkUp type=&quot;Bool&quot;&gt;0&lt;/waitForLinkUp&gt;&#13;&#10;    &lt;overloadProtection type=&quot;Bool&quot;&gt;1&lt;/overloadProtection&gt;&#13;&#10;    &lt;ixLoadRestObjectId type=&quot;Int&quot;&gt;1&lt;/ixLoadRestObjectId&gt;&#13;&#10;  &lt;/Ixia.Aptixia.StackManager.SMSession&gt;&#13;&#10;&lt;/rpf&gt;</xml>
+ </_smSessionXml>
+ <_composerConfig ver="[0, [1, [0, [0]]]]" type="ixComposerConfig">
+  <xml type="str"></xml>
+ </_composerConfig>
+ <_quickTestConfig ver="[0, [1, [0, [0]]]]" type="ixQuickTestConfig">
+  <xml type="str">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&#13;&#10;&lt;Config&gt;&#13;&#10;  &lt;configs Version=&quot;5.0&quot; /&gt;&#13;&#10;&lt;/Config&gt;</xml>
+ </_quickTestConfig>
+ <lastApiUniqueId type="int">15481</lastApiUniqueId>
+ <version type="str">8.01.106.3</version>
+ <name type="str">HTTP-vACL_IPv4_2Ports.rxf</name>
+ <comment type="str"></comment>
+ <path type="str">C:\Users\ds1\Desktop\yardstick</path>
+ <last type="str">HTTP-vCGNAPT_IPv4_2Ports.rxf</last>
+ <activeTest type="str">Test1</activeTest>
+ <chassisChain ver="[2, [1, [0, [0]]]]" oid="3" type="ixChassisChain">
+  <chassisList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixChassisSequenceContainer" itemtype="ixChassis">
+   <item ver="[1, [1, [0, [0]]]]" oid="0" type="ixChassis">
+    <name type="str">10.223.166.127</name>
+    <id type="int">1</id>
+    <hiddenCards type="NoneType">None</hiddenCards>
+   </item>
+  </chassisList>
+  <_apiUniqueId type="int">12991</_apiUniqueId>
+  <chassisMap type="dict">
+   <item>
+    <key type="int">1</key>
+    <value ref="0"/>
+   </item>
+  </chassisMap>
+  <hiddenChassis type="NoneType">None</hiddenChassis>
+ </chassisChain>
+ <AfmPortPacketRewriteConfigList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixAfmPortPacketRewriteConfigList" itemtype="ixAfmPortPacketRewriteConfig"/>
+ <networkList ver="[0, [0, [1, [0, [3, [0, [0, [0], [0]], [0]]]]]]]" type="ixRepositoryNetworkList" itemtype="ixNullNetwork"/>
+ <dutList ver="[0, [0, [1, [0, [3, [0, [0, [0], [0]], [0]]]]]]]" type="ixDutList" itemtype="ixDut"/>
+ <trafficList ver="[0, [0, [1, [0, [3, [0, [0, [0], [0]], [0]]]]]]]" type="ixTrafficList" itemtype="ixActivityModel"/>
+ <testList ver="[0, [0, [1, [0, [3, [0, [0, [0], [0]], [0]]]]]]]" type="ixTestList" itemtype="ixTestEnvelope">
+  <item ver="[18, [1, [0, [0]]]]" type="ixTestEnvelope">
+   <name type="str">Test1</name>
+   <comment type="str"></comment>
+   <enableForceOwnership type="bool">False</enableForceOwnership>
+   <enableResetPorts type="bool">False</enableResetPorts>
+   <statsRequired type="int">1</statsRequired>
+   <enableConditionalView type="bool">False</enableConditionalView>
+   <conditionalViewType type="int">0</conditionalViewType>
+   <conditionalViewList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixConditionalViewList" itemtype="ixConditionalView"/>
+   <enableReleaseConfigAfterRun type="int">0</enableReleaseConfigAfterRun>
+   <csvInterval type="int">4</csvInterval>
+   <networkFailureThreshold type="int">0</networkFailureThreshold>
+   <captureViewOptions ver="[1, [1, [0, [0]]]]" oid="9" type="ixViewOptions">
+    <runMode type="int">1</runMode>
+    <collectScheme type="int">0</collectScheme>
+    <allocatedBufferMemoryPercentage type="long">30</allocatedBufferMemoryPercentage>
+    <captureRunAfter type="int">0</captureRunAfter>
+    <captureRunDuration type="int">0</captureRunDuration>
+    <_apiUniqueId type="int">12941</_apiUniqueId>
+   </captureViewOptions>
+   <scenarioList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixScenarioList" itemtype="ixScenario">
+    <item ver="[3, [1, [0, [0]]]]" type="ixScenario">
+     <name type="str">TrafficFlow1</name>
+     <columnList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixTrafficColumnList" itemtype="ixTrafficColumn">
+      <item ver="[0, [1, [0, [0]]]]" type="ixTrafficColumn">
+       <name type="str">Client</name>
+       <elementList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixScenarioElementList" itemtype="ixScenarioElement">
+       <item ver="[1, [22, [0, [1, [0, [0]]]]]]" oid="1" type="ixNetTraffic">
+        <name type="str">HTTP client@client network</name>
+        <column type="NoneType">None</column>
+        <scenarioElementType type="str">netTraffic</scenarioElementType>
+        <enable type="int">1</enable>
+        <role type="str">Client</role>
+        <networkType type="str">ethernet</networkType>
+        <activityFunction type="str">ipTrafficAgent</activityFunction>
+        <activeRole type="str">Client</activeRole>
+        <networkActivityList ver="[0, [0, [0, [3, [0, [0, [0], [0]], [0]]]]]]" type="ixNetworkActivityList" itemtype="ixNetworkActivity"/>
+        <activityGroupList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixActivityGroupList" itemtype="ixActivityGroup"/>
+        <traffic ver="[0, [6, [1, [0, [0]]]]]" type="ixTraffic">
+         <resourceSyncTimeStamp type="NoneType">None</resourceSyncTimeStamp>
+         <name type="str">HTTP client</name>
+         <role type="str">Client</role>
+         <activityFunction type="str">ipTrafficAgent</activityFunction>
+         <payload type="NoneType">None</payload>
+         <agentList ver="[2, [0, [0, [3, [0, [0, [0], [0]], [0]]]]]]" type="_agentListSequenceContainer" itemtype="ixAgent">
+          <item ver="[33, [0, [0, [0, [5, [1, [0, [0]]]]], [0, [0]]]], [5, [0, [0, [5, [1, [0, [0]]]]], [0, [0]]]]]" oid="15" type="HTTP_Client_plugin">
+           <enable type="int">1</enable>
+           <name type="str">newClientActivity1</name>
+           <activityFunction type="str">ipTrafficAgent</activityFunction>
+           <needToRefreshStatViews type="bool">False</needToRefreshStatViews>
+           <activeRole type="NoneType">None</activeRole>
+           <cmdListLoops type="int">0</cmdListLoops>
+           <cmdPercentagePool ver="[0, [1, [0, [0]]]]" type="ixCommandPercentagePool">
+            <seed type="int">1</seed>
+            <percentageCommandList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixCommandPercentageInfoList" itemtype="ixCommandPercentageInfo"/>
+            <_apiUniqueId type="int">12943</_apiUniqueId>
+           </cmdPercentagePool>
+           <sources ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixSourceList" itemtype="ixSource"/>
+           <destinations ver="[1, [3, [0, [0, [0], [0]], [0]]]]" type="ixDestinationList" itemtype="ixDestination">
+            <item ver="[0, [3, [1, [0, [0]]]]]" type="ixAgentDestination">
+             <name type="str">HTTP server_newServerActivity1</name>
+             <portMapPolicy type="str">portPairs</portMapPolicy>
+             <sameAs type="str"></sameAs>
+             <validPortMapPolicies type="list">
+              <item type="str">portPairs</item>
+              <item type="str">portMesh</item>
+              <item type="str">customMesh</item>
+             </validPortMapPolicies>
+             <inUse type="bool">True</inUse>
+             <customPortMap type="NoneType">None</customPortMap>
+             <sourceCommunity ref="1"/>
+             <destinationCommunity ver="[1, [22, [0, [1, [0, [0]]]]]]" oid="18" type="ixNetTraffic">
+              <name type="str">HTTP server@server network</name>
+              <column type="NoneType">None</column>
+              <scenarioElementType type="str">netTraffic</scenarioElementType>
+              <enable type="int">1</enable>
+              <role type="str">Server</role>
+              <networkType type="str">ethernet</networkType>
+              <activityFunction type="str">ipTrafficAgent</activityFunction>
+              <activeRole type="str">Server</activeRole>
+              <networkActivityList ver="[0, [0, [0, [3, [0, [0, [0], [0]], [0]]]]]]" type="ixNetworkActivityList" itemtype="ixNetworkActivity"/>
+              <activityGroupList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixActivityGroupList" itemtype="ixActivityGroup"/>
+              <traffic ver="[0, [6, [1, [0, [0]]]]]" type="ixTraffic">
+               <resourceSyncTimeStamp type="NoneType">None</resourceSyncTimeStamp>
+               <name type="str">HTTP server</name>
+               <role type="str">Server</role>
+               <activityFunction type="str">ipTrafficAgent</activityFunction>
+               <payload type="NoneType">None</payload>
+               <agentList ver="[2, [0, [0, [3, [0, [0, [0], [0]], [0]]]]]]" type="_agentListSequenceContainer" itemtype="ixAgent">
+                <item ver="[17, [0, [0, [0, [5, [1, [0, [0]]]], [0]], [0, [0]]]], [2, [0, [0, [5, [1, [0, [0]]]], [0]], [0, [0]]]]]" oid="7" type="HTTP_Server_plugin">
+                 <enable type="int">1</enable>
+                 <name type="str">newServerActivity1</name>
+                 <activityFunction type="str">ipTrafficAgent</activityFunction>
+                 <needToRefreshStatViews type="bool">False</needToRefreshStatViews>
+                 <activeRole type="NoneType">None</activeRole>
+                 <loopValue type="int">1</loopValue>
+                 <cmdListLoops type="int">0</cmdListLoops>
+                 <cmdPercentagePool type="NoneType">None</cmdPercentagePool>
+                 <sources ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixSourceList" itemtype="ixSource"/>
+                 <destinations ver="[1, [3, [0, [0, [0], [0]], [0]]]]" type="ixDestinationList" itemtype="ixDestination"/>
+                 <flowPercentage type="float">100.0</flowPercentage>
+                 <httpPort type="str">80</httpPort>
+                 <httpsPort type="str">443</httpsPort>
+                 <requestTimeout type="int">300</requestTimeout>
+                 <minResponseDelay type="int">0</minResponseDelay>
+                 <maxResponseDelay type="int">0</maxResponseDelay>
+                 <acceptSslConnections type="int">0</acceptSslConnections>
+                 <enablesslRecordSize type="int">0</enablesslRecordSize>
+                 <validateCertificate type="int">0</validateCertificate>
+                 <sslRecordSize type="str">16384</sslRecordSize>
+                 <urlStatsCount type="int">10</urlStatsCount>
+                 <rstTimeout type="int">100</rstTimeout>
+                 <enableEsm type="int">0</enableEsm>
+                 <esm type="int">1460</esm>
+                 <enableTos type="bool">False</enableTos>
+                 <enableVlanPriority type="int">0</enableVlanPriority>
+                 <vlanPriority type="int">0</vlanPriority>
+                 <enableIntegrityCheck type="int">0</enableIntegrityCheck>
+                 <tos type="int">0</tos>
+                 <precedenceTOS type="int">0</precedenceTOS>
+                 <delayTOS type="int">0</delayTOS>
+                 <throughputTOS type="int">0</throughputTOS>
+                 <reliabilityTOS type="int">0</reliabilityTOS>
+                 <enablePerServerPerURLstat type="int">0</enablePerServerPerURLstat>
+                 <responseHeaderList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixResponseHeaderList" itemtype="ixResponseHeader">
+                  <item ver="[0, [1, [0, [0]]]]" type="ixResponseHeader">
+                   <name type="str">200_OK</name>
+                   <description type="str">OK</description>
+                   <code type="str">200</code>
+                   <mimeType type="str">text/plain</mimeType>
+                   <dateMode type="int">2</dateMode>
+                   <dateTimeValue type="str">2014/11/22 07:27:01</dateTimeValue>
+                   <dateIncrementEnable type="bool">False</dateIncrementEnable>
+                   <dateIncrementBy type="int">5</dateIncrementBy>
+                   <dateIncrementFor type="int">1</dateIncrementFor>
+                   <dateZone type="str">GMT</dateZone>
+                   <expirationMode type="int">0</expirationMode>
+                   <expirationDateTimeValue type="str">2005/03/04 21:55:04</expirationDateTimeValue>
+                   <expirationAfterRequestValue type="int">3600</expirationAfterRequestValue>
+                   <expirationAfterLastModifiedValue type="int">3600</expirationAfterLastModifiedValue>
+                   <lastModifiedMode type="int">1</lastModifiedMode>
+                   <lastModifiedDateTimeValue type="str">2005/02/02 21:55:04</lastModifiedDateTimeValue>
+                   <lastModifiedIncrementEnable type="bool">False</lastModifiedIncrementEnable>
+                   <lastModifiedIncrementBy type="int">5</lastModifiedIncrementBy>
+                   <lastModifiedIncrementFor type="int">1</lastModifiedIncrementFor>
+                   <responseList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixwebHttpResponseList" itemtype="_httpResponseString"/>
+                   <readOnly type="bool">True</readOnly>
+                   <enableCustomPutResponse type="bool">False</enableCustomPutResponse>
+                   <objectID type="int">0</objectID>
+                   <_apiUniqueId type="int">12972</_apiUniqueId>
+                  </item>
+                  <item ver="[0, [1, [0, [0]]]]" type="ixResponseHeader">
+                   <name type="str">404_PageNotFound</name>
+                   <description type="str">Page not found</description>
+                   <code type="str">404</code>
+                   <mimeType type="str">text/plain</mimeType>
+                   <dateMode type="int">2</dateMode>
+                   <dateTimeValue type="str">2014/11/22 07:27:01</dateTimeValue>
+                   <dateIncrementEnable type="bool">False</dateIncrementEnable>
+                   <dateIncrementBy type="int">5</dateIncrementBy>
+                   <dateIncrementFor type="int">1</dateIncrementFor>
+                   <dateZone type="str">GMT</dateZone>
+                   <expirationMode type="int">0</expirationMode>
+                   <expirationDateTimeValue type="str">2005/03/04 21:55:04</expirationDateTimeValue>
+                   <expirationAfterRequestValue type="int">3600</expirationAfterRequestValue>
+                   <expirationAfterLastModifiedValue type="int">3600</expirationAfterLastModifiedValue>
+                   <lastModifiedMode type="int">1</lastModifiedMode>
+                   <lastModifiedDateTimeValue type="str">2005/02/02 21:55:04</lastModifiedDateTimeValue>
+                   <lastModifiedIncrementEnable type="bool">False</lastModifiedIncrementEnable>
+                   <lastModifiedIncrementBy type="int">5</lastModifiedIncrementBy>
+                   <lastModifiedIncrementFor type="int">1</lastModifiedIncrementFor>
+                   <responseList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixwebHttpResponseList" itemtype="_httpResponseString"/>
+                   <readOnly type="bool">True</readOnly>
+                   <enableCustomPutResponse type="bool">False</enableCustomPutResponse>
+                   <objectID type="int">1</objectID>
+                   <_apiUniqueId type="int">12973</_apiUniqueId>
+                  </item>
+                 </responseHeaderList>
+                 <cookieList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixCookieList" itemtype="ixCookieObject">
+                  <item ver="[0, [1, [0, [0]]]]" type="ixCookieObject">
+                   <name type="str">UserCookie</name>
+                   <description type="str">Name of User</description>
+                   <type type="int">2</type>
+                   <mode type="int">3</mode>
+                   <cookieContentList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixCookieContentList" itemtype="ixCookieContent">
+                    <item ver="[0, [1, [0, [0]]]]" type="ixCookieContent">
+                     <name type="str">firstName</name>
+                     <value type="str">Joe</value>
+                     <path type="str"></path>
+                     <maxAge type="str"></maxAge>
+                     <domain type="str"></domain>
+                     <other type="str"></other>
+                     <objectID type="int">0</objectID>
+                    </item>
+                    <item ver="[0, [1, [0, [0]]]]" type="ixCookieContent">
+                     <name type="str">lastName</name>
+                     <value type="str">Smith</value>
+                     <path type="str"></path>
+                     <maxAge type="str"></maxAge>
+                     <domain type="str"></domain>
+                     <other type="str"></other>
+                     <objectID type="int">1</objectID>
+                    </item>
+                   </cookieContentList>
+                   <readOnly type="bool">True</readOnly>
+                   <objectID type="int">0</objectID>
+                   <_apiUniqueId type="int">12987</_apiUniqueId>
+                  </item>
+                  <item ver="[0, [1, [0, [0]]]]" type="ixCookieObject">
+                   <name type="str">LoginCookie</name>
+                   <description type="str">Login name and password</description>
+                   <type type="int">2</type>
+                   <mode type="int">2</mode>
+                   <cookieContentList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixCookieContentList" itemtype="ixCookieContent">
+                    <item ver="[0, [1, [0, [0]]]]" type="ixCookieContent">
+                     <name type="str">name</name>
+                     <value type="str">joesmith</value>
+                     <path type="str"></path>
+                     <maxAge type="str"></maxAge>
+                     <domain type="str"></domain>
+                     <other type="str"></other>
+                     <objectID type="int">0</objectID>
+                    </item>
+                    <item ver="[0, [1, [0, [0]]]]" type="ixCookieContent">
+                     <name type="str">password</name>
+                     <value type="str">foobar</value>
+                     <path type="str"></path>
+                     <maxAge type="str"></maxAge>
+                     <domain type="str"></domain>
+                     <other type="str"></other>
+                     <objectID type="int">1</objectID>
+                    </item>
+                   </cookieContentList>
+                   <readOnly type="bool">True</readOnly>
+                   <objectID type="int">1</objectID>
+                   <_apiUniqueId type="int">12988</_apiUniqueId>
+                  </item>
+                 </cookieList>
+                 <webPageList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixWebPageList" itemtype="ixWebPageObject">
+                  <item ver="[1, [1, [0, [0]]]]" type="ixWebPageObject">
+                   <page type="str">/1b.html</page>
+                   <response ver="[0, [1, [0, [0]]]]" oid="2" type="ixResponseHeader">
+                    <name type="str">200_OK</name>
+                    <description type="str">OK</description>
+                    <code type="str">200</code>
+                    <mimeType type="str">text/plain</mimeType>
+                    <dateMode type="int">2</dateMode>
+                    <dateTimeValue type="str">2014/11/22 07:27:01</dateTimeValue>
+                    <dateIncrementEnable type="bool">False</dateIncrementEnable>
+                    <dateIncrementBy type="int">5</dateIncrementBy>
+                    <dateIncrementFor type="int">1</dateIncrementFor>
+                    <dateZone type="str">GMT</dateZone>
+                    <expirationMode type="int">0</expirationMode>
+                    <expirationDateTimeValue type="str">2005/03/04 21:55:04</expirationDateTimeValue>
+                    <expirationAfterRequestValue type="int">3600</expirationAfterRequestValue>
+                    <expirationAfterLastModifiedValue type="int">3600</expirationAfterLastModifiedValue>
+                    <lastModifiedMode type="int">1</lastModifiedMode>
+                    <lastModifiedDateTimeValue type="str">2005/02/02 21:55:04</lastModifiedDateTimeValue>
+                    <lastModifiedIncrementEnable type="bool">False</lastModifiedIncrementEnable>
+                    <lastModifiedIncrementBy type="int">5</lastModifiedIncrementBy>
+                    <lastModifiedIncrementFor type="int">1</lastModifiedIncrementFor>
+                    <responseList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixwebHttpResponseList" itemtype="_httpResponseString"/>
+                    <readOnly type="bool">True</readOnly>
+                    <enableCustomPutResponse type="bool">False</enableCustomPutResponse>
+                    <_apiUniqueId type="int">12984</_apiUniqueId>
+                   </response>
+                   <payloadType type="str">range</payloadType>
+                   <payloadSize type="str">1-1</payloadSize>
+                   <payloadFile type="str">&lt;specify file&gt;</payloadFile>
+                   <cookie type="NoneType">None</cookie>
+                   <customPayloadId type="int">-1</customPayloadId>
+                   <Md5Option type="int">3</Md5Option>
+                   <chunkSize type="str">512-1024</chunkSize>
+                   <objectID type="int">0</objectID>
+                   <_apiUniqueId type="int">12974</_apiUniqueId>
+                  </item>
+                  <item ver="[1, [1, [0, [0]]]]" type="ixWebPageObject">
+                   <page type="str">/4k.html</page>
+                   <response ref="2"/>
+                   <payloadType type="str">range</payloadType>
+                   <payloadSize type="str">4096-4096</payloadSize>
+                   <payloadFile type="str">&lt;specify file&gt;</payloadFile>
+                   <cookie type="NoneType">None</cookie>
+                   <customPayloadId type="int">-1</customPayloadId>
+                   <Md5Option type="int">3</Md5Option>
+                   <chunkSize type="str">512-1024</chunkSize>
+                   <objectID type="int">1</objectID>
+                   <_apiUniqueId type="int">12975</_apiUniqueId>
+                  </item>
+                  <item ver="[1, [1, [0, [0]]]]" type="ixWebPageObject">
+                   <page type="str">/8k.html</page>
+                   <response ref="2"/>
+                   <payloadType type="str">range</payloadType>
+                   <payloadSize type="str">8192-8192</payloadSize>
+                   <payloadFile type="str">&lt;specify file&gt;</payloadFile>
+                   <cookie type="NoneType">None</cookie>
+                   <customPayloadId type="int">-1</customPayloadId>
+                   <Md5Option type="int">3</Md5Option>
+                   <chunkSize type="str">512-1024</chunkSize>
+                   <objectID type="int">2</objectID>
+                   <_apiUniqueId type="int">12976</_apiUniqueId>
+                  </item>
+                  <item ver="[1, [1, [0, [0]]]]" type="ixWebPageObject">
+                   <page type="str">/16k.html</page>
+                   <response ref="2"/>
+                   <payloadType type="str">range</payloadType>
+                   <payloadSize type="str">16536-16536</payloadSize>
+                   <payloadFile type="str">&lt;specify file&gt;</payloadFile>
+                   <cookie type="NoneType">None</cookie>
+                   <customPayloadId type="int">-1</customPayloadId>
+                   <Md5Option type="int">3</Md5Option>
+                   <chunkSize type="str">512-1024</chunkSize>
+                   <objectID type="int">3</objectID>
+                   <_apiUniqueId type="int">12977</_apiUniqueId>
+                  </item>
+                  <item ver="[1, [1, [0, [0]]]]" type="ixWebPageObject">
+                   <page type="str">/32k.html</page>
+                   <response ref="2"/>
+                   <payloadType type="str">range</payloadType>
+                   <payloadSize type="str">32768</payloadSize>
+                   <payloadFile type="str">&lt;specify file&gt;</payloadFile>
+                   <cookie type="NoneType">None</cookie>
+                   <customPayloadId type="int">-1</customPayloadId>
+                   <Md5Option type="int">3</Md5Option>
+                   <chunkSize type="str">512-1024</chunkSize>
+                   <objectID type="int">4</objectID>
+                   <_apiUniqueId type="int">12978</_apiUniqueId>
+                  </item>
+                  <item ver="[1, [1, [0, [0]]]]" type="ixWebPageObject">
+                   <page type="str">/64k.html</page>
+                   <response ref="2"/>
+                   <payloadType type="str">range</payloadType>
+                   <payloadSize type="str">65536</payloadSize>
+                   <payloadFile type="str">&lt;specify file&gt;</payloadFile>
+                   <cookie type="NoneType">None</cookie>
+                   <customPayloadId type="int">-1</customPayloadId>
+                   <Md5Option type="int">3</Md5Option>
+                   <chunkSize type="str">512-1024</chunkSize>
+                   <objectID type="int">5</objectID>
+                   <_apiUniqueId type="int">12979</_apiUniqueId>
+                  </item>
+                  <item ver="[1, [1, [0, [0]]]]" type="ixWebPageObject">
+                   <page type="str">/128k.html</page>
+                   <response ref="2"/>
+                   <payloadType type="str">range</payloadType>
+                   <payloadSize type="str">131072</payloadSize>
+                   <payloadFile type="str">&lt;specify file&gt;</payloadFile>
+                   <cookie type="NoneType">None</cookie>
+                   <customPayloadId type="int">-1</customPayloadId>
+                   <Md5Option type="int">3</Md5Option>
+                   <chunkSize type="str">512-1024</chunkSize>
+                   <objectID type="int">6</objectID>
+                   <_apiUniqueId type="int">12980</_apiUniqueId>
+                  </item>
+                  <item ver="[1, [1, [0, [0]]]]" type="ixWebPageObject">
+                   <page type="str">/256k.html</page>
+                   <response ref="2"/>
+                   <payloadType type="str">range</payloadType>
+                   <payloadSize type="str">262144</payloadSize>
+                   <payloadFile type="str">&lt;specify file&gt;</payloadFile>
+                   <cookie type="NoneType">None</cookie>
+                   <customPayloadId type="int">-1</customPayloadId>
+                   <Md5Option type="int">3</Md5Option>
+                   <chunkSize type="str">512-1024</chunkSize>
+                   <objectID type="int">7</objectID>
+                   <_apiUniqueId type="int">12981</_apiUniqueId>
+                  </item>
+                  <item ver="[1, [1, [0, [0]]]]" type="ixWebPageObject">
+                   <page type="str">/512k.html</page>
+                   <response ref="2"/>
+                   <payloadType type="str">range</payloadType>
+                   <payloadSize type="str">524288</payloadSize>
+                   <payloadFile type="str">&lt;specify file&gt;</payloadFile>
+                   <cookie type="NoneType">None</cookie>
+                   <customPayloadId type="int">-1</customPayloadId>
+                   <Md5Option type="int">3</Md5Option>
+                   <chunkSize type="str">512-1024</chunkSize>
+                   <objectID type="int">8</objectID>
+                   <_apiUniqueId type="int">12982</_apiUniqueId>
+                  </item>
+                  <item ver="[1, [1, [0, [0]]]]" type="ixWebPageObject">
+                   <page type="str">/1024k.html</page>
+                   <response ref="2"/>
+                   <payloadType type="str">range</payloadType>
+                   <payloadSize type="str">1048576</payloadSize>
+                   <payloadFile type="str">&lt;specify file&gt;</payloadFile>
+                   <cookie type="NoneType">None</cookie>
+                   <customPayloadId type="int">-1</customPayloadId>
+                   <Md5Option type="int">3</Md5Option>
+                   <chunkSize type="str">512-1024</chunkSize>
+                   <objectID type="int">9</objectID>
+                   <_apiUniqueId type="int">12983</_apiUniqueId>
+                  </item>
+                 </webPageList>
+                 <ServerCiphers type="str">DEFAULT</ServerCiphers>
+                 <privateKeyPassword type="str"></privateKeyPassword>
+                 <privateKey type="str"></privateKey>
+                 <certificate type="str"></certificate>
+                 <caCert type="str"></caCert>
+                 <enableDHsupport type="int">0</enableDHsupport>
+                 <enableSslSendCloseNotify type="int">0</enableSslSendCloseNotify>
+                 <dhParams type="str"></dhParams>
+                 <tcpCloseOption type="int">0</tcpCloseOption>
+                 <docrootfile type="str"></docrootfile>
+                 <customPayloadList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixCustomPayloadList" itemtype="ixCustomPayloadObject">
+                  <item ver="[0, [1, [0, [0]]]]" type="ixCustomPayloadObject">
+                   <id type="int">0</id>
+                   <name type="str">AsciiCustomPayload</name>
+                   <payloadPosition type="str">Start With</payloadPosition>
+                   <payloadmode type="int">0</payloadmode>
+                   <asciiPayloadValue type="str">Ixia-Ixload-Http-Server-Custom-Payload</asciiPayloadValue>
+                   <hexPayloadValue type="str"></hexPayloadValue>
+                   <repeat type="int">0</repeat>
+                   <offset type="int">1</offset>
+                   <readOnly type="bool">True</readOnly>
+                   <objectID type="int">0</objectID>
+                   <_apiUniqueId type="int">12985</_apiUniqueId>
+                  </item>
+                  <item ver="[0, [1, [0, [0]]]]" type="ixCustomPayloadObject">
+                   <id type="int">1</id>
+                   <name type="str">HexCustomPayload</name>
+                   <payloadPosition type="str">Start With</payloadPosition>
+                   <payloadmode type="int">1</payloadmode>
+                   <asciiPayloadValue type="str"></asciiPayloadValue>
+                   <hexPayloadValue type="str">49 78 69 61 2d 49 78 6c 6f 61 64 2d 48 74 74 70 2d 53 65 72 76 65 72 2d 43 75 73 74 6f 6d 2d 50 61 79 6c 6f 61 64</hexPayloadValue>
+                   <repeat type="int">0</repeat>
+                   <offset type="int">1</offset>
+                   <readOnly type="bool">True</readOnly>
+                   <objectID type="int">1</objectID>
+                   <_apiUniqueId type="int">12986</_apiUniqueId>
+                  </item>
+                 </customPayloadList>
+                 <enableMD5Checksum type="bool">False</enableMD5Checksum>
+                 <integrityCheckOption type="str">Custom MD5</integrityCheckOption>
+                 <uniqueID type="int">2</uniqueID>
+                 <enableChunkEncoding type="bool">False</enableChunkEncoding>
+                 <docrootChunkSize type="str">512-1024</docrootChunkSize>
+                 <urlPageSize type="int">1024</urlPageSize>
+                 <enableChunkedRequest type="bool">False</enableChunkedRequest>
+                 <enableNewSslSupport type="bool">False</enableNewSslSupport>
+                 <enableHTTP2 type="bool">False</enableHTTP2>
+                 <objectID type="int">0</objectID>
+                 <_apiUniqueId type="int">12971</_apiUniqueId>
+                 <commandIdCounter type="int">0</commandIdCounter>
+                 <networkPluginSettings ver="[0]" type="ixNetworkActivityPluginSupport">
+                  <serializedNetworkSettingsMap ver="[0, [0, [0]]]" type="ixOrderedDict">
+                   <_dict type="list"/>
+                  </serializedNetworkSettingsMap>
+                  <protocolName type="str">HTTP</protocolName>
+                 </networkPluginSettings>
+                </item>
+               </agentList>
+              </traffic>
+              <network ver="[17, [1, [6, [1, [0, [0]]]]]]" type="ixNetworkGroup">
+               <resourceSyncTimeStamp type="NoneType">None</resourceSyncTimeStamp>
+               <name type="str">server network</name>
+               <role type="str">Server</role>
+               <networkType type="str">none</networkType>
+               <aggregation type="int">0</aggregation>
+               <lineSpeed type="str">Default</lineSpeed>
+               <cpuAggregation type="bool">False</cpuAggregation>
+               <chassisChain ref="3"/>
+               <cardType type="str">FLEXAP1040SQ</cardType>
+               <activePortList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixNetworkPortListSequenceContainer" itemtype="ixConfig"/>
+               <portList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" oid="10" type="ixNetworkPortListSequenceContainer" itemtype="ixConfig">
+                <item ver="[3, [1, [1, [0, [0]]]]]" type="ixPort">
+                 <chassisId type="int">1</chassisId>
+                 <cardId type="int">2</cardId>
+                 <portId type="int">6</portId>
+                 <enableCapture type="bool">False</enableCapture>
+                 <cardType type="str">FLEXAP10G16S</cardType>
+                 <portPersistentSetting ver="[0, [1, [0, [0]]]]" type="ixPortPersistentSetting">
+                  <viewFilter ver="[0, [0, [1, [0, [0]]]]]" type="ixViewProtocolFilter">
+                   <agentProtoFilterMap type="dict">
+                    <item>
+                     <key type="str">newServerActivity1</key>
+                     <value type="tuple">
+                      <item type="str">HTTP</item>
+                      <item type="str">tcp port 80</item>
+                     </value>
+                    </item>
+                   </agentProtoFilterMap>
+                   <filterString type="str"></filterString>
+                  </viewFilter>
+                  <_apiUniqueId type="int">15432</_apiUniqueId>
+                 </portPersistentSetting>
+                 <analyzerPartialCapture type="str">False;8191</analyzerPartialCapture>
+                 <name type="str"></name>
+                 <_apiUniqueId type="int">15431</_apiUniqueId>
+                 <afmPort type="NoneType">None</afmPort>
+                </item>
+               </portList>
+               <comment type="str"></comment>
+               <networkRangeList ver="[0, [2, [0, [3, [0, [0, [0], [0]], [0]]]]]]" type="ixNetworkRangeListSequenceContainer" itemtype="ixNetworkRange">
+                <item ver="[13, [1, [1, [1, [0, [0]]]]]]" oid="4" type="ixNetworkRange">
+                 <_smRangeObjectId type="str">1d9bf537-0c3d-4fdf-9b85-0a622cc77649</_smRangeObjectId>
+                 <name type="str">Network Range IP-R2 in server network (152.40.40.20+1)</name>
+                 <rangeGroup ver="[3, [0, [1, [0, [0]]]]]" oid="5" type="ixIpDistributionGroup">
+                  <name type="str">DistGroup1</name>
+                  <ipDistributionMethod type="str">consecutiveIps</ipDistributionMethod>
+                  <objectID type="int">0</objectID>
+                  <_apiUniqueId type="int">12961</_apiUniqueId>
+                  <_networkRangeList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixWeakrefSequenceContainer" itemtype="ixBasicNetworkRange">
+                   <item ref="4"/>
+                  </_networkRangeList>
+                  <_rangeGroupObjectId type="str">b2c21c73-bfe3-4fbc-9804-b5a8b307d893</_rangeGroupObjectId>
+                  <_smPluginObjectId type="str">b85b184d-9bb4-48c2-a029-e633fee7a3c8</_smPluginObjectId>
+                 </rangeGroup>
+                 <enableStats type="bool">False</enableStats>
+                </item>
+               </networkRangeList>
+               <layerPlugins type="NoneType">None</layerPlugins>
+               <stack type="NoneType">None</stack>
+               <rangeGroupList ver="[1, [0, [0, [3, [0, [0, [0], [0]], [0]]]]]]" type="ixIpDistributionGroupList" itemtype="ixIpDistributionGroup">
+                <item ref="5"/>
+               </rangeGroupList>
+               <dynamicControlPlaneSetting type="int">0</dynamicControlPlaneSetting>
+               <linkLayerOptions type="int">0</linkLayerOptions>
+               <ipSourcePortFrom type="int">1024</ipSourcePortFrom>
+               <ipSourcePortTo type="int">65535</ipSourcePortTo>
+               <emulatedRouterGateway type="str">0.0.0.0</emulatedRouterGateway>
+               <emulatedRouterSubnet type="str">255.255.255.0</emulatedRouterSubnet>
+               <emulatedRouterGatewayIPv6 type="str">::</emulatedRouterGatewayIPv6>
+               <emulatedRouterSubnetIPv6 type="str">FFFF:FFFF:FFFF:FFFF:FFFF:FFFF::0</emulatedRouterSubnetIPv6>
+               <emulatedRouterIpAddressPool ver="[3, [0, [0, [0], [0]], [0]]]" type="ixConfigSequenceContainer" itemtype="ixEmulatedRouterIpAddressRange"/>
+               <macMappingMode type="int">0</macMappingMode>
+               <arpSettings ver="[0, [1, [0, [0]]]]" type="ixArpSettings">
+                <gratuitousArp type="bool">True</gratuitousArp>
+                <processGratArp type="bool">False</processGratArp>
+               </arpSettings>
+               <dnsParameters ver="[1, [1, [0, [0]]]]" type="ixDns">
+                <enable type="int">0</enable>
+                <cacheTimeout type="int">30000</cacheTimeout>
+                <serverList ver="[3, [0, [0, [0], [0]], [0]]]" type="ixConfigSequenceContainer" itemtype="_ixDnsServerItem"/>
+                <suffixList ver="[3, [0, [0, [0], [0]], [0]]]" type="ixConfigSequenceContainer" itemtype="_ixDnsSuffixItem"/>
+               </dnsParameters>
+               <tcpParameters ver="[0, [1, [0, [0]]]]" type="ixTcpParameters">
+                <tcpParametersFull ver="[4, [1, [0, [0]]]]" oid="6" type="ixTcpParametersFull">
+                 <enableCongestionNotification type="bool">False</enableCongestionNotification>
+                 <enableTimeStamp type="bool">True</enableTimeStamp>
+                 <timeWaitRecycle type="bool">True</timeWaitRecycle>
+                 <timeWaitReuse type="bool">False</timeWaitReuse>
+                 <enableTxBwLimit type="bool">False</enableTxBwLimit>
+                 <txBwLimitUnit type="int">0</txBwLimitUnit>
+                 <txBwLimit type="int">1024</txBwLimit>
+                 <enableRxBwLimit type="bool">False</enableRxBwLimit>
+                 <rxBwLimitUnit type="int">0</rxBwLimitUnit>
+                 <rxBwLimit type="int">1024</rxBwLimit>
+                 <finTimeout type="int">60</finTimeout>
+                 <keepAliveInterval type="int">7200</keepAliveInterval>
+                 <keepAliveProbes type="int">75</keepAliveProbes>
+                 <keepAliveTime type="int">9</keepAliveTime>
+                 <synRetries type="int">5</synRetries>
+                 <synAckRetries type="int">5</synAckRetries>
+                 <retransmitRetries type="int">15</retransmitRetries>
+                 <transmitBuffer type="int">1024</transmitBuffer>
+                 <receiveBuffer type="int">1024</receiveBuffer>
+                 <tcpSack type="bool">True</tcpSack>
+                 <windowScaling type="bool">False</windowScaling>
+                 <rtoMin type="int">1000</rtoMin>
+                 <rtoMax type="int">120000</rtoMax>
+                </tcpParametersFull>
+                <tcpParametersFull ref="6"/>
+               </tcpParameters>
+               <impairment ver="[5, [1, [0, [0]]]]" type="ixImpairment">
+                <enable type="bool">False</enable>
+                <addDelay type="bool">True</addDelay>
+                <addReorder type="bool">False</addReorder>
+                <addDrop type="bool">False</addDrop>
+                <addDuplicate type="bool">False</addDuplicate>
+                <randomizeSeed type="bool">False</randomizeSeed>
+                <delay type="int">1</delay>
+                <reorder type="int">1</reorder>
+                <reorderLength type="int">1</reorderLength>
+                <sourcePort type="int">0</sourcePort>
+                <destinationPort type="int">0</destinationPort>
+                <drop type="int">1</drop>
+                <duplicate type="int">1</duplicate>
+                <jitter type="int">0</jitter>
+                <gap type="int">1</gap>
+                <destinationIp type="str">any</destinationIp>
+                <typeOfService type="str">any</typeOfService>
+                <protocol type="str">any</protocol>
+                <addFragmentation type="bool">False</addFragmentation>
+                <fragmentationType type="str">FragmentationPercent</fragmentationType>
+                <fragmentPercent type="int">50</fragmentPercent>
+                <mtu type="int">1000</mtu>
+                <fragmentSequenceSkip type="int">1</fragmentSequenceSkip>
+                <fragmentSequenceLength type="int">1</fragmentSequenceLength>
+                <_seed type="int">1</_seed>
+               </impairment>
+               <_portGroupId type="str">c4ecfc60-64ac-4dc2-9410-e0f58d84f229</_portGroupId>
+               <_smExternalLinks ver="[0, [1, [0, [0]]]]" type="_smExternalLinkersMap">
+                <externalLinks type="dict"/>
+               </_smExternalLinks>
+               <smVersion type="int">1</smVersion>
+              </network>
+              <activityParameters ver="[2, [0, [0, [3, [0, [0, [0], [0]], [0]]]]]]" type="ixActivityParametersList" itemtype="ixActivityParameters">
+               <item ver="[0, [19, [1, [1, [0, [0]]]]]]" type="ixActivity">
+                <agent ref="7"/>
+                <protocolAndType type="str">HTTP Server</protocolAndType>
+                <name type="str">newServerActivity1</name>
+                <enable type="bool">True</enable>
+                <timeline ver="[0, [2, [2, [1, [1, [0, [0]]]]]]]" oid="8" type="ixMatchLongestTimeline"/>
+                <customParameters type="NoneType">None</customParameters>
+                <role type="str">Server</role>
+                <activeRole type="str">Server</activeRole>
+                <objectivePercent type="float">100.0</objectivePercent>
+                <objectID type="int">0</objectID>
+                <_apiUniqueId type="int">12989</_apiUniqueId>
+                <_objectiveValue type="int">100</_objectiveValue>
+                <timelineScale type="float">1.0</timelineScale>
+               </item>
+              </activityParameters>
+              <timeline ref="8"/>
+              <communityCapture ver="[0, [1, [0, [0]]]]" type="ixViewCommunityCapture">
+               <captureViewOptions ref="9"/>
+               <filter ver="[0, [1, [0, [0]]]]" type="ixViewFilter">
+                <filterString type="str"></filterString>
+               </filter>
+               <portList ref="10"/>
+               <enable type="bool">True</enable>
+               <_apiUniqueId type="int">12970</_apiUniqueId>
+              </communityCapture>
+              <payload type="NoneType">None</payload>
+              <activityIpWiring ver="[0, [1, [0, [0]]]]" oid="11" type="ixRangeAgentEndpointWiring">
+               <rangeAgentConnections type="list"/>
+               <_apiUniqueId type="int">12956</_apiUniqueId>
+               <rangeAgentDict ver="[0, [0, [0]]]" type="ixOrderedDict">
+                <_dict type="list">
+                 <item type="tuple">
+                  <item ref="4"/>
+                  <item ver="[0, [1, [0, [0]]]]" type="ixRangeAgentWiring">
+                   <range ref="4"/>
+                   <agentEndpointConnections type="list"/>
+                   <agentConnectionsDict ver="[0, [0, [0]]]" type="ixOrderedDict">
+                    <_dict type="list">
+                     <item type="tuple">
+                      <item ref="7"/>
+                      <item ver="[0, [1, [0, [0]]]]" type="ixAgentEndpointWiring">
+                       <agent ref="7"/>
+                       <endpoints type="list"/>
+                       <endpointsDict ver="[0, [0, [0]]]" type="ixOrderedDict">
+                        <_dict type="list">
+                         <item type="tuple">
+                          <item type="str">HTTP Server</item>
+                          <item ver="[0, [1, [0, [0]]]]" type="ixEndpoint">
+                           <endpointName type="str">HTTP Server</endpointName>
+                           <isAvailable type="bool">True</isAvailable>
+                          </item>
+                         </item>
+                        </_dict>
+                       </endpointsDict>
+                      </item>
+                     </item>
+                    </_dict>
+                   </agentConnectionsDict>
+                  </item>
+                 </item>
+                </_dict>
+               </rangeAgentDict>
+              </activityIpWiring>
+              <tcpAccelerationAllowedFlag type="bool">True</tcpAccelerationAllowedFlag>
+              <iterations type="int">1</iterations>
+              <standbyTime type="int">0</standbyTime>
+              <offlineTime type="int">0</offlineTime>
+              <sustainTime type="int">83</sustainTime>
+              <iterationTime type="int">83</iterationTime>
+              <totalTime type="int">83</totalTime>
+              <objectID type="int">0</objectID>
+              <_apiUniqueId type="int">12955</_apiUniqueId>
+              <isVisible type="bool">True</isVisible>
+              <activityIpWiring ref="11"/>
+              <_portOperationModesAllowed type="dict">
+               <item>
+                <key type="int">0</key>
+                <value type="bool">True</value>
+               </item>
+               <item>
+                <key type="int">1</key>
+                <value type="bool">True</value>
+               </item>
+               <item>
+                <key type="int">2</key>
+                <value type="bool">False</value>
+               </item>
+               <item>
+                <key type="int">3</key>
+                <value type="bool">True</value>
+               </item>
+               <item>
+                <key type="int">4</key>
+                <value type="bool">True</value>
+               </item>
+               <item>
+                <key type="int">8</key>
+                <value type="bool">True</value>
+               </item>
+              </_portOperationModesAllowed>
+              <_tcpAccelerationAllowed type="dict">
+               <item>
+                <key type="int">0</key>
+                <value type="bool">True</value>
+               </item>
+               <item>
+                <key type="int">1</key>
+                <value type="bool">False</value>
+               </item>
+              </_tcpAccelerationAllowed>
+             </destinationCommunity>
+             <destinationAgentName type="str">newServerActivity1</destinationAgentName>
+             <portRangeList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixIntRangeList" itemtype="ixIntRange">
+              <item ver="[1, [1, [0, [0]]]]" type="ixIntRange">
+               <intRange type="str">80</intRange>
+               <objectID type="int">0</objectID>
+               <iStartingValue type="int">80</iStartingValue>
+               <iCount type="int">1</iCount>
+              </item>
+             </portRangeList>
+             <count type="int">1</count>
+            </item>
+           </destinations>
+           <flowPercentage type="float">100.0</flowPercentage>
+           <maxSessions type="int">1</maxSessions>
+           <maxStreams type="int">1</maxStreams>
+           <httpVersion type="int">1</httpVersion>
+           <keepAlive type="bool">False</keepAlive>
+           <maxPersistentRequests type="int">0</maxPersistentRequests>
+           <followHttpRedirects type="int">0</followHttpRedirects>
+           <enableCookieSupport type="int">0</enableCookieSupport>
+           <maxPipeline type="int">1</maxPipeline>
+           <urlStatsCount type="int">10</urlStatsCount>
+           <enableHttpProxy type="int">0</enableHttpProxy>
+           <httpProxy type="str">:80</httpProxy>
+           <enableHttpsProxy type="int">0</enableHttpsProxy>
+           <httpsProxy type="str">:443</httpsProxy>
+           <browserEmulation type="int">1</browserEmulation>
+           <browserEmulationName type="str">Custom1</browserEmulationName>
+           <enableSsl type="int">0</enableSsl>
+           <sslVersion type="int">3</sslVersion>
+           <sslReuseMethod type="int">0</sslReuseMethod>
+           <sequentialSessionReuse type="int">0</sequentialSessionReuse>
+           <enablesslRecordSize type="int">0</enablesslRecordSize>
+           <validateCertificate type="int">0</validateCertificate>
+           <sslRecordSize type="str">16384</sslRecordSize>
+           <enableSslSendCloseNotify type="int">0</enableSslSendCloseNotify>
+           <enableUnidirectionalClose type="int">0</enableUnidirectionalClose>
+           <privateKeyPassword type="str"></privateKeyPassword>
+           <privateKey type="str"></privateKey>
+           <certificate type="str"></certificate>
+           <caCert type="str"></caCert>
+           <clientCiphers type="str">DEFAULT</clientCiphers>
+           <enableEsm type="int">0</enableEsm>
+           <enablePerConnCookieSupport type="int">0</enablePerConnCookieSupport>
+           <perHeaderPercentDist type="int">0</perHeaderPercentDist>
+           <enablemetaRedirectSupport type="int">0</enablemetaRedirectSupport>
+           <esm type="int">1460</esm>
+           <enableVlanPriority type="int">0</enableVlanPriority>
+           <vlanPriority type="int">0</vlanPriority>
+           <enableTos type="bool">False</enableTos>
+           <tos type="int">0</tos>
+           <precedenceTOS type="int">0</precedenceTOS>
+           <delayTOS type="int">0</delayTOS>
+           <throughputTOS type="int">0</throughputTOS>
+           <reliabilityTOS type="int">0</reliabilityTOS>
+           <commandTimeout type="int">600</commandTimeout>
+           <commandTimeout_ms type="int">0</commandTimeout_ms>
+           <enableConsecutiveIpsPerSession type="int">0</enableConsecutiveIpsPerSession>
+           <enableAchieveCCFirst type="int">0</enableAchieveCCFirst>
+           <enableTrafficDistributionForCC type="int">0</enableTrafficDistributionForCC>
+           <contentLengthDeviationTolerance type="int">0</contentLengthDeviationTolerance>
+           <actionList ver="[1, [1, [0, [0, [3, [0, [0, [0], [0]], [0]]]]]]]" type="ixHttpCommandList" itemtype="ixConfig">
+            <item ver="[0, [0, [0, [0, [1, [0, [0]]]]]]]" type="ixStartCommand">
+             <commandId type="int">-2</commandId>
+             <commandType type="str">START</commandType>
+             <cmdName type="str">Start</cmdName>
+             <outputList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixCommandOutputList" itemtype="ixCommandOutput">
+              <item ver="[1, [1, [0, [0]]]]" type="ixCommandOutput">
+               <name type="str">Output1</name>
+               <outputType type="int">0</outputType>
+               <destCmdId type="int">1</destCmdId>
+               <objectID type="int">0</objectID>
+               <_apiUniqueId type="int">12948</_apiUniqueId>
+               <destinationCommandIdx type="int">1</destinationCommandIdx>
+              </item>
+             </outputList>
+             <objectID type="int">0</objectID>
+             <_apiUniqueId type="int">12945</_apiUniqueId>
+            </item>
+            <item ver="[0, [0, [2, [1, [0, [0]]]]], [0, [0, [1, [0, [0]]]]]]" type="ixHttpCommand">
+             <commandId type="int">1</commandId>
+             <commandType type="str">GET</commandType>
+             <cmdName type="str">Get 1</cmdName>
+             <outputList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixCommandOutputList" itemtype="ixCommandOutput">
+              <item ver="[1, [1, [0, [0]]]]" type="ixCommandOutput">
+               <name type="str">Output1</name>
+               <outputType type="int">0</outputType>
+               <destCmdId type="int">-3</destCmdId>
+               <objectID type="int">0</objectID>
+               <_apiUniqueId type="int">12949</_apiUniqueId>
+               <destinationCommandIdx type="int">2</destinationCommandIdx>
+              </item>
+             </outputList>
+             <destination type="str">HTTP server_newServerActivity1:80</destination>
+             <pageObject type="str">/1b.html</pageObject>
+             <abort type="str">None</abort>
+             <arguments type="str"></arguments>
+             <namevalueargs type="str"></namevalueargs>
+             <profile type="int">-1</profile>
+             <enableDi type="int">0</enableDi>
+             <sendMD5ChkSumHeader type="int">0</sendMD5ChkSumHeader>
+             <sendingChunkSize type="str">None</sendingChunkSize>
+             <sslProfile type="int">-1</sslProfile>
+             <method type="int">-1</method>
+             <useSsl type="bool">False</useSsl>
+             <windowSize type="str">65536</windowSize>
+             <streamIden type="int">3</streamIden>
+             <pingFreq type="int">10</pingFreq>
+             <objectID type="int">1</objectID>
+             <_apiUniqueId type="int">12946</_apiUniqueId>
+            </item>
+            <item ver="[0, [0, [0, [0, [1, [0, [0]]]]]]]" type="ixStopCommand">
+             <commandId type="int">-3</commandId>
+             <commandType type="str">STOP</commandType>
+             <cmdName type="str">Stop</cmdName>
+             <outputList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixCommandOutputList" itemtype="ixCommandOutput"/>
+             <objectID type="int">2</objectID>
+             <_apiUniqueId type="int">12947</_apiUniqueId>
+            </item>
+           </actionList>
+           <headerList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixwebHttpHeaderList" itemtype="_httpHeaderString">
+            <item ver="[1, [0, [0, [0], [0], [0]]], [1, [0, [0]]]]" type="_httpHeaderString">
+             <data type="str">Accept: */*</data>
+             <objectID type="int">0</objectID>
+             <_apiUniqueId type="int">12950</_apiUniqueId>
+            </item>
+            <item ver="[1, [0, [0, [0], [0], [0]]], [1, [0, [0]]]]" type="_httpHeaderString">
+             <data type="str">Accept-Language: en-us</data>
+             <objectID type="int">1</objectID>
+             <_apiUniqueId type="int">12951</_apiUniqueId>
+            </item>
+            <item ver="[1, [0, [0, [0], [0], [0]]], [1, [0, [0]]]]" type="_httpHeaderString">
+             <data type="str">Accept-Encoding: gzip, deflate</data>
+             <objectID type="int">2</objectID>
+             <_apiUniqueId type="int">12952</_apiUniqueId>
+            </item>
+            <item ver="[1, [0, [0, [0], [0], [0]]], [1, [0, [0]]]]" type="_httpHeaderString">
+             <data type="str">User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)</data>
+             <objectID type="int">3</objectID>
+             <_apiUniqueId type="int">12953</_apiUniqueId>
+            </item>
+           </headerList>
+           <profileList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixHttpCommandProfileList" itemtype="ixHttpCommandProfile"/>
+           <sslProfileList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixHttpCommandSSLProfileList" itemtype="ixHttpCommandSSLProfile"/>
+           <cookieJarSize type="int">10</cookieJarSize>
+           <cookieRejectProbability type="float">0.0</cookieRejectProbability>
+           <ipPreference type="int">2</ipPreference>
+           <tcpCloseOption type="int">0</tcpCloseOption>
+           <piggybackAck type="int">1</piggybackAck>
+           <enableLargeHeader type="int">0</enableLargeHeader>
+           <maxHeaderLen type="int">1024</maxHeaderLen>
+           <useAllIPs type="int">0</useAllIPs>
+           <enableDecompressSupport type="int">0</enableDecompressSupport>
+           <enableIntegrityCheckSupport type="int">0</enableIntegrityCheckSupport>
+           <enableCRCCheckSupport type="int">0</enableCRCCheckSupport>
+           <uniqueID type="int">1</uniqueID>
+           <disableDnsResolutionCache type="int">0</disableDnsResolutionCache>
+           <methodProfileList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixMethodProfileList" itemtype="ixMethodProfile"/>
+           <httpsTunnel type="str">0.0.0.0</httpsTunnel>
+           <enableHttpsTunnel type="int">0</enableHttpsTunnel>
+           <exactTransactions type="int">0</exactTransactions>
+           <objectID type="int">0</objectID>
+           <_apiUniqueId type="int">12942</_apiUniqueId>
+           <uniqueID type="int">1</uniqueID>
+           <commandIdCounter type="int">1</commandIdCounter>
+           <networkPluginSettings ver="[0]" type="ixNetworkActivityPluginSupport">
+            <serializedNetworkSettingsMap ver="[0, [0, [0]]]" type="ixOrderedDict">
+             <_dict type="list"/>
+            </serializedNetworkSettingsMap>
+            <protocolName type="str">HTTP</protocolName>
+           </networkPluginSettings>
+          </item>
+         </agentList>
+        </traffic>
+        <network ver="[17, [1, [6, [1, [0, [0]]]]]]" type="ixNetworkGroup">
+         <resourceSyncTimeStamp type="NoneType">None</resourceSyncTimeStamp>
+         <name type="str">client network</name>
+         <role type="str">Client</role>
+         <networkType type="str">none</networkType>
+         <aggregation type="int">0</aggregation>
+         <lineSpeed type="str">Default</lineSpeed>
+         <cpuAggregation type="bool">False</cpuAggregation>
+         <chassisChain ref="3"/>
+         <cardType type="str">FLEXAP1040SQ</cardType>
+         <activePortList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixNetworkPortListSequenceContainer" itemtype="ixConfig"/>
+         <portList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixNetworkPortListSequenceContainer" itemtype="ixConfig">
+          <item ver="[3, [1, [1, [0, [0]]]]]" type="ixPort">
+           <chassisId type="int">1</chassisId>
+           <cardId type="int">2</cardId>
+           <portId type="int">5</portId>
+           <enableCapture type="bool">False</enableCapture>
+           <cardType type="str">FLEXAP10G16S</cardType>
+           <portPersistentSetting ver="[0, [1, [0, [0]]]]" type="ixPortPersistentSetting">
+            <viewFilter type="NoneType">None</viewFilter>
+            <_apiUniqueId type="int">15428</_apiUniqueId>
+           </portPersistentSetting>
+           <analyzerPartialCapture type="str">False;8191</analyzerPartialCapture>
+           <name type="str"></name>
+           <_apiUniqueId type="int">15427</_apiUniqueId>
+           <afmPort type="NoneType">None</afmPort>
+          </item>
+         </portList>
+         <comment type="str"></comment>
+         <networkRangeList ver="[0, [2, [0, [3, [0, [0, [0], [0]], [0]]]]]]" type="ixNetworkRangeListSequenceContainer" itemtype="ixNetworkRange">
+          <item ver="[13, [1, [1, [1, [0, [0]]]]]]" oid="12" type="ixNetworkRange">
+           <_smRangeObjectId type="str">a3559674-8d95-4020-90b3-b42eacaef105</_smRangeObjectId>
+           <name type="str">Network Range IP-R1 in client network (152.16.100.20+1)</name>
+           <rangeGroup ver="[3, [0, [1, [0, [0]]]]]" oid="13" type="ixIpDistributionGroup">
+            <name type="str">DistGroup1</name>
+            <ipDistributionMethod type="str">consecutiveIps</ipDistributionMethod>
+            <objectID type="int">0</objectID>
+            <_apiUniqueId type="int">12931</_apiUniqueId>
+            <_networkRangeList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixWeakrefSequenceContainer" itemtype="ixBasicNetworkRange">
+             <item ref="12"/>
+            </_networkRangeList>
+            <_rangeGroupObjectId type="str">aa33a76b-9c7f-48d9-a537-8d6eeec03662</_rangeGroupObjectId>
+            <_smPluginObjectId type="str">a916ae0f-0731-405d-ad19-eaade6c515f1</_smPluginObjectId>
+           </rangeGroup>
+           <enableStats type="bool">False</enableStats>
+          </item>
+         </networkRangeList>
+         <layerPlugins type="NoneType">None</layerPlugins>
+         <stack type="NoneType">None</stack>
+         <rangeGroupList ver="[1, [0, [0, [3, [0, [0, [0], [0]], [0]]]]]]" type="ixIpDistributionGroupList" itemtype="ixIpDistributionGroup">
+          <item ref="13"/>
+         </rangeGroupList>
+         <dynamicControlPlaneSetting type="int">0</dynamicControlPlaneSetting>
+         <linkLayerOptions type="int">0</linkLayerOptions>
+         <ipSourcePortFrom type="int">1024</ipSourcePortFrom>
+         <ipSourcePortTo type="int">65535</ipSourcePortTo>
+         <emulatedRouterGateway type="str">0.0.0.0</emulatedRouterGateway>
+         <emulatedRouterSubnet type="str">255.255.255.0</emulatedRouterSubnet>
+         <emulatedRouterGatewayIPv6 type="str">::</emulatedRouterGatewayIPv6>
+         <emulatedRouterSubnetIPv6 type="str">FFFF:FFFF:FFFF:FFFF:FFFF:FFFF::0</emulatedRouterSubnetIPv6>
+         <emulatedRouterIpAddressPool ver="[3, [0, [0, [0], [0]], [0]]]" type="ixConfigSequenceContainer" itemtype="ixEmulatedRouterIpAddressRange"/>
+         <macMappingMode type="int">0</macMappingMode>
+         <arpSettings ver="[0, [1, [0, [0]]]]" type="ixArpSettings">
+          <gratuitousArp type="bool">True</gratuitousArp>
+          <processGratArp type="bool">False</processGratArp>
+         </arpSettings>
+         <dnsParameters ver="[1, [1, [0, [0]]]]" type="ixDns">
+          <enable type="int">0</enable>
+          <cacheTimeout type="int">30000</cacheTimeout>
+          <serverList ver="[3, [0, [0, [0], [0]], [0]]]" type="ixConfigSequenceContainer" itemtype="_ixDnsServerItem"/>
+          <suffixList ver="[3, [0, [0, [0], [0]], [0]]]" type="ixConfigSequenceContainer" itemtype="_ixDnsSuffixItem"/>
+         </dnsParameters>
+         <tcpParameters ver="[0, [1, [0, [0]]]]" type="ixTcpParameters">
+          <tcpParametersFull ver="[4, [1, [0, [0]]]]" oid="14" type="ixTcpParametersFull">
+           <enableCongestionNotification type="bool">False</enableCongestionNotification>
+           <enableTimeStamp type="bool">True</enableTimeStamp>
+           <timeWaitRecycle type="bool">True</timeWaitRecycle>
+           <timeWaitReuse type="bool">False</timeWaitReuse>
+           <enableTxBwLimit type="bool">False</enableTxBwLimit>
+           <txBwLimitUnit type="int">0</txBwLimitUnit>
+           <txBwLimit type="int">1024</txBwLimit>
+           <enableRxBwLimit type="bool">False</enableRxBwLimit>
+           <rxBwLimitUnit type="int">0</rxBwLimitUnit>
+           <rxBwLimit type="int">1024</rxBwLimit>
+           <finTimeout type="int">60</finTimeout>
+           <keepAliveInterval type="int">7200</keepAliveInterval>
+           <keepAliveProbes type="int">75</keepAliveProbes>
+           <keepAliveTime type="int">9</keepAliveTime>
+           <synRetries type="int">5</synRetries>
+           <synAckRetries type="int">5</synAckRetries>
+           <retransmitRetries type="int">15</retransmitRetries>
+           <transmitBuffer type="int">1024</transmitBuffer>
+           <receiveBuffer type="int">1024</receiveBuffer>
+           <tcpSack type="bool">True</tcpSack>
+           <windowScaling type="bool">False</windowScaling>
+           <rtoMin type="int">1000</rtoMin>
+           <rtoMax type="int">120000</rtoMax>
+          </tcpParametersFull>
+          <tcpParametersFull ref="14"/>
+         </tcpParameters>
+         <impairment ver="[5, [1, [0, [0]]]]" type="ixImpairment">
+          <enable type="bool">False</enable>
+          <addDelay type="bool">True</addDelay>
+          <addReorder type="bool">False</addReorder>
+          <addDrop type="bool">False</addDrop>
+          <addDuplicate type="bool">False</addDuplicate>
+          <randomizeSeed type="bool">False</randomizeSeed>
+          <delay type="int">1</delay>
+          <reorder type="int">1</reorder>
+          <reorderLength type="int">1</reorderLength>
+          <sourcePort type="int">0</sourcePort>
+          <destinationPort type="int">0</destinationPort>
+          <drop type="int">1</drop>
+          <duplicate type="int">1</duplicate>
+          <jitter type="int">0</jitter>
+          <gap type="int">1</gap>
+          <destinationIp type="str">any</destinationIp>
+          <typeOfService type="str">any</typeOfService>
+          <protocol type="str">any</protocol>
+          <addFragmentation type="bool">False</addFragmentation>
+          <fragmentationType type="str">FragmentationPercent</fragmentationType>
+          <fragmentPercent type="int">50</fragmentPercent>
+          <mtu type="int">1000</mtu>
+          <fragmentSequenceSkip type="int">1</fragmentSequenceSkip>
+          <fragmentSequenceLength type="int">1</fragmentSequenceLength>
+          <_seed type="int">1</_seed>
+         </impairment>
+         <_portGroupId type="str">865be042-32d5-426a-9e75-0908c943801f</_portGroupId>
+         <_smExternalLinks ver="[0, [1, [0, [0]]]]" type="_smExternalLinkersMap">
+          <externalLinks type="dict"/>
+         </_smExternalLinks>
+         <smVersion type="int">1</smVersion>
+        </network>
+        <activityParameters ver="[2, [0, [0, [3, [0, [0, [0], [0]], [0]]]]]]" type="ixActivityParametersList" itemtype="ixActivityParameters">
+         <item ver="[0, [19, [1, [1, [0, [0]]]]]]" type="ixActivity">
+          <agent ref="15"/>
+          <protocolAndType type="str">HTTP Client</protocolAndType>
+          <name type="str">newClientActivity1</name>
+          <enable type="bool">True</enable>
+          <timeline ver="[2, [1, [1, [0, [0]]]]]" oid="16" type="ixTimeline">
+           <name type="str">Timeline1</name>
+           <iterationTime type="int">83</iterationTime>
+           <totalTime type="int">83</totalTime>
+           <iterations type="int">1</iterations>
+           <standbyTime type="int">0</standbyTime>
+           <offlineTime type="int">0</offlineTime>
+           <sustainTime type="int">60</sustainTime>
+           <rampUpType type="int">0</rampUpType>
+           <rampUpValue type="int">30000</rampUpValue>
+           <rampUpInterval type="int">1</rampUpInterval>
+           <rampUpTime type="int">3</rampUpTime>
+           <rampDownTime type="int">20</rampDownTime>
+           <rampDownValue type="int">32000</rampDownValue>
+           <timelineType type="int">0</timelineType>
+           <objectID type="int">0</objectID>
+          </timeline>
+          <customParameters type="NoneType">None</customParameters>
+          <role type="str">Client</role>
+          <activeRole type="str">Client</activeRole>
+          <objectivePercent type="float">100.0</objectivePercent>
+          <objectiveType type="str">simulatedUsers</objectiveType>
+          <objectiveValue type="int">64000</objectiveValue>
+          <userObjectiveType type="str">simulatedUsers</userObjectiveType>
+          <userObjectiveValue type="long">64000</userObjectiveValue>
+          <constraintType type="str">ConnectionRateConstraint</constraintType>
+          <constraintValue type="int">100</constraintValue>
+          <timerGranularity type="int">100</timerGranularity>
+          <enableConstraint type="bool">False</enableConstraint>
+          <secondaryConstraintType type="str">SimulatedUserConstraint</secondaryConstraintType>
+          <secondaryConstraintValue type="int">100</secondaryConstraintValue>
+          <secondaryEnableConstraint type="bool">False</secondaryEnableConstraint>
+          <portMapPolicy type="str">portMesh</portMapPolicy>
+          <concurrentObjectiveBehavior type="int">1</concurrentObjectiveBehavior>
+          <cpsObjectiveBehavior type="int">0</cpsObjectiveBehavior>
+          <userIpMapping type="str">1:1</userIpMapping>
+          <destinationIpMapping type="str">Consecutive</destinationIpMapping>
+          <playlists ver="[1, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixPlaylistList" itemtype="ixPlaylist"/>
+          <objectID type="int">0</objectID>
+          <_apiUniqueId type="int">12954</_apiUniqueId>
+          <_objectiveValue type="int">64000</_objectiveValue>
+          <timelineScale type="float">1.0</timelineScale>
+         </item>
+        </activityParameters>
+        <timeline ref="16"/>
+        <communityCapture ver="[0, [1, [0, [0]]]]" type="ixViewCommunityCapture">
+         <captureViewOptions ref="9"/>
+         <filter ver="[0, [1, [0, [0]]]]" type="ixViewFilter">
+          <filterString type="str"></filterString>
+         </filter>
+         <portList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="_portListSequenceContainer" itemtype="ixConfig"/>
+         <enable type="bool">False</enable>
+         <_apiUniqueId type="int">12940</_apiUniqueId>
+        </communityCapture>
+        <payload type="NoneType">None</payload>
+        <activityIpWiring ver="[0, [1, [0, [0]]]]" oid="17" type="ixRangeAgentEndpointWiring">
+         <rangeAgentConnections type="list"/>
+         <_apiUniqueId type="int">12926</_apiUniqueId>
+         <rangeAgentDict ver="[0, [0, [0]]]" type="ixOrderedDict">
+          <_dict type="list">
+           <item type="tuple">
+            <item ref="12"/>
+            <item ver="[0, [1, [0, [0]]]]" type="ixRangeAgentWiring">
+             <range ref="12"/>
+             <agentEndpointConnections type="list"/>
+             <agentConnectionsDict ver="[0, [0, [0]]]" type="ixOrderedDict">
+              <_dict type="list">
+               <item type="tuple">
+                <item ref="15"/>
+                <item ver="[0, [1, [0, [0]]]]" type="ixAgentEndpointWiring">
+                 <agent ref="15"/>
+                 <endpoints type="list"/>
+                 <endpointsDict ver="[0, [0, [0]]]" type="ixOrderedDict">
+                  <_dict type="list">
+                   <item type="tuple">
+                    <item type="str">HTTP Client</item>
+                    <item ver="[0, [1, [0, [0]]]]" type="ixEndpoint">
+                     <endpointName type="str">HTTP Client</endpointName>
+                     <isAvailable type="bool">True</isAvailable>
+                    </item>
+                   </item>
+                  </_dict>
+                 </endpointsDict>
+                </item>
+               </item>
+              </_dict>
+             </agentConnectionsDict>
+            </item>
+           </item>
+          </_dict>
+         </rangeAgentDict>
+        </activityIpWiring>
+        <tcpAccelerationAllowedFlag type="bool">True</tcpAccelerationAllowedFlag>
+        <iterations type="int">1</iterations>
+        <standbyTime type="int">0</standbyTime>
+        <offlineTime type="int">0</offlineTime>
+        <sustainTime type="int">60</sustainTime>
+        <iterationTime type="int">83</iterationTime>
+        <totalTime type="int">83</totalTime>
+        <portMapPolicy type="str">portPairs</portMapPolicy>
+        <objectiveType type="str">simulatedUsers</objectiveType>
+        <objectiveValue type="int">64000</objectiveValue>
+        <rampUpType type="int">0</rampUpType>
+        <rampUpValue type="int">30000</rampUpValue>
+        <rampUpInterval type="int">1</rampUpInterval>
+        <rampUpTime type="int">3</rampUpTime>
+        <rampDownTime type="int">20</rampDownTime>
+        <userObjectiveType type="str">simulatedUsers</userObjectiveType>
+        <userObjectiveValue type="long">64000</userObjectiveValue>
+        <totalUserObjectiveValue type="long">64000</totalUserObjectiveValue>
+        <objectID type="int">0</objectID>
+        <_apiUniqueId type="int">12925</_apiUniqueId>
+        <isVisible type="bool">True</isVisible>
+        <activityIpWiring ref="17"/>
+        <_portOperationModesAllowed type="dict">
+         <item>
+          <key type="int">0</key>
+          <value type="bool">True</value>
+         </item>
+         <item>
+          <key type="int">1</key>
+          <value type="bool">True</value>
+         </item>
+         <item>
+          <key type="int">2</key>
+          <value type="bool">False</value>
+         </item>
+         <item>
+          <key type="int">3</key>
+          <value type="bool">True</value>
+         </item>
+         <item>
+          <key type="int">4</key>
+          <value type="bool">True</value>
+         </item>
+         <item>
+          <key type="int">8</key>
+          <value type="bool">True</value>
+         </item>
+        </_portOperationModesAllowed>
+        <_tcpAccelerationAllowed type="dict">
+         <item>
+          <key type="int">0</key>
+          <value type="bool">True</value>
+         </item>
+         <item>
+          <key type="int">1</key>
+          <value type="bool">False</value>
+         </item>
+        </_tcpAccelerationAllowed>
+       </item>
+       </elementList>
+       <objectID type="int">0</objectID>
+       <_apiUniqueId type="int">12922</_apiUniqueId>
+      </item>
+      <item ver="[0, [1, [0, [0]]]]" type="ixTrafficColumn">
+       <name type="str">DUT</name>
+       <elementList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixScenarioElementList" itemtype="ixScenarioElement"/>
+       <objectID type="int">1</objectID>
+       <_apiUniqueId type="int">12923</_apiUniqueId>
+      </item>
+      <item ver="[0, [1, [0, [0]]]]" type="ixTrafficColumn">
+       <name type="str">Server</name>
+       <elementList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixScenarioElementList" itemtype="ixScenarioElement">
+       <item ref="18"/>
+       </elementList>
+       <objectID type="int">2</objectID>
+       <_apiUniqueId type="int">12924</_apiUniqueId>
+      </item>
+     </columnList>
+     <links ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixActivityLinkList" itemtype="ixActivityLink"/>
+     <appMixList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixAppMixList" itemtype="ixAppMix"/>
+     <objectID type="int">0</objectID>
+     <_apiUniqueId type="int">12921</_apiUniqueId>
+    </item>
+   </scenarioList>
+   <currentUniqueIDForAgent type="int">2</currentUniqueIDForAgent>
+   <enableNetworkDiagnostics type="bool">True</enableNetworkDiagnostics>
+   <showNetworkDiagnosticsFromApplyConfig type="bool">False</showNetworkDiagnosticsFromApplyConfig>
+   <showNetworkDiagnosticsAfterRunStops type="bool">False</showNetworkDiagnosticsAfterRunStops>
+   <resetNetworkDiagnosticsAtStartRun type="bool">False</resetNetworkDiagnosticsAtStartRun>
+   <enableNetworkDiagnosticsLogging type="bool">False</enableNetworkDiagnosticsLogging>
+   <enableTcpAdvancedStats type="bool">False</enableTcpAdvancedStats>
+   <enableFrameSizeDistributionStats type="bool">False</enableFrameSizeDistributionStats>
+   <isFrameSizeDistributionViewSupported type="bool">False</isFrameSizeDistributionViewSupported>
+   <statViewThroughputUnits type="str">Kbps</statViewThroughputUnits>
+   <totalUserObjectiveInfoList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixTotalUserObjectiveInfoList" itemtype="ixTotalUserObjectiveInfo"/>
+   <activitiesGroupedByObjective type="bool">False</activitiesGroupedByObjective>
+   <eventHandlerSettings ver="[0, [1, [0, [0]]]]" type="ixEventHandlerSettings">
+    <disabledEventClasses type="str"></disabledEventClasses>
+    <disabledPorts type="str"></disabledPorts>
+    <_apiUniqueId type="int">12990</_apiUniqueId>
+   </eventHandlerSettings>
+   <allowMixedObjectiveTypes type="bool">False</allowMixedObjectiveTypes>
+   <networkProtocolOptions type="NoneType">None</networkProtocolOptions>
+   <seedForRandomBehavior type="int">0</seedForRandomBehavior>
+   <csvThroughputScalingFactor type="int">0</csvThroughputScalingFactor>
+   <reporterThroughputScalingFactor type="int">0</reporterThroughputScalingFactor>
+   <profileDirectory ver="[2, [1, [0, [0]]]]" type="ixProfileDirectory">
+    <categoryList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixProfileCategoryList" itemtype="ixProfileCategory">
+     <item ver="[0, [1, [0, [0]]]]" type="ixProfileCategory">
+      <name type="str">Playlist</name>
+      <categoryId type="str">playlist</categoryId>
+      <profileList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixProfileList" itemtype="ixProfile"/>
+      <pm ver="[0, [1, [0.1, [1, [0, [0]]]]]]" type="#Plugins.profile.Playlist.ixPropertyMap_PlaylistCategory$ixPropertyMap_PlaylistCategory"/>
+      <temporaryProfileList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixProfileList" itemtype="ixProfile"/>
+      <objectID type="int">0</objectID>
+     </item>
+     <item ver="[0, [1, [0, [0]]]]" type="ixProfileCategory">
+      <name type="str">Random Data</name>
+      <categoryId type="str">rdge</categoryId>
+      <profileList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixProfileList" itemtype="ixProfile"/>
+      <pm ver="[0, [1, [0.1, [1, [0, [0]]]]]]" type="#Plugins.profile.RandomData.ixPropertyMap_RandomDataCategory$ixPropertyMap_RandomDataCategory">
+       <startcore type="int">0</startcore>
+       <totalcores type="int">1</totalcores>
+      </pm>
+      <temporaryProfileList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixProfileList" itemtype="ixProfile"/>
+      <objectID type="int">1</objectID>
+     </item>
+     <item ver="[0, [1, [0, [0]]]]" type="ixProfileCategory">
+      <name type="str">Real File</name>
+      <categoryId type="str">realfile</categoryId>
+      <profileList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixProfileList" itemtype="ixProfile"/>
+      <pm type="NoneType">None</pm>
+      <temporaryProfileList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixProfileList" itemtype="ixProfile"/>
+      <objectID type="int">2</objectID>
+     </item>
+     <item ver="[0, [1, [0, [0]]]]" type="ixProfileCategory">
+      <name type="str">Unified File System</name>
+      <categoryId type="str">ufs</categoryId>
+      <profileList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixProfileList" itemtype="ixProfile"/>
+      <pm type="NoneType">None</pm>
+      <temporaryProfileList ver="[0, [0, [3, [0, [0, [0], [0]], [0]]]]]" type="ixProfileList" itemtype="ixProfile"/>
+      <objectID type="int">3</objectID>
+     </item>
+    </categoryList>
+    <_profileMru type="str"></_profileMru>
+   </profileDirectory>
+   <communityList type="NoneType">None</communityList>
+   <autoUpdateAppFlowsToLatest type="bool">True</autoUpdateAppFlowsToLatest>
+   <downgradeAppLibFlowsToLatestValidVersion type="bool">True</downgradeAppLibFlowsToLatestValidVersion>
+   <objectID type="int">0</objectID>
+   <_apiUniqueId type="int">12920</_apiUniqueId>
+   <lastStatViewerConfiguration type="str"></lastStatViewerConfiguration>
+   <statManagerOptions ver="[1, [1, [0, [0]]]]" type="ixStatManagerOptions">
+    <pollingInterval type="int">2</pollingInterval>
+    <allowCsvLogging type="bool">False</allowCsvLogging>
+    <enableDataStore type="bool">False</enableDataStore>
+    <svConfiguration type="str">begin 666 &lt;data&gt;&#10;M&gt;)SMG7MOVS@2P+^*D&lt;,5&gt;[BE+8J41*6/19ND;;!I$\1I=X'KH2&quot;I4:*K(WDE&#10;M.8\[W'&lt;_4I)MV9:=[.U672SFC]:2.#-\B#,_CBPSSWZXNYX,;B ODBQ]OD&gt;'&#10;MSMX/+YZ-2UE^3. 6\F61/_2=H3-TF;MG!*&quot;P5T^2HAS\&quot;/?/]^2T3.X2.2QN&#10;MAE.K4920:ABVY'[*Y=04&amp;&gt;6#T_&lt;71^\O!J,7S\[.C\;F\.7%\&gt;G[]?//1X?'&#10;M%R]?G1S9@H/3=Z^.WQ\=+JHN%D&gt;/:&lt;!&amp;Y2^&gt;O&lt;[AEYF1N1_&lt;R,D,GN^Y&gt;U5%&#10;MQ&lt;U)=GF9I)?SZZ_EI(&quot;J[&quot;*YAO%]JE_!E;Q)LGPNX2Q*BU)&gt;3\]RT$G5LJ:&lt;&#10;M5&gt;5'E[EIC!W6B_LIS,MH579JAGF2R&gt;@LSTK094OW(I_!6L/&gt;)E$$J354;+;Q&#10;M*)5J H&gt;RE.,RRV%3X&amp;PY.NUV\&quot;[MG369!IW.RNFL7(SDN]FD3*:3];Y50H?C&#10;M!\3&gt;R3L[[0K3OH-946;7;\P]NUK(^/,Z7R&lt;3.)/EHN1@_].'PO3I4U303X&gt;9&#10;MGEU#6A:?CLUD,/^=F$'])(8.'5+''[)/YU&quot;8VHM/;R\NSLC-ZY\^'Y_=\,_N&#10;M69:7Q6?7H8'C.&gt;%GZKB&quot;U?/AY01,T?QS8+PE+?;OBN3YWE593O='H]O;V^$M&#10;M&amp;V;YY&lt;AU'#KZ^=W)6%_!M21):J:#&amp;&gt;:]A5;TL%95Z6A&gt;ZR'$TK2WN@,[SE[8&#10;M]@\.SCX,[!&quot;:NYOHXMFH+; B?&gt;(25DD6@]C,XH-)8H9L4(W!X[7&amp;D)M)^SBM&#10;MBZL\FUU&gt;F6E0&amp;UB3'ZUV;.WT(,\:M\D!3.G:^;F,DNR-L3]=*TC2\H7[;&amp;0_&#10;MGHVV2M6=?YWEU[.)'$-9&amp;@=;3/;_//G+W&gt;%3\]_+IT]^F67ETX]U-*Q/]NL/&#10;M.O3J@^\WI&amp;T'&amp;ME_+ O_N3S\[_*PCB$F@IS/TO5V/)F43U&lt;&quot;];QFISX8&amp;+?*&#10;M(J/1%,S*F%&quot;_/O[AR67YM-4R8ZJIY3B-,W,7$SE)_BUMS'DE+UL3O%9_]&quot;QO&#10;M6K*&lt;ZH_3KZ56VS@8V%9&gt;?RZ;T;!S6IO0.&quot;W6Y6I)VY_W\AILJ3VF]N*H?;5;&#10;MYT&quot;6&lt;)GE]U;&quot;QKR1C0H+W7;IIOY!?#F/1%9@-0I!\:7,II_N91Y97_S2&amp;6Z&amp;&#10;M^5U&lt;5;9FJKNMD,_[8FI8M'%Y=5/K&lt;%9U?S#:6OSVMIG/.V3&amp;#\G89IRJ?UEJ&#10;MW4&quot;Q2^IM&lt;GDU,?_*K5(+-I7'ACME$B&gt;06TE%E1(TC(DO&amp;&quot;&lt;\9(I(JB2!V('(&#10;M =\13EB-R38#FU69&gt;=6&gt;,N:44J\VTBK:U+-W&gt;7Q\: O'A!*/N)0PQAGS/1ZX&#10;MQ VH\&quot;@/'$%$R'P6^AZA9L)7AENZG0TR$STO(3I-K82%$7$\XH07U-EWQ3X+&#10;MAIY/.67B[XZWSYQY6U&gt;TMMC-S.K'2 R,7^^GR:3QS=*L+1JWW7)#ZNCX3NJK&#10;M)(7YH!R;%=0).3NH)V^7Q .&amp;7D:170I926I6E&quot;X;4M\?FHXM]6(0SOZ^$J':&#10;M=YGF^^ &amp;&lt;C]R]%^IMQK+1MLL;[;A^.X]E+=9_F4&gt;Q8W4&lt;FE0&amp;&gt;L2V6'H'&quot;8@&#10;MBWI0JJ7&amp;P*Z2!T&lt;O5XVUQ'88:X42$^LN&lt;WD]L&amp;&amp;A&amp;'QW)_R_;2QHR)NU6K;'&#10;MC^.[&lt;YB:D -YJUNL7L_38-[S#IEN/_[P;JSE!.K;YSB+8-2ZOJDXOFD5_ZA,&#10;M*+=J*U&lt;[YVYW@/T]EWES/^H:OZKL,2!J :NN^G1JB;IE)AYDDXD)F';]7;$'&#10;M2FGN=%3/Y]6RK&lt;HG(/,4(@MQ*Q?;=7G;P%KY5CNO)]EMM3 J.LVL%F^U8@*O&#10;ME:Q6=U:P&quot;BTM,^OENPPU.=LN6^LBV\V9A&quot;K3V&gt;0X-3,[EAJZ+79*;35ZGLU*&#10;M.)?I9;&gt;UM&gt;(N,]=3&amp;Z8N%M-E?&gt;B[RK?-RYWSK9Z7T7UJ9ZU)E#O0NR+RT2XX&#10;M-X06+KYEU6BEZ\1ED5[_'YE]L]ZW'W5.WY'5M#-X&amp;P^ZD^HZ(6\6]&gt;:NS*[M&#10;M\X+5\ZJYZR)O\B0ZR-(XN32#$1N?-#(=UVQ]/U]/3.'B:/.YP2)SMTO+PJ;3&#10;M=78=;4O:H\V&lt;/TOM6J99U&lt;BUE/U+&lt;_TXK1863&lt;ZP6N69F9+F:I-R)Y&quot;O)MVF&#10;MU0](C%,Y+:ZRTDC.:_C9)B++Q&quot;2?QEU3RD;FX&lt;OFJ&lt;SR@=*PP^&quot;@-+UJUB2_&#10;M0JU9NF3UXG.&gt;&lt;&quot;CJQD&quot;E1W3D,\(]&quot;41%'B,NL(!YH1=S=YXUK693]0.N[GRD&#10;M[M*L@#&gt;33,E)5\-?9=EDJ5PO^#84NNT6\[[5MWMU/-)R:;5F[;IXMU%M)Z2N&#10;M/+1M;USFIB%+D_-Q'1R,/U;66WI;#5=YQ0ZC'8X[M[U]B6@*+^!Z.C%IUV,:&#10;M/#&lt;XU]EJU&quot;ZBWD *N;2WX%T6P0/CVZG3;3Z;0FIF9/.L]('9L&quot;*\TU[7C5NU&#10;MZ+0M[KY?R65J H'ID6&amp;;#4\/V%P3WS*L,GTYG4[NCQ]KNQZ!+6J==/LU@6 3&#10;M5DU06@UAXX^-QA@LIR&amp;JGV8UL:R2?0^W1NS&lt;/JDT:6UZD667DXZ'J$;&amp;3I'4&#10;M^D%;O&gt;I=_?#N(CLR&quot;6@.Y]GMIOYOX&amp;2E7C\W6Y)RQQ,])&quot;82&lt;S&lt;Q&amp;:&lt;.59R1&#10;M@$N7&lt;.V'1*A($AEZU(E\CVE-D9A?EY@['!C)B&gt;1$&lt;O9$SO:W6DA.).=N&lt;OJN&#10;MXP2&lt;&gt;&lt;0/G(!P#B$)(T9)+%U'.V'@J&lt;!#&lt;O9*SK8#(SF1G$C.KTK.]3&lt;[?@LS&#10;MD9!_/D(R3S#&amp;8TY\CU/&quot;%?A$N2;!U%H&amp;H:L&quot;H9B/A.R!D.N.BFQ$-B(;OQ8;&#10;M[7L'\X&lt;X9+!\/&gt;H/B\?E4&quot; ?^^2C&amp;W#/I0XCD2&lt;DX4)%1 DPN:3K1U10+5V.&#10;MSUZ_,A^W.2LB$A&amp;)B.P'D:WEZ&lt;(!$98(RQ58:E_$D@E!=,P] TNFB @T)8$*&#10;MN:&quot;1$!!RA&amp;6?L.QR6\0F8A.QV1,V&lt;YD6LO[!Z+EQ#4PPD9EK7U$J;= (/@D]&#10;MSS!34D44&quot;SAQ-*6N4DR)&amp;)&quot;9O3)SW6&lt;1F A,!&amp;;OP$16(BM761F'3L!BSR24&#10;M3(2$^V#R2]=C) QDX )W7?#QIR/?BI6(2&lt;0D8K(G3)Y(NT%0@ODD,G*-D=)W&#10;ME)(B)J$K L*%9$1*CY-(:ZI\JAP5,61DGXQ&lt;^&quot;H&quot;$@&amp;)@.P'D/3N[ON!&gt;W&lt;W&#10;MD&amp;DT8.;S'(JI6:0B,9&amp;8:\2,0L4A=!T2!X$VQ(P&quot;HGQSZH7,&quot;6+F:^V'2,P^&#10;MB;G=&gt;1&amp;AB%!$:#\(K&lt;Y&gt;RV0RRY&amp;:2,TU:HK(H^ &amp;#J$T&lt; EW7$U&quot;#@%A6CDR&#10;M#$ +A=3LE9HK_HJ@1% B*/L!Y&lt;'5+/TR.&amp;JV&gt;!Y\-U^M_@VAB=!&lt;@:;#:,2%&#10;M%Q+A:X_PB$8D9&amp;%(/.5)Z2HMW3! :/8)S:V^BP!%@&quot;) OQ5 J^X@/Y&amp;?J_P$&#10;M'V0@78-. &quot;#&lt;CR,B0^81%H344T'  HF[%7QE?E9.S!&quot;/B$?$8T_OQ!Z8DRQ-&#10;M 5^+12IV994BH(I1(#2FW%!1*!)R 212+&amp;1.&amp;+INA%EEKUGEFL&lt;B+!&amp;6&quot;,O^&#10;M8(E?6B(IMY&quot;2ASX(36C@*[N;CTO&quot;, 82A$+;%!*8'R,I^R8E?F&gt;)F$1,]HM)&#10;M@X?!A_.3/RPA&lt;3O8;P)(C]L_BLHH &gt;F'A(&lt;Z($I[,8EE0+4((59&lt;(R#[!&amp;3C&#10;MJ,A&amp;9&quot;.R\:NRL?G+!+AI#V+R04QZL&gt;&lt;Z4A!?:TVX#( H&lt;!GQI&gt;?Y@8I=C^++&#10;MKWU@&lt;KO/(C 1F C,WH&amp;)K$16KOU0A-)  @=B&lt;DM!&gt;* C(@1P(@%\Y0;4BP W&#10;M[?E6K$1,(B81DSUATD( $TJ$9 &lt;D.0T#1SN&lt;F+P2&quot;(\%(\*CE%&quot;/.8%R0D]0&#10;MW#F]5T@NG141B8A$1/:#R,5&amp;'^926B(F$9,KF*21)[60F@@:^X0KZA&amp;E)&quot;6&quot;&#10;M&quot;\^3@9*1PLW2&gt;\7DJL,B*A&amp;5B,I^4(F[#B U'T=-ES,E0D\3J3V37-JM[D(M&#10;M8A*X3FS_R+.G-&quot;:7O5(3=QU @&quot;) _W  Q5T'D)\=_ 2F :0(B2\I)9P% 0D5&#10;M:,*\4 BJ(]_1&quot;OGY=?E9.3%%/&quot;(&gt;$8_]X!&amp;W?T4F[F B=5@4 A&quot;IPHAP&quot;#A1&#10;M'%Q&quot;(53:&quot;V-&amp;8\PI&gt;\TI&lt;?M7!&quot;6&quot;\EN\_8K;\R J=Z R5+'G P\,*A4CW#/I&#10;MHY2A) [X+C@Q,-=W$95]HA*WYT%8(BR_&amp;2PQJ412=I*2&lt;1$SFT7&amp;+BC&quot;8QT1&#10;MZ2F?&quot;&quot;5B;FD9&lt;TPJ&gt;R&lt;EYI2(2&lt;1DOYC\';;G63VOZL0-&gt;_YTR(P#[OL0!T2[&#10;MD4&lt;X4Y0(%SS&quot;5&quot; &lt;&amp;L2*&gt;_C=9*_(Q U[D)9(RUYI&gt;7IFM&lt;&gt;#=U!&gt;91&amp;FE&lt;C(&#10;MU5^-!$&quot;CT%5$R# TC/0%44H 850Y0L6&amp;DK@#02_O[R 3D8G(Q-^7B=5'4&lt;7M&#10;MTW1R7YU16WZ2I%\@JLZ;VFI=&lt;S@V/#1397E4=):?&amp;))8 F:SZ&lt;#V\OE&gt;96UO&#10;M$24-$%;+#V8&amp;,==[@RR/(*]X(;4VQD[@!B;/]]RJWVV%0XBEP4RQ4''65-9K&#10;ML.#?(5SUM))??H[3ZVF]:I#-3&quot;INAM,:E&amp;  .K0&quot;+:&quot;VUP^VJ$;]+*^]L86Y&#10;MPA1J4UA-O&gt;;\1N9U2YO 92XU:+$;KMS,KY&gt;&amp;Y\WU&quot; J=)]-RB9T6&lt;*R;7263&#10;E*(=T,)I?&amp;345M&gt;N-X.8!A9;$J-WRWV4NVG[:CX6+OO@?3*V*E@  &#10; &#10;end&#10;</svConfiguration>
+    <svRestConfiguration type="str"></svRestConfiguration>
+   </statManagerOptions>
+   <currentUniqueIDForAgent type="int">2</currentUniqueIDForAgent>
+   <_scenarioElementFactory ver="[0, [1, [0, [0]]]]" type="ixScenarioElementFactory">
+    <singletonDict type="dict"/>
+    <referenceCountDict type="dict">
+     <item>
+      <key type="str">qovCoprocessor</key>
+      <value type="int">0</value>
+     </item>
+     <item>
+      <key type="str">Impairment</key>
+      <value type="int">0</value>
+     </item>
+     <item>
+      <key type="str">asrCoprocessor</key>
+      <value type="int">0</value>
+     </item>
+    </referenceCountDict>
+   </_scenarioElementFactory>
+  </item>
+ </testList>
+</root>
diff --git a/samples/vnf_samples/traffic_profiles/acl/acl_ipv4_profile_1flows.ixncfg b/samples/vnf_samples/traffic_profiles/acl/acl_ipv4_profile_1flows.ixncfg
new file mode 100644 (file)
index 0000000..01269be
Binary files /dev/null and b/samples/vnf_samples/traffic_profiles/acl/acl_ipv4_profile_1flows.ixncfg differ
diff --git a/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency.yaml b/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency.yaml
new file mode 100644 (file)
index 0000000..ccd40c3
--- /dev/null
@@ -0,0 +1,121 @@
+# flow definition for ACL tests - 1K flows - ipv4 only
+#
+# the number of flows defines the widest range of parameters
+# for example if srcip_range=1.0.0.1-1.0.0.255 and dst_ip_range=10.0.0.1-10.0.1.255
+# and it should define only 16 flows
+#
+#there is assumption that packets generated will have a random sequences of following addresses pairs
+# in the packets
+# 1. src=1.x.x.x(x.x.x =random from 1..255) dst=10.x.x.x (random from 1..512)
+# 2. src=1.x.x.x(x.x.x =random from 1..255) dst=10.x.x.x (random from 1..512)
+# ...
+# 512. src=1.x.x.x(x.x.x =random from 1..255) dst=10.x.x.x (random from 1..512)
+#
+# not all combination should be filled
+# Any other field with random range will be added to flow definition
+#
+# the example.yaml provides all possibilities for traffic generation
+#
+# the profile defines a public and private side to make limited traffic correlation
+# between private and public side same way as it is made by IXIA solution.
+#
+schema: "isb:traffic_profile:0.1"
+
+# This file is a template, it will be filled with values from tc.yaml before passing to the traffic generator
+
+name:            rfc2544
+description:     Traffic profile to run RFC2544 latency
+traffic_profile:
+  traffic_type : IXIARFC2544Profile # defines traffic behavior - constant or look for highest possible throughput
+  frame_rate : 100  # pc of linerate
+  # that specifies a range (e.g. ipv4 address, port)
+
+
+private_1:
+      ipv4:
+        outer_l2:
+            framesize:
+                64B: "{{ get(imix, 'imix.private.imix_small', '0') }}"
+                128B: "{{ get(imix, 'imix.private.imix_128B', '0') }}"
+                256B: "{{ get(imix, 'imix.private.imix_256B', '0') }}"
+                373b: "{{ get(imix, 'imix.private.imix_373B', '0') }}"
+                570B: "{{get(imix, 'imix.private.imix_570B', '0') }}"
+                1400B: "{{get(imix, 'imix.private.imix_1400B', '0') }}"
+                1518B: "{{get(imix, 'imix.private.imix_1500B', '0') }}"
+
+        outer_l3v4:
+            proto: "udp"
+            srcip4: "{{get(flow, 'flow.srcip4_range', '1.1.1.1-1.15.255.255') }}"
+            dstip4: "{{get(flow, 'flow.dstip4_range', '90.90.1.1-90.105.255.255') }}"
+            count: "{{get(flow, 'flow.count', '1') }}"
+            ttl: 32
+            dscp: 0
+        outer_l4:
+            srcport: "{{get(flow, 'flow.srcport_range', '1234') }}"
+            dstport: "{{get(flow, 'flow.dstport_range', '2001') }}"
+public_1:
+      ipv4:
+        outer_l2:
+            framesize:
+                64B: "{{ get(imix, 'imix.private.imix_small', '0') }}"
+                128B: "{{ get(imix, 'imix.private.imix_128B', '0') }}"
+                256B: "{{ get(imix, 'imix.private.imix_256B', '0') }}"
+                373b: "{{ get(imix, 'imix.private.imix_373B', '0') }}"
+                570B: "{{get(imix, 'imix.private.imix_570B', '0') }}"
+                1400B: "{{get(imix, 'imix.private.imix_1400B', '0') }}"
+                1518B: "{{get(imix, 'imix.private.imix_1500B', '0') }}"
+
+        outer_l3v4:
+            proto: "udp"
+            srcip4: "{{get(flow, 'flow.dstip4_range', '1.1.1.1-1.15.255.255') }}"
+            dstip4: "{{get(flow, 'flow.srcip4_range', '90.90.1.1-90.105.255.255') }}"
+            count: "{{get(flow, 'flow.count', '1') }}"
+            ttl: 32
+            dscp: 0
+        outer_l4:
+            srcport: "{{get(flow, 'flow.srcport_range', '1234') }}"
+            dstport: "{{get(flow, 'flow.dstport_range', '2001') }}"
+private_2:
+      ipv4:
+        outer_l2:
+            framesize:
+                64B: "{{ get(imix, 'imix.private.imix_small', '0') }}"
+                128B: "{{ get(imix, 'imix.private.imix_128B', '0') }}"
+                256B: "{{ get(imix, 'imix.private.imix_256B', '0') }}"
+                373b: "{{ get(imix, 'imix.private.imix_373B', '0') }}"
+                570B: "{{get(imix, 'imix.private.imix_570B', '0') }}"
+                1400B: "{{get(imix, 'imix.private.imix_1400B', '0') }}"
+                1518B: "{{get(imix, 'imix.private.imix_1500B', '0') }}"
+
+        outer_l3v4:
+            proto: "udp"
+            srcip4: "{{get(flow, 'flow.srcip4_range', '1.1.1.1-1.15.255.255') }}"
+            dstip4: "{{get(flow, 'flow.dstip4_range', '90.90.1.1-90.105.255.255') }}"
+            count: "{{get(flow, 'flow.count', '1') }}"
+            ttl: 32
+            dscp: 0
+        outer_l4:
+            srcport: "{{get(flow, 'flow.srcport_range', '1234') }}"
+            dstport: "{{get(flow, 'flow.dstport_range', '2001') }}"
+public_2:
+      ipv4:
+        outer_l2:
+            framesize:
+                64B: "{{ get(imix, 'imix.private.imix_small', '0') }}"
+                128B: "{{ get(imix, 'imix.private.imix_128B', '0') }}"
+                256B: "{{ get(imix, 'imix.private.imix_256B', '0') }}"
+                373b: "{{ get(imix, 'imix.private.imix_373B', '0') }}"
+                570B: "{{get(imix, 'imix.private.imix_570B', '0') }}"
+                1400B: "{{get(imix, 'imix.private.imix_1400B', '0') }}"
+                1518B: "{{get(imix, 'imix.private.imix_1500B', '0') }}"
+
+        outer_l3v4:
+            proto: "udp"
+            srcip4: "{{get(flow, 'flow.dstip4_range', '1.1.1.1-1.15.255.255') }}"
+            dstip4: "{{get(flow, 'flow.srcip4_range', '90.90.1.1-90.105.255.255') }}"
+            count: "{{get(flow, 'flow.count', '1') }}"
+            ttl: 32
+            dscp: 0
+        outer_l4:
+            srcport: "{{get(flow, 'flow.srcport_range', '1234') }}"
+            dstport: "{{get(flow, 'flow.dstport_range', '2001') }}"
diff --git a/samples/vnf_samples/vnf_descriptors/acl_vnf.yaml b/samples/vnf_samples/vnf_descriptors/acl_vnf.yaml
new file mode 100644 (file)
index 0000000..b38e6b8
--- /dev/null
@@ -0,0 +1,84 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+vnfd:vnfd-catalog:
+    vnfd:
+    -   id: AclApproxVnf
+        name: AclVnfSshIntel
+        short-name: AclVnf
+        description: ACL approximation using DPDK
+        mgmt-interface:
+            vdu-id: aclvnf-baremetal
+            {% if user is defined %}
+            user: '{{user}}'  # Value filled by vnfdgen
+            {% endif %}
+            {% if password is defined %}
+            password: '{{password}}'  # Value filled by vnfdgen
+            {% endif %}
+            {% if ip is defined %}
+            ip: '{{ip}}'  # Value filled by vnfdgen
+            {% endif %}
+            {% if key_filename is defined %}
+            key_filename: '{{key_filename}}'  # Value filled by vnfdgen
+            {% endif %}
+        connection-point:
+        -   name: xe0
+            type: VPORT
+        -   name: xe1
+            type: VPORT
+        vdu:
+        -   id: aclvnf-baremetal
+            name: aclvnf-baremetal
+            description: ACL approximation using DPDK
+            vm-flavor:
+                vcpu-count: '4'
+                memory-mb: '4096'
+            external-interface:
+            -   name: xe0
+                virtual-interface:
+                    type: PCI-PASSTHROUGH
+                    # Substitution variables MUST be quoted. Otherwise Python can misinterpet them.
+                    vpci: '{{ interfaces.xe0.vpci }}' # Value filled by vnfdgen
+                    dpdk_port_num:   '{{ interfaces.xe0.dpdk_port_num }}' # Value filled by vnfdgen
+                    local_ip: '{{ interfaces.xe0.local_ip }}' # Value filled by vnfdgen
+                    driver: '{{ interfaces.xe0.driver}}' # Value filled by vnfdgen
+                    dst_ip: '{{ interfaces.xe0.dst_ip }}' # Value filled by vnfdgen
+                    local_mac: '{{ interfaces.xe0.local_mac }}' # Value filled by vnfdgen
+                    netmask: '{{ interfaces.xe0.netmask }}' # Value filled by vnfdgen
+                    dst_mac: '{{ interfaces.xe0.dst_mac }}' # Value filled by vnfdgen
+                    vld_id:  '{{ interfaces.xe0.vld_id }}' # Value filled by vnfdgen
+                    bandwidth: 10 Gbps
+                vnfd-connection-point-ref: xe0
+            -   name: xe1
+                virtual-interface:
+                    type: PCI-PASSTHROUGH
+                    # Substitution variables MUST be quoted. Otherwise Python can misinterpet them.
+                    vpci: '{{ interfaces.xe1.vpci }}' # Value filled by vnfdgen
+                    dpdk_port_num:   '{{ interfaces.xe1.dpdk_port_num }}' # Value filled by vnfdgen
+                    local_ip: '{{ interfaces.xe1.local_ip }}' # Value filled by vnfdgen
+                    driver: '{{ interfaces.xe1.driver}}' # Value filled by vnfdgen
+                    dst_ip: '{{ interfaces.xe1.dst_ip }}' # Value filled by vnfdgen
+                    local_mac: '{{ interfaces.xe1.local_mac }}' # Value filled by vnfdgen
+                    netmask: '{{ interfaces.xe1.netmask }}' # Value filled by vnfdgen
+                    dst_mac: '{{ interfaces.xe1.dst_mac }}' # Value filled by vnfdgen
+                    vld_id:  '{{ interfaces.xe1.vld_id }}' # Value filled by vnfdgen
+                    bandwidth: 10 Gbps
+                vnfd-connection-point-ref: xe1
+            routing_table: {{ routing_table }}
+            nd_route_tbl: {{ nd_route_tbl }}
+        benchmark:
+            kpi:
+                - packets_in
+                - packets_fwd
+                - packets_dropped
diff --git a/samples/vnf_samples/vnf_descriptors/ixia_rfc2544_tpl.yaml b/samples/vnf_samples/vnf_descriptors/ixia_rfc2544_tpl.yaml
new file mode 100644 (file)
index 0000000..4b520f6
--- /dev/null
@@ -0,0 +1,79 @@
+#
+#    Copyright 2016 Intel Corporation
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+#
+vnfd:vnfd-catalog:
+    vnfd:
+    -   id: IXIATrafficGen # ISB class mapping
+        name: IXIAtrafficgen
+        short-name: ixia
+        description: IXIA stateless traffic verifier
+        mgmt-interface:
+            vdu-id: trexgen-baremetal
+            user: '{{user}}'  # Value filled by vnfdgen
+            password: '{{password}}'  # Value filled by vnfdgen
+            ip: '{{ip}}'  # Value filled by vnfdgen
+            tg-config:
+                ixchassis: '{{tg_config.ixchassis}}' #ixia chassis ip
+                tcl_port: '{{tg_config.tcl_port}}' # tcl server port
+                lib_path: '{{tg_config.lib_path}}'
+                root_dir: '{{tg_config.root_dir}}'
+                py_lib_path: '{{tg_config.py_lib_path}}'
+                py_bin_path: '{{tg_config.py_bin_path}}'
+                dut_result_dir: '{{tg_config.dut_result_dir}}'
+                version: '{{tg_config.version}}'
+        connection-point:
+        -   name: xe0
+            type: VPORT
+        -   name: xe1
+            type: VPORT
+        vdu:
+        -   id: trexgen-baremetal
+            name: trexgen-baremetal
+            description: IXIAstateless traffic verifier 
+            external-interface:
+            -   name: xe0
+                virtual-interface:
+                    type: PCI-PASSTHROUGH
+                    # Substitution variables MUST be quoted. Otherwise Python can misinterpet them.
+                    vpci: '{{ interfaces.xe0.vpci }}' # Value filled by vnfdgen
+                    local_iface_name: '{{ interfaces.xe0.local_iface_name }}' # Value filled by vnfdgen
+                    local_ip: '{{ interfaces.xe0.local_ip }}' # Value filled by vnfdgen
+                    driver: '{{ interfaces.xe0.driver}}' # Value filled by vnfdgen
+                    dst_ip: '{{ interfaces.xe0.dst_ip }}' # Value filled by vnfdgen
+                    local_mac: '{{ interfaces.xe0.local_mac }}' # Value filled by vnfdgen
+                    dst_mac: '{{ interfaces.xe0.dst_mac }}' # Value filled by vnfdgen
+                    bandwidth: 10 Gbps
+                vnfd-connection-point-ref: xe0
+            -   name: xe1
+                virtual-interface:
+                    type: PCI-PASSTHROUGH
+                    vpci: '{{ interfaces.xe1.vpci }}' # Value filled by vnfdgen
+                    local_iface_name: '{{ interfaces.xe1.local_iface_name }}' # Value filled by vnfdgen
+                    local_ip: '{{ interfaces.xe1.local_ip }}' # Value filled by vnfdgen
+                    driver: '{{ interfaces.xe1.driver}}' # Value filled by vnfdgen
+                    dst_ip: '{{ interfaces.xe1.dst_ip }}' # Value filled by vnfdgen
+                    local_mac: '{{ interfaces.xe1.local_mac }}' # Value filled by vnfdgen
+                    dst_mac: '{{ interfaces.xe1.dst_mac }}' # Value filled by vnfdgen
+                    bandwidth: 10 Gbps
+                vnfd-connection-point-ref: xe1
+
+        benchmark:
+            kpi:
+                - rx_throughput_fps
+                - tx_throughput_fps
+                - tx_throughput_mbps
+                - rx_throughput_mbps
+                - in_packets
+                - out_packets
diff --git a/samples/vnf_samples/vnf_descriptors/tg_ixload.yaml b/samples/vnf_samples/vnf_descriptors/tg_ixload.yaml
new file mode 100644 (file)
index 0000000..b430d35
--- /dev/null
@@ -0,0 +1,80 @@
+#
+#    Copyright 2016 Intel Corporation
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+#
+vnfd:vnfd-catalog:
+    vnfd:
+    -   id: IxLoadTrafficGen
+        name: IxLoadTrafficGenVnfSshIntel
+        short-name: IxLoadTrafficGenVnf
+        description: IxLoad client/server connection details
+        mgmt-interface:
+            user: '{{user}}'  # Value filled by vnfdgen
+            password: '{{password}}'  # Value filled by vnfdgen
+            ip: '{{ip}}'  # Value filled by vnfdgen
+            tg-config:
+                ixchassis: '{{tg_config.ixchassis}}' #ixia chassis ip
+                tcl_port: '{{tg_config.tcl_port}}' # tcl server port
+                lib_path: '{{tg_config.lib_path}}'
+                root_dir: '{{tg_config.root_dir}}'
+                py_lib_path: '{{tg_config.py_lib_path}}'
+                py_bin_path: '{{tg_config.py_bin_path}}'
+                dut_result_dir: '{{tg_config.dut_result_dir}}'
+                version: '{{tg_config.version}}'
+        vdu:
+        -   id: abclient-baremetal
+            name: abclient-baremetal
+            description: AB client interface details
+            external-interface:
+            -   name: xe0
+                virtual-interface:
+                    type: PCI-PASSTHROUGH
+                    vpci: '{{ interfaces.xe0.vpci }}' # Value filled by vnfdgen
+                    local_iface_name: '{{ interfaces.xe0.local_iface_name }}' # Value filled by vnfdgen
+                    local_ip: '{{ interfaces.xe0.local_ip }}' # Value filled by vnfdgen
+                    dst_ip: '{{ interfaces.xe0.dst_ip }}' # Value filled by vnfdgen
+                    local_mac: '{{ interfaces.xe0.local_mac }}' # Value filled by vnfdgen
+                    dst_mac: '{{ interfaces.xe0.dst_mac }}' # Value filled by vnfdgen
+                    netmask: '{{ interfaces.xe0.netmask }}' # Value filled by vnfdgen
+                    bandwidth: 10 Gbps
+                vnfd-connection-point-ref: xe0
+            -   name: xe1
+                virtual-interface:
+                    type: PCI-PASSTHROUGH
+                    vpci: '{{ interfaces.xe1.vpci }}' # Value filled by vnfdgen
+                    local_iface_name: '{{ interfaces.xe1.local_iface_name }}' # Value filled by vnfdgen
+                    local_ip: '{{ interfaces.xe1.local_ip }}' # Value filled by vnfdgen
+                    dst_ip: '{{ interfaces.xe1.dst_ip }}' # Value filled by vnfdgen
+                    local_mac: '{{ interfaces.xe1.local_mac }}' # Value filled by vnfdgen
+                    dst_mac: '{{ interfaces.xe1.dst_mac }}' # Value filled by vnfdgen
+                    netmask: '{{ interfaces.xe1.netmask }}' # Value filled by vnfdgen
+                    bandwidth: 10 Gbps
+                vnfd-connection-point-ref: xe1
+        benchmark:
+            kpi:
+                - complete_requests
+                - failed_requests
+                - time_taken_for_tests [seconds]
+                - requests_per_second [#/sec] (mean)
+                - time_per_request [ms] (mean, across all concurrent requests)
+                - transfer_rate [Kbytes/sec] received
+                - requests_served_50% (ms)
+                - requests_served_66% (ms)
+                - requests_served_75% (ms)
+                - requests_served_80% (ms)
+                - requests_served_90% (ms)
+                - requests_served_95% (ms)
+                - requests_served_98% (ms)
+                - requests_served_99% (ms)
+                - requests_served_100% (ms)
\ No newline at end of file
diff --git a/samples/vnf_samples/vnf_descriptors/tg_ixload_4port.yaml b/samples/vnf_samples/vnf_descriptors/tg_ixload_4port.yaml
new file mode 100644 (file)
index 0000000..ffbfbde
--- /dev/null
@@ -0,0 +1,104 @@
+#
+#    Copyright 2016 Intel Corporation
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+#
+vnfd:vnfd-catalog:
+    vnfd:
+    -   id: IxLoadTrafficGen
+        name: IxLoadTrafficGenVnfSshIntel
+        short-name: IxLoadTrafficGenVnf
+        description: IxLoad client/server connection details
+        mgmt-interface:
+            user: '{{user}}'  # Value filled by vnfdgen
+            password: '{{password}}'  # Value filled by vnfdgen
+            ip: '{{ip}}'  # Value filled by vnfdgen
+            tg-config:
+                ixchassis: '{{tg_config.ixchassis}}' #ixia chassis ip
+                tcl_port: '{{tg_config.tcl_port}}' # tcl server port
+                lib_path: '{{tg_config.lib_path}}'
+                root_dir: '{{tg_config.root_dir}}'
+                py_lib_path: '{{tg_config.py_lib_path}}'
+                dut_result_dir: '{{tg_config.dut_result_dir}}'
+                version: '{{tg_config.version}}'
+        vdu:
+        -   id: abclient-baremetal
+            name: abclient-baremetal
+            description: AB client interface details
+            external-interface:
+            -   name: xe0
+                virtual-interface:
+                    type: PCI-PASSTHROUGH
+                    vpci: '{{ interfaces.xe0.vpci }}' # Value filled by vnfdgen
+                    local_iface_name: '{{ interfaces.xe0.local_iface_name }}' # Value filled by vnfdgen
+                    local_ip: '{{ interfaces.xe0.local_ip }}' # Value filled by vnfdgen
+                    dst_ip: '{{ interfaces.xe0.dst_ip }}' # Value filled by vnfdgen
+                    local_mac: '{{ interfaces.xe0.local_mac }}' # Value filled by vnfdgen
+                    dst_mac: '{{ interfaces.xe0.dst_mac }}' # Value filled by vnfdgen
+                    netmask: '{{ interfaces.xe0.netmask }}' # Value filled by vnfdgen
+                    bandwidth: 10 Gbps
+                vnfd-connection-point-ref: xe0
+            -   name: xe1
+                virtual-interface:
+                    type: PCI-PASSTHROUGH
+                    vpci: '{{ interfaces.xe1.vpci }}' # Value filled by vnfdgen
+                    local_iface_name: '{{ interfaces.xe1.local_iface_name }}' # Value filled by vnfdgen
+                    local_ip: '{{ interfaces.xe1.local_ip }}' # Value filled by vnfdgen
+                    dst_ip: '{{ interfaces.xe1.dst_ip }}' # Value filled by vnfdgen
+                    local_mac: '{{ interfaces.xe1.local_mac }}' # Value filled by vnfdgen
+                    dst_mac: '{{ interfaces.xe1.dst_mac }}' # Value filled by vnfdgen
+                    netmask: '{{ interfaces.xe1.netmask }}' # Value filled by vnfdgen
+                    bandwidth: 10 Gbps
+                vnfd-connection-point-ref: xe1
+            -   name: xe2
+                virtual-interface:
+                    type: PCI-PASSTHROUGH
+                    vpci: '{{ interfaces.xe2.vpci }}' # Value filled by vnfdgen
+                    local_iface_name: '{{ interfaces.xe2.local_iface_name }}' # Value filled by vnfdgen
+                    local_ip: '{{ interfaces.xe2.local_ip }}' # Value filled by vnfdgen
+                    dst_ip: '{{ interfaces.xe2.dst_ip }}' # Value filled by vnfdgen
+                    local_mac: '{{ interfaces.xe2.local_mac }}' # Value filled by vnfdgen
+                    dst_mac: '{{ interfaces.xe2.dst_mac }}' # Value filled by vnfdgen
+                    netmask: '{{ interfaces.xe2.netmask }}' # Value filled by vnfdgen
+                    bandwidth: 10 Gbps
+                vnfd-connection-point-ref: xe2
+            -   name: xe3
+                virtual-interface:
+                    type: PCI-PASSTHROUGH
+                    vpci: '{{ interfaces.xe3.vpci }}' # Value filled by vnfdgen
+                    local_iface_name: '{{ interfaces.xe3.local_iface_name }}' # Value filled by vnfdgen
+                    local_ip: '{{ interfaces.xe3.local_ip }}' # Value filled by vnfdgen
+                    dst_ip: '{{ interfaces.xe3.dst_ip }}' # Value filled by vnfdgen
+                    local_mac: '{{ interfaces.xe3.local_mac }}' # Value filled by vnfdgen
+                    dst_mac: '{{ interfaces.xe3.dst_mac }}' # Value filled by vnfdgen
+                    netmask: '{{ interfaces.xe3.netmask }}' # Value filled by vnfdgen
+                    bandwidth: 10 Gbps
+                vnfd-connection-point-ref: xe3
+
+        benchmark:
+            kpi:
+                - complete_requests
+                - failed_requests
+                - time_taken_for_tests [seconds]
+                - requests_per_second [#/sec] (mean)
+                - time_per_request [ms] (mean, across all concurrent requests)
+                - transfer_rate [Kbytes/sec] received
+                - requests_served_50% (ms)
+                - requests_served_66% (ms)
+                - requests_served_75% (ms)
+                - requests_served_80% (ms)
+                - requests_served_90% (ms)
+                - requests_served_95% (ms)
+                - requests_served_98% (ms)
+                - requests_served_99% (ms)
+                - requests_served_100% (ms)
index a831287..a37f83b 100644 (file)
@@ -17,7 +17,9 @@ description: >
     "etc/yardstick/nodes/pod.yaml.ipmi.sample").
 
 {% set file = file or '/etc/yardstick/pod.yaml' %}
-{% set jumphost = jumphost or 'node0' %}
+{% set jump_host = jump_host or 'node0' %}
+{% set attack_host = attack_host or 'node1' %}
+{% set monitor_time = monitor_time or 180 %}
 
 scenarios:
 -
@@ -25,30 +27,38 @@ scenarios:
   options:
     attackers:
     - fault_type: "bare-metal-down"
-      host: node1
-      jump_host: {{jumphost}}
+      host: {{attack_host}}
+      jump_host: {{jump_host}}
 
     monitors:
     - monitor_type: "openstack-cmd"
       command_name: "openstack image list"
-      monitor_time: 10
+      monitor_time: {{monitor_time}}
       monitor_number: 3
+      sla:
+        max_outage_time: 5
     - monitor_type: "openstack-cmd"
       command_name: "openstack router list"
-      monitor_time: 10
+      monitor_time: {{monitor_time}}
       monitor_number: 3
+      sla:
+        max_outage_time: 5
     - monitor_type: "openstack-cmd"
       command_name: "openstack stack list"
-      monitor_time: 10
+      monitor_time: {{monitor_time}}
       monitor_number: 3
+      sla:
+        max_outage_time: 5
     - monitor_type: "openstack-cmd"
       command_name: "openstack volume list"
-      monitor_time: 10
+      monitor_time: {{monitor_time}}
       monitor_number: 3
+      sla:
+        max_outage_time: 5
 
   nodes:
-    node1: node1.LF
-    node0: node0.LF
+    {{attack_host}}: {{attack_host}}.LF
+    {{jump_host}}: {{jump_host}}.LF
 
   runner:
     type: Iteration
index c229277..417327c 100644 (file)
@@ -13,11 +13,15 @@ description: >
     Test case for TC054 :OpenStack VIP Master Node abnormally shutdown High Availability;
     This test case is written by new scenario-based HA testing framework.
 
+{% set attack_host = attack_host or 'node1' %}
+{% set check_host = check_host or 'node2' %}
+{% set jump_host = jump_host or 'node0' %}
 {% set file = file or '/etc/yardstick/pod.yaml' %}
 {% set vip_management = vip_management or '192.168.0.2' %}
 {% set vip_public = vip_public or '172.16.0.3' %}
 {% set vip_router_management = vip_router_management or '192.168.0.1' %}
 {% set vip_router_public = vip_router_public or '172.16.0.2' %}
+{% set monitor_time = monitor_time or 180 %}
 
 scenarios:
   -
@@ -26,15 +30,16 @@ scenarios:
       attackers:
         -
           fault_type: "bare-metal-down"
-          host: node1
+          host: {{attack_host}}
           key: "bare-metal-down"
+          jump_host: {{jump_host}}
 
       monitors:
         -
           monitor_type: "openstack-cmd"
           key: "list-images"
           command_name: "openstack image list"
-          monitor_time: 10
+          monitor_time: {{monitor_time}}
           monitor_number: 3
           sla:
             max_outage_time: 5
@@ -43,8 +48,8 @@ scenarios:
           monitor_type: "general-monitor"
           monitor_key: "ip-status"
           key: "vip-mgmt-status"
-          host: node2
-          monitor_time: 10
+          host: {{check_host}}
+          monitor_time: {{monitor_time}}
           monitor_number: 3
           sla:
             max_outage_time: 5
@@ -55,8 +60,8 @@ scenarios:
           monitor_type: "general-monitor"
           monitor_key: "ip-status"
           key: "vip-routerp-status"
-          host: node2
-          monitor_time: 10
+          host: {{check_host}}
+          monitor_time: {{monitor_time}}
           monitor_number: 3
           sla:
             max_outage_time: 5
@@ -67,8 +72,8 @@ scenarios:
           monitor_type: "general-monitor"
           monitor_key: "ip-status"
           key: "vip-router-status"
-          host: node2
-          monitor_time: 10
+          host: {{check_host}}
+          monitor_time: {{monitor_time}}
           monitor_number: 3
           sla:
             max_outage_time: 5
@@ -79,8 +84,8 @@ scenarios:
           monitor_type: "general-monitor"
           monitor_key: "ip-status"
           key: "vip-pub"
-          host: node2
-          monitor_time: 10
+          host: {{check_host}}
+          monitor_time: {{monitor_time}}
           monitor_number: 3
           sla:
             max_outage_time: 5
@@ -119,8 +124,9 @@ scenarios:
           index: 6
 
     nodes:
-      node1: node1.LF
-      node2: node2.LF
+      {{jump_host}}: {{jump_host}}.LF
+      {{attack_host}}: {{attack_host}}.LF
+      {{check_host}}: {{check_host}}.LF
     runner:
       type: Duration
       duration: 1
index 53b5652..f29de5c 100644 (file)
@@ -21,6 +21,7 @@ import mock
 from six.moves import configparser
 
 from yardstick.common import utils
+from yardstick.common import constants
 
 
 class IterSubclassesTestCase(unittest.TestCase):
@@ -99,7 +100,7 @@ class GetParaFromYaml(unittest.TestCase):
         get_env.return_value = self._get_file_abspath(file_path)
         args = 'releng.file'
         default = 'hello'
-        self.assertTrue(utils.get_param(args, default), default)
+        self.assertTrue(constants.get_param(args, default), default)
 
     @mock.patch('yardstick.common.utils.os.environ.get')
     def test_get_param_para_exists(self, get_env):
@@ -107,7 +108,7 @@ class GetParaFromYaml(unittest.TestCase):
         get_env.return_value = self._get_file_abspath(file_path)
         args = 'releng.dir'
         para = '/home/opnfv/repos/releng'
-        self.assertEqual(para, utils.get_param(args))
+        self.assertEqual(para, constants.get_param(args))
 
     def _get_file_abspath(self, filename):
         curr_path = os.path.dirname(os.path.abspath(__file__))
@@ -916,6 +917,32 @@ class TestUtils(unittest.TestCase):
         result = utils.parse_ini_file('my_path')
         self.assertDictEqual(result, expected)
 
+    def test_join_non_strings(self):
+        self.assertEqual(utils.join_non_strings(':'), '')
+        self.assertEqual(utils.join_non_strings(':', 'a'), 'a')
+        self.assertEqual(utils.join_non_strings(':', 'a', 2, 'c'), 'a:2:c')
+        self.assertEqual(utils.join_non_strings(':', ['a', 2, 'c']), 'a:2:c')
+        self.assertEqual(utils.join_non_strings(':', 'abc'), 'abc')
+
+    def test_validate_non_string_sequence(self):
+        self.assertEqual(utils.validate_non_string_sequence([1, 2, 3]), [1, 2, 3])
+        self.assertIsNone(utils.validate_non_string_sequence('123'))
+        self.assertIsNone(utils.validate_non_string_sequence(1))
+
+        self.assertEqual(utils.validate_non_string_sequence(1, 2), 2)
+        self.assertEqual(utils.validate_non_string_sequence(1, default=2), 2)
+
+        with self.assertRaises(RuntimeError):
+            utils.validate_non_string_sequence(1, raise_exc=RuntimeError)
+
+    def test_error_class(self):
+        with self.assertRaises(RuntimeError):
+            utils.ErrorClass()
+
+        error_instance = utils.ErrorClass(test='')
+        with self.assertRaises(AttributeError):
+            error_instance.get_name()
+
 
 class TestUtilsIpAddrMethods(unittest.TestCase):
 
diff --git a/tests/unit/network_services/helpers/acl_vnf_topology_ixia.yaml b/tests/unit/network_services/helpers/acl_vnf_topology_ixia.yaml
new file mode 100644 (file)
index 0000000..606d557
--- /dev/null
@@ -0,0 +1,50 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+nsd:nsd-catalog:
+    nsd:
+    -   id: VACL
+        name: VACL
+        short-name: VACL
+        description: scenario with VACL,L3fwd and VNF
+        constituent-vnfd:
+        -   member-vnf-index: '1'
+            vnfd-id-ref: tg__1
+            VNF model: ../../vnf_descriptors/ixia_rfc2544_tpl.yaml
+        -   member-vnf-index: '2'
+            vnfd-id-ref: vnf__1
+            VNF model: ../../vnf_descriptors/acl_vnf.yaml
+
+        vld:
+        -   id: private_1
+            name: tg__1 to vnf__1 link 1
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: tg__1                  #TREX
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe0
+                vnfd-id-ref: vnf__1                  #VNF
+
+        -   id: public_1
+            name: vnf__1 to tg__1 link 2
+            type: ELAN
+            vnfd-connection-point-ref:
+            -   member-vnf-index-ref: '2'
+                vnfd-connection-point-ref: xe1
+                vnfd-id-ref: vnf__1                  #L3fwd
+            -   member-vnf-index-ref: '1'
+                vnfd-connection-point-ref: xe1
+                vnfd-id-ref: tg__1                  #VACL VNF
diff --git a/tests/unit/network_services/libs/__init__.py b/tests/unit/network_services/libs/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/unit/network_services/libs/ixia_libs/__init__.py b/tests/unit/network_services/libs/ixia_libs/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/unit/network_services/libs/ixia_libs/test_IxNet.py b/tests/unit/network_services/libs/ixia_libs/test_IxNet.py
new file mode 100644 (file)
index 0000000..9114b51
--- /dev/null
@@ -0,0 +1,882 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Unittest for yardstick.network_services.libs.ixia_libs.IxNet
+
+from __future__ import absolute_import
+import unittest
+import mock
+
+from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IxNextgen
+from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IP_VERSION_4
+from yardstick.network_services.libs.ixia_libs.IxNet.IxNet import IP_VERSION_6
+
+
+class TestIxNextgen(unittest.TestCase):
+
+    def test___init__(self):
+        ixnet_gen = IxNextgen()
+        self.assertIsNone(ixnet_gen._bidir)
+
+    @mock.patch("yardstick.network_services.libs.ixia_libs.IxNet.IxNet.IxNetwork")
+    @mock.patch("yardstick.network_services.libs.ixia_libs.IxNet.IxNet.sys")
+    def test_connect(self, mock_sys, mock_ix_network):
+        mock_ix_network.IxNet.return_value = mock_ixnet = mock.Mock()
+
+        ixnet_gen = IxNextgen()
+        ixnet_gen.get_config = mock.MagicMock()
+        ixnet_gen.get_ixnet = mock.MagicMock()
+
+        result = ixnet_gen._connect({"py_lib_path": "/tmp"})
+        self.assertIsNotNone(result)
+        self.assertEqual(mock_ix_network.IxNet.call_count, 1)
+        self.assertEqual(mock_ixnet.connect.call_count, 1)
+
+    def test_clear_ixia_config(self):
+        ixnet = mock.MagicMock()
+        ixnet.execute = mock.Mock()
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.clear_ixia_config()
+        self.assertIsNone(result)
+        self.assertEqual(ixnet.execute.call_count, 1)
+
+    def test_load_ixia_profile(self):
+        ixnet = mock.MagicMock()
+        ixnet.execute = mock.Mock()
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.load_ixia_profile({})
+        self.assertIsNone(result)
+        self.assertEqual(ixnet.execute.call_count, 1)
+
+    def test_load_ixia_config(self):
+        ixnet = mock.MagicMock()
+        ixnet.execute = mock.Mock()
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.ix_load_config({})
+        self.assertIsNone(result)
+        self.assertEqual(ixnet.execute.call_count, 2)
+
+    @mock.patch('yardstick.network_services.libs.ixia_libs.IxNet.IxNet.log')
+    def test_ix_assign_ports(self, mock_logger):
+        ixnet = mock.MagicMock()
+        ixnet.getList.return_value = [0, 1]
+        ixnet.getAttribute.side_effect = ['up', 'down']
+
+        config = {
+            'chassis': '1.1.1.1',
+            'card1': '1',
+            'card2': '2',
+            'port1': '2',
+            'port2': '2',
+        }
+
+        ixnet_gen = IxNextgen(ixnet)
+        ixnet_gen._cfg = config
+
+        result = ixnet_gen.ix_assign_ports()
+        self.assertIsNone(result)
+        self.assertEqual(ixnet.execute.call_count, 1)
+        self.assertEqual(ixnet.commit.call_count, 1)
+        self.assertEqual(ixnet.getAttribute.call_count, 2)
+        self.assertEqual(mock_logger.error.call_count, 1)
+
+    def test_ix_update_frame(self):
+        static_traffic_params = {
+            "private": {
+                "id": 1,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:03",
+                    "framesPerSecond": True,
+                    "framesize": {
+                        "64B": "100",
+                        "1KB": "0",
+                    },
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "2001",
+                    "srcport": "1234"
+                },
+                "traffic_type": "continuous"
+            },
+            "public": {
+                "id": 2,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:04",
+                    "framesPerSecond": False,
+                    "framesize": {"64B": "100"},
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "1234",
+                    "srcport": "2001"
+                },
+                "traffic_type": "continuous"
+            }
+        }
+
+        ixnet = mock.MagicMock()
+        ixnet.remapIds.return_value = ["0"]
+        ixnet.setMultiAttribute.return_value = [1]
+        ixnet.commit.return_value = [1]
+        ixnet.getList.side_effect = [
+            [1],
+            [1],
+            [1],
+            [
+                "ethernet.header.destinationAddress",
+                "ethernet.header.sourceAddress",
+            ],
+        ]
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.ix_update_frame(static_traffic_params)
+        self.assertIsNone(result)
+        self.assertEqual(ixnet.setMultiAttribute.call_count, 7)
+        self.assertEqual(ixnet.commit.call_count, 2)
+
+    def test_ix_update_udp(self):
+        ixnet = mock.MagicMock()
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.ix_update_udp({})
+        self.assertIsNone(result)
+
+    def test_ix_update_tcp(self):
+        ixnet = mock.MagicMock()
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.ix_update_tcp({})
+        self.assertIsNone(result)
+
+    def test_ix_start_traffic(self):
+        ixnet = mock.MagicMock()
+        ixnet.getList.return_value = [0]
+        ixnet.getAttribute.return_value = 'down'
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.ix_start_traffic()
+        self.assertIsNone(result)
+        self.assertEqual(ixnet.getList.call_count, 1)
+        self.assertEqual(ixnet.execute.call_count, 3)
+
+    def test_ix_stop_traffic(self):
+        ixnet = mock.MagicMock()
+        ixnet.getList.return_value = [0]
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.ix_stop_traffic()
+        self.assertIsNone(result)
+        self.assertEqual(ixnet.getList.call_count, 1)
+        self.assertEqual(ixnet.execute.call_count, 1)
+
+    def test_ix_get_statistics(self):
+        ixnet = mock.MagicMock()
+        ixnet.execute.return_value = ""
+        ixnet.getList.side_effect = [
+            [
+                '::ixNet::OBJ-/statistics/view:"Traffic Item Statistics"',
+                '::ixNet::OBJ-/statistics/view:"Port Statistics"',
+            ],
+            [
+                '::ixNet::OBJ-/statistics/view:"Flow Statistics"',
+            ],
+        ]
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.ix_get_statistics()
+        self.assertIsNotNone(result)
+        self.assertEqual(ixnet.getList.call_count, 2)
+        self.assertEqual(ixnet.execute.call_count, 20)
+
+    def test_find_view_obj_no_where(self):
+        views = ['here', 'there', 'everywhere']
+        result = IxNextgen.find_view_obj('no_where', views)
+        self.assertEqual(result, '')
+
+    def test_add_ip_header_v4(self):
+        static_traffic_params = {
+            "private": {
+                "id": 1,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:03",
+                    "framesPerSecond": True,
+                    "framesize": {"64B": "100"},
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "count": 1024,
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "2001",
+                    "srcport": "1234"
+                },
+                "traffic_type": "continuous"
+            },
+            "public": {
+                "id": 2,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:04",
+                    "framesPerSecond": True,
+                    "framesize": {"64B": "100"},
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "1234",
+                    "srcport": "2001"
+                },
+                "traffic_type": "continuous"
+            }
+        }
+
+        ixnet = mock.MagicMock()
+        ixnet.remapIds.return_value = ["0"]
+        ixnet.setMultiAttribute.return_value = [1]
+        ixnet.commit.return_value = [1]
+        ixnet.getList.side_effect = [[1], [0], [0], ["srcIp", "dstIp"]]
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
+        self.assertIsNone(result)
+        self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
+        self.assertEqual(ixnet.commit.call_count, 1)
+
+    def test_add_ip_header_v4_nothing_to_do(self):
+        static_traffic_params = {
+            "private": {
+                "id": 1,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:03",
+                    "framesPerSecond": True,
+                    "framesize": {"64B": "100"},
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "count": 1024,
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "2001",
+                    "srcport": "1234"
+                },
+                "traffic_type": "continuous"
+            },
+            "public": {
+                "id": 2,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:04",
+                    "framesPerSecond": True,
+                    "framesize": {"64B": "100"},
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "1234",
+                    "srcport": "2001"
+                },
+                "traffic_type": "continuous"
+            }
+        }
+
+        ixnet = mock.MagicMock()
+        ixnet.remapIds.return_value=["0"]
+        ixnet.setMultiAttribute.return_value = [1]
+        ixnet.commit.return_value = [1]
+        ixnet.getList.side_effect = [[1], [0, 1], [0], ["srcIp", "dstIp"]]
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_4)
+        self.assertIsNone(result)
+        self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
+        self.assertEqual(ixnet.commit.call_count, 1)
+
+    def test_add_ip_header_v6(self):
+        static_traffic_profile = {
+            "private": {
+                "id": 1,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:03",
+                    "framesPerSecond": True,
+                    "framesize": {"64B": "100"},
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "2001",
+                    "srcport": "1234"
+                },
+                "traffic_type": "continuous"
+            },
+            "public": {
+                "id": 2,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:04",
+                    "framesPerSecond": True,
+                    "framesize": {"64B": "100"},
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "1234",
+                    "srcport": "2001"
+                },
+                "traffic_type": "continuous"
+            }
+        }
+
+        ixnet = mock.MagicMock()
+        ixnet.getList.side_effect = [[1], [1], [1], ["srcIp", "dstIp"]]
+        ixnet.remapIds.return_value = ["0"]
+        ixnet.setMultiAttribute.return_value = [1]
+        ixnet.commit.return_value = [1]
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.add_ip_header(static_traffic_profile, IP_VERSION_6)
+        self.assertIsNone(result)
+        self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
+        self.assertEqual(ixnet.commit.call_count, 1)
+
+    def test_add_ip_header_v6_nothing_to_do(self):
+        static_traffic_params = {
+            "private": {
+                "id": 1,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:03",
+                    "framesPerSecond": True,
+                    "framesize": {"64B": "100"},
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "count": 1024,
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "2001",
+                    "srcport": "1234"
+                },
+                "traffic_type": "continuous"
+            },
+            "public": {
+                "id": 2,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:04",
+                    "framesPerSecond": True,
+                    "framesize": {"64B": "100"},
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "1234",
+                    "srcport": "2001"
+                },
+                "traffic_type": "continuous"
+            }
+        }
+
+        ixnet = mock.MagicMock()
+        ixnet.getList.side_effect = [[1], [0, 1], [1], ["srcIP", "dstIP"]]
+        ixnet.remapIds.return_value = ["0"]
+        ixnet.setMultiAttribute.return_value = [1]
+        ixnet.commit.return_value = [1]
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.add_ip_header(static_traffic_params, IP_VERSION_6)
+        self.assertIsNone(result)
+        self.assertEqual(ixnet.setMultiAttribute.call_count, 0)
+
+    def test_set_random_ip_multi_attributes_bad_ip_version(self):
+        bad_ip_version = object()
+        ixnet_gen = IxNextgen(mock.Mock())
+        mock1 = mock.Mock()
+        mock2 = mock.Mock()
+        mock3 = mock.Mock()
+        with self.assertRaises(ValueError):
+            ixnet_gen.set_random_ip_multi_attributes(mock1, bad_ip_version, mock2, mock3)
+
+    def test_get_config(self):
+        tg_cfg = {
+            "vdu": [
+                {
+                    "external-interface": [
+                        {
+                            "virtual-interface": {
+                                "vpci": "0000:07:00.1",
+                            },
+                        },
+                        {
+                            "virtual-interface": {
+                                "vpci": "0001:08:01.2",
+                            },
+                        },
+                    ],
+                },
+            ],
+            "mgmt-interface": {
+                "ip": "test1",
+                "tg-config": {
+                    "dut_result_dir": "test2",
+                    "version": "test3",
+                    "ixchassis": "test4",
+                    "tcl_port": "test5",
+                    "py_lib_path": "test6",
+                },
+            }
+        }
+
+        expected = {
+            'py_lib_path': 'test6',
+            'machine': 'test1',
+            'port': 'test5',
+            'chassis': 'test4',
+            'card1': '0000',
+            'port1': '07',
+            'card2': '0001',
+            'port2': '08',
+            'output_dir': 'test2',
+            'version': 'test3',
+            'bidir': True,
+        }
+
+        result = IxNextgen.get_config(tg_cfg)
+        self.assertDictEqual(result, expected)
+
+    def test_ix_update_ether(self):
+        static_traffic_params = {
+            "private": {
+                "id": 1,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:03",
+                    "framesPerSecond": True,
+                    "framesize": 64,
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "2001",
+                    "srcport": "1234"
+                },
+                "traffic_type": "continuous"
+            },
+            "public": {
+                "id": 2,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:04",
+                    "framesPerSecond": True,
+                    "framesize": 64,
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "1234",
+                    "srcport": "2001"
+                },
+                "traffic_type": "continuous"
+            }
+        }
+
+        ixnet = mock.MagicMock()
+        ixnet.setMultiAttribute.return_value = [1]
+        ixnet.commit.return_value = [1]
+        ixnet.getList.side_effect = [
+            [1],
+            [1],
+            [1],
+            [
+                "ethernet.header.destinationAddress",
+                "ethernet.header.sourceAddress",
+            ],
+        ]
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.ix_update_ether(static_traffic_params)
+        self.assertIsNone(result)
+        self.assertGreater(ixnet.setMultiAttribute.call_count, 0)
+
+    def test_ix_update_ether_nothing_to_do(self):
+        static_traffic_params = {
+            "private": {
+                "id": 1,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l3": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "2001",
+                    "srcport": "1234"
+                },
+                "traffic_type": "continuous"
+            },
+            "public": {
+                "id": 2,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l3": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "1234",
+                    "srcport": "2001"
+                },
+                "traffic_type": "continuous"
+            }
+        }
+
+        ixnet = mock.MagicMock()
+        ixnet.setMultiAttribute.return_value = [1]
+        ixnet.commit.return_value = [1]
+        ixnet.getList.side_effect=[
+            [1],
+            [1],
+            [1],
+            [
+                "ethernet.header.destinationAddress",
+                "ethernet.header.sourceAddress",
+            ],
+        ]
+
+        ixnet_gen = IxNextgen(ixnet)
+
+        result = ixnet_gen.ix_update_ether(static_traffic_params)
+        self.assertIsNone(result)
+        self.assertEqual(ixnet.setMultiAttribute.call_count, 0)
diff --git a/tests/unit/network_services/traffic_profile/test_http_ixload.py b/tests/unit/network_services/traffic_profile/test_http_ixload.py
new file mode 100644 (file)
index 0000000..2e1b6f4
--- /dev/null
@@ -0,0 +1,250 @@
+# Copyright (c) 2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from __future__ import absolute_import
+import unittest
+import mock
+import runpy
+
+from oslo_serialization import jsonutils
+
+from yardstick.network_services.traffic_profile import http_ixload
+
+
+class TestIxLoadTrafficGen(unittest.TestCase):
+
+    def test_parse_run_test(self):
+        ports = [1, 2, 3]
+        test_input = {
+            "remote_server": "REMOTE_SERVER",
+            "ixload_cfg": "IXLOAD_CFG",
+            "result_dir": "RESULT_DIR",
+            "ixia_chassis": "IXIA_CHASSIS",
+            "IXIA": {
+                "card": "CARD",
+                "ports": ports,
+            },
+        }
+        j = jsonutils.dump_as_bytes(test_input)
+        ixload = http_ixload.IXLOADHttpTest(j)
+        self.assertDictEqual(ixload.test_input, test_input)
+        self.assertIsNone(ixload.parse_run_test())
+        self.assertEqual(ixload.ports_to_reassign, [
+            ["IXIA_CHASSIS", "CARD", 1],
+            ["IXIA_CHASSIS", "CARD", 2],
+            ["IXIA_CHASSIS", "CARD", 3],
+        ])
+
+    def test_format_ports_for_reassignment(self):
+        ports = [
+            ["IXIA_CHASSIS", "CARD", 1],
+            ["IXIA_CHASSIS", "CARD", 2],
+            ["IXIA_CHASSIS", "CARD", 3],
+        ]
+        formatted = http_ixload.IXLOADHttpTest.format_ports_for_reassignment(ports)
+        self.assertEqual(formatted, [
+            "IXIA_CHASSIS;CARD;1",
+            "IXIA_CHASSIS;CARD;2",
+            "IXIA_CHASSIS;CARD;3",
+        ])
+
+    def test_reassign_ports(self):
+        ports = [1, 2, 3]
+        test_input = {
+            "remote_server": "REMOTE_SERVER",
+            "ixload_cfg": "IXLOAD_CFG",
+            "result_dir": "RESULT_DIR",
+            "ixia_chassis": "IXIA_CHASSIS",
+            "IXIA": {
+                "card": "CARD",
+                "ports": ports,
+            },
+        }
+        j = jsonutils.dump_as_bytes(test_input)
+        ixload = http_ixload.IXLOADHttpTest(j)
+        repository = mock.Mock()
+        test = mock.MagicMock()
+        test.setPorts = mock.Mock()
+        ports_to_reassign = [(1, 2, 3), (1, 2, 4)]
+        ixload.format_ports_for_reassignment = mock.Mock(return_value=["1;2;3"])
+        self.assertIsNone(ixload.reassign_ports(test, repository, ports_to_reassign))
+
+    def test_reassign_ports_error(self):
+        ports = [1, 2, 3]
+        test_input = {
+            "remote_server": "REMOTE_SERVER",
+            "ixload_cfg": "IXLOAD_CFG",
+            "result_dir": "RESULT_DIR",
+            "ixia_chassis": "IXIA_CHASSIS",
+            "IXIA": {
+                "card": "CARD",
+                "ports": ports,
+            },
+        }
+        j = jsonutils.dump_as_bytes(test_input)
+        ixload = http_ixload.IXLOADHttpTest(j)
+        repository = mock.Mock()
+        test = "test"
+        ports_to_reassign = [(1, 2, 3), (1, 2, 4)]
+        ixload.format_ports_for_reassignment = mock.Mock(return_value=["1;2;3"])
+        ixload.ix_load = mock.MagicMock()
+        ixload.ix_load.delete = mock.Mock()
+        ixload.ix_load.disconnect = mock.Mock()
+        with self.assertRaises(Exception):
+            ixload.reassign_ports(test, repository, ports_to_reassign)
+
+    def test_stat_collector(self):
+        args = [0, 1]
+        self.assertIsNone(
+            http_ixload.IXLOADHttpTest.stat_collector(*args))
+
+    def test_IxL_StatCollectorCommand(self):
+        args = [[0, 1, 2, 3], [0, 1, 2, 3]]
+        self.assertIsNone(
+            http_ixload.IXLOADHttpTest.IxL_StatCollectorCommand(*args))
+
+    def test_set_results_dir(self):
+        test_stat_collector = mock.MagicMock()
+        test_stat_collector.setResultDir = mock.Mock()
+        results_on_windows = "c:/Results"
+        self.assertIsNone(
+            http_ixload.IXLOADHttpTest.set_results_dir(test_stat_collector,
+                                                       results_on_windows))
+
+    def test_set_results_dir_error(self):
+        test_stat_collector = ""
+        results_on_windows = "c:/Results"
+        with self.assertRaises(Exception):
+            http_ixload.IXLOADHttpTest.set_results_dir(test_stat_collector, results_on_windows)
+
+    def test_load_config_file(self):
+        ports = [1, 2, 3]
+        test_input = {
+            "remote_server": "REMOTE_SERVER",
+            "ixload_cfg": "IXLOAD_CFG",
+            "result_dir": "RESULT_DIR",
+            "ixia_chassis": "IXIA_CHASSIS",
+            "IXIA": {
+                "card": "CARD",
+                "ports": ports,
+            },
+        }
+        j = jsonutils.dump_as_bytes(test_input)
+        ixload = http_ixload.IXLOADHttpTest(j)
+        ixload.ix_load = mock.MagicMock()
+        ixload.ix_load.new = mock.Mock(return_value="")
+        self.assertIsNotNone(ixload.load_config_file("ixload.cfg"))
+
+    def test_load_config_file_error(self):
+        ports = [1, 2, 3]
+        test_input = {
+            "remote_server": "REMOTE_SERVER",
+            "ixload_cfg": "IXLOAD_CFG",
+            "result_dir": "RESULT_DIR",
+            "ixia_chassis": "IXIA_CHASSIS",
+            "IXIA": {
+                "card": "CARD",
+                "ports": ports,
+            },
+        }
+        j = jsonutils.dump_as_bytes(test_input)
+        ixload = http_ixload.IXLOADHttpTest(j)
+        ixload.ix_load = "test"
+        with self.assertRaises(Exception):
+            ixload.load_config_file("ixload.cfg")
+
+    @mock.patch('yardstick.network_services.traffic_profile.http_ixload.IxLoad')
+    @mock.patch('yardstick.network_services.traffic_profile.http_ixload.StatCollectorUtils')
+    def test_start_http_test_connect_error(self, mock_collector_type, mock_ixload_type):
+        ports = [1, 2, 3]
+        test_input = {
+            "remote_server": "REMOTE_SERVER",
+            "ixload_cfg": "IXLOAD_CFG",
+            "result_dir": "RESULT_DIR",
+            "ixia_chassis": "IXIA_CHASSIS",
+            "IXIA": {
+                "card": "CARD",
+                "ports": ports,
+            },
+        }
+
+        j = jsonutils.dump_as_bytes(test_input)
+
+        mock_ixload = mock_ixload_type()
+        mock_ixload.connect.side_effect = RuntimeError
+
+        ixload = http_ixload.IXLOADHttpTest(j)
+        ixload.results_on_windows = 'windows_result_dir'
+        ixload.result_dir = 'my_result_dir'
+
+        with self.assertRaises(RuntimeError):
+            ixload.start_http_test()
+
+    @mock.patch('yardstick.network_services.traffic_profile.http_ixload.IxLoad')
+    @mock.patch('yardstick.network_services.traffic_profile.http_ixload.StatCollectorUtils')
+    def test_start_http_test(self, mock_collector_type, mock_ixload_type):
+        ports = [1, 2, 3]
+        test_input = {
+            "remote_server": "REMOTE_SERVER",
+            "ixload_cfg": "IXLOAD_CFG",
+            "result_dir": "RESULT_DIR",
+            "ixia_chassis": "IXIA_CHASSIS",
+            "IXIA": {
+                "card": "CARD",
+                "ports": ports,
+            },
+        }
+
+        j = jsonutils.dump_as_bytes(test_input)
+
+        ixload = http_ixload.IXLOADHttpTest(j)
+        ixload.results_on_windows = 'windows_result_dir'
+        ixload.result_dir = 'my_result_dir'
+        ixload.load_config_file = mock.MagicMock()
+
+        self.assertIsNone(ixload.start_http_test())
+
+    @mock.patch('yardstick.network_services.traffic_profile.http_ixload.IxLoad')
+    @mock.patch('yardstick.network_services.traffic_profile.http_ixload.StatCollectorUtils')
+    def test_start_http_test_reassign_error(self, mock_collector_type, mock_ixload_type):
+        ports = [1, 2, 3]
+        test_input = {
+            "remote_server": "REMOTE_SERVER",
+            "ixload_cfg": "IXLOAD_CFG",
+            "result_dir": "RESULT_DIR",
+            "ixia_chassis": "IXIA_CHASSIS",
+            "IXIA": {
+                "card": "CARD",
+                "ports": ports,
+            },
+        }
+
+        j = jsonutils.dump_as_bytes(test_input)
+
+        ixload = http_ixload.IXLOADHttpTest(j)
+        ixload.load_config_file = mock.MagicMock()
+
+        reassign_ports = mock.Mock(side_effect=RuntimeError)
+        ixload.reassign_ports = reassign_ports
+        ixload.results_on_windows = 'windows_result_dir'
+        ixload.result_dir = 'my_result_dir'
+
+        ixload.start_http_test()
+        self.assertEqual(reassign_ports.call_count, 1)
+
+    @mock.patch("yardstick.network_services.traffic_profile.http_ixload.IXLOADHttpTest")
+    def test_main(self, IXLOADHttpTest):
+        args = ["1", "2", "3"]
+        http_ixload.main(args)
diff --git a/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py b/tests/unit/network_services/traffic_profile/test_ixia_rfc2544.py
new file mode 100644 (file)
index 0000000..6dba64a
--- /dev/null
@@ -0,0 +1,648 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from __future__ import absolute_import
+from __future__ import division
+import unittest
+import mock
+
+STL_MOCKS = {
+    'stl': mock.MagicMock(),
+    'stl.trex_stl_lib': mock.MagicMock(),
+    'stl.trex_stl_lib.base64': mock.MagicMock(),
+    'stl.trex_stl_lib.binascii': mock.MagicMock(),
+    'stl.trex_stl_lib.collections': mock.MagicMock(),
+    'stl.trex_stl_lib.copy': mock.MagicMock(),
+    'stl.trex_stl_lib.datetime': mock.MagicMock(),
+    'stl.trex_stl_lib.functools': mock.MagicMock(),
+    'stl.trex_stl_lib.imp': mock.MagicMock(),
+    'stl.trex_stl_lib.inspect': mock.MagicMock(),
+    'stl.trex_stl_lib.json': mock.MagicMock(),
+    'stl.trex_stl_lib.linecache': mock.MagicMock(),
+    'stl.trex_stl_lib.math': mock.MagicMock(),
+    'stl.trex_stl_lib.os': mock.MagicMock(),
+    'stl.trex_stl_lib.platform': mock.MagicMock(),
+    'stl.trex_stl_lib.pprint': mock.MagicMock(),
+    'stl.trex_stl_lib.random': mock.MagicMock(),
+    'stl.trex_stl_lib.re': mock.MagicMock(),
+    'stl.trex_stl_lib.scapy': mock.MagicMock(),
+    'stl.trex_stl_lib.socket': mock.MagicMock(),
+    'stl.trex_stl_lib.string': mock.MagicMock(),
+    'stl.trex_stl_lib.struct': mock.MagicMock(),
+    'stl.trex_stl_lib.sys': mock.MagicMock(),
+    'stl.trex_stl_lib.threading': mock.MagicMock(),
+    'stl.trex_stl_lib.time': mock.MagicMock(),
+    'stl.trex_stl_lib.traceback': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
+    'stl.trex_stl_lib.types': mock.MagicMock(),
+    'stl.trex_stl_lib.utils': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.common': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.json': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.os': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.random': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.re': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.string': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
+    'stl.trex_stl_lib.warnings': mock.MagicMock(),
+    'stl.trex_stl_lib.yaml': mock.MagicMock(),
+    'stl.trex_stl_lib.zlib': mock.MagicMock(),
+    'stl.trex_stl_lib.zmq': mock.MagicMock(),
+}
+
+STLClient = mock.MagicMock()
+stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
+stl_patch.start()
+
+if stl_patch:
+    from yardstick.network_services.traffic_profile.traffic_profile \
+        import TrexProfile
+    from yardstick.network_services.traffic_profile.ixia_rfc2544 import \
+        IXIARFC2544Profile
+    from yardstick.network_services.traffic_profile import ixia_rfc2544
+
+
+class TestIXIARFC2544Profile(unittest.TestCase):
+    TRAFFIC_PROFILE = {
+        "schema": "isb:traffic_profile:0.1",
+        "name": "fixed",
+        "description": "Fixed traffic profile to run UDP traffic",
+        "traffic_profile": {
+            "traffic_type": "FixedTraffic",
+            "frame_rate": 100,  # pps
+            "flow_number": 10,
+            "frame_size": 64}}
+
+    PROFILE = {'description': 'Traffic profile to run RFC2544 latency',
+               'name': 'rfc2544',
+               'traffic_profile': {'traffic_type': 'IXIARFC2544Profile',
+                                   'frame_rate': 100},
+               'public': {'ipv4':
+                          {'outer_l2': {'framesize':
+                                        {'64B': '100', '1518B': '0',
+                                         '128B': '0', '1400B': '0',
+                                         '256B': '0', '373b': '0',
+                                         '570B': '0'}},
+                           'outer_l3v4': {'dstip4': '1.1.1.1-1.15.255.255',
+                                          'proto': 'udp',
+                                          'srcip4': '90.90.1.1-90.105.255.255',
+                                          'dscp': 0, 'ttl': 32},
+                           'outer_l4': {'srcport': '2001',
+                                        'dsrport': '1234'}}},
+               'private': {'ipv4':
+                           {'outer_l2': {'framesize':
+                                         {'64B': '100', '1518B': '0',
+                                          '128B': '0', '1400B': '0',
+                                          '256B': '0', '373b': '0',
+                                          '570B': '0'}},
+                            'outer_l3v4': {'dstip4': '9.9.1.1-90.105.255.255',
+                                           'proto': 'udp',
+                                           'srcip4': '1.1.1.1-1.15.255.255',
+                                           'dscp': 0, 'ttl': 32},
+                            'outer_l4': {'dstport': '2001',
+                                         'srcport': '1234'}}},
+               'schema': 'isb:traffic_profile:0.1'}
+
+    def test_get_ixia_traffic_profile_error(self):
+        traffic_generator = mock.Mock(autospec=TrexProfile)
+        traffic_generator.my_ports = [0, 1]
+        traffic_generator.priv_ports = [-1]
+        traffic_generator.pub_ports = [1]
+        traffic_generator.client = \
+            mock.Mock(return_value=True)
+        STATIC_TRAFFIC = {
+            "private": {
+                "id": 1,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:03",
+                    "framesPerSecond": True,
+                    "framesize": 64,
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "2001",
+                    "srcport": "1234"
+                },
+                "traffic_type": "continuous"
+            },
+            "public": {
+                "id": 2,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:04",
+                    "framesPerSecond": True,
+                    "framesize": 64,
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "1234",
+                    "srcport": "2001"
+                },
+                "traffic_type": "continuous"
+            }
+        }
+        ixia_rfc2544.STATIC_TRAFFIC = STATIC_TRAFFIC
+
+        r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+        r_f_c2544_profile.rate = 100
+        mac = {"src_mac_0": "00:00:00:00:00:01",
+               "src_mac_1": "00:00:00:00:00:02",
+               "src_mac_2": "00:00:00:00:00:02",
+               "dst_mac_0": "00:00:00:00:00:03",
+               "dst_mac_1": "00:00:00:00:00:04",
+               "dst_mac_2": "00:00:00:00:00:04"}
+        self.assertRaises(IOError, r_f_c2544_profile._get_ixia_traffic_profile,
+                          self.PROFILE, mac, xfile="tmp",
+                          static_traffic=STATIC_TRAFFIC)
+
+
+    @mock.patch("yardstick.network_services.traffic_profile.ixia_rfc2544.open")
+    def test_get_ixia_traffic_profile(self, mock_open):
+        traffic_generator = mock.Mock(autospec=TrexProfile)
+        traffic_generator.my_ports = [0, 1]
+        traffic_generator.priv_ports = [-1]
+        traffic_generator.pub_ports = [1]
+        traffic_generator.client = \
+            mock.Mock(return_value=True)
+        STATIC_TRAFFIC = {
+            "private": {
+                "id": 1,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:03",
+                    "framesPerSecond": True,
+                    "framesize": 64,
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "2001",
+                    "srcport": "1234"
+                },
+                "traffic_type": "continuous"
+            },
+            "public": {
+                "id": 2,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:04",
+                    "framesPerSecond": True,
+                    "framesize": 64,
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "1234",
+                    "srcport": "2001"
+                },
+                "traffic_type": "continuous"
+            }
+        }
+        ixia_rfc2544.STATIC_TRAFFIC = STATIC_TRAFFIC
+
+        r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+        r_f_c2544_profile.rate = 100
+        mac = {"src_mac_0": "00:00:00:00:00:01",
+               "src_mac_1": "00:00:00:00:00:02",
+               "src_mac_2": "00:00:00:00:00:02",
+               "dst_mac_0": "00:00:00:00:00:03",
+               "dst_mac_1": "00:00:00:00:00:04",
+               "dst_mac_2": "00:00:00:00:00:04"}
+        result = r_f_c2544_profile._get_ixia_traffic_profile(
+            self.PROFILE, mac, xfile="tmp", static_traffic=STATIC_TRAFFIC)
+        self.assertIsNotNone(result)
+
+    @mock.patch("yardstick.network_services.traffic_profile.ixia_rfc2544.open")
+    def test_get_ixia_traffic_profile_v6(self, mock_open):
+        traffic_generator = mock.Mock(autospec=TrexProfile)
+        traffic_generator.my_ports = [0, 1]
+        traffic_generator.priv_ports = [-1]
+        traffic_generator.pub_ports = [1]
+        traffic_generator.client = \
+            mock.Mock(return_value=True)
+        STATIC_TRAFFIC = {
+            "private": {
+                "id": 1,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:03",
+                    "framesPerSecond": True,
+                    "framesize": 64,
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "dscp": 0,
+                    "dstip4": "152.16.40.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.100.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "2001",
+                    "srcport": "1234"
+                },
+                "traffic_type": "continuous"
+            },
+            "public": {
+                "id": 2,
+                "bidir": "False",
+                "duration": 60,
+                "iload": "100",
+                "outer_l2": {
+                    "dstmac": "00:00:00:00:00:04",
+                    "framesPerSecond": True,
+                    "framesize": 64,
+                    "srcmac": "00:00:00:00:00:01"
+                },
+                "outer_l3": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v4": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l3v6": {
+                    "count": 1024,
+                    "dscp": 0,
+                    "dstip4": "152.16.100.20",
+                    "proto": "udp",
+                    "srcip4": "152.16.40.20",
+                    "ttl": 32
+                },
+                "outer_l4": {
+                    "dstport": "1234",
+                    "srcport": "2001"
+                },
+                "traffic_type": "continuous"
+            }
+        }
+        ixia_rfc2544.STATIC_TRAFFIC = STATIC_TRAFFIC
+
+        r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+        r_f_c2544_profile.rate = 100
+        mac = {"src_mac_0": "00:00:00:00:00:01",
+               "src_mac_1": "00:00:00:00:00:02",
+               "src_mac_2": "00:00:00:00:00:02",
+               "dst_mac_0": "00:00:00:00:00:03",
+               "dst_mac_1": "00:00:00:00:00:04",
+               "dst_mac_2": "00:00:00:00:00:04"}
+        profile_data = {'description': 'Traffic profile to run RFC2544',
+                        'name': 'rfc2544',
+                        'traffic_profile':
+                        {'traffic_type': 'IXIARFC2544Profile',
+                         'frame_rate': 100},
+                        'public':
+                        {'ipv4':
+                         {'outer_l2': {'framesize':
+                                       {'64B': '100', '1518B': '0',
+                                        '128B': '0', '1400B': '0',
+                                        '256B': '0', '373b': '0',
+                                        '570B': '0'}},
+                          'outer_l3v6': {'dstip6': '1.1.1.1-1.15.255.255',
+                                         'proto': 'udp',
+                                         'srcip6': '90.90.1.1-90.105.255.255',
+                                         'dscp': 0, 'ttl': 32},
+                          'outer_l4': {'srcport': '2001',
+                                       'dsrport': '1234'}}},
+                        'private': {'ipv4':
+                                    {'outer_l2': {'framesize':
+                                                  {'64B': '100', '1518B': '0',
+                                                   '128B': '0', '1400B': '0',
+                                                   '256B': '0', '373b': '0',
+                                                   '570B': '0'}},
+                                     'outer_l3v6':
+                                     {'dstip6': '9.9.1.1-90.105.255.255',
+                                      'proto': 'udp',
+                                      'srcip6': '1.1.1.1-1.15.255.255',
+                                      'dscp': 0, 'ttl': 32},
+                                     'outer_l4': {'dstport': '2001',
+                                                  'srcport': '1234'}}},
+                        'schema': 'isb:traffic_profile:0.1'}
+        result = r_f_c2544_profile._get_ixia_traffic_profile(
+            profile_data, mac, static_traffic=STATIC_TRAFFIC)
+        self.assertIsNotNone(result)
+
+    def test__ixia_traffic_generate(self):
+        traffic_generator = mock.Mock(autospec=TrexProfile)
+        traffic_generator.my_ports = [0, 1]
+        traffic_generator.priv_ports = [-1]
+        traffic_generator.pub_ports = [1]
+        traffic_generator.client = \
+            mock.Mock(return_value=True)
+        traffic = {"public": {'iload': 10},
+                   "private": {'iload': 10}}
+        ixia_obj = mock.MagicMock()
+        r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+        r_f_c2544_profile.rate = 100
+        result = r_f_c2544_profile._ixia_traffic_generate(traffic_generator,
+                                                          traffic, ixia_obj)
+        self.assertIsNone(result)
+
+    def test_execute(self):
+        traffic_generator = mock.Mock(autospec=TrexProfile)
+        traffic_generator.my_ports = [0, 1]
+        traffic_generator.priv_ports = [-1]
+        traffic_generator.pub_ports = [1]
+        traffic_generator.client = \
+            mock.Mock(return_value=True)
+        r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+        r_f_c2544_profile.first_run = True
+        r_f_c2544_profile.params = {"public": {'iload': 10},
+                                    "private": {'iload': 10}}
+
+        r_f_c2544_profile.get_streams = mock.Mock()
+        r_f_c2544_profile.full_profile = {}
+        r_f_c2544_profile._get_ixia_traffic_profile = mock.Mock()
+        r_f_c2544_profile.get_multiplier = mock.Mock()
+        r_f_c2544_profile._ixia_traffic_generate = mock.Mock()
+        ixia_obj = mock.MagicMock()
+        self.assertEqual(None, r_f_c2544_profile.execute(traffic_generator,
+                                                         ixia_obj))
+
+    def test_get_drop_percentage(self):
+        traffic_generator = mock.Mock(autospec=TrexProfile)
+        traffic_generator.my_ports = [0, 1]
+        traffic_generator.priv_ports = [0]
+        traffic_generator.pub_ports = [1]
+        traffic_generator.client = \
+            mock.Mock(return_value=True)
+        r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+        r_f_c2544_profile.params = self.PROFILE
+        ixia_obj = mock.MagicMock()
+        r_f_c2544_profile.execute = mock.Mock()
+        r_f_c2544_profile._get_ixia_traffic_profile = mock.Mock()
+        r_f_c2544_profile._ixia_traffic_generate = mock.Mock()
+        r_f_c2544_profile.get_multiplier = mock.Mock()
+        r_f_c2544_profile.tmp_throughput = 0
+        r_f_c2544_profile.tmp_drop = 0
+        r_f_c2544_profile.full_profile = {}
+        samples = {}
+        for ifname in range(1):
+            name = "xe{}".format(ifname)
+            samples[name] = {"rx_throughput_fps": 20,
+                             "tx_throughput_fps": 20,
+                             "rx_throughput_mbps": 10,
+                             "tx_throughput_mbps": 10,
+                             "RxThroughput": 10,
+                             "TxThroughput": 10,
+                             "in_packets": 1000,
+                             "out_packets": 1000}
+        tol_min = 100.0
+        tolerance = 0.0
+        self.assertIsNotNone(r_f_c2544_profile.get_drop_percentage(
+                             traffic_generator, samples,
+                             tol_min, tolerance, ixia_obj))
+
+    def test_get_drop_percentage_update(self):
+        traffic_generator = mock.Mock(autospec=TrexProfile)
+        traffic_generator.my_ports = [0, 1]
+        traffic_generator.priv_ports = [0]
+        traffic_generator.pub_ports = [1]
+        traffic_generator.client = \
+            mock.Mock(return_value=True)
+        r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+        r_f_c2544_profile.params = self.PROFILE
+        ixia_obj = mock.MagicMock()
+        r_f_c2544_profile.execute = mock.Mock()
+        r_f_c2544_profile._get_ixia_traffic_profile = mock.Mock()
+        r_f_c2544_profile._ixia_traffic_generate = mock.Mock()
+        r_f_c2544_profile.get_multiplier = mock.Mock()
+        r_f_c2544_profile.tmp_throughput = 0
+        r_f_c2544_profile.tmp_drop = 0
+        r_f_c2544_profile.full_profile = {}
+        samples = {}
+        for ifname in range(1):
+            name = "xe{}".format(ifname)
+            samples[name] = {"rx_throughput_fps": 20,
+                             "tx_throughput_fps": 20,
+                             "rx_throughput_mbps": 10,
+                             "tx_throughput_mbps": 10,
+                             "RxThroughput": 10,
+                             "TxThroughput": 10,
+                             "in_packets": 1000,
+                             "out_packets": 1002}
+        tol_min = 0.0
+        tolerance = 1.0
+        self.assertIsNotNone(r_f_c2544_profile.get_drop_percentage(
+                             traffic_generator, samples,
+                             tol_min, tolerance, ixia_obj))
+
+    def test_get_drop_percentage_div_zero(self):
+        traffic_generator = mock.Mock(autospec=TrexProfile)
+        traffic_generator.my_ports = [0, 1]
+        traffic_generator.priv_ports = [0]
+        traffic_generator.pub_ports = [1]
+        traffic_generator.client = \
+            mock.Mock(return_value=True)
+        r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+        r_f_c2544_profile.params = self.PROFILE
+        ixia_obj = mock.MagicMock()
+        r_f_c2544_profile.execute = mock.Mock()
+        r_f_c2544_profile._get_ixia_traffic_profile = mock.Mock()
+        r_f_c2544_profile._ixia_traffic_generate = mock.Mock()
+        r_f_c2544_profile.get_multiplier = mock.Mock()
+        r_f_c2544_profile.tmp_throughput = 0
+        r_f_c2544_profile.tmp_drop = 0
+        r_f_c2544_profile.full_profile = {}
+        samples = {}
+        for ifname in range(1):
+            name = "xe{}".format(ifname)
+            samples[name] = {"rx_throughput_fps": 20,
+                             "tx_throughput_fps": 20,
+                             "rx_throughput_mbps": 10,
+                             "tx_throughput_mbps": 10,
+                             "RxThroughput": 10,
+                             "TxThroughput": 10,
+                             "in_packets": 1000,
+                             "out_packets": 0}
+        tol_min = 0.0
+        tolerance = 0.0
+        r_f_c2544_profile.tmp_throughput = 0
+        self.assertIsNotNone(r_f_c2544_profile.get_drop_percentage(
+                             traffic_generator, samples,
+                             tol_min, tolerance, ixia_obj))
+
+    def test_get_multiplier(self):
+        r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+        r_f_c2544_profile.max_rate = 100
+        r_f_c2544_profile.min_rate = 100
+        self.assertEqual("1.0", r_f_c2544_profile.get_multiplier())
+
+    def test_start_ixia_latency(self):
+        traffic_generator = mock.Mock(autospec=TrexProfile)
+        traffic_generator.my_ports = [0, 1]
+        traffic_generator.priv_ports = [0]
+        traffic_generator.pub_ports = [1]
+        traffic_generator.client = \
+            mock.Mock(return_value=True)
+        r_f_c2544_profile = IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+        r_f_c2544_profile.max_rate = 100
+        r_f_c2544_profile.min_rate = 100
+        ixia_obj = mock.MagicMock()
+        r_f_c2544_profile._get_ixia_traffic_profile = \
+            mock.Mock(return_value={})
+        r_f_c2544_profile.full_profile = {}
+        r_f_c2544_profile._ixia_traffic_generate = mock.Mock()
+        self.assertEqual(
+            None,
+            r_f_c2544_profile.start_ixia_latency(traffic_generator,
+                                                 ixia_obj))
+
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/unit/network_services/vnf_generic/vnf/acl_1rule.yaml b/tests/unit/network_services/vnf_generic/vnf/acl_1rule.yaml
new file mode 100644 (file)
index 0000000..b184a29
--- /dev/null
@@ -0,0 +1,47 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+access-list1:
+  acl:
+    access-list-entries:
+    - ace:
+        ace-oper-data:
+          match-counter: 0
+        actions: drop,count
+        matches:
+          destination-ipv4-network: 152.16.40.20/24
+          destination-port-range:
+            lower-port: 0
+            upper-port: 65535
+          source-ipv4-network: 0.0.0.0/0
+          source-port-range:
+            lower-port: 0
+            upper-port: 65535
+        rule-name: rule1588
+    - ace:
+        ace-oper-data:
+          match-counter: 0
+        actions: drop,count
+        matches:
+          destination-ipv4-network: 0.0.0.0/0
+          destination-port-range:
+            lower-port: 0
+            upper-port: 65535
+          source-ipv4-network: 152.16.100.20/24
+          source-port-range:
+            lower-port: 0
+            upper-port: 65535
+        rule-name: rule1589
+    acl-name: sample-ipv4-acl
+    acl-type: ipv4-acl
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py b/tests/unit/network_services/vnf_generic/vnf/test_acl_vnf.py
new file mode 100644 (file)
index 0000000..c079a2a
--- /dev/null
@@ -0,0 +1,456 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from __future__ import absolute_import
+import unittest
+import mock
+import os
+
+
+STL_MOCKS = {
+    'stl': mock.MagicMock(),
+    'stl.trex_stl_lib': mock.MagicMock(),
+    'stl.trex_stl_lib.base64': mock.MagicMock(),
+    'stl.trex_stl_lib.binascii': mock.MagicMock(),
+    'stl.trex_stl_lib.collections': mock.MagicMock(),
+    'stl.trex_stl_lib.copy': mock.MagicMock(),
+    'stl.trex_stl_lib.datetime': mock.MagicMock(),
+    'stl.trex_stl_lib.functools': mock.MagicMock(),
+    'stl.trex_stl_lib.imp': mock.MagicMock(),
+    'stl.trex_stl_lib.inspect': mock.MagicMock(),
+    'stl.trex_stl_lib.json': mock.MagicMock(),
+    'stl.trex_stl_lib.linecache': mock.MagicMock(),
+    'stl.trex_stl_lib.math': mock.MagicMock(),
+    'stl.trex_stl_lib.os': mock.MagicMock(),
+    'stl.trex_stl_lib.platform': mock.MagicMock(),
+    'stl.trex_stl_lib.pprint': mock.MagicMock(),
+    'stl.trex_stl_lib.random': mock.MagicMock(),
+    'stl.trex_stl_lib.re': mock.MagicMock(),
+    'stl.trex_stl_lib.scapy': mock.MagicMock(),
+    'stl.trex_stl_lib.socket': mock.MagicMock(),
+    'stl.trex_stl_lib.string': mock.MagicMock(),
+    'stl.trex_stl_lib.struct': mock.MagicMock(),
+    'stl.trex_stl_lib.sys': mock.MagicMock(),
+    'stl.trex_stl_lib.threading': mock.MagicMock(),
+    'stl.trex_stl_lib.time': mock.MagicMock(),
+    'stl.trex_stl_lib.traceback': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
+    'stl.trex_stl_lib.types': mock.MagicMock(),
+    'stl.trex_stl_lib.utils': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.common': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.json': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.os': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.random': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.re': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.string': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
+    'stl.trex_stl_lib.warnings': mock.MagicMock(),
+    'stl.trex_stl_lib.yaml': mock.MagicMock(),
+    'stl.trex_stl_lib.zlib': mock.MagicMock(),
+    'stl.trex_stl_lib.zmq': mock.MagicMock(),
+}
+
+STLClient = mock.MagicMock()
+stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
+stl_patch.start()
+
+if stl_patch:
+    from yardstick.network_services.vnf_generic.vnf.acl_vnf import AclApproxVnf
+    from yardstick.network_services.vnf_generic.vnf import acl_vnf
+    from yardstick.network_services.nfvi.resource import ResourceProfile
+
+
+TEST_FILE_YAML = 'nsb_test_case.yaml'
+
+
+name = 'vnf__1'
+
+
+@mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Process")
+class TestAclApproxVnf(unittest.TestCase):
+    VNFD = {'vnfd:vnfd-catalog':
+            {'vnfd':
+             [{'short-name': 'VpeVnf',
+               'vdu':
+               [{'routing_table':
+                 [{'network': '152.16.100.20',
+                   'netmask': '255.255.255.0',
+                   'gateway': '152.16.100.20',
+                   'if': 'xe0'},
+                  {'network': '152.16.40.20',
+                   'netmask': '255.255.255.0',
+                   'gateway': '152.16.40.20',
+                   'if': 'xe1'}],
+                 'description': 'VPE approximation using DPDK',
+                 'name': 'vpevnf-baremetal',
+                 'nd_route_tbl':
+                 [{'network': '0064:ff9b:0:0:0:0:9810:6414',
+                   'netmask': '112',
+                   'gateway': '0064:ff9b:0:0:0:0:9810:6414',
+                   'if': 'xe0'},
+                  {'network': '0064:ff9b:0:0:0:0:9810:2814',
+                   'netmask': '112',
+                   'gateway': '0064:ff9b:0:0:0:0:9810:2814',
+                   'if': 'xe1'}],
+                 'id': 'vpevnf-baremetal',
+                 'external-interface':
+                 [{'virtual-interface':
+                   {'dst_mac': '00:00:00:00:00:04',
+                    'vpci': '0000:05:00.0',
+                    'local_ip': '152.16.100.19',
+                    'type': 'PCI-PASSTHROUGH',
+                    'netmask': '255.255.255.0',
+                    'dpdk_port_num': '0',
+                    'bandwidth': '10 Gbps',
+                    'driver': "i40e",
+                    'dst_ip': '152.16.100.20',
+                    'local_iface_name': 'xe0',
+                    'local_mac': '00:00:00:00:00:02'},
+                   'vnfd-connection-point-ref': 'xe0',
+                   'name': 'xe0'},
+                  {'virtual-interface':
+                   {'dst_mac': '00:00:00:00:00:03',
+                    'vpci': '0000:05:00.1',
+                    'local_ip': '152.16.40.19',
+                    'type': 'PCI-PASSTHROUGH',
+                    'driver': "i40e",
+                    'netmask': '255.255.255.0',
+                    'dpdk_port_num': '1',
+                    'bandwidth': '10 Gbps',
+                    'dst_ip': '152.16.40.20',
+                    'local_iface_name': 'xe1',
+                    'local_mac': '00:00:00:00:00:01'},
+                   'vnfd-connection-point-ref': 'xe1',
+                   'name': 'xe1'}]}],
+               'description': 'Vpe approximation using DPDK',
+               'mgmt-interface':
+                   {'vdu-id': 'vpevnf-baremetal',
+                    'host': '1.2.1.1',
+                    'password': 'r00t',
+                    'user': 'root',
+                    'ip': '1.2.1.1'},
+               'benchmark':
+                   {'kpi': ['packets_in', 'packets_fwd', 'packets_dropped']},
+               'connection-point': [{'type': 'VPORT', 'name': 'xe0'},
+                                    {'type': 'VPORT', 'name': 'xe1'}],
+               'id': 'AclApproxVnf', 'name': 'VPEVnfSsh'}]}}
+
+    scenario_cfg = {'options': {'packetsize': 64, 'traffic_type': 4,
+                                'rfc2544': {'allowed_drop_rate': '0.8 - 1'},
+                                'vnf__1': {'rules': 'acl_1rule.yaml',
+                                           'vnf_config': {'lb_config': 'SW',
+                                                          'lb_count': 1,
+                                                          'worker_config':
+                                                          '1C/1T',
+                                                          'worker_threads': 1}}
+                                },
+                    'task_id': 'a70bdf4a-8e67-47a3-9dc1-273c14506eb7',
+                    'task_path': '/tmp',
+                    'tc': 'tc_ipv4_1Mflow_64B_packetsize',
+                    'runner': {'object': 'NetworkServiceTestCase',
+                               'interval': 35,
+                               'output_filename': '/tmp/yardstick.out',
+                               'runner_id': 74476, 'duration': 400,
+                               'type': 'Duration'},
+                    'traffic_profile': 'ipv4_throughput_acl.yaml',
+                    'traffic_options': {'flow': 'ipv4_Packets_acl.yaml',
+                                        'imix': 'imix_voice.yaml'},
+                    'type': 'ISB',
+                    'nodes': {'tg__2': 'trafficgen_2.yardstick',
+                              'tg__1': 'trafficgen_1.yardstick',
+                              'vnf__1': 'vnf.yardstick'},
+                    'topology': 'vpe-tg-topology-baremetal.yaml'}
+
+    context_cfg = {'nodes': {'tg__2':
+                             {'member-vnf-index': '3',
+                              'role': 'TrafficGen',
+                              'name': 'trafficgen_2.yardstick',
+                              'vnfd-id-ref': 'tg__2',
+                              'ip': '1.2.1.1',
+                              'interfaces':
+                              {'xe0': {'local_iface_name': 'ens513f0',
+                                       'vld_id': 'public',
+                                       'netmask': '255.255.255.0',
+                                       'local_ip': '152.16.40.20',
+                                       'dst_mac': '00:00:00:00:00:01',
+                                       'local_mac': '00:00:00:00:00:03',
+                                       'dst_ip': '152.16.40.19',
+                                       'driver': 'ixgbe',
+                                       'vpci': '0000:02:00.0',
+                                       'dpdk_port_num': 0},
+                               'xe1': {'local_iface_name': 'ens513f1',
+                                       'netmask': '255.255.255.0',
+                                       'network': '202.16.100.0',
+                                       'local_ip': '202.16.100.20',
+                                       'local_mac': '00:1e:67:d0:60:5d',
+                                       'driver': 'ixgbe',
+                                       'vpci': '0000:02:00.1',
+                                       'dpdk_port_num': 1}},
+                              'password': 'r00t',
+                              'VNF model': 'l3fwd_vnf.yaml',
+                              'user': 'root'},
+                             'tg__1':
+                             {'member-vnf-index': '1',
+                              'role': 'TrafficGen',
+                              'name': 'trafficgen_1.yardstick',
+                              'vnfd-id-ref': 'tg__1',
+                              'ip': '1.2.1.1',
+                              'interfaces':
+                              {'xe0': {'local_iface_name': 'ens785f0',
+                                       'vld_id': 'private',
+                                       'netmask': '255.255.255.0',
+                                       'local_ip': '152.16.100.20',
+                                       'dst_mac': '00:00:00:00:00:02',
+                                       'local_mac': '00:00:00:00:00:04',
+                                       'dst_ip': '152.16.100.19',
+                                       'driver': 'i40e',
+                                       'vpci': '0000:05:00.0',
+                                       'dpdk_port_num': 0},
+                               'xe1': {'local_iface_name': 'ens785f1',
+                                       'netmask': '255.255.255.0',
+                                       'local_ip': '152.16.100.21',
+                                       'local_mac': '00:00:00:00:00:01',
+                                       'driver': 'i40e',
+                                       'vpci': '0000:05:00.1',
+                                       'dpdk_port_num': 1}},
+                              'password': 'r00t',
+                              'VNF model': 'tg_rfc2544_tpl.yaml',
+                              'user': 'root'},
+                             'vnf__1':
+                             {'name': 'vnf.yardstick',
+                              'vnfd-id-ref': 'vnf__1',
+                              'ip': '1.2.1.1',
+                              'interfaces':
+                              {'xe0': {'local_iface_name': 'ens786f0',
+                                       'vld_id': 'private',
+                                       'netmask': '255.255.255.0',
+                                       'local_ip': '152.16.100.19',
+                                       'dst_mac': '00:00:00:00:00:04',
+                                       'local_mac': '00:00:00:00:00:02',
+                                       'dst_ip': '152.16.100.20',
+                                       'driver': 'i40e',
+                                       'vpci': '0000:05:00.0',
+                                       'dpdk_port_num': 0},
+                               'xe1': {'local_iface_name': 'ens786f1',
+                                       'vld_id': 'public',
+                                       'netmask': '255.255.255.0',
+                                       'local_ip': '152.16.40.19',
+                                       'dst_mac': '00:00:00:00:00:03',
+                                       'local_mac': '00:00:00:00:00:01',
+                                       'dst_ip': '152.16.40.20',
+                                       'driver': 'i40e',
+                                       'vpci': '0000:05:00.1',
+                                       'dpdk_port_num': 1}},
+                              'routing_table':
+                              [{'netmask': '255.255.255.0',
+                                'gateway': '152.16.100.20',
+                                'network': '152.16.100.20',
+                                'if': 'xe0'},
+                               {'netmask': '255.255.255.0',
+                                'gateway': '152.16.40.20',
+                                'network': '152.16.40.20',
+                                'if': 'xe1'}],
+                              'member-vnf-index': '2',
+                              'host': '1.2.1.1',
+                              'role': 'vnf',
+                              'user': 'root',
+                              'nd_route_tbl':
+                              [{'netmask': '112',
+                                'gateway': '0064:ff9b:0:0:0:0:9810:6414',
+                                'network': '0064:ff9b:0:0:0:0:9810:6414',
+                                'if': 'xe0'},
+                               {'netmask': '112',
+                                'gateway': '0064:ff9b:0:0:0:0:9810:2814',
+                                'network': '0064:ff9b:0:0:0:0:9810:2814',
+                                'if': 'xe1'}],
+                              'password': 'r00t',
+                              'VNF model': 'acl_vnf.yaml'}}}
+
+    def test___init__(self, mock_process):
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        acl_approx_vnf = AclApproxVnf(name, vnfd)
+        self.assertIsNone(acl_approx_vnf._vnf_process)
+
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
+    def test_collect_kpi(self, mock_time, mock_process):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            acl_approx_vnf = AclApproxVnf(name, vnfd)
+            acl_approx_vnf.q_in = mock.MagicMock()
+            acl_approx_vnf.q_out = mock.MagicMock()
+            acl_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
+            acl_approx_vnf.resource = mock.Mock(autospec=ResourceProfile)
+            acl_approx_vnf.vnf_execute = mock.Mock(return_value="")
+            result = {'packets_dropped': 0, 'packets_fwd': 0,
+                      'packets_in': 0}
+            self.assertEqual(result, acl_approx_vnf.collect_kpi())
+
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
+    def test_vnf_execute_command(self, mock_time, mock_process):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            acl_approx_vnf = AclApproxVnf(name, vnfd)
+            acl_approx_vnf.q_in = mock.MagicMock()
+            acl_approx_vnf.q_out = mock.MagicMock()
+            acl_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
+            cmd = "quit"
+            self.assertEqual("", acl_approx_vnf.vnf_execute(cmd))
+
+    def test_get_stats(self, mock_process):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            acl_approx_vnf = AclApproxVnf(name, vnfd)
+            acl_approx_vnf.q_in = mock.MagicMock()
+            acl_approx_vnf.q_out = mock.MagicMock()
+            acl_approx_vnf.q_out.qsize = mock.Mock(return_value=0)
+            mock_result = \
+                "ACL TOTAL: pkts_processed: 100, pkts_drop: 0, spkts_received: 100"
+            acl_approx_vnf.vnf_execute = mock.Mock(return_value=mock_result)
+            self.assertEqual(mock_result, acl_approx_vnf.get_stats())
+
+    def _get_file_abspath(self, filename):
+        curr_path = os.path.dirname(os.path.abspath(__file__))
+        file_path = os.path.join(curr_path, filename)
+        return file_path
+
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.acl_vnf.hex")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.acl_vnf.eval")
+    @mock.patch('yardstick.network_services.vnf_generic.vnf.acl_vnf.open')
+    def test_run_acl(self, mock_open, eval, hex, mock_process):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh_mock.run = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            acl_approx_vnf = AclApproxVnf(name, vnfd)
+            acl_approx_vnf._build_config = mock.MagicMock()
+            acl_approx_vnf.queue_wrapper = mock.MagicMock()
+            acl_approx_vnf.ssh_helper = mock.MagicMock()
+            acl_approx_vnf.ssh_helper.run = mock.MagicMock()
+            acl_approx_vnf.scenario_helper.scenario_cfg = self.scenario_cfg
+            acl_approx_vnf.vnf_cfg = {'lb_config': 'SW',
+                                      'lb_count': 1,
+                                      'worker_config': '1C/1T',
+                                      'worker_threads': 1}
+            acl_approx_vnf.all_options = {'traffic_type': '4',
+                                          'topology': 'nsb_test_case.yaml'}
+            acl_approx_vnf._run()
+            acl_approx_vnf.ssh_helper.run.assert_called_once()
+
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.acl_vnf.YangModel")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.acl_vnf.find_relative_file")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context")
+    def test_instantiate(self, mock_context, mock_yang, mock_find, mock_process):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            acl_approx_vnf = AclApproxVnf(name, vnfd)
+            acl_approx_vnf.ssh_helper = ssh
+            acl_approx_vnf.deploy_helper = mock.MagicMock()
+            acl_approx_vnf.resource_helper = mock.MagicMock()
+            acl_approx_vnf._build_config = mock.MagicMock()
+            self.scenario_cfg['vnf_options'] = {'acl': {'cfg': "",
+                                                        'rules': ""}}
+            acl_approx_vnf.q_out.put("pipeline>")
+            acl_approx_vnf.WAIT_TIME = 0
+            self.scenario_cfg.update({"nodes": {"vnf__1": ""}})
+            self.assertIsNone(acl_approx_vnf.instantiate(self.scenario_cfg,
+                                                         self.context_cfg))
+
+    def test_instantiate_panic(self, mock_process):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = mock.Mock(return_value=(1, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            acl_approx_vnf = AclApproxVnf(name, vnfd)
+            self.scenario_cfg['vnf_options'] = {'acl': {'cfg': "",
+                                                        'rules': ""}}
+            acl_approx_vnf._run_acl = mock.Mock(return_value=0)
+            acl_approx_vnf.WAIT_TIME = 0
+            acl_approx_vnf.resource_helper = mock.MagicMock()
+            acl_approx_vnf._build_config = mock.MagicMock()
+            acl_approx_vnf._vnf_process = mock.MagicMock()
+            acl_approx_vnf._vnf_process.start = mock.Mock()
+            acl_approx_vnf._vnf_process.is_alive = mock.Mock(return_value=True)
+            self.assertRaises(ValueError, acl_approx_vnf.instantiate,
+                              self.scenario_cfg, self.context_cfg)
+            acl_approx_vnf.q_out.put("PANIC")
+            acl_approx_vnf.WAIT_TIME = 0
+            self.assertRaises(ValueError, acl_approx_vnf.instantiate,
+                              self.scenario_cfg, self.context_cfg)
+
+    def test_scale(self, mock_process):
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        acl_approx_vnf = AclApproxVnf(name, vnfd)
+        flavor = ""
+        self.assertRaises(NotImplementedError, acl_approx_vnf.scale, flavor)
+
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.time")
+    def test_terminate(self, mock_time, mock_process):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            acl_approx_vnf = AclApproxVnf(name, vnfd)
+            acl_approx_vnf._vnf_process = mock.MagicMock()
+            acl_approx_vnf._vnf_process.terminate = mock.Mock()
+            acl_approx_vnf.used_drivers = {"01:01.0": "i40e",
+                                           "01:01.1": "i40e"}
+            acl_approx_vnf.vnf_execute = mock.MagicMock()
+            acl_approx_vnf.ssh_helper = ssh_mock
+            acl_approx_vnf.dpdk_nic_bind = "dpdk_nic_bind.py"
+            acl_approx_vnf._resource_collect_stop = mock.Mock()
+            self.assertEqual(None, acl_approx_vnf.terminate())
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_ixload.py
new file mode 100644 (file)
index 0000000..cda4412
--- /dev/null
@@ -0,0 +1,374 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from __future__ import absolute_import
+import unittest
+import mock
+import subprocess
+
+STL_MOCKS = {
+    'stl': mock.MagicMock(),
+    'stl.trex_stl_lib': mock.MagicMock(),
+    'stl.trex_stl_lib.base64': mock.MagicMock(),
+    'stl.trex_stl_lib.binascii': mock.MagicMock(),
+    'stl.trex_stl_lib.collections': mock.MagicMock(),
+    'stl.trex_stl_lib.copy': mock.MagicMock(),
+    'stl.trex_stl_lib.datetime': mock.MagicMock(),
+    'stl.trex_stl_lib.functools': mock.MagicMock(),
+    'stl.trex_stl_lib.imp': mock.MagicMock(),
+    'stl.trex_stl_lib.inspect': mock.MagicMock(),
+    'stl.trex_stl_lib.json': mock.MagicMock(),
+    'stl.trex_stl_lib.linecache': mock.MagicMock(),
+    'stl.trex_stl_lib.math': mock.MagicMock(),
+    'stl.trex_stl_lib.os': mock.MagicMock(),
+    'stl.trex_stl_lib.platform': mock.MagicMock(),
+    'stl.trex_stl_lib.pprint': mock.MagicMock(),
+    'stl.trex_stl_lib.random': mock.MagicMock(),
+    'stl.trex_stl_lib.re': mock.MagicMock(),
+    'stl.trex_stl_lib.scapy': mock.MagicMock(),
+    'stl.trex_stl_lib.socket': mock.MagicMock(),
+    'stl.trex_stl_lib.string': mock.MagicMock(),
+    'stl.trex_stl_lib.struct': mock.MagicMock(),
+    'stl.trex_stl_lib.sys': mock.MagicMock(),
+    'stl.trex_stl_lib.threading': mock.MagicMock(),
+    'stl.trex_stl_lib.time': mock.MagicMock(),
+    'stl.trex_stl_lib.traceback': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
+    'stl.trex_stl_lib.types': mock.MagicMock(),
+    'stl.trex_stl_lib.utils': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.common': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.json': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.os': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.random': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.re': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.string': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
+    'stl.trex_stl_lib.warnings': mock.MagicMock(),
+    'stl.trex_stl_lib.yaml': mock.MagicMock(),
+    'stl.trex_stl_lib.zlib': mock.MagicMock(),
+    'stl.trex_stl_lib.zmq': mock.MagicMock(),
+}
+
+STLClient = mock.MagicMock()
+stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
+stl_patch.start()
+
+if stl_patch:
+    from yardstick.network_services.vnf_generic.vnf.tg_ixload import IxLoadTrafficGen
+    from yardstick.network_services.vnf_generic.vnf.tg_ixload import IxLoadResourceHelper
+    from yardstick.network_services.traffic_profile.base import TrafficProfile
+
+
+NAME = "tg__1"
+
+
+class TestIxLoadTrafficGen(unittest.TestCase):
+    VNFD = {'vnfd:vnfd-catalog':
+            {'vnfd':
+             [{'short-name': 'VpeVnf',
+               'vdu':
+               [{'routing_table':
+                 [{'network': '152.16.100.20',
+                   'netmask': '255.255.255.0',
+                   'gateway': '152.16.100.20',
+                   'if': 'xe0'},
+                  {'network': '152.16.40.20',
+                   'netmask': '255.255.255.0',
+                   'gateway': '152.16.40.20',
+                   'if': 'xe1'}],
+                 'description': 'VPE approximation using DPDK',
+                 'name': 'vpevnf-baremetal',
+                 'nd_route_tbl':
+                 [{'network': '0064:ff9b:0:0:0:0:9810:6414',
+                   'netmask': '112',
+                   'gateway': '0064:ff9b:0:0:0:0:9810:6414',
+                   'if': 'xe0'},
+                  {'network': '0064:ff9b:0:0:0:0:9810:2814',
+                   'netmask': '112',
+                   'gateway': '0064:ff9b:0:0:0:0:9810:2814',
+                   'if': 'xe1'}],
+                 'id': 'vpevnf-baremetal',
+                 'external-interface':
+                 [{'virtual-interface':
+                   {'dst_mac': '00:00:00:00:00:04',
+                    'vpci': '0000:05:00.0',
+                    'local_ip': '152.16.100.19',
+                    'type': 'PCI-PASSTHROUGH',
+                    'netmask': '255.255.255.0',
+                    'dpdk_port_num': '0',
+                    'bandwidth': '10 Gbps',
+                    'driver': "i40e",
+                    'dst_ip': '152.16.100.20',
+                    'local_iface_name': 'xe0',
+                    'local_mac': '00:00:00:00:00:02'},
+                   'vnfd-connection-point-ref': 'xe0',
+                   'name': 'xe0'},
+                  {'virtual-interface':
+                   {'dst_mac': '00:00:00:00:00:03',
+                    'vpci': '0000:05:00.1',
+                    'local_ip': '152.16.40.19',
+                    'type': 'PCI-PASSTHROUGH',
+                    'driver': "i40e",
+                    'netmask': '255.255.255.0',
+                    'dpdk_port_num': '1',
+                    'bandwidth': '10 Gbps',
+                    'dst_ip': '152.16.40.20',
+                    'local_iface_name': 'xe1',
+                    'local_mac': '00:00:00:00:00:01'},
+                   'vnfd-connection-point-ref': 'xe1',
+                   'name': 'xe1'}]}],
+               'description': 'Vpe approximation using DPDK',
+               'mgmt-interface':
+                   {'vdu-id': 'vpevnf-baremetal',
+                    'host': '1.1.1.1',
+                    'password': 'r00t',
+                    'user': 'root',
+                    'ip': '1.1.1.1'},
+               'benchmark':
+                   {'kpi': ['packets_in', 'packets_fwd', 'packets_dropped']},
+               'connection-point': [{'type': 'VPORT', 'name': 'xe0'},
+                                    {'type': 'VPORT', 'name': 'xe1'}],
+               'id': 'VpeApproxVnf', 'name': 'VPEVnfSsh'}]}}
+
+    TRAFFIC_PROFILE = {
+        "schema": "isb:traffic_profile:0.1",
+        "name": "fixed",
+        "description": "Fixed traffic profile to run UDP traffic",
+        "traffic_profile": {
+            "traffic_type": "FixedTraffic",
+            "frame_rate": 100,  # pps
+            "flow_number": 10,
+            "frame_size": 64}}
+
+    def test___init__(self):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
+            self.assertIsNone(ixload_traffic_gen.data)
+
+    def test_collect_kpi(self):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
+            ixload_traffic_gen.data = {}
+            restult = ixload_traffic_gen.collect_kpi()
+            self.assertEqual({}, restult)
+
+    def test_listen_traffic(self):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
+            self.assertEqual(None, ixload_traffic_gen.listen_traffic({}))
+
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.makedirs")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.shutil")
+    def test_instantiate(self, call, shutil, mock_makedirs):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh_mock.run = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
+            scenario_cfg = {'tc': "nsb_test_case",
+                            'ixia_profile': "ixload.cfg"}
+            ixload_traffic_gen.RESULTS_MOUNT = "/tmp/result"
+            shutil.copy = mock.Mock()
+            scenario_cfg.update({'options': {'packetsize': 64, 'traffic_type': 4,
+                                             'rfc2544': {'allowed_drop_rate': '0.8 - 1'},
+                                             'vnf__1': {'rules': 'acl_1rule.yaml',
+                                                        'vnf_config': {'lb_config': 'SW',
+                                                                       'lb_count': 1,
+                                                                       'worker_config':
+                                                                       '1C/1T',
+                                                                       'worker_threads': 1}}
+                                             }})
+            self.assertRaises(IOError,
+                              ixload_traffic_gen.instantiate(scenario_cfg, {}))
+
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.shutil")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.open")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.min")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.max")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.len")
+    def test_run_traffic(self, call, shutil, main_open, min, max, len):
+        mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
+        mock_traffic_profile.get_traffic_definition.return_value = "64"
+        mock_traffic_profile.params = self.TRAFFIC_PROFILE
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh_mock.run = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            vnfd["mgmt-interface"].update({"tg-config": {}})
+            vnfd["mgmt-interface"]["tg-config"].update({"ixchassis":
+                                                        "1.1.1.1"})
+            vnfd["mgmt-interface"]["tg-config"].update({"py_bin_path":
+                                                        "/root"})
+            sut = IxLoadTrafficGen(NAME, vnfd)
+            sut.connection = mock.Mock()
+            sut.connection.run = mock.Mock()
+            sut._traffic_runner = mock.Mock(return_value=0)
+            shutil.copy = mock.Mock()
+            result = sut.run_traffic(mock_traffic_profile)
+            self.assertIsNone(result)
+
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.shutil")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.open")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.min")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.max")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.len")
+    def test_run_traffic_csv(self, call, shutil, main_open, min, max, len):
+        mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
+        mock_traffic_profile.get_traffic_definition.return_value = "64"
+        mock_traffic_profile.params = self.TRAFFIC_PROFILE
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh_mock.run = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            vnfd["mgmt-interface"].update({"tg-config": {}})
+            vnfd["mgmt-interface"]["tg-config"].update({"ixchassis":
+                                                        "1.1.1.1"})
+            vnfd["mgmt-interface"]["tg-config"].update({"py_bin_path":
+                                                        "/root"})
+            sut = IxLoadTrafficGen(NAME, vnfd)
+            sut.connection = mock.Mock()
+            sut.connection.run = mock.Mock()
+            sut._traffic_runner = mock.Mock(return_value=0)
+            shutil.copy = mock.Mock()
+            subprocess.call(["touch", "/tmp/1.csv"])
+            sut.rel_bin_path = mock.Mock(return_value="/tmp/*.csv")
+            result = sut.run_traffic(mock_traffic_profile)
+            self.assertIsNone(result)
+
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
+    def test_terminate(self, call):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
+            self.assertEqual(None, ixload_traffic_gen.terminate())
+
+    @mock.patch("yardstick.ssh.SSH")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
+    def test_parse_csv_read(self, mock_call, mock_ssh):
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        kpi_data = {
+            'HTTP Total Throughput (Kbps)': 1,
+            'HTTP Simulated Users': 2,
+            'HTTP Concurrent Connections': '3',
+            'HTTP Connection Rate': 4.3,
+            'HTTP Transaction Rate': True,
+        }
+        http_reader = [kpi_data]
+
+        mock_ssh_type = mock.Mock(autospec=mock_ssh.SSH)
+        mock_ssh_type.execute.return_value = 0, "", ""
+        mock_ssh.from_node.return_value = mock_ssh_type
+
+        ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
+        result = ixload_traffic_gen.resource_helper.result
+
+        ixload_traffic_gen.resource_helper.parse_csv_read(http_reader)
+        for key_left, key_right in IxLoadResourceHelper.KPI_LIST.items():
+            self.assertEqual(result[key_left][-1], int(kpi_data[key_right]))
+
+    @mock.patch("yardstick.ssh.SSH")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
+    def test_parse_csv_read_value_error(self, mock_call, mock_ssh):
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        http_reader = [{
+            'HTTP Total Throughput (Kbps)': 1,
+            'HTTP Simulated Users': 2,
+            'HTTP Concurrent Connections': "not a number",
+            'HTTP Connection Rate': 4,
+            'HTTP Transaction Rate': 5,
+        }]
+
+        mock_ssh_type = mock.Mock(autospec=mock_ssh.SSH)
+        mock_ssh_type.execute.return_value = 0, "", ""
+        mock_ssh.from_node.return_value = mock_ssh_type
+
+        ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
+        init_value = ixload_traffic_gen.resource_helper.result
+
+        ixload_traffic_gen.resource_helper.parse_csv_read(http_reader)
+        self.assertDictEqual(ixload_traffic_gen.resource_helper.result, init_value)
+
+    @mock.patch("yardstick.ssh.SSH")
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_ixload.call")
+    def test_parse_csv_read_error(self, mock_call, mock_ssh):
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        http_reader = [{
+            'HTTP Total Throughput (Kbps)': 1,
+            'HTTP Simulated Users': 2,
+            'HTTP Concurrent Connections': 3,
+            'HTTP Transaction Rate': 5,
+        }]
+
+        mock_ssh_type = mock.Mock(autospec=mock_ssh.SSH)
+        mock_ssh_type.execute.return_value = 0, "", ""
+        mock_ssh.from_node.return_value = mock_ssh_type
+
+        ixload_traffic_gen = IxLoadTrafficGen(NAME, vnfd)
+
+        with self.assertRaises(KeyError):
+            ixload_traffic_gen.resource_helper.parse_csv_read(http_reader)
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
new file mode 100644 (file)
index 0000000..8f7f057
--- /dev/null
@@ -0,0 +1,405 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+from __future__ import absolute_import
+import os
+import unittest
+import mock
+STL_MOCKS = {
+    'stl': mock.MagicMock(),
+    'stl.trex_stl_lib': mock.MagicMock(),
+    'stl.trex_stl_lib.base64': mock.MagicMock(),
+    'stl.trex_stl_lib.binascii': mock.MagicMock(),
+    'stl.trex_stl_lib.collections': mock.MagicMock(),
+    'stl.trex_stl_lib.copy': mock.MagicMock(),
+    'stl.trex_stl_lib.datetime': mock.MagicMock(),
+    'stl.trex_stl_lib.functools': mock.MagicMock(),
+    'stl.trex_stl_lib.imp': mock.MagicMock(),
+    'stl.trex_stl_lib.inspect': mock.MagicMock(),
+    'stl.trex_stl_lib.json': mock.MagicMock(),
+    'stl.trex_stl_lib.linecache': mock.MagicMock(),
+    'stl.trex_stl_lib.math': mock.MagicMock(),
+    'stl.trex_stl_lib.os': mock.MagicMock(),
+    'stl.trex_stl_lib.platform': mock.MagicMock(),
+    'stl.trex_stl_lib.pprint': mock.MagicMock(),
+    'stl.trex_stl_lib.random': mock.MagicMock(),
+    'stl.trex_stl_lib.re': mock.MagicMock(),
+    'stl.trex_stl_lib.scapy': mock.MagicMock(),
+    'stl.trex_stl_lib.socket': mock.MagicMock(),
+    'stl.trex_stl_lib.string': mock.MagicMock(),
+    'stl.trex_stl_lib.struct': mock.MagicMock(),
+    'stl.trex_stl_lib.sys': mock.MagicMock(),
+    'stl.trex_stl_lib.threading': mock.MagicMock(),
+    'stl.trex_stl_lib.time': mock.MagicMock(),
+    'stl.trex_stl_lib.traceback': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_async_client': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_client': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_exceptions': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_ext': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_jsonrpc_client': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_packet_builder_interface': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_packet_builder_scapy': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_port': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_stats': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_streams': mock.MagicMock(),
+    'stl.trex_stl_lib.trex_stl_types': mock.MagicMock(),
+    'stl.trex_stl_lib.types': mock.MagicMock(),
+    'stl.trex_stl_lib.utils': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.argparse': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.collections': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.common': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.json': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.os': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.parsing_opts': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.pwd': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.random': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.re': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.string': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.sys': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.text_opts': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.text_tables': mock.MagicMock(),
+    'stl.trex_stl_lib.utils.texttable': mock.MagicMock(),
+    'stl.trex_stl_lib.warnings': mock.MagicMock(),
+    'stl.trex_stl_lib.yaml': mock.MagicMock(),
+    'stl.trex_stl_lib.zlib': mock.MagicMock(),
+    'stl.trex_stl_lib.zmq': mock.MagicMock(),
+}
+
+STLClient = mock.MagicMock()
+stl_patch = mock.patch.dict("sys.modules", STL_MOCKS)
+stl_patch.start()
+
+if stl_patch:
+    from yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia import IxiaTrafficGen
+    from yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia import IxiaRfc2544Helper
+    from yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia import IxiaResourceHelper
+    from yardstick.network_services.traffic_profile.base import TrafficProfile
+
+TEST_FILE_YAML = 'nsb_test_case.yaml'
+
+
+NAME = "tg__1"
+
+
+@mock.patch("yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.IxNextgen")
+class TestIxiaResourceHelper(unittest.TestCase):
+
+    def test___init___with_custom_rfc_helper(self, mock_ix_nextgen):
+        class MyRfcHelper(IxiaRfc2544Helper):
+            pass
+
+        ixia_resource_helper = IxiaResourceHelper(mock.Mock(), MyRfcHelper)
+        self.assertIsInstance(ixia_resource_helper.rfc_helper, MyRfcHelper)
+
+    def test_stop_collect_with_client(self, mock_ix_nextgen):
+        mock_client = mock.Mock()
+
+        ixia_resource_helper = IxiaResourceHelper(mock.Mock())
+
+        ixia_resource_helper.client = mock_client
+        ixia_resource_helper.stop_collect()
+        self.assertEqual(mock_client.ix_stop_traffic.call_count, 1)
+
+
+@mock.patch("yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.IxNextgen")
+class TestIXIATrafficGen(unittest.TestCase):
+    VNFD = {'vnfd:vnfd-catalog':
+            {'vnfd':
+             [{'short-name': 'VpeVnf',
+               'vdu':
+               [{'routing_table':
+                 [{'network': '152.16.100.20',
+                   'netmask': '255.255.255.0',
+                   'gateway': '152.16.100.20',
+                   'if': 'xe0'},
+                  {'network': '152.16.40.20',
+                   'netmask': '255.255.255.0',
+                   'gateway': '152.16.40.20',
+                   'if': 'xe1'}],
+                 'description': 'VPE approximation using DPDK',
+                 'name': 'vpevnf-baremetal',
+                 'nd_route_tbl':
+                 [{'network': '0064:ff9b:0:0:0:0:9810:6414',
+                   'netmask': '112',
+                   'gateway': '0064:ff9b:0:0:0:0:9810:6414',
+                   'if': 'xe0'},
+                  {'network': '0064:ff9b:0:0:0:0:9810:2814',
+                   'netmask': '112',
+                   'gateway': '0064:ff9b:0:0:0:0:9810:2814',
+                   'if': 'xe1'}],
+                 'id': 'vpevnf-baremetal',
+                 'external-interface':
+                 [{'virtual-interface':
+                   {'dst_mac': '00:00:00:00:00:04',
+                    'vpci': '0000:05:00.0',
+                    'local_ip': '152.16.100.19',
+                    'type': 'PCI-PASSTHROUGH',
+                    'netmask': '255.255.255.0',
+                    'dpdk_port_num': '0',
+                    'bandwidth': '10 Gbps',
+                    'driver': "i40e",
+                    'dst_ip': '152.16.100.20',
+                    'local_iface_name': 'xe0',
+                    'local_mac': '00:00:00:00:00:02'},
+                   'vnfd-connection-point-ref': 'xe0',
+                   'name': 'xe0'},
+                  {'virtual-interface':
+                   {'dst_mac': '00:00:00:00:00:03',
+                    'vpci': '0000:05:00.1',
+                    'local_ip': '152.16.40.19',
+                    'type': 'PCI-PASSTHROUGH',
+                    'driver': "i40e",
+                    'netmask': '255.255.255.0',
+                    'dpdk_port_num': '1',
+                    'bandwidth': '10 Gbps',
+                    'dst_ip': '152.16.40.20',
+                    'local_iface_name': 'xe1',
+                    'local_mac': '00:00:00:00:00:01'},
+                   'vnfd-connection-point-ref': 'xe1',
+                   'name': 'xe1'}]}],
+               'description': 'Vpe approximation using DPDK',
+               'mgmt-interface':
+                   {'vdu-id': 'vpevnf-baremetal',
+                    'host': '1.1.1.1',
+                    'password': 'r00t',
+                    'user': 'root',
+                    'ip': '1.1.1.1'},
+               'benchmark':
+                   {'kpi': ['packets_in', 'packets_fwd', 'packets_dropped']},
+               'connection-point': [{'type': 'VPORT', 'name': 'xe0'},
+                                    {'type': 'VPORT', 'name': 'xe1'}],
+               'id': 'VpeApproxVnf', 'name': 'VPEVnfSsh'}]}}
+
+    TRAFFIC_PROFILE = {
+        "schema": "isb:traffic_profile:0.1",
+        "name": "fixed",
+        "description": "Fixed traffic profile to run UDP traffic",
+        "traffic_profile": {
+            "traffic_type": "FixedTraffic",
+            "frame_rate": 100,  # pps
+            "flow_number": 10,
+            "frame_size": 64}}
+
+    TC_YAML = {'scenarios': [{'tc_options':
+                              {'rfc2544': {'allowed_drop_rate': '0.8 - 1'}},
+                              'runner': {'duration': 400,
+                                         'interval': 35, 'type': 'Duration'},
+                              'traffic_options':
+                              {'flow': 'ipv4_1flow_Packets_vpe.yaml',
+                               'imix': 'imix_voice.yaml'},
+                              'vnf_options': {'vpe': {'cfg': 'vpe_config'}},
+                              'traffic_profile': 'ipv4_throughput_vpe.yaml',
+                              'type': 'NSPerf',
+                              'nodes': {'tg__1': 'trafficgen_1.yardstick',
+                                        'vnf__1': 'vnf.yardstick'},
+                              'topology': 'vpe_vnf_topology.yaml'}],
+               'context': {'nfvi_type': 'baremetal', 'type': 'Node',
+                           'name': 'yardstick',
+                           'file': '/etc/yardstick/nodes/pod.yaml'},
+               'schema': 'yardstick:task:0.1'}
+
+    def test___init__(self, mock_ixnextgen):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            ixnet_traffic_gen = IxiaTrafficGen(NAME, vnfd)
+
+    def test_listen_traffic(self, mock_ixnextgen):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            ixnet_traffic_gen = IxiaTrafficGen(NAME, vnfd)
+            self.assertEqual(None, ixnet_traffic_gen.listen_traffic({}))
+
+    def test_instantiate(self, mock_ixnextgen):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh_mock.run = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            ixnet_traffic_gen = IxiaTrafficGen(NAME, vnfd)
+            scenario_cfg = {'tc': "nsb_test_case", "topology": "",
+                            'ixia_profile': "ixload.cfg"}
+            scenario_cfg.update({'options': {'packetsize': 64,
+                                             'traffic_type': 4,
+                                             'rfc2544': {'allowed_drop_rate': '0.8 - 1'},
+                                             'vnf__1': {'rules': 'acl_1rule.yaml',
+                                                        'vnf_config': {'lb_config': 'SW',
+                                                                       'lb_count': 1,
+                                                                       'worker_config':
+                                                                       '1C/1T',
+                                                                       'worker_threads': 1}}
+                                             }})
+            ixnet_traffic_gen.topology = ""
+            ixnet_traffic_gen.get_ixobj = mock.MagicMock()
+            ixnet_traffic_gen._ixia_traffic_gen = mock.MagicMock()
+            ixnet_traffic_gen._ixia_traffic_gen._connect = mock.Mock()
+            self.assertRaises(
+                IOError,
+                ixnet_traffic_gen.instantiate(scenario_cfg, {}))
+
+    def test_collect_kpi(self, mock_ixnextgen):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            ixnet_traffic_gen = IxiaTrafficGen(NAME, vnfd)
+            ixnet_traffic_gen.data = {}
+            restult = ixnet_traffic_gen.collect_kpi()
+            self.assertEqual({}, restult)
+
+    def test_terminate(self, mock_ixnextgen):
+        with mock.patch("yardstick.ssh.SSH") as ssh:
+            vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+            ssh_mock = mock.Mock(autospec=ssh.SSH)
+            ssh_mock.execute = \
+                mock.Mock(return_value=(0, "", ""))
+            ssh.from_node.return_value = ssh_mock
+            ixnet_traffic_gen = IxiaTrafficGen(NAME, vnfd)
+            ixnet_traffic_gen._terminated = mock.MagicMock()
+            ixnet_traffic_gen._terminated.value = 0
+            ixnet_traffic_gen._ixia_traffic_gen = mock.MagicMock()
+            ixnet_traffic_gen._ixia_traffic_gen.ix_stop_traffic = mock.Mock()
+            ixnet_traffic_gen._traffic_process = mock.MagicMock()
+            ixnet_traffic_gen._traffic_process.terminate = mock.Mock()
+            self.assertEqual(None, ixnet_traffic_gen.terminate())
+
+    def _get_file_abspath(self, filename):
+        curr_path = os.path.dirname(os.path.abspath(__file__))
+        file_path = os.path.join(curr_path, filename)
+        return file_path
+
+    def test_scale(self, mock_ix_nextgen):
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        sut = IxiaTrafficGen('vnf1', vnfd)
+        sut.scale()
+
+    def test__check_status(self, mock_ix_nextgen):
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        sut = IxiaTrafficGen('vnf1', vnfd)
+        sut._check_status()
+
+    @mock.patch("yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.time")
+    @mock.patch("yardstick.ssh.SSH")
+    def test_traffic_runner(self, mock_ixnextgen, mock_ssh, mock_time):
+        mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
+        mock_traffic_profile.get_traffic_definition.return_value = "64"
+        mock_traffic_profile.params = self.TRAFFIC_PROFILE
+
+        mock_ssh_instance = mock.Mock(autospec=mock_ssh.SSH)
+        mock_ssh_instance.execute.return_value = 0, "", ""
+        mock_ssh_instance.run.return_value = 0, "", ""
+
+        mock_ssh.from_node.return_value = mock_ssh_instance
+
+        vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0]
+        vnfd["mgmt-interface"].update({
+            'tg-config': {
+                "ixchassis": "1.1.1.1",
+                "py_bin_path": "/root",
+            }
+        })
+
+        samples = {}
+        name = ''
+        for ifname in range(1):
+            name = "xe{}".format(ifname)
+            samples[name] = {
+                "Rx_Rate_Kbps": 20,
+                "Tx_Rate_Kbps": 20,
+                "Rx_Rate_Mbps": 10,
+                "Tx_Rate_Mbps": 10,
+                "RxThroughput": 10,
+                "TxThroughput": 10,
+                "Valid_Frames_Rx": 1000,
+                "Frames_Tx": 1000,
+                "in_packets": 1000,
+                "out_packets": 1000,
+            }
+
+        samples.update({"CurrentDropPercentage": 0.0})
+
+        last_res = [
+            0,
+            {
+                "Rx_Rate_Kbps": [20, 20],
+                "Tx_Rate_Kbps": [20, 20],
+                "Rx_Rate_Mbps": [10, 10],
+                "Tx_Rate_Mbps": [10, 10],
+                "CurrentDropPercentage": [0, 0],
+                "RxThroughput": [10, 10],
+                "TxThroughput": [10, 10],
+                "Frames_Tx": [1000, 1000],
+                "in_packets": [1000, 1000],
+                "Valid_Frames_Rx": [1000, 1000],
+                "out_packets": [1000, 1000],
+            },
+        ]
+
+        mock_traffic_profile.execute.return_value = ['Completed', samples]
+        mock_traffic_profile.get_drop_percentage.return_value = ['Completed', samples]
+
+        sut = IxiaTrafficGen(name, vnfd)
+        sut.tg_port_pairs = [[[0], [1]]]
+        sut.vnf_port_pairs = [[[0], [1]]]
+        sut.tc_file_name = self._get_file_abspath(TEST_FILE_YAML)
+        sut.topology = ""
+
+        sut.ssh_helper = mock.Mock()
+        sut._traffic_process = mock.MagicMock()
+        sut.generate_port_pairs = mock.Mock()
+
+        sut._ixia_traffic_gen = mock.MagicMock()
+        sut._ixia_traffic_gen.ix_get_statistics.return_value = last_res
+
+        sut.resource_helper.client = mock.MagicMock()
+        sut.resource_helper.client_started = mock.MagicMock()
+        sut.resource_helper.client_started.value = 1
+
+        sut.scenario_helper.scenario_cfg = {
+            'options': {
+                'packetsize': 64,
+                'traffic_type': 4,
+                'rfc2544': {
+                    'allowed_drop_rate': '0.8 - 1'
+                },
+                'vnf__1': {
+                    'rules': 'acl_1rule.yaml',
+                    'vnf_config': {
+                        'lb_config': 'SW',
+                        'lb_count': 1,
+                        'worker_config': '1C/1T',
+                        'worker_threads': 1,
+                    },
+                },
+            },
+            'ixia_profile': {}
+        }
+
+        result = sut._traffic_runner(mock_traffic_profile)
+        self.assertIsNone(result)
index 2b10c61..703bb6d 100644 (file)
@@ -123,7 +123,7 @@ class Task(object):     # pragma: no cover
             except KeyboardInterrupt:
                 raise
             except Exception:
-                LOG.exception('')
+                LOG.exception("Running test case %s failed!", case_name)
                 testcases[case_name] = {'criteria': 'FAIL', 'tc_data': []}
             else:
                 testcases[case_name] = {'criteria': 'PASS', 'tc_data': data}
@@ -605,7 +605,8 @@ def get_networks_from_nodes(nodes):
     for node in nodes.values():
         if not node:
             continue
-        for interface in node['interfaces'].values():
+        interfaces = node.get('interfaces', {})
+        for interface in interfaces.values():
             vld_id = interface.get('vld_id')
             # mgmt network doesn't have vld_id
             if not vld_id:
index a9488cc..d0551bf 100644 (file)
@@ -63,6 +63,7 @@ class MonitorOpenstackCmd(basemonitor.BaseMonitor):
     def monitor_func(self):
         exit_status = 0
         exit_status, stdout = _execute_shell_command(self.cmd)
+        LOG.debug("Execute command '%s' and the stdout is:\n%s", self.cmd, stdout)
         if exit_status:
             return False
         return True
index 8e8114f..822d3b4 100644 (file)
@@ -8,15 +8,36 @@
 ##############################################################################
 from __future__ import absolute_import
 import os
+from functools import reduce
 
-from yardstick.common.utils import get_param
+import pkg_resources
 
+from yardstick.common.utils import parse_yaml
 
 dirname = os.path.dirname
 abspath = os.path.abspath
 join = os.path.join
 sep = os.path.sep
 
+CONF = {}
+
+
+def get_param(key, default=''):
+
+    # we have to defer this to runtime so that we can mock os.environ.get in unittests
+    conf_file = os.environ.get('CONF_FILE', '/etc/yardstick/yardstick.yaml')
+
+    # don't re-parse yaml for each lookup
+    if not CONF:
+        CONF.update(parse_yaml(conf_file))
+    try:
+        return reduce(lambda a, b: a[b], key.split('.'), CONF)
+    except KeyError:
+        if not default:
+            raise
+        return default
+
+
 try:
     SERVER_IP = get_param('api.server_ip')
 except KeyError:
@@ -41,7 +62,8 @@ CONF_DIR = get_param('dir.conf', '/etc/yardstick')
 REPOS_DIR = get_param('dir.repos', '/home/opnfv/repos/yardstick')
 RELENG_DIR = get_param('dir.releng', '/home/opnfv/repos/releng')
 LOG_DIR = get_param('dir.log', '/tmp/yardstick/')
-YARDSTICK_ROOT_PATH = dirname(dirname(dirname(abspath(__file__)))) + sep
+YARDSTICK_ROOT_PATH = dirname(
+    dirname(abspath(pkg_resources.resource_filename(__name__, "")))) + sep
 CONF_SAMPLE_DIR = join(REPOS_DIR, 'etc/yardstick/')
 ANSIBLE_DIR = join(REPOS_DIR, 'ansible')
 SAMPLE_CASE_DIR = join(REPOS_DIR, 'samples')
index 1059e1c..729bc1d 100644 (file)
@@ -27,7 +27,6 @@ import collections
 import socket
 import random
 import ipaddress
-from functools import reduce
 from contextlib import closing
 
 import yaml
@@ -107,19 +106,6 @@ def parse_yaml(file_path):
         return value
 
 
-def get_param(key, default=''):
-
-    conf_file = os.environ.get('CONF_FILE', '/etc/yardstick/yardstick.yaml')
-
-    conf = parse_yaml(conf_file)
-    try:
-        return reduce(lambda a, b: a[b], key.split('.'), conf)
-    except KeyError:
-        if not default:
-            raise
-        return default
-
-
 def makedirs(d):
     try:
         os.makedirs(d)
@@ -370,3 +356,29 @@ def parse_cpuinfo(cpuinfo):
 def config_to_dict(config):
     return {section: dict(config.items(section)) for section in
             config.sections()}
+
+
+def validate_non_string_sequence(value, default=None, raise_exc=None):
+    if isinstance(value, collections.Sequence) and not isinstance(value, str):
+        return value
+    if raise_exc:
+        raise raise_exc
+    return default
+
+
+def join_non_strings(separator, *non_strings):
+    try:
+        non_strings = validate_non_string_sequence(non_strings[0], raise_exc=RuntimeError)
+    except (IndexError, RuntimeError):
+        pass
+    return str(separator).join(str(non_string) for non_string in non_strings)
+
+
+class ErrorClass(object):
+
+    def __init__(self, *args, **kwargs):
+        if 'test' not in kwargs:
+            raise RuntimeError
+
+    def __getattr__(self, item):
+        raise AttributeError
diff --git a/yardstick/network_services/libs/__init__.py b/yardstick/network_services/libs/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py b/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py
new file mode 100644 (file)
index 0000000..815a2a2
--- /dev/null
@@ -0,0 +1,335 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from __future__ import absolute_import
+from __future__ import print_function
+import sys
+import logging
+
+import re
+from itertools import product
+
+from yardstick.common.utils import ErrorClass
+
+try:
+    import IxNetwork
+except ImportError:
+    IxNetwork = ErrorClass
+
+log = logging.getLogger(__name__)
+
+IP_VERSION_4 = 4
+IP_VERSION_6 = 6
+
+
+class TrafficStreamHelper(object):
+
+    TEMPLATE = '{0.traffic_item}/{0.stream}:{0.param_id}/{1}'
+
+    def __init__(self, traffic_item, stream, param_id):
+        super(TrafficStreamHelper, self).__init__()
+        self.traffic_item = traffic_item
+        self.stream = stream
+        self.param_id = param_id
+
+    def __getattr__(self, item):
+        return self.TEMPLATE.format(self, item)
+
+
+class FramesizeHelper(object):
+
+    def __init__(self):
+        super(FramesizeHelper, self).__init__()
+        self.weighted_pairs = []
+        self.weighted_range_pairs = []
+
+    @property
+    def weighted_pairs_arg(self):
+        return '-weightedPairs', self.weighted_pairs
+
+    @property
+    def weighted_range_pairs_arg(self):
+        return '-weightedRangePairs', self.weighted_range_pairs
+
+    def make_args(self, *args):
+        return self.weighted_pairs_arg + self.weighted_range_pairs_arg + args
+
+    def populate_data(self, framesize_data):
+        for key, value in framesize_data.items():
+            if value == '0':
+                continue
+
+            replaced = re.sub('[Bb]', '', key)
+            self.weighted_pairs.extend([
+                replaced,
+                value,
+            ])
+            pairs = [
+                replaced,
+                replaced,
+                value,
+            ]
+            self.weighted_range_pairs.append(pairs)
+
+
+class IxNextgen(object):
+
+    STATS_NAME_MAP = {
+        "traffic_item": 'Traffic Item',
+        "Tx_Frames": 'Tx Frames',
+        "Rx_Frames": 'Rx Frames',
+        "Tx_Frame_Rate": 'Tx Frame Rate',
+        "Rx_Frame_Rate": 'Tx Frame Rate',
+        "Store-Forward_Avg_latency_ns": 'Store-Forward Avg Latency (ns)',
+        "Store-Forward_Min_latency_ns": 'Store-Forward Min Latency (ns)',
+        "Store-Forward_Max_latency_ns": 'Store-Forward Max Latency (ns)',
+    }
+
+    PORT_STATS_NAME_MAP = {
+        "stat_name": 'Stat Name',
+        "Frames_Tx": 'Frames Tx.',
+        "Valid_Frames_Rx": 'Valid Frames Rx.',
+        "Frames_Tx_Rate": 'Frames Tx. Rate',
+        "Valid_Frames_Rx_Rate": 'Valid Frames Rx. Rate',
+        "Tx_Rate_Kbps": 'Tx. Rate (Kbps)',
+        "Rx_Rate_Kbps": 'Rx. Rate (Kbps)',
+        "Tx_Rate_Mbps": 'Tx. Rate (Mbps)',
+        "Rx_Rate_Mbps": 'Rx. Rate (Mbps)',
+    }
+
+    LATENCY_NAME_MAP = {
+        "Store-Forward_Avg_latency_ns": 'Store-Forward Avg Latency (ns)',
+        "Store-Forward_Min_latency_ns": 'Store-Forward Min Latency (ns)',
+        "Store-Forward_Max_latency_ns": 'Store-Forward Max Latency (ns)',
+    }
+
+    RANDOM_MASK_MAP = {
+        IP_VERSION_4: '0.0.0.255',
+        IP_VERSION_6: '0:0:0:0:0:0:0:ff',
+    }
+
+    MODE_SEEDS_MAP = {
+        0: ('private', ['256', '2048']),
+    }
+
+    MODE_SEEDS_DEFAULT = 'public', ['2048', '256']
+
+    @staticmethod
+    def find_view_obj(view_name, views):
+        edited_view_name = '::ixNet::OBJ-/statistics/view:"{}"'.format(view_name)
+        return next((view for view in views if edited_view_name == view), '')
+
+    @staticmethod
+    def get_config(tg_cfg):
+        external_interface = tg_cfg["vdu"][0]["external-interface"]
+        card_port0 = external_interface[0]["virtual-interface"]["vpci"]
+        card_port1 = external_interface[1]["virtual-interface"]["vpci"]
+        card0, port0 = card_port0.split(':')[:2]
+        card1, port1 = card_port1.split(':')[:2]
+        cfg = {
+            'py_lib_path': tg_cfg["mgmt-interface"]["tg-config"]["py_lib_path"],
+            'machine': tg_cfg["mgmt-interface"]["ip"],
+            'port': tg_cfg["mgmt-interface"]["tg-config"]["tcl_port"],
+            'chassis': tg_cfg["mgmt-interface"]["tg-config"]["ixchassis"],
+            'card1': card0,
+            'port1': port0,
+            'card2': card1,
+            'port2': port1,
+            'output_dir': tg_cfg["mgmt-interface"]["tg-config"]["dut_result_dir"],
+            'version': tg_cfg["mgmt-interface"]["tg-config"]["version"],
+            'bidir': True,
+        }
+        return cfg
+
+    def __init__(self, ixnet=None):
+        self.ixnet = ixnet
+        self._objRefs = dict()
+        self._cfg = None
+        self._logger = logging.getLogger(__name__)
+        self._params = None
+        self._bidir = None
+
+    def iter_over_get_lists(self, x1, x2, y2, offset=0):
+        for x in self.ixnet.getList(x1, x2):
+            y_list = self.ixnet.getList(x, y2)
+            for i, y in enumerate(y_list, offset):
+                yield x, y, i
+
+    def set_random_ip_multi_attribute(self, ipv4, seed, fixed_bits, random_mask, l3_count):
+        self.ixnet.setMultiAttribute(
+            ipv4,
+            '-seed', str(seed),
+            '-fixedBits', str(fixed_bits),
+            '-randomMask', str(random_mask),
+            '-valueType', 'random',
+            '-countValue', str(l3_count))
+
+    def set_random_ip_multi_attributes(self, ip, version, seeds, l3):
+        try:
+            random_mask = self.RANDOM_MASK_MAP[version]
+        except KeyError:
+            raise ValueError('Unknown version %s' % version)
+
+        l3_count = l3['count']
+        if "srcIp" in ip:
+            fixed_bits = l3['srcip4']
+            self.set_random_ip_multi_attribute(ip, seeds[0], fixed_bits, random_mask, l3_count)
+        if "dstIp" in ip:
+            fixed_bits = l3['dstip4']
+            self.set_random_ip_multi_attribute(ip, seeds[1], fixed_bits, random_mask, l3_count)
+
+    def add_ip_header(self, params, version):
+        for it, ep, i in self.iter_over_get_lists('/traffic', 'trafficItem', "configElement"):
+            mode, seeds = self.MODE_SEEDS_MAP.get(i, self.MODE_SEEDS_DEFAULT)
+            l3 = params[mode]['outer_l3']
+
+            for ip, ip_bits, _ in self.iter_over_get_lists(ep, 'stack', 'field'):
+                self.set_random_ip_multi_attributes(ip_bits, version, seeds, l3)
+
+        self.ixnet.commit()
+
+    def _connect(self, tg_cfg):
+        self._cfg = self.get_config(tg_cfg)
+
+        sys.path.append(self._cfg["py_lib_path"])
+        self.ixnet = IxNetwork.IxNet()
+
+        machine = self._cfg['machine']
+        port = str(self._cfg['port'])
+        version = str(self._cfg['version'])
+        result = self.ixnet.connect(machine, '-port', port, '-version', version)
+        return result
+
+    def clear_ixia_config(self):
+        self.ixnet.execute('newConfig')
+
+    def load_ixia_profile(self, profile):
+        self.ixnet.execute('loadConfig', self.ixnet.readFrom(profile))
+
+    def ix_load_config(self, profile):
+        self.clear_ixia_config()
+        self.load_ixia_profile(profile)
+
+    def ix_assign_ports(self):
+        vports = self.ixnet.getList(self.ixnet.getRoot(), 'vport')
+        ports = [
+            (self._cfg['chassis'], self._cfg['card1'], self._cfg['port1']),
+            (self._cfg['chassis'], self._cfg['card2'], self._cfg['port2']),
+        ]
+
+        vport_list = self.ixnet.getList("/", "vport")
+        self.ixnet.execute('assignPorts', ports, [], vport_list, True)
+        self.ixnet.commit()
+
+        for vport in vports:
+            if self.ixnet.getAttribute(vport, '-state') != 'up':
+                log.error("Both thr ports are down...")
+
+    def ix_update_frame(self, params):
+        streams = ["configElement"]
+
+        for param in params.values():
+            framesize_data = FramesizeHelper()
+            traffic_items = self.ixnet.getList('/traffic', 'trafficItem')
+            param_id = param['id']
+            for traffic_item, stream in product(traffic_items, streams):
+                helper = TrafficStreamHelper(traffic_item, stream, param_id)
+
+                self.ixnet.setMultiAttribute(helper.transmissionControl,
+                                             '-type', '{0}'.format(param['traffic_type']),
+                                             '-duration', '{0}'.format(param['duration']))
+
+                stream_frame_rate_path = helper.frameRate
+                self.ixnet.setMultiAttribute(stream_frame_rate_path, '-rate', param['iload'])
+                if param['outer_l2']['framesPerSecond']:
+                    self.ixnet.setMultiAttribute(stream_frame_rate_path,
+                                                 '-type', 'framesPerSecond')
+
+                framesize_data.populate_data(param['outer_l2']['framesize'])
+
+                make_attr_args = framesize_data.make_args('-incrementFrom', '66',
+                                                          '-randomMin', '66',
+                                                          '-quadGaussian', [],
+                                                          '-type', 'weightedPairs',
+                                                          '-presetDistribution', 'cisco',
+                                                          '-incrementTo', '1518')
+
+                self.ixnet.setMultiAttribute(helper.frameSize, *make_attr_args)
+
+                self.ixnet.commit()
+
+    def update_ether_multi_attribute(self, ether, mac_addr):
+        self.ixnet.setMultiAttribute(ether,
+                                     '-singleValue', mac_addr,
+                                     '-fieldValue', mac_addr,
+                                     '-valueType', 'singleValue')
+
+    def update_ether_multi_attributes(self, ether, l2):
+        if "ethernet.header.destinationAddress" in ether:
+            self.update_ether_multi_attribute(ether, str(l2['dstmac']))
+
+        if "ethernet.header.sourceAddress" in ether:
+            self.update_ether_multi_attribute(ether, str(l2['srcmac']))
+
+    def ix_update_ether(self, params):
+        for ti, ep, index in self.iter_over_get_lists('/traffic', 'trafficItem',
+                                                      "configElement", 1):
+            iter1 = (v['outer_l2'] for v in params.values() if str(v['id']) == str(index))
+            try:
+                l2 = next(iter1, {})
+            except KeyError:
+                continue
+
+            for ip, ether, _ in self.iter_over_get_lists(ep, 'stack', 'field'):
+                self.update_ether_multi_attributes(ether, l2)
+
+        self.ixnet.commit()
+
+    def ix_update_udp(self, params):
+        pass
+
+    def ix_update_tcp(self, params):
+        pass
+
+    def ix_start_traffic(self):
+        tis = self.ixnet.getList('/traffic', 'trafficItem')
+        for ti in tis:
+            self.ixnet.execute('generate', [ti])
+            self.ixnet.execute('apply', '/traffic')
+            self.ixnet.execute('start', '/traffic')
+
+    def ix_stop_traffic(self):
+        tis = self.ixnet.getList('/traffic', 'trafficItem')
+        for _ in tis:
+            self.ixnet.execute('stop', '/traffic')
+
+    def build_stats_map(self, view_obj, name_map):
+        return {kl: self.execute_get_column_values(view_obj, kr) for kl, kr in name_map.items()}
+
+    def execute_get_column_values(self, view_obj, name):
+        return self.ixnet.execute('getColumnValues', view_obj, name)
+
+    def ix_get_statistics(self):
+        views = self.ixnet.getList('/statistics', 'view')
+        view_obj = self.find_view_obj("Traffic Item Statistics", views)
+        stats = self.build_stats_map(view_obj, self.STATS_NAME_MAP)
+
+        self.find_view_obj("Port Statistics", views)
+        ports_stats = self.build_stats_map(view_obj, self.PORT_STATS_NAME_MAP)
+
+        views = self.ixnet.getList('/statistics', 'view')
+        view_obj = self.find_view_obj("Flow Statistics", views)
+        stats["latency"] = self.build_stats_map(view_obj, self.LATENCY_NAME_MAP)
+
+        return stats, ports_stats
diff --git a/yardstick/network_services/libs/ixia_libs/IxNet/__init__.py b/yardstick/network_services/libs/ixia_libs/IxNet/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/yardstick/network_services/libs/ixia_libs/__init__.py b/yardstick/network_services/libs/ixia_libs/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/yardstick/network_services/traffic_profile/http_ixload.py b/yardstick/network_services/traffic_profile/http_ixload.py
new file mode 100644 (file)
index 0000000..8a4f97f
--- /dev/null
@@ -0,0 +1,294 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from __future__ import absolute_import
+from __future__ import print_function
+
+import sys
+import os
+import logging
+
+# ixload uses its own py2. So importing jsonutils fails. So adding below
+# workaround to support call from yardstick
+try:
+    from oslo_serialization import jsonutils
+except ImportError:
+    import json as jsonutils
+
+from yardstick.common.utils import join_non_strings
+from yardstick.common.utils import ErrorClass
+
+try:
+    from IxLoad import IxLoad, StatCollectorUtils
+except ImportError:
+    IxLoad = ErrorClass
+    StatCollectorUtils = ErrorClass
+
+LOG = logging.getLogger(__name__)
+CSV_FILEPATH_NAME = 'IxL_statResults.csv'
+
+STATS_TO_GET = (
+    'HTTP_Client.csv',
+    'HTTP_Server.csv',
+    'L2-3 Stats for Client Ports.csv',
+    'L2-3 Stats for Server Ports.csv',
+    'IxLoad Detailed Report.html',
+    'IxLoad Detailed Report.pdf'
+)
+
+HTTP_CLIENT_STATS = [
+    ["HTTP Client", "TCP Connections Established", "kSum"],
+    ["HTTP Client", "TCP Connection Requests Failed", "kSum"],
+    ["HTTP Client", "HTTP Simulated Users", "kSum"],
+    ["HTTP Client", "HTTP Concurrent Connections", "kSum"],
+    ["HTTP Client", "HTTP Connections", "kSum"],
+    ["HTTP Client", "HTTP Transactions", "kSum"],
+    ["HTTP Client", "HTTP Connection Attempts", "kSum"]
+]
+
+HTTP_SERVER_STATS = [
+    ["HTTP Server", "TCP Connections Established", "kSum"],
+    ["HTTP Server", "TCP Connection Requests Failed", "kSum"]
+]
+
+
+INCOMING_STAT_RECORD_TEMPLATE = """
+=====================================
+INCOMING STAT RECORD >>> %s
+Len = %s
+%s
+%s
+=====================================
+"""
+
+INCOMING_STAT_INTERVAL_TEMPLATE = """
+=====================================
+Incoming stats: Time interval: %s
+Incoming stats: Time interval: %s
+=====================================
+"""
+
+
+class IXLOADHttpTest(object):
+
+    def __init__(self, test_input):
+        self.test_input = jsonutils.loads(test_input)
+        self.parse_run_test()
+        self.ix_load = None
+        self.stat_utils = None
+        self.remote_server = None
+        self.config_file = None
+        self.results_on_windows = None
+        self.result_dir = None
+        self.chassis = None
+        self.card = None
+        self.ports_to_reassign = None
+
+    @staticmethod
+    def format_ports_for_reassignment(ports):
+        formatted = [join_non_strings(';', p) for p in ports if len(p) == 3]
+        LOG.debug('for client ports:%s', os.linesep.join(formatted))
+        return formatted
+
+    def reassign_ports(self, test, repository, ports_to_reassign):
+        LOG.debug('ReassignPorts: %s %s', test, repository)
+
+        chassis_chain = repository.cget('chassisChain')
+        LOG.debug('chassischain: %s', chassis_chain)
+        client_ports = ports_to_reassign[0::2]
+        server_ports = ports_to_reassign[1::2]
+
+        client_ports = self.format_ports_for_reassignment(client_ports)
+        LOG.debug('Reassigning client ports: %s', client_ports)
+        server_ports = self.format_ports_for_reassignment(server_ports)
+        LOG.debug('Reassigning server ports: %s', server_ports)
+        ports_to_set = client_ports + server_ports
+
+        try:
+            LOG.debug('Reassigning ports: %s', ports_to_set)
+            test.setPorts(ports_to_set)
+        except Exception:
+            LOG.error('Error: Could not remap port assignment for: %s',
+                      ports_to_set)
+            self.ix_load.delete(repository)
+            self.ix_load.disconnect()
+            raise
+
+    @staticmethod
+    def stat_collector(*args):
+        LOG.debug(INCOMING_STAT_RECORD_TEMPLATE, args, len(args), args[0], args[1])
+
+    @staticmethod
+    def IxL_StatCollectorCommand(*args):
+        stats = args[1][3]
+        timestamp = args[1][1]
+        LOG.debug(INCOMING_STAT_INTERVAL_TEMPLATE, timestamp, stats)
+
+    @staticmethod
+    def set_results_dir(test_controller, results_on_windows):
+        """
+        If the folder doesn't exists on the Windows Client PC,
+        IxLoad will automatically create it.
+        """
+        try:
+            test_controller.setResultDir(results_on_windows)
+        except Exception:
+            LOG.error('Error creating results dir on Win: %s',
+                      results_on_windows)
+            raise
+
+    def load_config_file(self, config_file):
+        try:
+            LOG.debug(config_file)
+            repository = self.ix_load.new("ixRepository", name=config_file)
+            return repository
+        except Exception:
+            LOG.error('Error: IxLoad config file not found: %s', config_file)
+            raise
+
+    def start_http_test(self):
+        self.ix_load = IxLoad()
+
+        LOG.debug('--- ixLoad obj: %s', self.ix_load)
+        try:
+            self.ix_load.connect(self.remote_server)
+        except Exception:
+            raise
+
+        log_tag = "IxLoad-api"
+        log_name = "reprun"
+        logger = self.ix_load.new("ixLogger", log_tag, 1)
+        log_engine = logger.getEngine()
+        log_engine.setLevels(self.ix_load.ixLogger.kLevelDebug,
+                             self.ix_load.ixLogger.kLevelInfo)
+        log_engine.setFile(log_name, 2, 256, 1)
+
+        # Initialize stat collection utilities
+        self.stat_utils = StatCollectorUtils()
+
+        test_controller = self.ix_load.new("ixTestController", outputDir=1)
+
+        repository = self.load_config_file(self.config_file)
+
+        # Get the first test on the testList
+        test_name = repository.testList[0].cget("name")
+        test = repository.testList.getItem(test_name)
+
+        self.set_results_dir(test_controller, self.results_on_windows)
+
+        test.config(statsRequired=1, enableResetPorts=1, csvInterval=2,
+                    enableForceOwnership=True)
+
+        #  ---- Remap ports ----
+        try:
+            self.reassign_ports(test, repository, self.ports_to_reassign)
+        except Exception:
+            LOG.exception("Exception occurred during reassign_ports")
+
+        # -----------------------------------------------------------------------
+        # Set up stat Collection
+        # -----------------------------------------------------------------------
+        test_server_handle = test_controller.getTestServerHandle()
+        self.stat_utils.Initialize(test_server_handle)
+
+        # Clear any stats that may have been registered previously
+        self.stat_utils.ClearStats()
+
+        # Define the stats we would like to collect
+        self.stat_utils.AddStat(caption="Watch_Stat_1",
+                                statSourceType="HTTP Client",
+                                statName="TCP Connections Established",
+                                aggregationType="kSum",
+                                filterList={})
+
+        self.stat_utils.AddStat(caption="Watch_Stat_2",
+                                statSourceType="HTTP Client",
+                                statName="TCP Connection Requests Failed",
+                                aggregationType="kSum",
+                                filterList={})
+
+        self.stat_utils.AddStat(caption="Watch_Stat_3",
+                                statSourceType="HTTP Server",
+                                statName="TCP Connections Established",
+                                aggregationType="kSum",
+                                filterList={})
+
+        self.stat_utils.AddStat(caption="Watch_Stat_4",
+                                statSourceType="HTTP Server",
+                                statName="TCP Connection Requests Failed",
+                                aggregationType="kSum",
+                                filterList={})
+
+        self.stat_utils.StartCollector(self.IxL_StatCollectorCommand)
+
+        test_controller.run(test)
+        self.ix_load.waitForTestFinish()
+
+        test_controller.releaseConfigWaitFinish()
+
+        # Stop the collector (running in the tcl event loop)
+        self.stat_utils.StopCollector()
+
+        # Cleanup
+        test_controller.generateReport(detailedReport=1, format="PDF;HTML")
+        test_controller.releaseConfigWaitFinish()
+
+        self.ix_load.delete(test)
+        self.ix_load.delete(test_controller)
+        self.ix_load.delete(logger)
+        self.ix_load.delete(log_engine)
+
+        LOG.debug('Retrieving CSV stats from Windows Client PC ...')
+        for stat_file in STATS_TO_GET:
+            enhanced_stat_file = stat_file.replace('-', '')
+            enhanced_stat_file = enhanced_stat_file.replace(' ', '_')
+            enhanced_stat_file = enhanced_stat_file.replace('__', '_')
+
+            LOG.debug('Getting csv stat file: %s', stat_file)
+            src_file = os.path.join(self.results_on_windows, stat_file)
+            dst_file = os.path.join(self.result_dir, '_'.join(['ixLoad', enhanced_stat_file]))
+            self.ix_load.retrieveFileCopy(src_file, dst_file)
+
+        self.ix_load.disconnect()
+
+    def parse_run_test(self):
+        self.remote_server = self.test_input["remote_server"]
+        LOG.debug("remote tcl server: %s", self.remote_server)
+
+        self.config_file = self.test_input["ixload_cfg"]
+        LOG.debug("ixload config: %s", self.remote_server)
+
+        self.results_on_windows = 'C:/Results'
+        self.result_dir = self.test_input["result_dir"]
+        self.chassis = self.test_input["ixia_chassis"]
+        LOG.debug("remote ixia chassis: %s", self.chassis)
+
+        self.card = self.test_input["IXIA"]["card"]
+        self.ports_to_reassign = [
+            [self.chassis, self.card, port] for port in
+            self.test_input["IXIA"]["ports"]
+        ]
+
+        LOG.debug("Ports to be reassigned: %s", self.ports_to_reassign)
+
+
+def main(args):
+    # Get the args from cmdline and parse and run the test
+    test_input = "".join(args[1:])
+    if test_input:
+        ixload_obj = IXLOADHttpTest(test_input)
+        ixload_obj.start_http_test()
+
+if __name__ == '__main__':
+    main(sys.argv)
diff --git a/yardstick/network_services/traffic_profile/ixia_rfc2544.py b/yardstick/network_services/traffic_profile/ixia_rfc2544.py
new file mode 100644 (file)
index 0000000..5ba0018
--- /dev/null
@@ -0,0 +1,155 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from __future__ import absolute_import
+import logging
+import json
+
+from yardstick.network_services.traffic_profile.traffic_profile import \
+    TrexProfile
+
+LOG = logging.getLogger(__name__)
+
+
+class IXIARFC2544Profile(TrexProfile):
+    def _get_ixia_traffic_profile(self, profile_data, mac={},
+                                  xfile=None, static_traffic={}):
+        result = {}
+        if xfile:
+            with open(xfile, 'r') as stream:
+                try:
+                    static_traffic = json.load(stream)
+                except Exception as exc:
+                    LOG.debug(exc)
+
+        for traffickey, trafficvalue in static_traffic.items():
+            traffic = static_traffic[traffickey]
+            # outer_l2
+            index = 0
+            for key, value in profile_data[traffickey].items():
+                framesize = value['outer_l2']['framesize']
+                traffic['outer_l2']['framesize'] = framesize
+                traffic['framesPerSecond'] = True
+                traffic['bidir'] = False
+                traffic['outer_l2']['srcmac'] = \
+                    mac["src_mac_{}".format(traffic['id'])]
+                traffic['outer_l2']['dstmac'] = \
+                    mac["dst_mac_{}".format(traffic['id'])]
+                # outer_l3
+                if "outer_l3v6" in list(value.keys()):
+                    traffic['outer_l3'] = value['outer_l3v6']
+                    srcip4 = value['outer_l3v6']['srcip6']
+                    traffic['outer_l3']['srcip4'] = srcip4.split("-")[0]
+                    dstip4 = value['outer_l3v6']['dstip6']
+                    traffic['outer_l3']['dstip4'] = dstip4.split("-")[0]
+                else:
+                    traffic['outer_l3'] = value['outer_l3v4']
+                    srcip4 = value['outer_l3v4']['srcip4']
+                    traffic['outer_l3']['srcip4'] = srcip4.split("-")[0]
+                    dstip4 = value['outer_l3v4']['dstip4']
+                    traffic['outer_l3']['dstip4'] = dstip4.split("-")[0]
+
+                traffic['outer_l3']['type'] = key
+                # outer_l4
+                traffic['outer_l4'] = value['outer_l4']
+                index = index + 1
+            result.update({traffickey: traffic})
+
+        return result
+
+    def _ixia_traffic_generate(self, traffic_generator, traffic, ixia_obj):
+        for key, value in traffic.items():
+            if "public" in key or "private" in key:
+                traffic[key]["iload"] = str(self.rate)
+        ixia_obj.ix_update_frame(traffic)
+        ixia_obj.ix_update_ether(traffic)
+        # ixia_obj.ix_update_ipv4(traffic)
+        ixia_obj.ix_start_traffic()
+        self.tmp_drop = 0
+        self.tmp_throughput = 0
+
+    def execute(self, traffic_generator, ixia_obj, mac={}, xfile=None):
+        if self.first_run:
+            self.full_profile = {}
+            self.pg_id = 0
+            self.profile = 'private_1'
+            for key, value in self.params.items():
+                if "private" in key or "public" in key:
+                    self.profile_data = self.params[key]
+                    self.get_streams(self.profile_data)
+                    self.full_profile.update({key: self.profile_data})
+            traffic = \
+                self._get_ixia_traffic_profile(self.full_profile, mac, xfile)
+            self.max_rate = self.rate
+            self.min_rate = 0
+            self.get_multiplier()
+            self._ixia_traffic_generate(traffic_generator, traffic, ixia_obj)
+
+    def get_multiplier(self):
+        self.rate = round((self.max_rate + self.min_rate) / 2.0, 2)
+        multiplier = round(self.rate / self.pps, 2)
+        return str(multiplier)
+
+    def start_ixia_latency(self, traffic_generator, ixia_obj,
+                           mac={}, xfile=None):
+        traffic = self._get_ixia_traffic_profile(self.full_profile, mac)
+        self._ixia_traffic_generate(traffic_generator, traffic,
+                                    ixia_obj, xfile)
+
+    def get_drop_percentage(self, traffic_generator, samples, tol_min,
+                            tolerance, ixia_obj, mac={}, xfile=None):
+        status = 'Running'
+        drop_percent = 100
+        in_packets = sum([samples[iface]['in_packets'] for iface in samples])
+        out_packets = sum([samples[iface]['out_packets'] for iface in samples])
+        rx_throughput = \
+            sum([samples[iface]['RxThroughput'] for iface in samples])
+        tx_throughput = \
+            sum([samples[iface]['TxThroughput'] for iface in samples])
+        packet_drop = abs(out_packets - in_packets)
+        try:
+            drop_percent = round((packet_drop / float(out_packets)) * 100, 2)
+        except ZeroDivisionError:
+            LOG.info('No traffic is flowing')
+        samples['TxThroughput'] = round(tx_throughput / 1.0, 2)
+        samples['RxThroughput'] = round(rx_throughput / 1.0, 2)
+        samples['CurrentDropPercentage'] = drop_percent
+        samples['Throughput'] = self.tmp_throughput
+        samples['DropPercentage'] = self.tmp_drop
+        if drop_percent > tolerance and self.tmp_throughput == 0:
+            samples['Throughput'] = round(rx_throughput / 1.0, 2)
+            samples['DropPercentage'] = drop_percent
+        if self.first_run:
+            max_supported_rate = out_packets / 30.0
+            self.rate = max_supported_rate
+            self.first_run = False
+            if drop_percent <= tolerance:
+                status = 'Completed'
+        if drop_percent > tolerance:
+            self.max_rate = self.rate
+        elif drop_percent < tol_min:
+            self.min_rate = self.rate
+            if drop_percent >= self.tmp_drop:
+                self.tmp_drop = drop_percent
+                self.tmp_throughput = round((rx_throughput / 1.0), 2)
+                samples['Throughput'] = round(rx_throughput / 1.0, 2)
+                samples['DropPercentage'] = drop_percent
+        else:
+            samples['Throughput'] = round(rx_throughput / 1.0, 2)
+            samples['DropPercentage'] = drop_percent
+            return status, samples
+        self.get_multiplier()
+        traffic = self._get_ixia_traffic_profile(self.full_profile, mac, xfile)
+        self._ixia_traffic_generate(traffic_generator, traffic, ixia_obj)
+        return status, samples
diff --git a/yardstick/network_services/vnf_generic/vnf/acl_vnf.py b/yardstick/network_services/vnf_generic/vnf/acl_vnf.py
new file mode 100644 (file)
index 0000000..5f3c8a0
--- /dev/null
@@ -0,0 +1,72 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from __future__ import absolute_import
+from __future__ import print_function
+import logging
+
+from yardstick.benchmark.scenarios.networking.vnf_generic import find_relative_file
+from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNF, DpdkVnfSetupEnvHelper
+from yardstick.network_services.yang_model import YangModel
+
+LOG = logging.getLogger(__name__)
+
+# ACL should work the same on all systems, we can provide the binary
+ACL_PIPELINE_COMMAND = \
+    'sudo {tool_path} -p {ports_len_hex} -f {cfg_file} -s {script}'
+
+ACL_COLLECT_KPI = r"""\
+ACL TOTAL:[^p]+pkts_processed"?:\s(\d+),[^p]+pkts_drop"?:\s(\d+),[^p]+pkts_received"?:\s(\d+),"""
+
+
+class AclApproxSetupEnvSetupEnvHelper(DpdkVnfSetupEnvHelper):
+
+    APP_NAME = "vACL"
+    CFG_CONFIG = "/tmp/acl_config"
+    CFG_SCRIPT = "/tmp/acl_script"
+    PIPELINE_COMMAND = ACL_PIPELINE_COMMAND
+    HW_DEFAULT_CORE = 2
+    SW_DEFAULT_CORE = 5
+    DEFAULT_CONFIG_TPL_CFG = "acl.cfg"
+    VNF_TYPE = "ACL"
+
+
+class AclApproxVnf(SampleVNF):
+
+    APP_NAME = "vACL"
+    APP_WORD = 'acl'
+    COLLECT_KPI = ACL_COLLECT_KPI
+
+    COLLECT_MAP = {
+        'packets_in': 3,
+        'packets_fwd': 1,
+        'packets_dropped': 2,
+    }
+
+    def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None):
+        if setup_env_helper_type is None:
+            setup_env_helper_type = AclApproxSetupEnvSetupEnvHelper
+
+        super(AclApproxVnf, self).__init__(name, vnfd, setup_env_helper_type, resource_helper_type)
+        self.acl_rules = None
+
+    def scale(self, flavor=""):
+        raise NotImplementedError
+
+    def _start_vnf(self):
+        yang_model_path = find_relative_file(self.scenario_helper.options['rules'],
+                                             self.scenario_helper.task_path)
+        yang_model = YangModel(yang_model_path)
+        self.acl_rules = yang_model.get_rules()
+        super(AclApproxVnf, self)._start_vnf()
diff --git a/yardstick/network_services/vnf_generic/vnf/tg_ixload.py b/yardstick/network_services/vnf_generic/vnf/tg_ixload.py
new file mode 100644 (file)
index 0000000..c15f7b9
--- /dev/null
@@ -0,0 +1,176 @@
+#  Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from __future__ import absolute_import
+import csv
+import glob
+import logging
+import os
+import shutil
+
+from collections import OrderedDict
+from subprocess import call
+
+import six
+
+from yardstick.common.utils import makedirs
+from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNFTrafficGen
+from yardstick.network_services.vnf_generic.vnf.sample_vnf import ClientResourceHelper
+
+LOG = logging.getLogger(__name__)
+
+VNF_PATH = os.path.dirname(os.path.realpath(__file__))
+
+MOUNT_CMD = """\
+mount.cifs //{0[ip]}/Results {1.RESULTS_MOUNT} \
+-o username={0[user]},password={0[password]}\
+"""
+
+IXLOAD_CONFIG_TEMPLATE = '''\
+{
+    "ixia_chassis": "%s",
+    "IXIA": {
+        "ports": %s,
+        "card": %s
+    },
+    "remote_server": "%s",
+    "result_dir": "%s",
+    "ixload_cfg": '"C:/Results/%s"
+}'''
+
+IXLOAD_CMD = "{ixloadpy} {http_ixload} {args}"
+
+
+class ResourceDataHelper(list):
+
+    def get_aggregates(self):
+        return {
+            "min": min(self),
+            "max": max(self),
+            "avg": sum(self) / len(self),
+        }
+
+
+class IxLoadResourceHelper(ClientResourceHelper):
+
+    RESULTS_MOUNT = "/mnt/Results"
+
+    KPI_LIST = OrderedDict((
+        ('http_throughput', 'HTTP Total Throughput (Kbps)'),
+        ('simulated_users', 'HTTP Simulated Users'),
+        ('concurrent_connections', 'HTTP Concurrent Connections'),
+        ('connection_rate', 'HTTP Connection Rate'),
+        ('transaction_rate', 'HTTP Transaction Rate'),
+    ))
+
+    def __init__(self, setup_helper):
+        super(IxLoadResourceHelper, self).__init__(setup_helper)
+        self.result = OrderedDict((key, ResourceDataHelper()) for key in self.KPI_LIST)
+        self.resource_file_name = ''
+
+    def parse_csv_read(self, reader):
+        for row in reader:
+            try:
+                new_data = {key_left: int(row[key_right])
+                            for key_left, key_right in self.KPI_LIST.items()}
+            except (TypeError, ValueError):
+                continue
+            else:
+                for key, value in new_data.items():
+                    self.result[key].append(value)
+
+    def setup(self):
+        # TODO: fixupt scenario_helper to hanlde ixia
+        self.resource_file_name = str(self.scenario_helper.scenario_cfg['ixia_profile'])
+        makedirs(self.RESULTS_MOUNT)
+        cmd = MOUNT_CMD.format(self.vnfd_helper.mgmt_interface, self)
+        LOG.debug(cmd)
+
+        if not os.path.ismount(self.RESULTS_MOUNT):
+            call(cmd, shell=True)
+
+        shutil.rmtree(self.RESULTS_MOUNT, ignore_errors=True)
+        makedirs(self.RESULTS_MOUNT)
+        shutil.copy(self.resource_file_name, self.RESULTS_MOUNT)
+
+    def make_aggregates(self):
+        return {key_right: self.result[key_left].get_aggregates()
+                for key_left, key_right in self.KPI_LIST.items()}
+
+    def log(self):
+        for key in self.KPI_LIST:
+            LOG.debug(self.result[key])
+
+
+class IxLoadTrafficGen(SampleVNFTrafficGen):
+
+    def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None):
+        if resource_helper_type is None:
+            resource_helper_type = IxLoadResourceHelper
+
+        super(IxLoadTrafficGen, self).__init__(name, vnfd, setup_env_helper_type,
+                                               resource_helper_type)
+        self._result = {}
+        self.done = False
+        self.data = None
+
+    def run_traffic(self, traffic_profile):
+        ports = []
+        card = None
+        for interface in self.vnfd_helper.interfaces:
+            vpci_list = interface['virtual-interface']["vpci"].split(":")
+            card = vpci_list[0]
+            ports.append(vpci_list[1])
+
+        for csv_file in glob.iglob(self.ssh_helper.join_bin_path('*.csv')):
+            os.unlink(csv_file)
+
+        ixia_config = self.vnfd_helper.mgmt_interface["tg-config"]
+        ixload_config = IXLOAD_CONFIG_TEMPLATE % (
+            ixia_config["ixchassis"], ports, card,
+            self.vnfd_helper.mgmt_interface["ip"], self.ssh_helper.bin_path,
+            os.path.basename(self.resource_helper.resource_file_name))
+
+        http_ixload_path = os.path.join(VNF_PATH, "../../traffic_profile")
+        cmd = IXLOAD_CMD.format(
+            ixloadpy=os.path.join(ixia_config["py_bin_path"], "ixloadpython"),
+            http_ixload=os.path.join(http_ixload_path, "http_ixload.py"),
+            args="'%s'" % ixload_config)
+
+        LOG.debug(cmd)
+        call(cmd, shell=True)
+
+        with open(self.ssh_helper.join_bin_path("ixLoad_HTTP_Client.csv")) as csv_file:
+            lines = csv_file.readlines()[10:]
+
+        with open(self.ssh_helper.join_bin_path("http_result.csv"), 'wb+') as result_file:
+            result_file.writelines(six.text_type(lines[:-1]))
+            result_file.flush()
+            result_file.seek(0)
+            reader = csv.DictReader(result_file)
+            self.resource_helper.parse_csv_read(reader)
+
+        self.resource_helper.log()
+        self.data = self.resource_helper.make_aggregates()
+
+    def listen_traffic(self, traffic_profile):
+        pass
+
+    def instantiate(self, scenario_cfg, context_cfg):
+        super(IxLoadTrafficGen, self).instantiate(scenario_cfg, context_cfg)
+        self.done = False
+
+    def terminate(self):
+        call(["pkill", "-9", "http_ixload.py"])
+        super(IxLoadTrafficGen, self).terminate()
diff --git a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py
new file mode 100644 (file)
index 0000000..07bbdae
--- /dev/null
@@ -0,0 +1,165 @@
+# Copyright (c) 2016-2017 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from __future__ import absolute_import
+import time
+import os
+import logging
+import sys
+
+from yardstick.common.utils import ErrorClass
+from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNFTrafficGen
+from yardstick.network_services.vnf_generic.vnf.sample_vnf import ClientResourceHelper
+from yardstick.network_services.vnf_generic.vnf.sample_vnf import Rfc2544ResourceHelper
+
+try:
+    from IxNet import IxNextgen
+except ImportError:
+    IxNextgen = ErrorClass
+
+LOG = logging.getLogger(__name__)
+
+WAIT_AFTER_CFG_LOAD = 10
+WAIT_FOR_TRAFFIC = 30
+IXIA_LIB = os.path.dirname(os.path.realpath(__file__))
+IXNET_LIB = os.path.join(IXIA_LIB, "../../libs/ixia_libs/IxNet")
+sys.path.append(IXNET_LIB)
+
+
+class IxiaRfc2544Helper(Rfc2544ResourceHelper):
+
+    pass
+
+
+class IxiaResourceHelper(ClientResourceHelper):
+
+    def __init__(self, setup_helper, rfc_helper_type=None):
+        super(IxiaResourceHelper, self).__init__(setup_helper)
+        self.scenario_helper = setup_helper.scenario_helper
+
+        self.client = IxNextgen()
+
+        if rfc_helper_type is None:
+            rfc_helper_type = IxiaRfc2544Helper
+
+        self.rfc_helper = rfc_helper_type(self.scenario_helper)
+        self.tg_port_pairs = []
+        self.priv_ports = None
+        self.pub_ports = None
+
+    def _connect(self, client=None):
+        self.client.connect(self.vnfd_helper)
+
+    def _build_ports(self):
+        # self.generate_port_pairs(self.topology)
+        self.priv_ports = [int(x[0][-1]) for x in self.tg_port_pairs]
+        self.pub_ports = [int(x[1][-1]) for x in self.tg_port_pairs]
+        self.my_ports = list(set(self.priv_ports).union(set(self.pub_ports)))
+
+    def get_stats(self, *args, **kwargs):
+        return self.client.ix_get_statistics()[1]
+
+    def stop_collect(self):
+        self._terminated.value = 0
+        if self.client:
+            self.client.ix_stop_traffic()
+
+    def generate_samples(self, key=None, default=None):
+        last_result = self.get_stats()
+
+        samples = {}
+        for vpci_idx, interface in enumerate(self.vnfd_helper.interfaces):
+            name = "xe{0}".format(vpci_idx)
+            samples[name] = {
+                "rx_throughput_kps": float(last_result["Rx_Rate_Kbps"][vpci_idx]),
+                "tx_throughput_kps": float(last_result["Tx_Rate_Kbps"][vpci_idx]),
+                "rx_throughput_mbps": float(last_result["Rx_Rate_Mbps"][vpci_idx]),
+                "tx_throughput_mbps": float(last_result["Tx_Rate_Mbps"][vpci_idx]),
+                "in_packets": int(last_result["Valid_Frames_Rx"][vpci_idx]),
+                "out_packets": int(last_result["Frames_Tx"][vpci_idx]),
+                "RxThroughput": int(last_result["Valid_Frames_Rx"][vpci_idx]) / 30,
+                "TxThroughput": int(last_result["Frames_Tx"][vpci_idx]) / 30,
+            }
+
+        return samples
+
+    def run_traffic(self, traffic_profile):
+        min_tol = self.rfc_helper.tolerance_low
+        max_tol = self.rfc_helper.tolerance_high
+
+        self._build_ports()
+        self._connect()
+
+        # we don't know client_file_name until runtime as instantiate
+        client_file_name = self.scenario_helper.scenario_cfg['ixia_profile']
+        self.client.ix_load_config(client_file_name)
+        time.sleep(WAIT_AFTER_CFG_LOAD)
+
+        self.client.ix_assign_ports()
+
+        mac = {}
+        for index, interface in enumerate(self.vnfd_helper.interfaces):
+            virt_intf = interface["virtual-interface"]
+            mac.update({
+                "src_mac_{}".format(index): virt_intf["local_mac"],
+                "dst_mac_{}".format(index): virt_intf["dst_mac"],
+            })
+
+        samples = {}
+        ixia_file = os.path.join(os.getcwd(), "ixia_traffic.cfg")
+        # Generate ixia traffic config...
+        while not self._terminated.value:
+            traffic_profile.execute(self, self.client, mac, ixia_file)
+            self.client_started.value = 1
+            time.sleep(WAIT_FOR_TRAFFIC)
+            self.client.ix_stop_traffic()
+            samples = self.generate_samples()
+            self._queue.put(samples)
+            status, samples = traffic_profile.get_drop_percentage(self, samples, min_tol,
+                                                                  max_tol, self.client, mac,
+                                                                  ixia_file)
+
+            current = samples['CurrentDropPercentage']
+            if min_tol <= current <= max_tol or status == 'Completed':
+                self._terminated.value = 1
+
+        self.client.ix_stop_traffic()
+        self._queue.put(samples)
+
+
+class IxiaTrafficGen(SampleVNFTrafficGen):
+
+    def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None):
+        if resource_helper_type is None:
+            resource_helper_type = IxiaResourceHelper
+
+        super(IxiaTrafficGen, self).__init__(name, vnfd, setup_env_helper_type,
+                                             resource_helper_type)
+        self._ixia_traffic_gen = None
+        self.ixia_file_name = ''
+        self.tg_port_pairs = []
+        self.vnf_port_pairs = []
+
+    def _check_status(self):
+        pass
+
+    def scale(self, flavor=""):
+        pass
+
+    def listen_traffic(self, traffic_profile):
+        pass
+
+    def terminate(self):
+        self.resource_helper.stop_collect()
+        super(IxiaTrafficGen, self).terminate()