Add IXIA Baremetal scale up testcases 40/67340/2
authorMytnyk, Volodymyr <volodymyrx.mytnyk@intel.com>
Fri, 22 Mar 2019 17:11:03 +0000 (17:11 +0000)
committerOleksandr Naumets <oleksandrx.naumets@intel.com>
Fri, 29 Mar 2019 09:43:38 +0000 (09:43 +0000)
JIRA: YARDSTICK-1608

Change-Id: Iebce802decff8c7111a3f6bf87669a764a5ee687
Signed-off-by: Mytnyk, Volodymyr <volodymyrx.mytnyk@intel.com>
Signed-off-by: Oleksandr Naumets <oleksandrx.naumets@intel.com>
samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_ixia_scale_up.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/cgnapt/tc_ovs_rfc2544_ipv4_ixia_scale_up.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/cgnapt/tc_sriov_rfc2544_ipv4_ixia_scale_up.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_ixia_scale_up.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/vfw/tc_ovs_rfc2544_ipv4_ixia_scale_up.yaml [new file with mode: 0644]
samples/vnf_samples/nsut/vfw/tc_sriov_rfc2544_ipv4_ixia_scale_up.yaml [new file with mode: 0644]

diff --git a/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_ixia_scale_up.yaml b/samples/vnf_samples/nsut/cgnapt/tc_baremetal_rfc2544_ipv4_ixia_scale_up.yaml
new file mode 100644 (file)
index 0000000..64f93a2
--- /dev/null
@@ -0,0 +1,64 @@
+# Copyright (c) 2019 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.
+
+{% set vports = vports or 2 %}
+{% set tolerance_low = tolerance_low or 0.005 %}
+{% set tolerance_high = tolerance_high or 0.01 %}
+{% set public_ip = public_ip or ["152.16.40.10"] %}
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf-RFC2544
+  traffic_profile: ../../traffic_profiles/ixia_ipv4_latency_scale_up.yaml
+  topology: cgnapt-tg-topology-ixia-scale-up.yaml
+  extra_args:
+    vports: {{ vports }}
+  nodes:
+    tg__0: trafficgen_0.yardstick
+    vnf__0: vnf_0.yardstick
+  options:
+    framesize:
+    flow:
+      src_ip: [
+{% for vport in range(0,vports,2|int) %}
+       {'tg__0': 'xe{{vport}}'},
+{% endfor %}  ]
+      dst_ip: [
+{% for vport in range(1,vports,2|int) %}
+      {'tg__0': 'xe{{vport}}'},
+{% endfor %}  ]
+      public_ip:
+{% for port_num in range((vports/2)|int) %}
+        - {{ public_ip[port_num] }}
+{% endfor %}
+      count: 1
+    traffic_type: 4
+    rfc2544:
+      resolution: 0.01
+      allowed_drop_rate: "{{ tolerance_low }} - {{ tolerance_high }}"
+    vnf__0:
+      vnf_config: {lb_config: 'HW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Sequence
+    scenario_option_name: framesize
+    sequence:
+    - uplink: {64B: 100}
+      downlink: {64B: 100}
+    - uplink: {64B: 25, 128B: 25, 512B: 25, 1024B: 25}
+      downlink: {64B: 25, 128B: 25, 512B: 25, 1024B: 25}
+context:
+  type: Node
+  name: yardstick
+  nfvi_type: baremetal
+  file: /etc/yardstick/nodes/pod_ixia.yaml
diff --git a/samples/vnf_samples/nsut/cgnapt/tc_ovs_rfc2544_ipv4_ixia_scale_up.yaml b/samples/vnf_samples/nsut/cgnapt/tc_ovs_rfc2544_ipv4_ixia_scale_up.yaml
new file mode 100644 (file)
index 0000000..ff6e58f
--- /dev/null
@@ -0,0 +1,111 @@
+# Copyright (c) 2019 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.
+{% set vports = vports or 2 %}
+{% set tolerance_low = tolerance_low or 0.005 %}
+{% set tolerance_high = tolerance_high or 0.01 %}
+{% set public_ip = public_ip or ["152.16.40.10"] %}
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf-RFC2544
+  traffic_profile: ../../traffic_profiles/ixia_ipv4_latency_scale_up.yaml
+  topology: cgnapt-tg-topology-ixia-scale-up.yaml
+  extra_args:
+    vports: {{ vports }}
+  nodes:
+    tg__0: trafficgen_0.yardstick
+    vnf__0: vnf_0.yardstick
+  options:
+    framesize:
+    flow:
+      src_ip:
+{% for vport in range(0, vports|int, 2) %}
+        - {'tg__0': 'xe{{ vport }}'}
+{% endfor %}
+      dst_ip:
+{% for vport in range(1, vports|int, 2) %}
+        - {'tg__0': 'xe{{ vport }}'}
+{% endfor %}
+      public_ip:
+{% for port_num in range((vports/2)|int) %}
+        - {{ public_ip[port_num] }}
+{% endfor %}
+      count: 1
+    traffic_type: 4
+    rfc2544:
+      resolution: 0.01
+      allowed_drop_rate: "{{ tolerance_low }} - {{ tolerance_high }}"
+    vnf__0:
+      vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Sequence
+    scenario_option_name: framesize
+    sequence:
+    - uplink: {64B: 100}
+      downlink: {64B: 100}
+    - uplink: {64B: 25, 128B: 25, 512B: 25, 1024B: 25}
+      downlink: {64B: 25, 128B: 25, 512B: 25, 1024B: 25}
+contexts:
+   - name: yardstick
+     type: Node
+     file: /etc/yardstick/nodes/pod_ixia_ovs.yaml
+   - type: StandaloneOvsDpdk
+     name: yardstick
+     file: /etc/yardstick/nodes/pod_ovs.yaml
+     vm_deploy: True
+     ovs_properties:
+       version:
+         ovs: 2.8.1
+         dpdk: 17.05.2
+       pmd_threads: 2
+       ram:
+         socket_0: 2048
+         socket_1: 2048
+       queues: 4
+       vpath: "/usr/local"
+     flavor:
+       images: "/var/lib/libvirt/images/yardstick-nsb-image.img"
+       ram: 16384
+       extra_specs:
+         hw:cpu_sockets: 1
+         hw:cpu_cores: 6
+         hw:cpu_threads: 2
+       user: ""
+       password: ""
+     servers:
+       vnf_0:
+         network_ports:
+           mgmt:
+             cidr: '172.10.1.150/24'
+{% for port_num in range((vports/2)|int) %}
+           xe{{ port_num * 2 }}:
+             - uplink_{{ port_num }}
+           xe{{ (port_num * 2) + 1 }}:
+             - downlink_{{ port_num }}
+{% endfor %}
+     networks:
+{% for port_num in range((vports/2)|int) %}
+       uplink_{{ port_num }}:
+         port_num: {{ networks.uplink[port_num].port_num }}
+         phy_port: "{{ networks.uplink[port_num].phy_port }}"
+         vpci: "{{ networks.uplink[port_num].vpci }}"
+         cidr: "{{ networks.uplink[port_num].cidr }}"
+         gateway_ip: "{{ networks.uplink[port_num].gateway_ip }}"
+       downlink_{{ port_num }}:
+         port_num: {{ networks.downlink[port_num].port_num }}
+         phy_port: "{{ networks.downlink[port_num].phy_port }}"
+         vpci: "{{ networks.downlink[port_num].vpci }}"
+         cidr: "{{ networks.downlink[port_num].cidr }}"
+         gateway_ip: "{{ networks.downlink[port_num].gateway_ip }}"
+{% endfor %}
diff --git a/samples/vnf_samples/nsut/cgnapt/tc_sriov_rfc2544_ipv4_ixia_scale_up.yaml b/samples/vnf_samples/nsut/cgnapt/tc_sriov_rfc2544_ipv4_ixia_scale_up.yaml
new file mode 100644 (file)
index 0000000..7348620
--- /dev/null
@@ -0,0 +1,101 @@
+# Copyright (c) 2019 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.
+{% set vports = vports or 2 %}
+{% set tolerance_low = tolerance_low or 0.005 %}
+{% set tolerance_high = tolerance_high or 0.01 %}
+{% set public_ip = public_ip or ["152.16.40.10"] %}
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf-RFC2544
+  traffic_profile: ../../traffic_profiles/ixia_ipv4_latency_scale_up.yaml
+  topology: cgnapt-tg-topology-ixia-scale-up.yaml
+  extra_args:
+    vports: {{ vports }}
+  nodes:
+    tg__0: trafficgen_0.yardstick
+    vnf__0: vnf_0.yardstick
+  options:
+    framesize:
+    flow:
+      src_ip:
+{% for vport in range(0, vports|int, 2) %}
+        - {'tg__0': 'xe{{ vport }}'}
+{% endfor %}
+      dst_ip:
+{% for vport in range(1, vports|int, 2) %}
+        - {'tg__0': 'xe{{ vport }}'}
+{% endfor %}
+      public_ip:
+{% for port_num in range((vports/2)|int) %}
+        - {{ public_ip[port_num] }}
+{% endfor %}
+      count: 1
+    traffic_type: 4
+    rfc2544:
+      resolution: 0.01
+      allowed_drop_rate: "{{ tolerance_low }} - {{ tolerance_high }}"
+    vnf__0:
+      vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Sequence
+    scenario_option_name: framesize
+    sequence:
+    - uplink: {64B: 100}
+      downlink: {64B: 100}
+    - uplink: {64B: 25, 128B: 25, 512B: 25, 1024B: 25}
+      downlink: {64B: 25, 128B: 25, 512B: 25, 1024B: 25}
+contexts:
+   - name: yardstick
+     type: Node
+     file: /etc/yardstick/nodes/pod_ixia_ovs.yaml
+   - type: StandaloneSriov
+     name: yardstick
+     file: /etc/yardstick/nodes/pod_sriov.yaml
+     vm_deploy: True
+     flavor:
+       images: "/var/lib/libvirt/images/yardstick-nsb-image.img"
+       ram: 16384
+       extra_specs:
+         hw:cpu_sockets: 1
+         hw:cpu_cores: 6
+         hw:cpu_threads: 2
+       user: ""
+       password: ""
+     servers:
+       vnf_0:
+         network_ports:
+           mgmt:
+             cidr: '172.10.1.150/24'
+{% for port_num in range((vports/2)|int) %}
+           xe{{ port_num * 2 }}:
+             - uplink_{{ port_num }}
+           xe{{ (port_num * 2) + 1 }}:
+             - downlink_{{ port_num }}
+{% endfor %}
+     networks:
+{% for port_num in range((vports/2)|int) %}
+       uplink_{{ port_num }}:
+         port_num: {{ networks.uplink[port_num].port_num }}
+         phy_port: "{{ networks.uplink[port_num].phy_port }}"
+         vpci: "{{ networks.uplink[port_num].vpci }}"
+         cidr: "{{ networks.uplink[port_num].cidr }}"
+         gateway_ip: "{{ networks.uplink[port_num].gateway_ip }}"
+       downlink_{{ port_num }}:
+         port_num: {{ networks.downlink[port_num].port_num }}
+         phy_port: "{{ networks.downlink[port_num].phy_port }}"
+         vpci: "{{ networks.downlink[port_num].vpci }}"
+         cidr: "{{ networks.downlink[port_num].cidr }}"
+         gateway_ip: "{{ networks.downlink[port_num].gateway_ip }}"
+{% endfor %}
diff --git a/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_ixia_scale_up.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_ixia_scale_up.yaml
new file mode 100644 (file)
index 0000000..a826f31
--- /dev/null
@@ -0,0 +1,59 @@
+# Copyright (c) 2019 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.
+
+{% set vports = vports or 2 %}
+{% set tolerance_low = tolerance_low or 0.005 %}
+{% set tolerance_high = tolerance_high or 0.01 %}
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf-RFC2544
+  traffic_profile: ../../traffic_profiles/ixia_ipv4_latency_scale_up.yaml
+  topology: vfw-tg-topology-ixia-scale-up.yaml
+  extra_args:
+    vports: {{ vports }}
+  nodes:
+    tg__0: trafficgen_0.yardstick
+    vnf__0: vnf_0.yardstick
+  options:
+    framesize:
+    flow:
+      src_ip: [
+{% for vport in range(0,vports,2|int) %}
+       {'tg__0': 'xe{{vport}}'},
+{% endfor %}  ]
+      dst_ip: [
+{% for vport in range(1,vports,2|int) %}
+      {'tg__0': 'xe{{vport}}'},
+{% endfor %}  ]
+      count: 1
+    traffic_type: 4
+    rfc2544:
+      resolution: 0.01
+      allowed_drop_rate: "{{ tolerance_low }} - {{ tolerance_high }}"
+    vnf__0:
+      vnf_config: {lb_config: 'HW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Sequence
+    scenario_option_name: framesize
+    sequence:
+    - uplink: {64B: 100}
+      downlink: {64B: 100}
+    - uplink: {64B: 25, 128B: 25, 512B: 25, 1024B: 25}
+      downlink: {64B: 25, 128B: 25, 512B: 25, 1024B: 25}
+context:
+  type: Node
+  name: yardstick
+  nfvi_type: baremetal
+  file: /etc/yardstick/nodes/pod_ixia.yaml
diff --git a/samples/vnf_samples/nsut/vfw/tc_ovs_rfc2544_ipv4_ixia_scale_up.yaml b/samples/vnf_samples/nsut/vfw/tc_ovs_rfc2544_ipv4_ixia_scale_up.yaml
new file mode 100644 (file)
index 0000000..0228652
--- /dev/null
@@ -0,0 +1,106 @@
+# Copyright (c) 2019 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.
+{% set vports = vports or 2 %}
+{% set tolerance_low = tolerance_low or 0.005 %}
+{% set tolerance_high = tolerance_high or 0.01 %}
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf-RFC2544
+  traffic_profile: ../../traffic_profiles/ixia_ipv4_latency_scale_up.yaml
+  topology: vfw-tg-topology-ixia-scale-up.yaml
+  extra_args:
+    vports: {{ vports }}
+  nodes:
+    tg__0: trafficgen_0.yardstick
+    vnf__0: vnf_0.yardstick
+  options:
+    framesize:
+    flow:
+      src_ip:
+{% for vport in range(0, vports|int, 2) %}
+        - {'tg__0': 'xe{{ vport }}'}
+{% endfor %}
+      dst_ip:
+{% for vport in range(1, vports|int, 2) %}
+        - {'tg__0': 'xe{{ vport }}'}
+{% endfor %}
+      count: 1
+    traffic_type: 4
+    rfc2544:
+      resolution: 0.01
+      allowed_drop_rate: "{{ tolerance_low }} - {{ tolerance_high }}"
+    vnf__0:
+      vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Sequence
+    scenario_option_name: framesize
+    sequence:
+    - uplink: {64B: 100}
+      downlink: {64B: 100}
+    - uplink: {64B: 25, 128B: 25, 512B: 25, 1024B: 25}
+      downlink: {64B: 25, 128B: 25, 512B: 25, 1024B: 25}
+contexts:
+   - name: yardstick
+     type: Node
+     file: /etc/yardstick/nodes/pod_ixia_ovs.yaml
+   - type: StandaloneOvsDpdk
+     name: yardstick
+     file: /etc/yardstick/nodes/pod_ovs.yaml
+     vm_deploy: True
+     ovs_properties:
+       version:
+         ovs: 2.8.1
+         dpdk: 17.05.2
+       pmd_threads: 2
+       ram:
+         socket_0: 2048
+         socket_1: 2048
+       queues: 4
+       vpath: "/usr/local"
+     flavor:
+       images: "/var/lib/libvirt/images/yardstick-nsb-image.img"
+       ram: 16384
+       extra_specs:
+         hw:cpu_sockets: 1
+         hw:cpu_cores: 6
+         hw:cpu_threads: 2
+       user: ""
+       password: ""
+     servers:
+       vnf_0:
+         network_ports:
+           mgmt:
+             cidr: '172.10.1.150/24'
+{% for port_num in range((vports/2)|int) %}
+           xe{{ port_num * 2 }}:
+             - uplink_{{ port_num }}
+           xe{{ (port_num * 2) + 1 }}:
+             - downlink_{{ port_num }}
+{% endfor %}
+     networks:
+{% for port_num in range((vports/2)|int) %}
+       uplink_{{ port_num }}:
+         port_num: {{ networks.uplink[port_num].port_num }}
+         phy_port: "{{ networks.uplink[port_num].phy_port }}"
+         vpci: "{{ networks.uplink[port_num].vpci }}"
+         cidr: "{{ networks.uplink[port_num].cidr }}"
+         gateway_ip: "{{ networks.uplink[port_num].gateway_ip }}"
+       downlink_{{ port_num }}:
+         port_num: {{ networks.downlink[port_num].port_num }}
+         phy_port: "{{ networks.downlink[port_num].phy_port }}"
+         vpci: "{{ networks.downlink[port_num].vpci }}"
+         cidr: "{{ networks.downlink[port_num].cidr }}"
+         gateway_ip: "{{ networks.downlink[port_num].gateway_ip }}"
+{% endfor %}
diff --git a/samples/vnf_samples/nsut/vfw/tc_sriov_rfc2544_ipv4_ixia_scale_up.yaml b/samples/vnf_samples/nsut/vfw/tc_sriov_rfc2544_ipv4_ixia_scale_up.yaml
new file mode 100644 (file)
index 0000000..b0ea0dc
--- /dev/null
@@ -0,0 +1,96 @@
+# Copyright (c) 2019 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.
+{% set vports = vports or 2 %}
+{% set tolerance_low = tolerance_low or 0.005 %}
+{% set tolerance_high = tolerance_high or 0.01 %}
+---
+schema: yardstick:task:0.1
+scenarios:
+- type: NSPerf-RFC2544
+  traffic_profile: ../../traffic_profiles/ixia_ipv4_latency_scale_up.yaml
+  topology: vfw-tg-topology-ixia-scale-up.yaml
+  extra_args:
+    vports: {{ vports }}
+  nodes:
+    tg__0: trafficgen_0.yardstick
+    vnf__0: vnf_0.yardstick
+  options:
+    framesize:
+    flow:
+      src_ip:
+{% for vport in range(0, vports|int, 2) %}
+        - {'tg__0': 'xe{{ vport }}'}
+{% endfor %}
+      dst_ip:
+{% for vport in range(1, vports|int, 2) %}
+        - {'tg__0': 'xe{{ vport }}'}
+{% endfor %}
+      count: 1
+    traffic_type: 4
+    rfc2544:
+      resolution: 0.01
+      allowed_drop_rate: "{{ tolerance_low }} - {{ tolerance_high }}"
+    vnf__0:
+      vnf_config: {lb_config: 'SW', lb_count: 1, worker_config: '1C/1T', worker_threads: 1}
+  runner:
+    type: Sequence
+    scenario_option_name: framesize
+    sequence:
+    - uplink: {64B: 100}
+      downlink: {64B: 100}
+    - uplink: {64B: 25, 128B: 25, 512B: 25, 1024B: 25}
+      downlink: {64B: 25, 128B: 25, 512B: 25, 1024B: 25}
+contexts:
+   - name: yardstick
+     type: Node
+     file: /etc/yardstick/nodes/pod_ixia_ovs.yaml
+   - type: StandaloneSriov
+     name: yardstick
+     file: /etc/yardstick/nodes/pod_sriov.yaml
+     vm_deploy: True
+     flavor:
+       images: "/var/lib/libvirt/images/yardstick-nsb-image.img"
+       ram: 16384
+       extra_specs:
+         hw:cpu_sockets: 1
+         hw:cpu_cores: 6
+         hw:cpu_threads: 2
+       user: ""
+       password: ""
+     servers:
+       vnf_0:
+         network_ports:
+           mgmt:
+             cidr: '172.10.1.150/24'
+{% for port_num in range((vports/2)|int) %}
+           xe{{ port_num * 2 }}:
+             - uplink_{{ port_num }}
+           xe{{ (port_num * 2) + 1 }}:
+             - downlink_{{ port_num }}
+{% endfor %}
+     networks:
+{% for port_num in range((vports/2)|int) %}
+       uplink_{{ port_num }}:
+         port_num: {{ networks.uplink[port_num].port_num }}
+         phy_port: "{{ networks.uplink[port_num].phy_port }}"
+         vpci: "{{ networks.uplink[port_num].vpci }}"
+         cidr: "{{ networks.uplink[port_num].cidr }}"
+         gateway_ip: "{{ networks.uplink[port_num].gateway_ip }}"
+       downlink_{{ port_num }}:
+         port_num: {{ networks.downlink[port_num].port_num }}
+         phy_port: "{{ networks.downlink[port_num].phy_port }}"
+         vpci: "{{ networks.downlink[port_num].vpci }}"
+         cidr: "{{ networks.downlink[port_num].cidr }}"
+         gateway_ip: "{{ networks.downlink[port_num].gateway_ip }}"
+{% endfor %}