From 90b70c723c4c3b731ca3e88f79b7c7e7f1a7c20d Mon Sep 17 00:00:00 2001 From: Deepak S Date: Tue, 20 Jun 2017 14:15:50 -0700 Subject: [PATCH] Sample VFW VNF Change-Id: I32ca166cd6d818b57bbcfaf7c7e5a65b7147ba8d Signed-off-by: Deepak S Signed-off-by: Edward MacGillivray Signed-off-by: Ross Brattain --- samples/vnf_samples/nsut/vfw/acl_1rule.yaml | 47 + samples/vnf_samples/nsut/vfw/ixia_traffic.cfg | 51 + ..._http_ixload_1b_Requests-65000_Concurrency.yaml | 40 + ...aremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml | 44 + ...aremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml | 43 + ...pv4_1rule_1flow_64B_trex_corelated_traffic.yaml | 44 + ...rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml | 45 + ...544_with_latency_ipv4_1rule_1flow_64B_trex.yaml | 44 + .../nsut/vfw/vfw-tg-topology-3node.yaml | 53 + samples/vnf_samples/nsut/vfw/vfw-tg-topology.yaml | 50 + samples/vnf_samples/nsut/vfw/vfw.cfg | 62 + .../nsut/vfw/vfw_vnf_topology_ixia.yaml | 50 + .../nsut/vfw/vfw_vnf_topology_ixload.yaml | 50 + .../traffic_profiles/vfw/HTTP-vFW_IPv4_2Ports.rxf | 1335 ++++++++++++++++++++ .../vfw/vfw_ipv4_profile_1flows.ixncfg | Bin 0 -> 93841 bytes samples/vnf_samples/vnf_descriptors/vfw_vnf.yaml | 84 ++ .../vnf_generic/vnf/test_vfw_vnf.py | 447 +++++++ .../network_services/vnf_generic/vnf/vfw_vnf.py | 67 + 18 files changed, 2556 insertions(+) create mode 100644 samples/vnf_samples/nsut/vfw/acl_1rule.yaml create mode 100644 samples/vnf_samples/nsut/vfw/ixia_traffic.cfg create mode 100644 samples/vnf_samples/nsut/vfw/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml create mode 100644 samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml create mode 100644 samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml create mode 100644 samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml create mode 100644 samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml create mode 100644 samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml create mode 100644 samples/vnf_samples/nsut/vfw/vfw-tg-topology-3node.yaml create mode 100644 samples/vnf_samples/nsut/vfw/vfw-tg-topology.yaml create mode 100644 samples/vnf_samples/nsut/vfw/vfw.cfg create mode 100644 samples/vnf_samples/nsut/vfw/vfw_vnf_topology_ixia.yaml create mode 100644 samples/vnf_samples/nsut/vfw/vfw_vnf_topology_ixload.yaml create mode 100644 samples/vnf_samples/traffic_profiles/vfw/HTTP-vFW_IPv4_2Ports.rxf create mode 100644 samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg create mode 100644 samples/vnf_samples/vnf_descriptors/vfw_vnf.yaml create mode 100644 tests/unit/network_services/vnf_generic/vnf/test_vfw_vnf.py create mode 100644 yardstick/network_services/vnf_generic/vnf/vfw_vnf.py diff --git a/samples/vnf_samples/nsut/vfw/acl_1rule.yaml b/samples/vnf_samples/nsut/vfw/acl_1rule.yaml new file mode 100644 index 000000000..b184a29e2 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/acl_1rule.yaml @@ -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/vfw/ixia_traffic.cfg b/samples/vnf_samples/nsut/vfw/ixia_traffic.cfg new file mode 100644 index 000000000..f749865c5 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/ixia_traffic.cfg @@ -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/vfw/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml new file mode 100644 index 000000000..134722681 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_http_ixload_1b_Requests-65000_Concurrency.yaml @@ -0,0 +1,40 @@ +# 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: vfw_vnf_topology_ixload.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: Duration + duration: 2 + ixia_profile: ../../traffic_profiles/vfw/HTTP-vFW_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/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml new file mode 100644 index 000000000..746023de2 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia.yaml @@ -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: vfw_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/vfw/vfw_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/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml new file mode 100644 index 000000000..3a17abac4 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex.yaml @@ -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: vfw-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/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml new file mode 100644 index 000000000..a92a91e56 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_corelated_traffic.yaml @@ -0,0 +1,44 @@ +# 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: vfw-tg-topology-3node.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 + 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.yaml diff --git a/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml new file mode 100644 index 000000000..ab2791c86 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_trex_scale_up.yaml @@ -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: vfw-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/vfw/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml new file mode 100644 index 000000000..1e6330038 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_with_latency_ipv4_1rule_1flow_64B_trex.yaml @@ -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/ipv4_throughput.yaml + topology: vfw-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 + latency: 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: 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/vfw/vfw-tg-topology-3node.yaml b/samples/vnf_samples/nsut/vfw/vfw-tg-topology-3node.yaml new file mode 100644 index 000000000..e1496efad --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/vfw-tg-topology-3node.yaml @@ -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/vfw_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/vfw/vfw-tg-topology.yaml b/samples/vnf_samples/nsut/vfw/vfw-tg-topology.yaml new file mode 100644 index 000000000..b224ec14d --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/vfw-tg-topology.yaml @@ -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/vfw_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/vfw/vfw.cfg b/samples/vnf_samples/nsut/vfw/vfw.cfg new file mode 100644 index 000000000..8bab8d047 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/vfw.cfg @@ -0,0 +1,62 @@ +# 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 +n_vnf_threads = 2 +n_lb_tuples = 5 +loadb_debug = 0 +lib_arp_debug = 0 +[PIPELINE4] +type = VFW +core = 4 +pktq_in = SWQ2 SWQ3 +pktq_out = SWQ4 SWQ5 +n_rules = 10 +prv_que_handler = (0) +n_flows = 2000000 +traffic_type = 4 +pkt_type = ipv4 +tcp_be_liberal = 0 +[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/vfw/vfw_vnf_topology_ixia.yaml b/samples/vnf_samples/nsut/vfw/vfw_vnf_topology_ixia.yaml new file mode 100644 index 000000000..3585ba6d9 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/vfw_vnf_topology_ixia.yaml @@ -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: vFW + name: vFW + short-name: vFW + description: scenario with vFW 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/vfw_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 + - 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/vfw/vfw_vnf_topology_ixload.yaml b/samples/vnf_samples/nsut/vfw/vfw_vnf_topology_ixload.yaml new file mode 100644 index 000000000..9e7062321 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/vfw_vnf_topology_ixload.yaml @@ -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: VFW + name: VFW + short-name: VFW + description: scenario with HTTP and vFW 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/vfw_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 # VFW VNF diff --git a/samples/vnf_samples/traffic_profiles/vfw/HTTP-vFW_IPv4_2Ports.rxf b/samples/vnf_samples/traffic_profiles/vfw/HTTP-vFW_IPv4_2Ports.rxf new file mode 100644 index 000000000..b1563bd79 --- /dev/null +++ b/samples/vnf_samples/traffic_profiles/vfw/HTTP-vFW_IPv4_2Ports.rxf @@ -0,0 +1,1335 @@ + + + <_smSessionXml ver="[0, [1, [0, [0]]]]" type="ixSMSessionXML"> + <rpf> <Ixia.Aptixia.StackManager.SMSession type="Ixia.Aptixia.StackManager.SMSession" objectid="a1e46af9-15aa-4923-8410-c81d0cdf0836" version="6.70.420"> <doWaitLinkUp type="Bool">0</doWaitLinkUp> <doGratArp type="Bool">0</doGratArp> <subscribeToGratArpNotifications type="Bool">0</subscribeToGratArpNotifications> <doInterfaceCheck type="Bool">0</doInterfaceCheck> <rebootPortsBeforeConfigure type="Bool">0</rebootPortsBeforeConfigure> <testDuration type="Int">10000</testDuration> <checkLinkState type="Bool">0</checkLinkState> <portGroupList type="ListNode"> <Ixia.Aptixia.StackManager.PortGroup type="Ixia.Aptixia.StackManager.PortGroup" objectid="865be042-32d5-426a-9e75-0908c943801f" version="6.70.420"> <name type="String">client network</name> <category type="String" /> <stack type="Ixia.Aptixia.StackManager.L1EthernetPlugin" objectid="1dcd6e1b-17cd-45a1-875a-cbea40d3468c" version="6.70.420"> <autoNegotiate type="Bool">1</autoNegotiate> <speed type="String">k100FD</speed> <advertise10Half type="Bool">1</advertise10Half> <advertise10Full type="Bool">1</advertise10Full> <advertise100Half type="Bool">1</advertise100Half> <advertise100Full type="Bool">1</advertise100Full> <advertise1000Full type="Bool">1</advertise1000Full> <cardDualPhy type="Ixia.Aptixia.StackManager.DualPhyPlugin" objectid="b458c333-b4d4-48ef-bd38-3b456f72f8c8" version="6.70.420"> <medium type="String">auto</medium> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </cardDualPhy> <cardElm type="Ixia.Aptixia.StackManager.EthernetELMPlugin" objectid="28c0383a-76a7-4750-8162-2ad946ddac97" version="6.70.420"> <negotiateMasterSlave type="Bool">1</negotiateMasterSlave> <negotiationType type="String">master</negotiationType> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </cardElm> <enableFlowControl type="Bool">0</enableFlowControl> <directedAddress type="String">01:80:C2:00:00:01</directedAddress> <dataCenter type="Ixia.Aptixia.StackManager.DataCenterSettings" objectid="b9a0be2e-3880-4100-9e29-9b474f9301f4" version="6.70.420"> <dcSupported type="Bool">1</dcSupported> <dcEnabled type="Bool">0</dcEnabled> <dcFlowControl type="Ixia.Aptixia.StackManager.DataCenterSettingsSkeleton+eFlowControlType">0</dcFlowControl> <dcMode type="Ixia.Aptixia.StackManager.DataCenterSettingsSkeleton+eDataCenterMode">2</dcMode> <dcPfcMapping type="IntList" /> <dcPfcPauseEnable type="Bool">0</dcPfcPauseEnable> <dcPfcPauseDelay type="Int">1</dcPfcPauseDelay> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </dataCenter> <childrenList type="ListNode"> <Ixia.Aptixia.StackManager.L2EthernetPlugin type="Ixia.Aptixia.StackManager.L2EthernetPlugin" objectid="e0232591-010e-492c-8a28-75e436f4adb2" version="6.70.420"> <macRangeList type="ListNode"> <Ixia.Aptixia.StackManager.MacRange type="Ixia.Aptixia.StackManager.MacRange" objectid="3011c8a8-a9fd-4b76-a27d-91948113ed4f" version="6.70.420"> <enabled type="Bool">1</enabled> <name type="String">MAC-R1</name> <mac type="String">00:98:10:64:14:00</mac> <incrementBy type="String">00:00:00:00:00:01</incrementBy> <mtu type="Int">1500</mtu> <count type="Int">1</count> <vlanRange type="Ixia.Aptixia.StackManager.VlanIdRange" objectid="adb27552-7165-46a3-bc9e-04914adf40ac" version="6.70.420"> <name type="String">VLAN-R1</name> <enabled type="Bool">0</enabled> <firstId type="Int">1</firstId> <incrementStep type="Int">100</incrementStep> <increment type="Int">1</increment> <uniqueCount type="Int">4094</uniqueCount> <priority type="Int">0</priority> <tpid type="String">0x8100</tpid> <innerEnable type="Bool">0</innerEnable> <innerFirstId type="Int">1</innerFirstId> <innerIncrementStep type="Int">1</innerIncrementStep> <innerIncrement type="Int">1</innerIncrement> <innerUniqueCount type="Int">4094</innerUniqueCount> <innerPriority type="Int">0</innerPriority> <idIncrMode type="Int">1</idIncrMode> <innerTpid type="String">0x8100</innerTpid> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </vlanRange> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.MacRange> </macRangeList> <vlanRangeList type="ListNode"> <Ixia.Aptixia.StackManager.VlanIdRange type="Ixia.Aptixia.StackManager.VlanIdRange" objectid="adb27552-7165-46a3-bc9e-04914adf40ac" version="6.70.420" /> </vlanRangeList> <childrenList type="ListNode"> <Ixia.Aptixia.StackManager.IpV4V6Plugin type="Ixia.Aptixia.StackManager.IpV4V6Plugin" objectid="a916ae0f-0731-405d-ad19-eaade6c515f1" version="6.70.420"> <rangeList type="ListNode"> <Ixia.Aptixia.StackManager.IpV4V6Range type="Ixia.Aptixia.StackManager.IpV4V6Range" objectid="a3559674-8d95-4020-90b3-b42eacaef105" version="6.70.420"> <enabled type="Bool">1</enabled> <name type="String">IP-R1</name> <ipType type="String">IPv4</ipType> <ipAddress type="String">152.16.100.20</ipAddress> <prefix type="Int">24</prefix> <incrementBy type="String">0.0.0.1</incrementBy> <count type="Int">1</count> <autoCountEnabled type="Bool">0</autoCountEnabled> <gatewayAddress type="String">152.16.100.10</gatewayAddress> <gatewayIncrement type="String">0.0.0.0</gatewayIncrement> <gatewayIncrementMode type="String">perSubnet</gatewayIncrementMode> <enableGatewayArp type="Bool">0</enableGatewayArp> <generateStatistics type="Bool">0</generateStatistics> <mss type="Int">1460</mss> <randomizeAddress type="Bool">0</randomizeAddress> <randomizeSeed type="Int">2596329041</randomizeSeed> <autoMacGeneration type="Bool">1</autoMacGeneration> <macRange type="Ixia.Aptixia.StackManager.MacRange" objectid="3011c8a8-a9fd-4b76-a27d-91948113ed4f" version="6.70.420" /> <vlanRange type="Ixia.Aptixia.StackManager.VlanIdRange" objectid="adb27552-7165-46a3-bc9e-04914adf40ac" version="6.70.420" /> <atmRange type="Ixia.Aptixia.StackManager.AtmRange" objectid="00000000-0000-0000-0000-000000000000" /> <pvcRange type="Ixia.Aptixia.StackManager.PvcRange" objectid="00000000-0000-0000-0000-000000000000" /> <autoIpTypeEnabled type="Bool">0</autoIpTypeEnabled> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.IpV4V6Range> </rangeList> <rangeGroups type="ListNode"> <Ixia.Aptixia.StackManager.RangeGroup type="Ixia.Aptixia.StackManager.RangeGroup" objectid="aa33a76b-9c7f-48d9-a537-8d6eeec03662" version="6.70.420"> <name type="String">DistGroup1</name> <distribType type="Ixia.Aptixia.StackManager.RangeGroupSkeleton+eDistributionType">0</distribType> <rangeList type="ListNode"> <Ixia.Aptixia.StackManager.IpV4V6Range type="Ixia.Aptixia.StackManager.IpV4V6Range" objectid="a3559674-8d95-4020-90b3-b42eacaef105" version="6.70.420" /> </rangeList> </Ixia.Aptixia.StackManager.RangeGroup> </rangeGroups> <childrenList type="ListNode" /> <extensionList type="ListNode" /> <dscMode type="Bool">0</dscMode> <name type="String">IP-1</name> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.IpV4V6Plugin> </childrenList> <extensionList type="ListNode" /> <dscMode type="Bool">0</dscMode> <name type="String">MAC/VLAN-1</name> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.L2EthernetPlugin> </childrenList> <extensionList type="ListNode" /> <dscMode type="Bool">0</dscMode> <name type="String">Ethernet-1</name> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </stack> <globalPluginList type="ListNode"> <Ixia.Aptixia.StackManager.IxLoadSettingsPlugin type="Ixia.Aptixia.StackManager.IxLoadSettingsPlugin" objectid="9c6c8594-548e-4ea5-a478-0bfb6252c1ce" version="1.0.0"> <teardownInterfaceWithUser type="Bool">0</teardownInterfaceWithUser> <interfaceBehavior type="Int">0</interfaceBehavior> <name type="String">Settings-2</name> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.IxLoadSettingsPlugin> <Ixia.Aptixia.StackManager.DnsPlugin type="Ixia.Aptixia.StackManager.DnsPlugin" objectid="693c7b7b-327b-4d59-b187-57d7600308e3" version="6.70.420"> <domain type="String" /> <timeout type="Int">30000</timeout> <nameServerList type="ListNode" /> <searchList type="ListNode" /> <hostList type="ListNode" /> <name type="String">DNS-2</name> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.DnsPlugin> <Ixia.Aptixia.StackManager.FilterPlugin type="Ixia.Aptixia.StackManager.FilterPlugin" objectid="0f6ebdb4-7909-447a-b80a-e132dae33a9b" version="6.70.420"> <auto type="Bool">1</auto> <all type="Bool">0</all> <pppoecontrol type="Bool">0</pppoecontrol> <pppoenetwork type="Bool">0</pppoenetwork> <isis type="Bool">0</isis> <ip type="String" /> <tcp type="String" /> <udp type="String" /> <mac type="String" /> <icmp type="String" /> <name type="String">Filter-1</name> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.FilterPlugin> <Ixia.Aptixia.StackManager.TCPPlugin type="Ixia.Aptixia.StackManager.TCPPlugin" objectid="7a893f25-0ac6-41c7-ab5a-511c2068582a" version="6.70.420"> <bestPerfSettings type="Bool">0</bestPerfSettings> <accept_ra_all type="Bool">0</accept_ra_all> <tcp_abort_on_overflow type="Bool">0</tcp_abort_on_overflow> <tcp_adv_win_scale type="Int">2</tcp_adv_win_scale> <tcp_app_win type="Int">31</tcp_app_win> <tcp_bic type="Int">0</tcp_bic> <tcp_bic_fast_convergence type="Int">1</tcp_bic_fast_convergence> <tcp_bic_low_window type="Int">14</tcp_bic_low_window> <tcp_dsack type="Bool">1</tcp_dsack> <tcp_ecn type="Bool">0</tcp_ecn> <tcp_fack type="Bool">1</tcp_fack> <tcp_fin_timeout type="Int">60</tcp_fin_timeout> <tcp_frto type="Int">0</tcp_frto> <tcp_keepalive_intvl type="Int">7200</tcp_keepalive_intvl> <tcp_keepalive_probes type="Int">75</tcp_keepalive_probes> <tcp_keepalive_time type="Int">9</tcp_keepalive_time> <tcp_low_latency type="Int">0</tcp_low_latency> <tcp_max_orphans type="Int">8192</tcp_max_orphans> <tcp_max_syn_backlog type="Int">1024</tcp_max_syn_backlog> <tcp_max_tw_buckets type="Int">180000</tcp_max_tw_buckets> <tcp_mem_low type="Int">24576</tcp_mem_low> <tcp_mem_pressure type="Int">32768</tcp_mem_pressure> <tcp_mem_high type="Int">49152</tcp_mem_high> <tcp_moderate_rcvbuf type="Int">0</tcp_moderate_rcvbuf> <tcp_no_metrics_save type="Bool">0</tcp_no_metrics_save> <tcp_orphan_retries type="Int">0</tcp_orphan_retries> <tcp_reordering type="Int">3</tcp_reordering> <tcp_retrans_collapse type="Bool">1</tcp_retrans_collapse> <tcp_retries1 type="Int">3</tcp_retries1> <tcp_retries2 type="Int">15</tcp_retries2> <tcp_rfc1337 type="Bool">0</tcp_rfc1337> <tcp_rmem_min type="Int">4096</tcp_rmem_min> <tcp_rmem_default type="Int">1024</tcp_rmem_default> <tcp_rmem_max type="Int">262144</tcp_rmem_max> <tcp_sack type="Bool">1</tcp_sack> <tcp_stdurg type="Bool">0</tcp_stdurg> <tcp_synack_retries type="Int">5</tcp_synack_retries> <tcp_syn_retries type="Int">5</tcp_syn_retries> <tcp_timestamps type="Bool">1</tcp_timestamps> <tcp_tw_recycle type="Bool">1</tcp_tw_recycle> <tcp_tw_reuse type="Bool">0</tcp_tw_reuse> <tcp_vegas_alpha type="Int">2</tcp_vegas_alpha> <tcp_vegas_beta type="Int">6</tcp_vegas_beta> <tcp_vegas_cong_avoid type="Int">0</tcp_vegas_cong_avoid> <tcp_vegas_gamma type="Int">2</tcp_vegas_gamma> <tcp_westwood type="Int">0</tcp_westwood> <tcp_window_scaling type="Bool">0</tcp_window_scaling> <ip_no_pmtu_disc type="Bool">1</ip_no_pmtu_disc> <tcp_wmem_min type="Int">4096</tcp_wmem_min> <tcp_wmem_default type="Int">1024</tcp_wmem_default> <tcp_wmem_max type="Int">262144</tcp_wmem_max> <tcp_ipfrag_time type="Int">30</tcp_ipfrag_time> <tcp_port_min type="Int">1024</tcp_port_min> <tcp_port_max type="Int">65535</tcp_port_max> <tcp_rto_min type="Int">1000</tcp_rto_min> <tcp_rto_max type="Int">120000</tcp_rto_max> <tcp_tw_rfc1323_strict type="Bool">0</tcp_tw_rfc1323_strict> <udp_port_randomization type="Bool">0</udp_port_randomization> <disable_min_max_buffer_size type="Bool">1</disable_min_max_buffer_size> <llm_hdr_gap type="Int">8</llm_hdr_gap> <llm_hdr_gap_ns type="Int">10</llm_hdr_gap_ns> <inter_packet_granular_delay type="Double">0</inter_packet_granular_delay> <delayed_acks type="Bool">1</delayed_acks> <accept_ra_default type="Bool">0</accept_ra_default> <rps_needed type="Bool">0</rps_needed> <delayed_acks_segments type="Int">0</delayed_acks_segments> <delayed_acks_timeout type="Int">0</delayed_acks_timeout> <tcp_large_icwnd type="Int">0</tcp_large_icwnd> <tcp_mgmt_rmem type="Int">87380</tcp_mgmt_rmem> <tcp_mgmt_wmem type="Int">32768</tcp_mgmt_wmem> <adjust_tcp_buffers type="Bool">1</adjust_tcp_buffers> <name type="String">TCP-2</name> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.TCPPlugin> <Ixia.Aptixia.StackManager.GratArpPlugin type="Ixia.Aptixia.StackManager.GratArpPlugin" objectid="fc54eec4-41ef-4b6c-9415-bf639013b52d" version="6.70.420"> <enabled type="Bool">1</enabled> <forwardGratArp type="Bool">0</forwardGratArp> <rateControlEnabled type="Bool">0</rateControlEnabled> <maxFramesPerSecond type="Int">0</maxFramesPerSecond> <name type="String">GratARP-1</name> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.GratArpPlugin> <Ixia.Aptixia.StackManager.MeshingPlugin type="Ixia.Aptixia.StackManager.MeshingPlugin" objectid="b0ccbeae-9db2-4416-bbed-80dcb2a7a9ed" version="6.70.420"> <trafficMaps type="ListNode"> <Ixia.Aptixia.StackManager.MeshingTrafficMap type="Ixia.Aptixia.StackManager.MeshingTrafficMap" objectid="ea086372-6f3e-4867-932d-bfa5aff92921" version="6.70.420"> <name type="String">newClientActivity1!HTTP server_newServerActivity1</name> <configMapFilename type="String">newClientActivity1Script.configmap</configMapFilename> <sourceActivityId type="Int">0</sourceActivityId> <ipPreference type="Ixia.Aptixia.StackManager.MeshingTrafficMapSkeleton+eIpPreference">2</ipPreference> <portRangesString type="String" /> <meshingType type="Ixia.Aptixia.StackManager.MeshingTrafficMapSkeleton+eMeshingType">2</meshingType> <destinationActivityId type="Int">0</destinationActivityId> </Ixia.Aptixia.StackManager.MeshingTrafficMap> </trafficMaps> <activityRangeMapInfoList type="ListNode" /> <name type="String">Meshing-2</name> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.MeshingPlugin> </globalPluginList> <portList type="StringList"> <String>10.223.166.127;2;5</String> </portList> <typeSpecificData type="ListNode"> <Ixia.Aptixia.StackManager.IPSecPortGroupData type="Ixia.Aptixia.StackManager.IPSecPortGroupData" objectid="df783f7c-615e-47c1-b7f0-1174985ea22e" version="8.1.7"> <role type="String">Initiator</role> <associates type="ListNode" /> <overrideGlobalOptions type="Bool">0</overrideGlobalOptions> <useMaxInitiationRate type="Bool">0</useMaxInitiationRate> <maxInitiationRate type="Int">50</maxInitiationRate> <useMaxPendingTunnels type="Bool">0</useMaxPendingTunnels> <maxPendingTunnels type="Int">50</maxPendingTunnels> <teardownRate type="Int">10</teardownRate> <enableESPPerStreamStats type="Bool">0</enableESPPerStreamStats> <enableESPReplayStats type="Bool">0</enableESPReplayStats> <activities type="ListNode" /> <pcpuLogLevel type="String">0</pcpuLogLevel> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.IPSecPortGroupData> </typeSpecificData> <virtualMode type="Bool">0</virtualMode> <allowedVirtualModeTypes type="StringList" /> <doOwnership type="Bool">0</doOwnership> <branchToNicMap type="ListNode" /> <cpuAggregation type="Bool">0</cpuAggregation> <activePort type="String" /> <networkLayersManager type="Ixia.Aptixia.StackManager.NetworkLayersManager" objectid="3d3cf9ef-8aab-4388-9252-4baea80122d3" version="6.70.420" /> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.PortGroup> <Ixia.Aptixia.StackManager.PortGroup type="Ixia.Aptixia.StackManager.PortGroup" objectid="c4ecfc60-64ac-4dc2-9410-e0f58d84f229" version="6.70.420"> <name type="String">server network</name> <category type="String" /> <stack type="Ixia.Aptixia.StackManager.L1EthernetPlugin" objectid="1bd9f1bc-9959-464e-b1e8-ddb0bb4d0181" version="6.70.420"> <autoNegotiate type="Bool">1</autoNegotiate> <speed type="String">k100FD</speed> <advertise10Half type="Bool">1</advertise10Half> <advertise10Full type="Bool">1</advertise10Full> <advertise100Half type="Bool">1</advertise100Half> <advertise100Full type="Bool">1</advertise100Full> <advertise1000Full type="Bool">1</advertise1000Full> <cardDualPhy type="Ixia.Aptixia.StackManager.DualPhyPlugin" objectid="4fe8412b-7d4c-4ebe-a0d4-480a4401b3d0" version="6.70.420"> <medium type="String">auto</medium> <ixLoadRestObjectId type="Int">4</ixLoadRestObjectId> </cardDualPhy> <cardElm type="Ixia.Aptixia.StackManager.EthernetELMPlugin" objectid="4dfec118-30e8-4494-b7c7-e28518e7848a" version="6.70.420"> <negotiateMasterSlave type="Bool">1</negotiateMasterSlave> <negotiationType type="String">master</negotiationType> <ixLoadRestObjectId type="Int">4</ixLoadRestObjectId> </cardElm> <enableFlowControl type="Bool">0</enableFlowControl> <directedAddress type="String">01:80:C2:00:00:01</directedAddress> <dataCenter type="Ixia.Aptixia.StackManager.DataCenterSettings" objectid="123fecc5-cb5e-43e9-92a1-b053dc56d0f3" version="6.70.420"> <dcSupported type="Bool">1</dcSupported> <dcEnabled type="Bool">0</dcEnabled> <dcFlowControl type="Ixia.Aptixia.StackManager.DataCenterSettingsSkeleton+eFlowControlType">0</dcFlowControl> <dcMode type="Ixia.Aptixia.StackManager.DataCenterSettingsSkeleton+eDataCenterMode">2</dcMode> <dcPfcMapping type="IntList" /> <dcPfcPauseEnable type="Bool">0</dcPfcPauseEnable> <dcPfcPauseDelay type="Int">1</dcPfcPauseDelay> <ixLoadRestObjectId type="Int">4</ixLoadRestObjectId> </dataCenter> <childrenList type="ListNode"> <Ixia.Aptixia.StackManager.L2EthernetPlugin type="Ixia.Aptixia.StackManager.L2EthernetPlugin" objectid="35ff711b-53f7-4c74-9e8b-98d35adaa6bf" version="6.70.420"> <macRangeList type="ListNode"> <Ixia.Aptixia.StackManager.MacRange type="Ixia.Aptixia.StackManager.MacRange" objectid="f91c9f52-8150-4d0f-b657-498ed241835c" version="6.70.420"> <enabled type="Bool">1</enabled> <name type="String">MAC-R2</name> <mac type="String">00:98:28:28:14:00</mac> <incrementBy type="String">00:00:00:00:00:01</incrementBy> <mtu type="Int">1500</mtu> <count type="Int">1</count> <vlanRange type="Ixia.Aptixia.StackManager.VlanIdRange" objectid="57fa3f41-7695-42d7-ac26-68924bb1e8bb" version="6.70.420"> <name type="String">VLAN-R2</name> <enabled type="Bool">0</enabled> <firstId type="Int">1</firstId> <incrementStep type="Int">32</incrementStep> <increment type="Int">1</increment> <uniqueCount type="Int">4094</uniqueCount> <priority type="Int">0</priority> <tpid type="String">0x8100</tpid> <innerEnable type="Bool">0</innerEnable> <innerFirstId type="Int">1</innerFirstId> <innerIncrementStep type="Int">1</innerIncrementStep> <innerIncrement type="Int">1</innerIncrement> <innerUniqueCount type="Int">4094</innerUniqueCount> <innerPriority type="Int">0</innerPriority> <idIncrMode type="Int">1</idIncrMode> <innerTpid type="String">0x8100</innerTpid> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </vlanRange> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.MacRange> </macRangeList> <vlanRangeList type="ListNode"> <Ixia.Aptixia.StackManager.VlanIdRange type="Ixia.Aptixia.StackManager.VlanIdRange" objectid="57fa3f41-7695-42d7-ac26-68924bb1e8bb" version="6.70.420" /> </vlanRangeList> <childrenList type="ListNode"> <Ixia.Aptixia.StackManager.IpV4V6Plugin type="Ixia.Aptixia.StackManager.IpV4V6Plugin" objectid="b85b184d-9bb4-48c2-a029-e633fee7a3c8" version="6.70.420"> <rangeList type="ListNode"> <Ixia.Aptixia.StackManager.IpV4V6Range type="Ixia.Aptixia.StackManager.IpV4V6Range" objectid="1d9bf537-0c3d-4fdf-9b85-0a622cc77649" version="6.70.420"> <enabled type="Bool">1</enabled> <name type="String">IP-R2</name> <ipType type="String">IPv4</ipType> <ipAddress type="String">152.40.40.20</ipAddress> <prefix type="Int">24</prefix> <incrementBy type="String">0.0.0.1</incrementBy> <count type="Int">1</count> <autoCountEnabled type="Bool">0</autoCountEnabled> <gatewayAddress type="String">152.40.40.10</gatewayAddress> <gatewayIncrement type="String">0.0.0.0</gatewayIncrement> <gatewayIncrementMode type="String">perSubnet</gatewayIncrementMode> <enableGatewayArp type="Bool">0</enableGatewayArp> <generateStatistics type="Bool">0</generateStatistics> <mss type="Int">1460</mss> <randomizeAddress type="Bool">0</randomizeAddress> <randomizeSeed type="Int">463911585</randomizeSeed> <autoMacGeneration type="Bool">1</autoMacGeneration> <macRange type="Ixia.Aptixia.StackManager.MacRange" objectid="f91c9f52-8150-4d0f-b657-498ed241835c" version="6.70.420" /> <vlanRange type="Ixia.Aptixia.StackManager.VlanIdRange" objectid="57fa3f41-7695-42d7-ac26-68924bb1e8bb" version="6.70.420" /> <atmRange type="Ixia.Aptixia.StackManager.AtmRange" objectid="00000000-0000-0000-0000-000000000000" /> <pvcRange type="Ixia.Aptixia.StackManager.PvcRange" objectid="00000000-0000-0000-0000-000000000000" /> <autoIpTypeEnabled type="Bool">0</autoIpTypeEnabled> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.IpV4V6Range> </rangeList> <rangeGroups type="ListNode"> <Ixia.Aptixia.StackManager.RangeGroup type="Ixia.Aptixia.StackManager.RangeGroup" objectid="b2c21c73-bfe3-4fbc-9804-b5a8b307d893" version="6.70.420"> <name type="String">DistGroup1</name> <distribType type="Ixia.Aptixia.StackManager.RangeGroupSkeleton+eDistributionType">0</distribType> <rangeList type="ListNode"> <Ixia.Aptixia.StackManager.IpV4V6Range type="Ixia.Aptixia.StackManager.IpV4V6Range" objectid="1d9bf537-0c3d-4fdf-9b85-0a622cc77649" version="6.70.420" /> </rangeList> </Ixia.Aptixia.StackManager.RangeGroup> </rangeGroups> <childrenList type="ListNode" /> <extensionList type="ListNode" /> <dscMode type="Bool">0</dscMode> <name type="String">IP-2</name> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.IpV4V6Plugin> </childrenList> <extensionList type="ListNode" /> <dscMode type="Bool">0</dscMode> <name type="String">MAC/VLAN-2</name> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.L2EthernetPlugin> </childrenList> <extensionList type="ListNode" /> <dscMode type="Bool">0</dscMode> <name type="String">Ethernet-2</name> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </stack> <globalPluginList type="ListNode"> <Ixia.Aptixia.StackManager.IxLoadSettingsPlugin type="Ixia.Aptixia.StackManager.IxLoadSettingsPlugin" objectid="993e33c6-e1f7-4967-982e-82a032f8c61a" version="1.0.0"> <teardownInterfaceWithUser type="Bool">0</teardownInterfaceWithUser> <interfaceBehavior type="Int">0</interfaceBehavior> <name type="String">Settings-4</name> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.IxLoadSettingsPlugin> <Ixia.Aptixia.StackManager.DnsPlugin type="Ixia.Aptixia.StackManager.DnsPlugin" objectid="36ca84d7-ff44-45b7-b75d-aec38b753161" version="6.70.420"> <domain type="String" /> <timeout type="Int">30000</timeout> <nameServerList type="ListNode" /> <searchList type="ListNode" /> <hostList type="ListNode" /> <name type="String">DNS-4</name> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.DnsPlugin> <Ixia.Aptixia.StackManager.FilterPlugin type="Ixia.Aptixia.StackManager.FilterPlugin" objectid="25c5acdd-9dd3-4802-93b6-b10651820b66" version="6.70.420"> <auto type="Bool">1</auto> <all type="Bool">0</all> <pppoecontrol type="Bool">0</pppoecontrol> <pppoenetwork type="Bool">0</pppoenetwork> <isis type="Bool">0</isis> <ip type="String" /> <tcp type="String" /> <udp type="String" /> <mac type="String" /> <icmp type="String" /> <name type="String">Filter-2</name> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.FilterPlugin> <Ixia.Aptixia.StackManager.TCPPlugin type="Ixia.Aptixia.StackManager.TCPPlugin" objectid="6259328b-97c2-4390-8ab1-f16bf3459219" version="6.70.420"> <bestPerfSettings type="Bool">0</bestPerfSettings> <accept_ra_all type="Bool">0</accept_ra_all> <tcp_abort_on_overflow type="Bool">0</tcp_abort_on_overflow> <tcp_adv_win_scale type="Int">2</tcp_adv_win_scale> <tcp_app_win type="Int">31</tcp_app_win> <tcp_bic type="Int">0</tcp_bic> <tcp_bic_fast_convergence type="Int">1</tcp_bic_fast_convergence> <tcp_bic_low_window type="Int">14</tcp_bic_low_window> <tcp_dsack type="Bool">1</tcp_dsack> <tcp_ecn type="Bool">0</tcp_ecn> <tcp_fack type="Bool">1</tcp_fack> <tcp_fin_timeout type="Int">60</tcp_fin_timeout> <tcp_frto type="Int">0</tcp_frto> <tcp_keepalive_intvl type="Int">7200</tcp_keepalive_intvl> <tcp_keepalive_probes type="Int">75</tcp_keepalive_probes> <tcp_keepalive_time type="Int">9</tcp_keepalive_time> <tcp_low_latency type="Int">0</tcp_low_latency> <tcp_max_orphans type="Int">8192</tcp_max_orphans> <tcp_max_syn_backlog type="Int">1024</tcp_max_syn_backlog> <tcp_max_tw_buckets type="Int">180000</tcp_max_tw_buckets> <tcp_mem_low type="Int">24576</tcp_mem_low> <tcp_mem_pressure type="Int">32768</tcp_mem_pressure> <tcp_mem_high type="Int">49152</tcp_mem_high> <tcp_moderate_rcvbuf type="Int">0</tcp_moderate_rcvbuf> <tcp_no_metrics_save type="Bool">0</tcp_no_metrics_save> <tcp_orphan_retries type="Int">0</tcp_orphan_retries> <tcp_reordering type="Int">3</tcp_reordering> <tcp_retrans_collapse type="Bool">1</tcp_retrans_collapse> <tcp_retries1 type="Int">3</tcp_retries1> <tcp_retries2 type="Int">15</tcp_retries2> <tcp_rfc1337 type="Bool">0</tcp_rfc1337> <tcp_rmem_min type="Int">4096</tcp_rmem_min> <tcp_rmem_default type="Int">1024</tcp_rmem_default> <tcp_rmem_max type="Int">262144</tcp_rmem_max> <tcp_sack type="Bool">1</tcp_sack> <tcp_stdurg type="Bool">0</tcp_stdurg> <tcp_synack_retries type="Int">5</tcp_synack_retries> <tcp_syn_retries type="Int">5</tcp_syn_retries> <tcp_timestamps type="Bool">1</tcp_timestamps> <tcp_tw_recycle type="Bool">1</tcp_tw_recycle> <tcp_tw_reuse type="Bool">0</tcp_tw_reuse> <tcp_vegas_alpha type="Int">2</tcp_vegas_alpha> <tcp_vegas_beta type="Int">6</tcp_vegas_beta> <tcp_vegas_cong_avoid type="Int">0</tcp_vegas_cong_avoid> <tcp_vegas_gamma type="Int">2</tcp_vegas_gamma> <tcp_westwood type="Int">0</tcp_westwood> <tcp_window_scaling type="Bool">0</tcp_window_scaling> <ip_no_pmtu_disc type="Bool">1</ip_no_pmtu_disc> <tcp_wmem_min type="Int">4096</tcp_wmem_min> <tcp_wmem_default type="Int">1024</tcp_wmem_default> <tcp_wmem_max type="Int">262144</tcp_wmem_max> <tcp_ipfrag_time type="Int">30</tcp_ipfrag_time> <tcp_port_min type="Int">1024</tcp_port_min> <tcp_port_max type="Int">65535</tcp_port_max> <tcp_rto_min type="Int">1000</tcp_rto_min> <tcp_rto_max type="Int">120000</tcp_rto_max> <tcp_tw_rfc1323_strict type="Bool">0</tcp_tw_rfc1323_strict> <udp_port_randomization type="Bool">0</udp_port_randomization> <disable_min_max_buffer_size type="Bool">1</disable_min_max_buffer_size> <llm_hdr_gap type="Int">8</llm_hdr_gap> <llm_hdr_gap_ns type="Int">10</llm_hdr_gap_ns> <inter_packet_granular_delay type="Double">0</inter_packet_granular_delay> <delayed_acks type="Bool">1</delayed_acks> <accept_ra_default type="Bool">0</accept_ra_default> <rps_needed type="Bool">0</rps_needed> <delayed_acks_segments type="Int">0</delayed_acks_segments> <delayed_acks_timeout type="Int">0</delayed_acks_timeout> <tcp_large_icwnd type="Int">0</tcp_large_icwnd> <tcp_mgmt_rmem type="Int">87380</tcp_mgmt_rmem> <tcp_mgmt_wmem type="Int">32768</tcp_mgmt_wmem> <adjust_tcp_buffers type="Bool">1</adjust_tcp_buffers> <name type="String">TCP-4</name> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.TCPPlugin> <Ixia.Aptixia.StackManager.GratArpPlugin type="Ixia.Aptixia.StackManager.GratArpPlugin" objectid="3eedf749-efa4-43a0-87ae-e110a77c88d4" version="6.70.420"> <enabled type="Bool">1</enabled> <forwardGratArp type="Bool">0</forwardGratArp> <rateControlEnabled type="Bool">0</rateControlEnabled> <maxFramesPerSecond type="Int">0</maxFramesPerSecond> <name type="String">GratARP-2</name> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.GratArpPlugin> <Ixia.Aptixia.StackManager.MeshingPlugin type="Ixia.Aptixia.StackManager.MeshingPlugin" objectid="284f9992-65d8-4027-a155-709f1965f892" version="6.70.420"> <trafficMaps type="ListNode" /> <activityRangeMapInfoList type="ListNode" /> <name type="String">Meshing-1</name> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.MeshingPlugin> </globalPluginList> <portList type="StringList"> <String>10.223.166.127;2;6</String> </portList> <typeSpecificData type="ListNode"> <Ixia.Aptixia.StackManager.IPSecPortGroupData type="Ixia.Aptixia.StackManager.IPSecPortGroupData" objectid="f65f12f2-018c-46f5-a9c5-a1f6f7151909" version="8.1.7"> <role type="String">Initiator</role> <associates type="ListNode" /> <overrideGlobalOptions type="Bool">0</overrideGlobalOptions> <useMaxInitiationRate type="Bool">0</useMaxInitiationRate> <maxInitiationRate type="Int">50</maxInitiationRate> <useMaxPendingTunnels type="Bool">0</useMaxPendingTunnels> <maxPendingTunnels type="Int">50</maxPendingTunnels> <teardownRate type="Int">10</teardownRate> <enableESPPerStreamStats type="Bool">0</enableESPPerStreamStats> <enableESPReplayStats type="Bool">0</enableESPReplayStats> <activities type="ListNode" /> <pcpuLogLevel type="String">0</pcpuLogLevel> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.IPSecPortGroupData> </typeSpecificData> <virtualMode type="Bool">0</virtualMode> <allowedVirtualModeTypes type="StringList" /> <doOwnership type="Bool">0</doOwnership> <branchToNicMap type="ListNode" /> <cpuAggregation type="Bool">0</cpuAggregation> <activePort type="String" /> <networkLayersManager type="Ixia.Aptixia.StackManager.NetworkLayersManager" objectid="60b1273d-78d3-4813-8cea-ec9a7101b8a3" version="6.70.420" /> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.PortGroup> </portGroupList> <externalProperties type="Ixia.Aptixia.StackManager.ExternalPropertyManager" objectid="1f2452bf-e52a-4db2-ba47-e5cc8bf61b5e" version="6.70.420"> <properties type="ListNode"> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="145671ff-93a5-4ecc-8c83-59b2c3c67be9" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">IxCatLTEUEUeRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="9f07a941-ad2f-46b0-8c75-911862a21039" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">SixRdRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="a221ab5c-faae-4940-bfad-5d41d44f1427" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">L2tpRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="d811442b-bfb8-42f0-bbf8-6bdb6fc9b66b" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">DHCPServerRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="f252cff3-b919-4e74-9f62-9e9c5ab5d324" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">MobileSubscribersRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="493ce043-b982-4a43-a2d4-619e51fbc5a6" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">IPSecRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="500dfc8b-2e6a-401f-84c0-f6907f60c00e" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">EGTPSgsnS3RangeUe</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="693cb176-f3d8-4073-8a02-fabdc0bdd3fb" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">EGTPRange_SGW</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="ec983bf9-07f0-46b2-99a0-354114f42501" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">EmulatedRouterRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="5d0f0eb8-40af-4292-8ff2-a57e7903601d" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">PppoxRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="653fae09-ba19-443c-8f8b-9483c0b86b9a" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">GTPNGAPRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="c886be8c-c207-4bb4-90d5-17be54556d58" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">IxCatRNCIuPSUeRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="00e75214-5166-406b-90e5-2b83567ae5cf" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">GTPNGUERange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="50d10ee7-45ce-46d2-ae8d-ecd3b1806067" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">EGTPUERange_S5S8_SGW</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="c2f310a4-6ea4-4459-be3b-f3b3365c590a" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">GTPGRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="7e458bed-5e36-42d6-812d-3794be52766e" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">EGTPPcrfRange_S5S8_PGW</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="7d225fda-6432-4de3-9750-c19bbc957703" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">DSLiteRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="e25dd669-ffc5-493d-a2b5-fd5627bf2ee8" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">EGTPSGSNRangeUe</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="7ac0b7d4-6df9-4e1f-86d2-f0a494b3f20b" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">SlaacRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="25699a2c-ab22-417b-9072-894523e98008" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">EGTPUERange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="05f1053a-5774-409f-b07e-add07df64338" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">PSTNDigitalRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="482a10c3-0ac7-44d9-9fa9-b43ba3a9901d" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">DHCPRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="a0f03753-923d-4421-8c4f-0ed78f00fc44" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">AtmRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="fb5cd68e-b4b0-4fd4-ae18-4100c0035642" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">IxCatMMEApnRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="62677b6a-080e-4cc3-919b-71fa90ae410f" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">IxCatENodeBUuApnRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="2e0fd6e3-470e-48df-ab8d-cc21b9d80393" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">GTPSUERange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="175f3104-0d2a-44f9-b712-fed3b170f8cb" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">IpV4V6Range</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="d1f37e1e-db44-4bac-acb8-b242dee8e371" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">MacRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="61ccdebc-84e6-464d-be14-2b3ddedab9d2" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">DualStackIPRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="d0678cd8-998e-42ab-8f0d-bfcb5370eac2" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">EGTPUERange_S2a_TWAN</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="d8350364-51c6-4a1b-af9f-72c9c235a636" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">IxCatSGSNIuPSApnRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="613d02a1-db1e-415d-b4bb-8b73b4477cf4" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">IxCatENodeBSimUeRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="9a41f718-b55e-44c7-a0cc-b1fcf8204c20" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">S6dRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="4c26fe62-a63d-4c40-8e15-c58ad8fba8d0" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">UERangeBase</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="5c2ca63f-3335-4ab7-963e-440817448538" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">EGTPMmeS10RangeUe</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="51a5eccc-a68d-4730-8a48-32019c547c28" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">S6aRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="3010c4ad-f31e-4676-9e61-bb25cf9c1bbb" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">BmScRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="ef1677e4-f390-4a78-b61a-f7650cf5faea" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">MBmsGwRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> <Ixia.Aptixia.StackManager.ExternalPropertyInfo type="Ixia.Aptixia.StackManager.ExternalPropertyInfo" objectid="24322b98-7a2a-4d2d-a4ee-4cde0f0e8b64" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <targetType type="String">PptpRange</targetType> <valueType type="String">ExternalValueBoolean</valueType> <description type="String">Enable collection of interface statistics on this range</description> </Ixia.Aptixia.StackManager.ExternalPropertyInfo> </properties> <values type="ListNode"> <Ixia.Aptixia.StackManager.ExternalProperty type="Ixia.Aptixia.StackManager.ExternalProperty" objectid="6804ae67-3bd7-471b-8796-ee1e4773c2f1" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <target type="Ixia.Aptixia.StackManager.IpV4V6Range" objectid="a3559674-8d95-4020-90b3-b42eacaef105" version="6.70.420" /> <value type="Ixia.Aptixia.StackManager.ExternalValueBoolean" objectid="7efcd429-2c48-41bd-bdc5-489dbfcfc49a" version="6.70.420"> <value type="Bool">0</value> </value> <enabled type="Bool">1</enabled> </Ixia.Aptixia.StackManager.ExternalProperty> <Ixia.Aptixia.StackManager.ExternalProperty type="Ixia.Aptixia.StackManager.ExternalProperty" objectid="a63d8276-65bc-4bc2-8202-6461c6399ef9" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <target type="Ixia.Aptixia.StackManager.IpV4V6Range" objectid="1d9bf537-0c3d-4fdf-9b85-0a622cc77649" version="6.70.420" /> <value type="Ixia.Aptixia.StackManager.ExternalValueBoolean" objectid="09d7b134-2921-4759-bbdb-ff3a5a1966d7" version="6.70.420"> <value type="Bool">0</value> </value> <enabled type="Bool">1</enabled> </Ixia.Aptixia.StackManager.ExternalProperty> <Ixia.Aptixia.StackManager.ExternalProperty type="Ixia.Aptixia.StackManager.ExternalProperty" objectid="0cd9f099-242e-4b03-965f-d343c60181e6" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <target type="Ixia.Aptixia.StackManager.MacRange" objectid="3011c8a8-a9fd-4b76-a27d-91948113ed4f" version="6.70.420" /> <value type="Ixia.Aptixia.StackManager.ExternalValueBoolean" objectid="503aa008-2481-419f-a223-c90b2c25c17e" version="6.70.420"> <value type="Bool">0</value> </value> <enabled type="Bool">0</enabled> </Ixia.Aptixia.StackManager.ExternalProperty> <Ixia.Aptixia.StackManager.ExternalProperty type="Ixia.Aptixia.StackManager.ExternalProperty" objectid="0b8d2c01-19ac-4f28-924e-660676d978da" version="6.70.420"> <propertyName type="String">Publish Statistics</propertyName> <target type="Ixia.Aptixia.StackManager.MacRange" objectid="f91c9f52-8150-4d0f-b657-498ed241835c" version="6.70.420" /> <value type="Ixia.Aptixia.StackManager.ExternalValueBoolean" objectid="41c694b3-bb55-48fe-9604-8b003540242f" version="6.70.420"> <value type="Bool">0</value> </value> <enabled type="Bool">0</enabled> </Ixia.Aptixia.StackManager.ExternalProperty> </values> </externalProperties> <availableNetworkTimelines type="ListNode" /> <typeSpecificData type="ListNode"> <Ixia.Aptixia.StackManager.MacSessionData type="Ixia.Aptixia.StackManager.MacSessionData" objectid="a9c7aa59-e015-4ffd-bb82-5d877ae9c1a8" version="6.70.420"> <duplicateCheckingScope type="Ixia.Aptixia.StackManager.MacSessionDataSkeleton+eMacValidationOptions">2</duplicateCheckingScope> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.MacSessionData> <Ixia.Aptixia.StackManager.IpSessionData type="Ixia.Aptixia.StackManager.IpSessionData" objectid="34a78d72-1fc5-4875-9fe1-b4db66b1b4c4" version="6.70.420"> <duplicateCheckingScope type="Ixia.Aptixia.StackManager.IpSessionDataSkeleton+eIpValidationOptions">2</duplicateCheckingScope> <enableGatewayArp type="Bool">0</enableGatewayArp> <gatewayArpRequestRate type="Int">300</gatewayArpRequestRate> <maxOutstandingGatewayArpRequests type="Int">300</maxOutstandingGatewayArpRequests> <ignoreUnresolvedIPs type="Bool">0</ignoreUnresolvedIPs> <sendAllRequests type="Bool">0</sendAllRequests> <individualARPTimeOut type="Int">500</individualARPTimeOut> <ixLoadRestObjectId type="Int">2</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.IpSessionData> <Ixia.Aptixia.StackManager.IxLoadSessionData type="Ixia.Aptixia.StackManager.IxLoadSessionData" objectid="1e24447f-69f1-4030-8b2d-25a18c7160ca" version="1.0.0"> <portGroupList type="ListNode"> <Ixia.Aptixia.StackManager.PortGroup type="Ixia.Aptixia.StackManager.PortGroup" objectid="865be042-32d5-426a-9e75-0908c943801f" version="6.70.420" /> <Ixia.Aptixia.StackManager.PortGroup type="Ixia.Aptixia.StackManager.PortGroup" objectid="c4ecfc60-64ac-4dc2-9410-e0f58d84f229" version="6.70.420" /> </portGroupList> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.IxLoadSessionData> <Ixia.Aptixia.StackManager.ImpairSessionData type="Ixia.Aptixia.StackManager.ImpairSessionData" objectid="94b53c2c-0747-41c2-838d-0e0e15f31766" version="6.70.13"> <profiles type="ListNode"> <Ixia.Aptixia.StackManager.ImpairProfile type="Ixia.Aptixia.StackManager.ImpairProfile" objectid="90dd3511-93c1-49fa-8e38-db774db9fe17" version="6.70.13"> <name type="String">DefaultProfile</name> <defaultp type="Bool">1</defaultp> <seed type="Int">0</seed> <addDelay type="Bool">1</addDelay> <delay type="Int">20</delay> <jitter type="Int">0</jitter> <addDrop type="Bool">0</addDrop> <drop type="Double">10</drop> <addDropSequence type="Bool">0</addDropSequence> <dropSequenceSkip type="Int">10</dropSequenceSkip> <dropSequenceLength type="Int">1</dropSequenceLength> <addReorder type="Bool">0</addReorder> <gap type="Int">10</gap> <reorder type="Int">20</reorder> <reorderLength type="Int">1</reorderLength> <addReorderPI type="Bool">0</addReorderPI> <reorderPISkip type="Int">10</reorderPISkip> <reorderPILength type="Int">1</reorderPILength> <reorderPIInterval type="Int">1</reorderPIInterval> <reorderPITimeout type="Int">1000</reorderPITimeout> <addDuplicate type="Bool">0</addDuplicate> <duplicate type="Double">10</duplicate> <addFragment type="Bool">0</addFragment> <fragment type="Double">10</fragment> <mtu type="Int">1000</mtu> <addFragmentSequence type="Bool">0</addFragmentSequence> <fragmentSequenceSkip type="Int">10</fragmentSequenceSkip> <fragmentSequenceLength type="Int">1</fragmentSequenceLength> <mtuSequence type="Int">1000</mtuSequence> <sendFragmentsInReverseOrder type="Bool">0</sendFragmentsInReverseOrder> <sendFirstFragmentOnly type="Bool">0</sendFirstFragmentOnly> <sendOverlappingFragments type="Bool">0</sendOverlappingFragments> <addBandwidth type="Bool">0</addBandwidth> <bandwidth type="Double">1</bandwidth> <bandwidthUnits type="String">mbps</bandwidthUnits> <addBandwidthIn type="Bool">0</addBandwidthIn> <bandwidthIn type="Double">1</bandwidthIn> <bandwidthUnitsIn type="String">mbps</bandwidthUnitsIn> <destinationIp type="String">any</destinationIp> <sourceIp type="String">any</sourceIp> <sourcePort type="Int">0</sourcePort> <destinationPort type="Int">0</destinationPort> <protocol type="String">any</protocol> <typeOfService type="String">any</typeOfService> <addTcpFlagsFilter type="Bool">0</addTcpFlagsFilter> <selectTcpFlags type="String">SYN;RST;ACK</selectTcpFlags> <expectTcpFlags type="String">SYN</expectTcpFlags> <impairOrder type="String">Delay;Drop;DropSeq;Reorder;ReorderPI;Duplicate;Fragment;FragmentSeq;Bandwidth</impairOrder> </Ixia.Aptixia.StackManager.ImpairProfile> </profiles> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.ImpairSessionData> <Ixia.Aptixia.StackManager.IPSecSessionData type="Ixia.Aptixia.StackManager.IPSecSessionData" objectid="bd2f0ea4-4278-49c8-9600-18cd2c8ed639" version="8.1.7"> <ipsecTunnelSetup type="Ixia.Aptixia.StackManager.IPSecTunnelSetup" objectid="1bacc8a0-dda0-4e0c-b013-4d8618dc80b6" version="8.1.7"> <tunnelSetupTimeout type="Int">30</tunnelSetupTimeout> <tunnelRetransmissionTimeout type="Int">30</tunnelRetransmissionTimeout> <numRetries type="Int">0</numRetries> <retryInterval type="Int">10</retryInterval> <retryDelay type="Int">10</retryDelay> <testType type="String">P2D</testType> <sendCiscoVid type="Bool">0</sendCiscoVid> <useMaxInitiationRate type="Bool">0</useMaxInitiationRate> <useMaxPendingTunnels type="Bool">0</useMaxPendingTunnels> <enableRekey type="Bool">1</enableRekey> <rekeyRetries type="Int">3</rekeyRetries> <rekeyFuzzPercentage type="Int">0</rekeyFuzzPercentage> <rekeyMargin type="Int">10</rekeyMargin> </ipsecTunnelSetup> <ipsecCertificates type="Ixia.Aptixia.StackManager.IPSecCertificates" objectid="2e324324-bf74-4ad3-afbb-62e44f01c31a" version="8.1.7"> <uniqueCert type="Bool">0</uniqueCert> <certSource type="String">kNewCert</certSource> <caURL type="String" /> <caDN type="String" /> <certSubjectDN type="String" /> <certSubjectAltDN type="String" /> <remoteIkeId type="String" /> <bitSize type="String">k512</bitSize> <saveCert type="Bool">1</saveCert> <cacheCertFolder type="String">C:\Program Files\Ixia\CachedCerts</cacheCertFolder> <certParentFolder type="String">C:\Program Files\Ixia\CachedCerts</certParentFolder> <certNumber type="String" /> <caCertNumber type="String" /> <earlyExpDate type="String" /> <lateExpDate type="String" /> <usePerRangeCertNameExp type="Bool">0</usePerRangeCertNameExp> <checkCrl type="Bool">0</checkCrl> <crlOverrideEnable type="Bool">0</crlOverrideEnable> <crlOverrideUrl type="String" /> <checkOcsp type="Bool">0</checkOcsp> <ocspOverrideEnable type="Bool">0</ocspOverrideEnable> <ocspOverrideUrl type="String" /> <unknownIsRevoked type="Bool">0</unknownIsRevoked> <certProto type="String">kSCEP</certProto> </ipsecCertificates> <ipsecCertManager type="Ixia.Aptixia.StackManager.IPSecCertManager" objectid="f3dc4ef0-e9a1-48a2-b69f-c5d2b485e897" version="8.1.7"> <caURL type="String" /> <caDN type="String">CN=RootCA,C=RO,L=Bucharest,O=Ixia,OU=IxLoad,IP:201.121.87.2,email:ixia@ixiacom.com</caDN> <certSubjectDN type="String">CN=IxiaVPN,C=RO,L=Bucharest,O=Ixia</certSubjectDN> <keyGenAlgo type="String">kRSA_512</keyGenAlgo> <cacheCertFolder type="String">C:\Program Files\Ixia\CachedCerts</cacheCertFolder> <caKeyFile type="String">C:\Program Files\Ixia\ca-priv.key</caKeyFile> <caCrtFile type="String">C:\Program Files\Ixia\ca-cert.crt</caCrtFile> <certNumber type="Int">1</certNumber> <certProto type="String">kSCEP</certProto> <createRootCA type="Bool">0</createRootCA> <uniqueCert type="Bool">0</uniqueCert> <descFilePath type="String">C:\Program Files\Ixia\CachedCerts\sample.desc</descFilePath> <useDescFile type="Bool">0</useDescFile> </ipsecCertManager> <eapSimTuples type="ListNode" /> <eapAkaTuples type="ListNode" /> <maxInitiationRate type="Int">50</maxInitiationRate> <maxPendingTunnels type="Int">50</maxPendingTunnels> <negotiationStartDelay type="Int">0</negotiationStartDelay> <teardownRate type="Int">10</teardownRate> <burstInitiation type="Bool">0</burstInitiation> <parallelInitiation type="Bool">0</parallelInitiation> <enableExtraPortLogging type="Bool">0</enableExtraPortLogging> <enableWildcardTsi type="Bool">0</enableWildcardTsi> <enableWildcardTsr type="Bool">0</enableWildcardTsr> <enablePlutoWildcardTsi type="Bool">0</enablePlutoWildcardTsi> <enablePlutoModeCfgWildcardTsr type="Bool">1</enablePlutoModeCfgWildcardTsr> <enablePlutoS2SWildcardTsr type="Bool">0</enablePlutoS2SWildcardTsr> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.IPSecSessionData> </typeSpecificData> <statViewManager type="Ixia.Aptixia.StackManager.StatViewManager" objectid="7256ce27-286c-475d-b198-09b4ae306f73" version="6.70.420"> <enableStats type="Bool">1</enableStats> <enableOverviewStats type="Bool">1</enableOverviewStats> <enablePerSessionStats type="Bool">1</enablePerSessionStats> </statViewManager> <waitForLinkUp type="Bool">0</waitForLinkUp> <overloadProtection type="Bool">1</overloadProtection> <ixLoadRestObjectId type="Int">1</ixLoadRestObjectId> </Ixia.Aptixia.StackManager.SMSession> </rpf> + + <_composerConfig ver="[0, [1, [0, [0]]]]" type="ixComposerConfig"> + + + <_quickTestConfig ver="[0, [1, [0, [0]]]]" type="ixQuickTestConfig"> + <?xml version="1.0" encoding="utf-16"?> <Config> <configs Version="5.0" /> </Config> + + 15481 + 8.01.106.3 + HTTP-vFW_IPv4_2Ports.rxf + + C:\Users\ds1\Desktop\yardstick + HTTP-vFW_IPv4_2Ports.rxf + Test1 + + + + 10.223.166.127 + 1 + None + + + <_apiUniqueId type="int">12991 + + + 1 + + + + None + + + + + + + + Test1 + + False + False + 1 + False + 0 + + 0 + 4 + 0 + + 1 + 0 + 30 + 0 + 0 + <_apiUniqueId type="int">12941 + + + + TrafficFlow1 + + + Client + + + HTTP client@client network + None + netTraffic + 1 + Client + ethernet + ipTrafficAgent + Client + + + + None + HTTP client + Client + ipTrafficAgent + None + + + 1 + newClientActivity1 + ipTrafficAgent + False + None + 0 + + 1 + + <_apiUniqueId type="int">12943 + + + + + HTTP server_newServerActivity1 + portPairs + + + portPairs + portMesh + customMesh + + True + None + + + HTTP server@server network + None + netTraffic + 1 + Server + ethernet + ipTrafficAgent + Server + + + + None + HTTP server + Server + ipTrafficAgent + None + + + 1 + newServerActivity1 + ipTrafficAgent + False + None + 1 + 0 + None + + + 100.0 + 80 + 443 + 300 + 0 + 0 + 0 + 0 + 0 + 16384 + 10 + 100 + 0 + 1460 + False + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 200_OK + OK + 200 + text/plain + 2 + 2014/11/22 07:27:01 + False + 5 + 1 + GMT + 0 + 2005/03/04 21:55:04 + 3600 + 3600 + 1 + 2005/02/02 21:55:04 + False + 5 + 1 + + True + False + 0 + <_apiUniqueId type="int">12972 + + + 404_PageNotFound + Page not found + 404 + text/plain + 2 + 2014/11/22 07:27:01 + False + 5 + 1 + GMT + 0 + 2005/03/04 21:55:04 + 3600 + 3600 + 1 + 2005/02/02 21:55:04 + False + 5 + 1 + + True + False + 1 + <_apiUniqueId type="int">12973 + + + + + UserCookie + Name of User + 2 + 3 + + + firstName + Joe + + + + + 0 + + + lastName + Smith + + + + + 1 + + + True + 0 + <_apiUniqueId type="int">12987 + + + LoginCookie + Login name and password + 2 + 2 + + + name + joesmith + + + + + 0 + + + password + foobar + + + + + 1 + + + True + 1 + <_apiUniqueId type="int">12988 + + + + + /1b.html + + 200_OK + OK + 200 + text/plain + 2 + 2014/11/22 07:27:01 + False + 5 + 1 + GMT + 0 + 2005/03/04 21:55:04 + 3600 + 3600 + 1 + 2005/02/02 21:55:04 + False + 5 + 1 + + True + False + <_apiUniqueId type="int">12984 + + range + 1-1 + <specify file> + None + -1 + 3 + 512-1024 + 0 + <_apiUniqueId type="int">12974 + + + /4k.html + + range + 4096-4096 + <specify file> + None + -1 + 3 + 512-1024 + 1 + <_apiUniqueId type="int">12975 + + + /8k.html + + range + 8192-8192 + <specify file> + None + -1 + 3 + 512-1024 + 2 + <_apiUniqueId type="int">12976 + + + /16k.html + + range + 16536-16536 + <specify file> + None + -1 + 3 + 512-1024 + 3 + <_apiUniqueId type="int">12977 + + + /32k.html + + range + 32768 + <specify file> + None + -1 + 3 + 512-1024 + 4 + <_apiUniqueId type="int">12978 + + + /64k.html + + range + 65536 + <specify file> + None + -1 + 3 + 512-1024 + 5 + <_apiUniqueId type="int">12979 + + + /128k.html + + range + 131072 + <specify file> + None + -1 + 3 + 512-1024 + 6 + <_apiUniqueId type="int">12980 + + + /256k.html + + range + 262144 + <specify file> + None + -1 + 3 + 512-1024 + 7 + <_apiUniqueId type="int">12981 + + + /512k.html + + range + 524288 + <specify file> + None + -1 + 3 + 512-1024 + 8 + <_apiUniqueId type="int">12982 + + + /1024k.html + + range + 1048576 + <specify file> + None + -1 + 3 + 512-1024 + 9 + <_apiUniqueId type="int">12983 + + + DEFAULT + + + + + 0 + 0 + + 0 + + + + 0 + AsciiCustomPayload + Start With + 0 + Ixia-Ixload-Http-Server-Custom-Payload + + 0 + 1 + True + 0 + <_apiUniqueId type="int">12985 + + + 1 + HexCustomPayload + Start With + 1 + + 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 + 0 + 1 + True + 1 + <_apiUniqueId type="int">12986 + + + False + Custom MD5 + 2 + False + 512-1024 + 1024 + False + False + False + 0 + <_apiUniqueId type="int">12971 + 0 + + + <_dict type="list"/> + + HTTP + + + + + + None + server network + Server + none + 0 + Default + False + + FLEXAP1040SQ + + + + 1 + 2 + 6 + False + FLEXAP10G16S + + + + + newServerActivity1 + + HTTP + tcp port 80 + + + + + + <_apiUniqueId type="int">15432 + + False;8192 + + <_apiUniqueId type="int">15431 + None + + + + + + <_smRangeObjectId type="str">1d9bf537-0c3d-4fdf-9b85-0a622cc77649 + Network Range IP-R2 in server network (152.40.40.20+1) + + DistGroup1 + consecutiveIps + 0 + <_apiUniqueId type="int">12961 + <_networkRangeList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixWeakrefSequenceContainer" itemtype="ixBasicNetworkRange"> + + + <_rangeGroupObjectId type="str">b2c21c73-bfe3-4fbc-9804-b5a8b307d893 + <_smPluginObjectId type="str">b85b184d-9bb4-48c2-a029-e633fee7a3c8 + + False + + + None + None + + + + 0 + 0 + 1024 + 65535 + 0.0.0.0 + 255.255.255.0 + :: + FFFF:FFFF:FFFF:FFFF:FFFF:FFFF::0 + + 0 + + True + False + + + 0 + 30000 + + + + + + False + True + True + False + False + 0 + 1024 + False + 0 + 1024 + 60 + 7200 + 75 + 9 + 5 + 5 + 15 + 1024 + 1024 + True + False + 1000 + 120000 + + + + + False + True + False + False + False + False + 1 + 1 + 1 + 0 + 0 + 1 + 1 + 0 + 1 + any + any + any + False + FragmentationPercent + 50 + 1000 + 1 + 1 + <_seed type="int">1 + + <_portGroupId type="str">c4ecfc60-64ac-4dc2-9410-e0f58d84f229 + <_smExternalLinks ver="[0, [1, [0, [0]]]]" type="_smExternalLinkersMap"> + + + 1 + + + + + HTTP Server + newServerActivity1 + True + + None + Server + Server + 100.0 + 0 + <_apiUniqueId type="int">12989 + <_objectiveValue type="int">100 + 1.0 + + + + + + + + + + True + <_apiUniqueId type="int">12970 + + None + + + <_apiUniqueId type="int">12956 + + <_dict type="list"> + + + + + + + <_dict type="list"> + + + + + + + <_dict type="list"> + + HTTP Server + + HTTP Server + True + + + + + + + + + + + + + + True + 1 + 0 + 0 + 83 + 83 + 83 + 0 + <_apiUniqueId type="int">12955 + True + + <_portOperationModesAllowed type="dict"> + + 0 + True + + + 1 + True + + + 2 + False + + + 3 + True + + + 4 + True + + + 8 + True + + + <_tcpAccelerationAllowed type="dict"> + + 0 + True + + + 1 + False + + + + newServerActivity1 + + + 80 + 0 + 80 + 1 + + + 1 + + + 100.0 + 1 + 1 + 1 + False + 0 + 0 + 0 + 1 + 10 + 0 + :80 + 0 + :443 + 1 + Custom1 + 0 + 3 + 0 + 0 + 0 + 0 + 16384 + 0 + 0 + + + + + DEFAULT + 0 + 0 + 0 + 0 + 1460 + 0 + 0 + False + 0 + 0 + 0 + 0 + 0 + 600 + 0 + 0 + 0 + 0 + 0 + + + -2 + START + Start + + + Output1 + 0 + 1 + 0 + <_apiUniqueId type="int">12948 + 1 + + + 0 + <_apiUniqueId type="int">12945 + + + 1 + GET + Get 1 + + + Output1 + 0 + -3 + 0 + <_apiUniqueId type="int">12949 + 2 + + + HTTP server_newServerActivity1:80 + /1b.html + None + + + -1 + 0 + 0 + None + -1 + -1 + False + 65536 + 3 + 10 + 1 + <_apiUniqueId type="int">12946 + + + -3 + STOP + Stop + + 2 + <_apiUniqueId type="int">12947 + + + + + Accept: */* + 0 + <_apiUniqueId type="int">12950 + + + Accept-Language: en-us + 1 + <_apiUniqueId type="int">12951 + + + Accept-Encoding: gzip, deflate + 2 + <_apiUniqueId type="int">12952 + + + User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) + 3 + <_apiUniqueId type="int">12953 + + + + + 10 + 0.0 + 2 + 0 + 1 + 0 + 1024 + 0 + 0 + 0 + 0 + 1 + 0 + + 0.0.0.0 + 0 + 0 + 0 + <_apiUniqueId type="int">12942 + 1 + 1 + + + <_dict type="list"/> + + HTTP + + + + + + None + client network + Client + none + 0 + Default + False + + FLEXAP1040SQ + + + + 1 + 2 + 5 + False + FLEXAP10G16S + + None + <_apiUniqueId type="int">15428 + + False;8192 + + <_apiUniqueId type="int">15427 + None + + + + + + <_smRangeObjectId type="str">a3559674-8d95-4020-90b3-b42eacaef105 + Network Range IP-R1 in client network (152.16.100.20+1) + + DistGroup1 + consecutiveIps + 0 + <_apiUniqueId type="int">12931 + <_networkRangeList ver="[0, [3, [0, [0, [0], [0]], [0]]]]" type="ixWeakrefSequenceContainer" itemtype="ixBasicNetworkRange"> + + + <_rangeGroupObjectId type="str">aa33a76b-9c7f-48d9-a537-8d6eeec03662 + <_smPluginObjectId type="str">a916ae0f-0731-405d-ad19-eaade6c515f1 + + False + + + None + None + + + + 0 + 0 + 1024 + 65535 + 0.0.0.0 + 255.255.255.0 + :: + FFFF:FFFF:FFFF:FFFF:FFFF:FFFF::0 + + 0 + + True + False + + + 0 + 30000 + + + + + + False + True + True + False + False + 0 + 1024 + False + 0 + 1024 + 60 + 7200 + 75 + 9 + 5 + 5 + 15 + 1024 + 1024 + True + False + 1000 + 120000 + + + + + False + True + False + False + False + False + 1 + 1 + 1 + 0 + 0 + 1 + 1 + 0 + 1 + any + any + any + False + FragmentationPercent + 50 + 1000 + 1 + 1 + <_seed type="int">1 + + <_portGroupId type="str">865be042-32d5-426a-9e75-0908c943801f + <_smExternalLinks ver="[0, [1, [0, [0]]]]" type="_smExternalLinkersMap"> + + + 1 + + + + + HTTP Client + newClientActivity1 + True + + Timeline1 + 83 + 83 + 1 + 0 + 0 + 60 + 0 + 30000 + 1 + 3 + 20 + 32000 + 0 + 0 + + None + Client + Client + 100.0 + simulatedUsers + 64000 + simulatedUsers + 64000 + ConnectionRateConstraint + 100 + 100 + False + SimulatedUserConstraint + 100 + False + portMesh + 1 + 0 + 1:1 + Consecutive + + 0 + <_apiUniqueId type="int">12954 + <_objectiveValue type="int">64000 + 1.0 + + + + + + + + + + False + <_apiUniqueId type="int">12940 + + None + + + <_apiUniqueId type="int">12926 + + <_dict type="list"> + + + + + + + <_dict type="list"> + + + + + + + <_dict type="list"> + + HTTP Client + + HTTP Client + True + + + + + + + + + + + + + + True + 1 + 0 + 0 + 60 + 83 + 83 + portPairs + simulatedUsers + 64000 + 0 + 30000 + 1 + 3 + 20 + simulatedUsers + 64000 + 64000 + 0 + <_apiUniqueId type="int">12925 + True + + <_portOperationModesAllowed type="dict"> + + 0 + True + + + 1 + True + + + 2 + False + + + 3 + True + + + 4 + True + + + 8 + True + + + <_tcpAccelerationAllowed type="dict"> + + 0 + True + + + 1 + False + + + + + 0 + <_apiUniqueId type="int">12922 + + + DUT + + 1 + <_apiUniqueId type="int">12923 + + + Server + + + + 2 + <_apiUniqueId type="int">12924 + + + + + 0 + <_apiUniqueId type="int">12921 + + + 2 + True + False + False + False + False + False + False + False + Kbps + + False + + + + <_apiUniqueId type="int">12990 + + False + None + 0 + 0 + 0 + + + + Playlist + playlist + + + + 0 + + + Random Data + rdge + + + 0 + 1 + + + 1 + + + Real File + realfile + + None + + 2 + + + Unified File System + ufs + + None + + 3 + + + <_profileMru type="str"> + + None + True + True + 0 + <_apiUniqueId type="int">12920 + + + 2 + False + False + begin 666 <data> M>)SMG7MOVS@2P+^*D<,5N[BE+8JD'NECT29I&VS:!'&VN\#U4)#4*-'5D;R2 MG,<=[KL?*<FV;,M.]E%UL9@_6DOBS)"B9N;'41SFV?=WUY/!#>1%DJ7/]^C0 MV?O^Q;-Q*<L/"=Q"OFSRAIXS=(8N<_>, !3VZDE2E(,?X/[YGIR6R5TBA\7- M<&HUBA)2#<.6W$^YG)HFHWQP^O[BZ/W%8/3BV=GYT=@<OKPX/GV_?O[IZ/#X MXN6KDR/;<'#Z[M7Q^Z/#1=?%XN@Q ]CH_,6SUSG\,C,R]X,;.9G!\SUWK^JH MN#G)+B^3]')^_;6<%%"U7237,+Y/]2NXDC=)EL\EG$5K4<KKZ5D..JE&UK2S MJOWH,C>#L=-Z<3^%>1NMVD[--$\R&9WE60FZ;.E>Y#-8&]C;)(H@M8:*S3$> MI5)-X%"6<EQF.6P*G"UGIST.WJ6]LR<SH--9.9V5BYE\-YN4R72R?F^5T.'X M ;%W\LZZ76'&=S KRNSZC7EF5PL9;][GZV0"9[)<M!SL?_RQ,/?T,2KHQ\-, MSZXA+8N/Q\89S'\G9E(_!D.'#JGC#=G'<RA,[\7'MQ<79^3F]4^?CL]N^"?W M+,O+XI/K4-\13OB)F@->/]67$S!-\\^!B9:TV+\KDN=[5V4YW1^-;F]OA[=L MF.67(]=QZ.CG=R=C?077DB2I<0<SS7L+K>AAK:K3T;S70XBE&6_U!':<O;#C M'QR<_3BP4VB>;J*+9Z.VP(KTB4M8)5D,8N/%!Y/$3-F@FH/':XTA-T[[.*V+ MJSR;75X9-Z@-K,F/5F]L[?0@SYJPR0%,Z]KYN8R2[(VQ/UUK2-+RA?ML9#^> MC;9*U3?_.LNO9Q,YAK(T ;9P]O\^^=O=X5/SW\NG3WZ99>73#W4VK$_VZP\Z M%/7!=QO2]@8:V7\N&_^U//S?\K#.(2:#G,_2]7$\F91/5Q+UO&>G/AB8L,HB MH]$TS,J84*\^_O[)9?FT-3)CJNGE.(TS\Q03.4G^(VW.>24O6PY>JS_:RYN1 M+%W]<?JUU.H8!P,[RNM/93,;UJ>U28W38EVNEK3W\UY>@VVUQ]1>'+6O=NL< MR!(NL_S>2MB<-[)98:';;MW4/X@OYYG("CPB"YW#-"L2DU;O.[//,+^+J[[7 M+'</'?+YK9D.%T->7MW4.IQ5LS$8;6U^>]NX]PZ9\4,R=ABGZM\68C=0[))Z MFUQ>3<R_<JO4 E7EL<%0F<0)Y%921UHHI2,B0"O"::B(<BD0ZON. VY$72:J M.=EF8+,KXV9M#S*GE JO,M)JVM2S#WU\?&@;QX0205Q*&..,>8+[+G%]&@C* M?2<@0<@\%GJ"4./_E>&6;N> C-_G)42GJ96P;"*.($YX09U]ZN]S,72\P D9 M^X<C]IDS'^N*UA:[F5D,&8F!"?/]-)DTH5J:I483Q5L>2)TLWTE]E:0PGY1C MLZ Z(6<'M?-V23Q@Z&44V961E:1F@>FR(?6\(67!4B^&P-G?5T&H]EVF^3ZX MOMR/'/UW*E93VVB;Y<TQ'-^]A_(VRS_/D[J16JX4*F-=(CL,G<,$9%%/2A7S M [MH'AR]7#76$MMAK)593.J[S.7UP*:%8O#-7>!]N[&^(6_6>MF>/X[O;"HR M3I*W;HO5RWOJS^^\0Z8[CG]\-]9R O7C<YQ%,FI=WU0<W[2:?U FLUNUE:N= MOOLK\NUO7/7-XZAK_JJVQW"IQ:^ZZ].I!>P63SS()A.3,.URO$(1E-(\Z:CV MY]6VK<HG(/,4(LMT*Q?;97K;P%K[5CNO)]EMM4XJ.LVL-F^U8A*OE:P6>U:P M2BTM,^OMNPPU)=PN6^LBV\V9^BK3V>0X-9X=2PW=%CNEMAH]SV8EG,OTLMO: M6G.7F>NI35,7"W=9G_JN]FU^N=/?:K^,[E/KM:9N[D#OBL@'N_[<$%J$^)9% MI)6NZYA%M?T;"OUF^6\_ZA*_H\AI%_0V'W37V'4EUZSQS5.97=O7!ZOGU7#7 M1=[D2720I7%R:28C-C%I9#JNV?Y^OIZ8QL71YFN$12%O5YJ%K:[K8CO:5L-' MFZ\ LM2N99I5C5RKX#\WUX_3:F'1E!"K79X9ES17FPH\@7RU!C>C?D!BG,II M<9651G+>P\^V+EG6*?DT[G(IFYF'+YN7-,OW2\,.@X/2W%6S)OD5:LW2):L7 MG_/Z0U$W!BH%T9''"!<2B(H$(RXPGXE0Q-R=%U&KQ57]OJN[/*EO:5; FTFF MY*1KX*^R;+)4KA=\&PK==HOYO=6/>W4^TG)IM6;5NGBW46T=4E<1VK8W+G,S MD*7)^;P.#L8?*NLMO:V&J[IBA]&.P)W;WKY$-(T7<#V=F"KL,0.>&YSK;#5J M%U%O((5<VD?P+HO@@?GMU.DVGTTA-1[9O#I]P!M6A'?:ZWIPJQ:=ML7=SRNY M3$TB,'=DV&;3TP,VU\2W3*M,7TZGD_OCQ]JN9V"+6B?=?DTBV(15DY164]CX M0Z,Q!LMIB.J76TTNJV3?PZT1.[<O+DU9FUYDV>6DXYVJD;$NDMHX:*M7=U>_ MR[O(CDP!FL-Y=KNI_SLX6:G7K]&6I-SQ@@^)B<3<34S&32&D.",^ER[AV@M) MH"))9"BH$WF":4V1F%^6F#L"&,F)Y$1R]D3.]@^YD)Q(SMWD]%S'\3D3Q/,= MGW .(0DC1DDL74<[H2^4+Y"<O9*S'<!(3B0GDO.+DG/]BQZ_AYE(R+\>(9D( M&.,Q)Y[@E' %'E&N*3"UEG[H*C]0S$-"]D#(]4!%-B(;D8U?BHWV>P?SESAD ML/QZU)\6C\NI0#[VR4?7Y\*E#B.1""3A@8J("L#4DJX7T8!JZ7)\]_J%^;@M M6!&1B$A$9#^(;"U/%P&(L$18KL!2>T$L61 0'7-A8,D4"7Q-B:]"'M H""#D M",L^8=D5MHA-Q"9BLR=LYC(M9/W[H^<F-+# 1&:N_8A2:8-&\$@HA&&FI(HH MYG/B:$I=I9@*8D!F]LK,]9A%8"(P$9B] Q-9B:Q<964<.CZ+A2DH61 2[H&I M+UW!2.A+WP7NNN#AKXY\+58B)A&3B,F>,'DB[7Y!"=:3R,@U1DK/44H&,0G= MP"<\D(Q(*3B)M*;*H\I1$4-&]LG(1:PB(!&0",A^ $GO[KX;N'=W YE& V8^ MSZ&8FD4J$A.)N4;,*%0<0M<AL>]K0\S()\HSIR)DCA\S3VLO1&+V2<SMP8L( M180B0OM!:'7V6B:368[41&JN43.(! 77=PBEODNXXVH2<O )T\J1H0\Z4$C- M7JFY$J\(2@0E@K(?4!Y<S=+/@Z-FQ^?!-_/5ZK<(383F"C0=1B,>B) $GA:$ M1S0B(0M#(I20TE5:NJ&/T.P3FEMC%P&* $6 ?BV 5K>#_$1^KO(3/)"^= TZ M 8!P+XZ(#)D@S ^I4+[/?(F[%7QA?E9!S!"/B$?$8T_?B3TP)UF: GXM%JG8 M554&/E7,_KF=F')#Q4"1D = (L5"YH2AZT985?9:5:Y%+,(288FP[ ^6^$-+ M).464O+0@T 3ZGO*[N;CDC",@?AAH&T)"<R+D91]DQ)_9HF81$SVBTF#A\&/ MYR=_6D+B=K!?!9""VS^*RB@!Z86$A]HG2HN8Q-*G.@@A5EPC(/L$9!.HR$9D M([+QB[*Q^<L$N&D/8O)!3(I8N(X,B*>U)ESZ0!2XC'A2",]7L2LH?OFU#TQN MCUD$)@(3@=D[,)&5R,JU7Q2AU)? @9C:,B#<UQ$) N!$ GC*]:F( #?M^5JL M1$PB)A&3/6'20@ +2H1D!R0Y#7U'.YR8NA((CP-& D$IH8(YOG)"$5#<.;U7 M2"Z#%1&)B$1$]H/(Q48?YE):(B81DRN8I)&0.I":!#3V"%=4$*4D)0$/A)"^ MDI'"S=)[Q>1JP"(J$96(RGY0B;L.(#4?1TV7,Q6$0A.IA2DN[59WH0YBXKM. M;/_(LU :B\M>J8F[#B! $:!_.H#BK@/(SPY^ M, ,@B))RDEG/D^"15HPD08 M!%1'GJ,5\O/+\K,*8HIX1#PB'OO!(V[_BDS<P43JL"@$(%*%$>'@<Z(XN(1" MJ+0(8T9CK"E[K2EQ^U<$)8+R:WS[%;?G053N0&6H8N$!]PTJ%2-<F/)1RE 2 M!SP7G!B8Z[F(RCY1B=OS("P1EE\-EEA4(BD[2<EX$#-;1<8N*,)C'1$IE$<" M%<3<TC+F6%3V3DJL*1&3B,E^,?D';,^S>E[UB1OV_.60&?O<\R#VB78C03A3 ME 0N",*4'SC4CQ47^+/)7I&)&_8@+9&6O=+R],QJCP?OH+S*(BPKD9&KOS7B M XU"5Y% AJ%AI!<0I0(@C"HG4+&A).Y T,OW=Y")R$1DXA_+Q.JCJ/+V:3JY MK\ZH;3])TL\05>=-;[6N.1P;'AI761X5G>TGAB26@-EL.K!W^7ROLK:WR)(& M"*OM!S.#F.N]099'D%>\D%H;8R=P Y/G>VYUWVV%0XBEP4RQ4''65-9[L.#? M(5S=:26__!RGU]-ZU2 ;3RINAM,:E& .K0"+:"VUP^VJ4;]+*^CL86YPC1J MTUBY7G-^(_-ZI$WB,I<:M-@-5V[FUTO#\^9Z!(7.DVFYQ$X+.#;,KI))E$,Z B&,VOC)J.VOU&</. 0DMBU![Y'^*+]C[MQR)$7_P?./J0I@ end + + + 2 + <_scenarioElementFactory ver="[0, [1, [0, [0]]]]" type="ixScenarioElementFactory"> + + + + qovCoprocessor + 0 + + + Impairment + 0 + + + asrCoprocessor + 0 + + + + + + diff --git a/samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg b/samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_1flows.ixncfg new file mode 100644 index 0000000000000000000000000000000000000000..01269bee2c51670ea6f45396c2695ff2f4629ac4 GIT binary patch literal 93841 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 + +pipeline> +""" # noqa + + @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] + vfw_approx_vnf = FWApproxVnf(name, vnfd) + vfw_approx_vnf.q_in = mock.MagicMock() + vfw_approx_vnf.q_out = mock.MagicMock() + vfw_approx_vnf.q_out.qsize = mock.Mock(return_value=0) + vfw_approx_vnf.resource = mock.Mock(autospec=ResourceProfile) + vfw_approx_vnf.resource_helper = mock.MagicMock( + **{'collect_kpi.return_value': {"core": {}}}) + vfw_approx_vnf.vnf_execute = mock.Mock(return_value=self.STATS) + result = { + 'packets_dropped': 0, + 'packets_fwd': 6007180, + 'packets_in': 6007180, + 'collect_stats': {'core': {}}, + } + self.assertEqual(result, vfw_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] + vfw_approx_vnf = FWApproxVnf(name, vnfd) + vfw_approx_vnf.q_in = mock.MagicMock() + vfw_approx_vnf.q_out = mock.MagicMock() + vfw_approx_vnf.q_out.qsize = mock.Mock(return_value=0) + cmd = "quit" + self.assertEqual("", vfw_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] + vfw_approx_vnf = FWApproxVnf(name, vnfd) + vfw_approx_vnf.q_in = mock.MagicMock() + vfw_approx_vnf.q_out = mock.MagicMock() + vfw_approx_vnf.q_out.qsize = mock.Mock(return_value=0) + vfw_approx_vnf.vnf_execute = mock.Mock(return_value=self.STATS) + self.assertEqual(self.STATS, vfw_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.vfw_vnf.hex") + @mock.patch("yardstick.network_services.vnf_generic.vnf.vfw_vnf.eval") + @mock.patch("yardstick.network_services.vnf_generic.vnf.vfw_vnf.open") + def test_run_vfw(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] + vfw_approx_vnf = FWApproxVnf(name, vnfd) + vfw_approx_vnf._build_config = mock.MagicMock() + vfw_approx_vnf.queue_wrapper = mock.MagicMock() + vfw_approx_vnf.ssh_helper = mock.MagicMock() + vfw_approx_vnf.ssh_helper.run = mock.MagicMock() + vfw_approx_vnf.scenario_helper.scenario_cfg = self.scenario_cfg + vfw_approx_vnf.vnf_cfg = {'lb_config': 'SW', + 'lb_count': 1, + 'worker_config': '1C/1T', + 'worker_threads': 1} + vfw_approx_vnf.all_options = {'traffic_type': '4', + 'topology': 'nsb_test_case.yaml'} + vfw_approx_vnf._run() + vfw_approx_vnf.ssh_helper.run.assert_called_once() + + @mock.patch("yardstick.network_services.vnf_generic.vnf.vfw_vnf.YangModel") + @mock.patch("yardstick.network_services.vnf_generic.vnf.vfw_vnf.find_relative_file") + @mock.patch("yardstick.network_services.vnf_generic.vnf.sample_vnf.Context") + def test_instantiate(self, 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] + vfw_approx_vnf = FWApproxVnf(name, vnfd) + vfw_approx_vnf.ssh_helper = ssh + vfw_approx_vnf.deploy_helper = mock.MagicMock() + vfw_approx_vnf.resource_helper = mock.MagicMock() + vfw_approx_vnf._build_config = mock.MagicMock() + self.scenario_cfg['vnf_options'] = {'acl': {'cfg': "", + 'rules': ""}} + self.scenario_cfg.update({"nodes": {"vnf__1": ""}}) + self.assertIsNone(vfw_approx_vnf.instantiate(self.scenario_cfg, + self.context_cfg)) + + def test_scale(self, mock_process): + vnfd = self.VNFD['vnfd:vnfd-catalog']['vnfd'][0] + vfw_approx_vnf = FWApproxVnf(name, vnfd) + flavor = "" + self.assertRaises(NotImplementedError, vfw_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] + vfw_approx_vnf = FWApproxVnf(name, vnfd) + vfw_approx_vnf._vnf_process = mock.MagicMock() + vfw_approx_vnf._vnf_process.terminate = mock.Mock() + vfw_approx_vnf.used_drivers = {"01:01.0": "i40e", + "01:01.1": "i40e"} + vfw_approx_vnf.vnf_execute = mock.Mock() + vfw_approx_vnf.ssh_helper = ssh_mock + vfw_approx_vnf.dpdk_nic_bind = "dpdk_nic_bind.py" + vfw_approx_vnf._resource_collect_stop = mock.Mock() + self.assertEqual(None, vfw_approx_vnf.terminate()) + +if __name__ == '__main__': + unittest.main() diff --git a/yardstick/network_services/vnf_generic/vnf/vfw_vnf.py b/yardstick/network_services/vnf_generic/vnf/vfw_vnf.py new file mode 100644 index 000000000..32a08c7bd --- /dev/null +++ b/yardstick/network_services/vnf_generic/vnf/vfw_vnf.py @@ -0,0 +1,67 @@ +# 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 + +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__) + +# vFW should work the same on all systems, we can provide the binary +FW_PIPELINE_COMMAND = """sudo {tool_path} -p {ports_len_hex} -f {cfg_file} -s {script}""" + +FW_COLLECT_KPI = (r"""VFW TOTAL:[^p]+pkts_received"?:\s(\d+),[^p]+pkts_fw_forwarded"?:\s(\d+),""" + r"""[^p]+pkts_drop_fw"?:\s(\d+),\s""") + + +class FWApproxSetupEnvHelper(DpdkVnfSetupEnvHelper): + + APP_NAME = "vFW" + CFG_CONFIG = "/tmp/vfw_config" + CFG_SCRIPT = "/tmp/vfw_script" + DEFAULT_CONFIG_TPL_CFG = "vfw.cfg" + PIPELINE_COMMAND = FW_PIPELINE_COMMAND + SW_DEFAULT_CORE = 5 + HW_DEFAULT_CORE = 2 + VNF_TYPE = "VFW" + + +class FWApproxVnf(SampleVNF): + + APP_NAME = "vFW" + APP_WORD = 'vfw' + COLLECT_KPI = FW_COLLECT_KPI + + COLLECT_MAP = { + 'packets_in': 1, + 'packets_fwd': 2, + 'packets_dropped': 3, + } + + 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 = FWApproxSetupEnvHelper + + super(FWApproxVnf, self).__init__(name, vnfd, setup_env_helper_type, resource_helper_type) + self.vfw_rules = None + + 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.vfw_rules = yang_model.get_rules() + super(FWApproxVnf, self)._start_vnf() -- 2.16.6