mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-22 01:13:00 +02:00
Merge pull request #884 from kernelkit/test-spec-ng
Test specification refactor
This commit is contained in:
+4
-1
@@ -1,7 +1,10 @@
|
||||
---
|
||||
- case: meta/wait.py
|
||||
infamy:
|
||||
specification: False
|
||||
- case: meta/reproducible.py
|
||||
|
||||
infamy:
|
||||
specification: False
|
||||
- name: Misc tests
|
||||
suite: misc/misc.yaml
|
||||
|
||||
|
||||
@@ -2,5 +2,5 @@
|
||||
- name: usb
|
||||
case: usb/test.py
|
||||
|
||||
- name: usb two ports
|
||||
- name: usb_two_ports
|
||||
case: usb_two_ports/test.py
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
=== USB configuration
|
||||
==== Description
|
||||
This test checks if the configuration is consistent with hardware state,
|
||||
and verifies whether the USB ports are correctly _locked_ (restricted from
|
||||
use) and _unlocked_ (available for use) when they should. It also verifies
|
||||
this behavior during reboot. This test does not involve the actual use of
|
||||
the USB port; it only ensures the configured state is consistent with the
|
||||
hardware state.
|
||||
|
||||
If this pass you can be certain that the configuration of the USB
|
||||
port is handled correctly.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_hardware/usb/topology.svg[USB configuration topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::usb/topology.svg[USB configuration topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[USB configuration topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Unlock all USB ports
|
||||
. Verify that all USB ports are unlocked
|
||||
. Lock all USB ports
|
||||
. Verify that all USB ports are locked
|
||||
. Remove all hardware configuration
|
||||
. Verify that all USB ports are locked
|
||||
. Unlock USB ports
|
||||
. Verify that all USB ports are unlocked
|
||||
. Save the configuration to startup configuration and reboot
|
||||
. Verify USB port remain unlocked after reboot
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
+1
@@ -0,0 +1 @@
|
||||
usb.adoc
|
||||
@@ -0,0 +1,40 @@
|
||||
=== USB configuration
|
||||
==== Description
|
||||
This test checks if the configuration is consistent with hardware state,
|
||||
and verifies whether the USB ports are correctly _locked_ (restricted from
|
||||
use) and _unlocked_ (available for use) when they should. It also verifies
|
||||
this behavior during reboot. This test does not involve the actual use of
|
||||
the USB port; it only ensures the configured state is consistent with the
|
||||
hardware state.
|
||||
|
||||
If this pass you can be certain that the configuration of the USB
|
||||
port is handled correctly.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_hardware/usb/topology.svg[USB configuration topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::usb/topology.svg[USB configuration topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[USB configuration topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Unlock all USB ports
|
||||
. Verify that all USB ports are unlocked
|
||||
. Lock all USB ports
|
||||
. Verify that all USB ports are locked
|
||||
. Remove all hardware configuration
|
||||
. Verify that all USB ports are locked
|
||||
. Unlock USB ports
|
||||
. Verify that all USB ports are unlocked
|
||||
. Save the configuration to startup configuration and reboot
|
||||
. Verify USB port remain unlocked after reboot
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
=== USB configuration with two USB ports
|
||||
==== Description
|
||||
Test that the USB locked/unlocked configuration is consistent
|
||||
when having two USB ports.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_hardware/usb_two_ports/topology.svg[USB configuration with two USB ports topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::usb_two_ports/topology.svg[USB configuration with two USB ports topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[USB configuration with two USB ports topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Lock the first USB port and unlock the second USB port
|
||||
. Verify that the correct port is locked and the correct one is unlocked
|
||||
. Unlock the first USB port, and lock the second USB port
|
||||
. Verify that the correct port is locked and the correct one is unlocked
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
usb_two_ports.adoc
|
||||
@@ -0,0 +1,27 @@
|
||||
=== USB configuration with two USB ports
|
||||
==== Description
|
||||
Test that the USB locked/unlocked configuration is consistent
|
||||
when having two USB ports.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_hardware/usb_two_ports/topology.svg[USB configuration with two USB ports topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::usb_two_ports/topology.svg[USB configuration with two USB ports topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[USB configuration with two USB ports topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Lock the first USB port and unlock the second USB port
|
||||
. Verify that the correct port is locked and the correct one is unlocked
|
||||
. Unlock the first USB port, and lock the second USB port
|
||||
. Verify that the correct port is locked and the correct one is unlocked
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
=== Bridge basic
|
||||
==== Description
|
||||
Test basic connectivity to a bridge
|
||||
|
||||
....
|
||||
|
||||
PING --> br0 (10.0.0.2)
|
||||
/
|
||||
PC -------- target:data
|
||||
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_basic/topology.svg[Bridge basic topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_basic/topology.svg[Bridge basic topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge basic topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure single bridge with a single physical port, bridge @ IP 10.0.0.2
|
||||
. Verify ping 10.0.0.2 is possible from host:data
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
bridge_basic.adoc
|
||||
@@ -0,0 +1,32 @@
|
||||
=== Bridge basic
|
||||
==== Description
|
||||
Test basic connectivity to a bridge
|
||||
|
||||
....
|
||||
|
||||
PING --> br0 (10.0.0.2)
|
||||
/
|
||||
PC -------- target:data
|
||||
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_basic/topology.svg[Bridge basic topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_basic/topology.svg[Bridge basic topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge basic topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure single bridge with a single physical port, bridge @ IP 10.0.0.2
|
||||
. Verify ping 10.0.0.2 is possible from host:data
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
=== Bridge forwarding dual DUTs
|
||||
==== Description
|
||||
Ping through two bridges on two different DUTs.
|
||||
|
||||
....
|
||||
|
||||
.-------------------------. .-------------------------.
|
||||
| [ DUT1 ] link | | link [ DUT2 ] |
|
||||
| br0 -----|-------|----- br0 |
|
||||
| / | | / \ |
|
||||
| mgmt data1 | | data1 data2 mgmt |
|
||||
'-------------------------' '-------------------------'
|
||||
| | | | |
|
||||
| | | | |
|
||||
.---------------------------------------------------------------.
|
||||
| mgmt1 data11 data21 data22 mgmt2 |
|
||||
| [10.0.0.2] [10.0.0.3] [10.0.0.4] |
|
||||
| (ns11) (ns20) (ns21) |
|
||||
| |
|
||||
| [ HOST ] |
|
||||
'---------------------------------------------------------------'
|
||||
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_fwd_dual_dut/topology.svg[Bridge forwarding dual DUTs topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_fwd_dual_dut/topology.svg[Bridge forwarding dual DUTs topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge forwarding dual DUTs topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure a bridge with triple physical port
|
||||
. Verify ping 10.0.0.3 and 10.0.0.4 from host:data11
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
bridge_fwd_dual_dut.adoc
|
||||
@@ -0,0 +1,44 @@
|
||||
=== Bridge forwarding dual DUTs
|
||||
==== Description
|
||||
Ping through two bridges on two different DUTs.
|
||||
|
||||
....
|
||||
|
||||
.-------------------------. .-------------------------.
|
||||
| [ DUT1 ] link | | link [ DUT2 ] |
|
||||
| br0 -----|-------|----- br0 |
|
||||
| / | | / \ |
|
||||
| mgmt data1 | | data1 data2 mgmt |
|
||||
'-------------------------' '-------------------------'
|
||||
| | | | |
|
||||
| | | | |
|
||||
.---------------------------------------------------------------.
|
||||
| mgmt1 data11 data21 data22 mgmt2 |
|
||||
| [10.0.0.2] [10.0.0.3] [10.0.0.4] |
|
||||
| (ns11) (ns20) (ns21) |
|
||||
| |
|
||||
| [ HOST ] |
|
||||
'---------------------------------------------------------------'
|
||||
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_fwd_dual_dut/topology.svg[Bridge forwarding dual DUTs topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_fwd_dual_dut/topology.svg[Bridge forwarding dual DUTs topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge forwarding dual DUTs topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure a bridge with triple physical port
|
||||
. Verify ping 10.0.0.3 and 10.0.0.4 from host:data11
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
=== Bridge forwarding single DUTs
|
||||
==== Description
|
||||
Tests forwarding through a DUT with two bridged interfaces on one DUT.
|
||||
|
||||
....
|
||||
|
||||
,------------------------------------------,
|
||||
| |
|
||||
| br0 |
|
||||
| / \ |
|
||||
| target:mgmt target:data1 target:data2 |
|
||||
'------------------------------------------'
|
||||
| | |
|
||||
| | |
|
||||
,------------------------------------------,
|
||||
| host:mgmt host:data1 host:data2 |
|
||||
| [10.0.0.1] [10.0.0.2] |
|
||||
| (ns0) (ns1) |
|
||||
| |
|
||||
| [ HOST ] |
|
||||
'------------------------------------------'
|
||||
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_fwd_sgl_dut/topology.svg[Bridge forwarding single DUTs topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_fwd_sgl_dut/topology.svg[Bridge forwarding single DUTs topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge forwarding single DUTs topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure a bridge with dual physical port
|
||||
. Verify ping from host:data1 to 10.0.0.2
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
bridge_fwd_sgl_dut.adoc
|
||||
@@ -0,0 +1,44 @@
|
||||
=== Bridge forwarding single DUTs
|
||||
==== Description
|
||||
Tests forwarding through a DUT with two bridged interfaces on one DUT.
|
||||
|
||||
....
|
||||
|
||||
,------------------------------------------,
|
||||
| |
|
||||
| br0 |
|
||||
| / \ |
|
||||
| target:mgmt target:data1 target:data2 |
|
||||
'------------------------------------------'
|
||||
| | |
|
||||
| | |
|
||||
,------------------------------------------,
|
||||
| host:mgmt host:data1 host:data2 |
|
||||
| [10.0.0.1] [10.0.0.2] |
|
||||
| (ns0) (ns1) |
|
||||
| |
|
||||
| [ HOST ] |
|
||||
'------------------------------------------'
|
||||
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_fwd_sgl_dut/topology.svg[Bridge forwarding single DUTs topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_fwd_sgl_dut/topology.svg[Bridge forwarding single DUTs topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge forwarding single DUTs topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure a bridge with dual physical port
|
||||
. Verify ping from host:data1 to 10.0.0.2
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
=== Bridge STP Basic
|
||||
==== Description
|
||||
Verify that a fully connected mesh of 4 DUTs is pruned to a spanning
|
||||
tree.
|
||||
|
||||
Since the mesh contains 3 redundant paths, can infer that a spanning
|
||||
tree has been created if all host interfaces can reach each other
|
||||
while exactly three links are in the blocking state.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_stp_basic/topology.svg[Bridge STP Basic topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_stp_basic/topology.svg[Bridge STP Basic topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge STP Basic topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure a bridge with spanning tree eneabled on dut a, b, c, and d
|
||||
. Add an IP address to each host interface in the 10.0.0.0/24 subnet
|
||||
. Verify that exactly three links are blocking
|
||||
. Verify that host:a can reach host:{b,c,d}
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
bridge_stp_basic.adoc
|
||||
@@ -0,0 +1,31 @@
|
||||
=== Bridge STP Basic
|
||||
==== Description
|
||||
Verify that a fully connected mesh of 4 DUTs is pruned to a spanning
|
||||
tree.
|
||||
|
||||
Since the mesh contains 3 redundant paths, can infer that a spanning
|
||||
tree has been created if all host interfaces can reach each other
|
||||
while exactly three links are in the blocking state.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_stp_basic/topology.svg[Bridge STP Basic topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_stp_basic/topology.svg[Bridge STP Basic topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge STP Basic topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure a bridge with spanning tree eneabled on dut a, b, c, and d
|
||||
. Add an IP address to each host interface in the 10.0.0.0/24 subnet
|
||||
. Verify that exactly three links are blocking
|
||||
. Verify that host:a can reach host:{b,c,d}
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
=== Bridge with a physical port and a veth
|
||||
==== Description
|
||||
This tests the possibility to add software added interfaces, in this case
|
||||
VETH and bridge it with a physical interface
|
||||
|
||||
....
|
||||
|
||||
PING --> br0
|
||||
/ \
|
||||
PC- target:data veth0a -- veth0b
|
||||
10.0.0.1 10.0.0.2
|
||||
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_veth/topology.svg[Bridge with a physical port and a veth topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_veth/topology.svg[Bridge with a physical port and a veth topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge with a physical port and a veth topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure bridged eth port and veth pair with IP 10.0.0.2
|
||||
. Verify ping from host:data to 10.0.0.2
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
bridge_veth.adoc
|
||||
@@ -0,0 +1,34 @@
|
||||
=== Bridge with a physical port and a veth
|
||||
==== Description
|
||||
This tests the possibility to add software added interfaces, in this case
|
||||
VETH and bridge it with a physical interface
|
||||
|
||||
....
|
||||
|
||||
PING --> br0
|
||||
/ \
|
||||
PC- target:data veth0a -- veth0b
|
||||
10.0.0.1 10.0.0.2
|
||||
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_veth/topology.svg[Bridge with a physical port and a veth topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_veth/topology.svg[Bridge with a physical port and a veth topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge with a physical port and a veth topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure bridged eth port and veth pair with IP 10.0.0.2
|
||||
. Verify ping from host:data to 10.0.0.2
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
=== Bridge VLAN
|
||||
==== Description
|
||||
Basic test of VLAN functionality in a bridge, tagged/untagged traffic and a VLAN interface in the bridge.
|
||||
....
|
||||
¦ ¦
|
||||
¦ vlan10 IP:10.0.0.2 ¦ br0 IP:10.0.0.3
|
||||
¦ / ¦ /
|
||||
¦ br0 <-- VLAN filtering ¦ link.10
|
||||
¦ u/ \t ¦ /
|
||||
PC ------data link -----------------|-- link
|
||||
¦ dut1 ¦ dut2
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_vlan/topology.svg[Bridge VLAN topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_vlan/topology.svg[Bridge VLAN topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge VLAN topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure DUTs
|
||||
. Verify ping from host:data to 10.0.0.2 and 10.0.0.3
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
bridge_vlan.adoc
|
||||
@@ -0,0 +1,33 @@
|
||||
=== Bridge VLAN
|
||||
==== Description
|
||||
Basic test of VLAN functionality in a bridge, tagged/untagged traffic and a VLAN interface in the bridge.
|
||||
....
|
||||
¦ ¦
|
||||
¦ vlan10 IP:10.0.0.2 ¦ br0 IP:10.0.0.3
|
||||
¦ / ¦ /
|
||||
¦ br0 <-- VLAN filtering ¦ link.10
|
||||
¦ u/ \t ¦ /
|
||||
PC ------data link -----------------|-- link
|
||||
¦ dut1 ¦ dut2
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_vlan/topology.svg[Bridge VLAN topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_vlan/topology.svg[Bridge VLAN topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge VLAN topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure DUTs
|
||||
. Verify ping from host:data to 10.0.0.2 and 10.0.0.3
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
=== Bridge VLAN separation
|
||||
==== Description
|
||||
Test that two VLANs are correctly separated in the bridge
|
||||
|
||||
....
|
||||
,-----------------------------------, ,----------------------------------,
|
||||
| dut1:link | | dut2:link |
|
||||
| br0 --------|---|--------- br0 |
|
||||
| / \ | | / \ |
|
||||
|dut1:mgmt dut1:data1 dut1:data2 | | dut2:data1 dut2:data2 dut2:mgmt |
|
||||
'-----------------------------------' '----------------------------------'
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
,------------------------------------------------------------------------------,
|
||||
| host:mgmt0 host:data10 host:data11 host:data20 host:data21 host:mgmt1 |
|
||||
| [10.0.0.1] [10.0.0.2] [10.0.0.3] [10.0.0.4] |
|
||||
| (ns10) (ns11) (ns20) (ns21) |
|
||||
| |
|
||||
| [ HOST ] |
|
||||
'------------------------------------------------------------------------------'
|
||||
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_vlan_separation/topology.svg[Bridge VLAN separation topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_vlan_separation/topology.svg[Bridge VLAN separation topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge VLAN separation topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure DUTs
|
||||
. Verify ping 10.0.0.3 from host:data10
|
||||
. Verify ping 10.0.0.4 from host:data11
|
||||
. Verify ping not possible host:data10->10.0.0.4, host:data11->10.0.0.3, host:data10->10.0.0.2, host:data11->10.0.0.1
|
||||
. Verify MAC broadcast isolation within VLANs
|
||||
. Send ping to 10.0.0.255 from host:data10
|
||||
. Verify broadcast is received on host:data20
|
||||
. Verify broadcast is NOT received on host:data11 and host:data21
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
bridge_vlan_separation.adoc
|
||||
@@ -0,0 +1,49 @@
|
||||
=== Bridge VLAN separation
|
||||
==== Description
|
||||
Test that two VLANs are correctly separated in the bridge
|
||||
|
||||
....
|
||||
,-----------------------------------, ,----------------------------------,
|
||||
| dut1:link | | dut2:link |
|
||||
| br0 --------|---|--------- br0 |
|
||||
| / \ | | / \ |
|
||||
|dut1:mgmt dut1:data1 dut1:data2 | | dut2:data1 dut2:data2 dut2:mgmt |
|
||||
'-----------------------------------' '----------------------------------'
|
||||
| | | | | |
|
||||
| | | | | |
|
||||
,------------------------------------------------------------------------------,
|
||||
| host:mgmt0 host:data10 host:data11 host:data20 host:data21 host:mgmt1 |
|
||||
| [10.0.0.1] [10.0.0.2] [10.0.0.3] [10.0.0.4] |
|
||||
| (ns10) (ns11) (ns20) (ns21) |
|
||||
| |
|
||||
| [ HOST ] |
|
||||
'------------------------------------------------------------------------------'
|
||||
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/bridge_vlan_separation/topology.svg[Bridge VLAN separation topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::bridge_vlan_separation/topology.svg[Bridge VLAN separation topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Bridge VLAN separation topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure DUTs
|
||||
. Verify ping 10.0.0.3 from host:data10
|
||||
. Verify ping 10.0.0.4 from host:data11
|
||||
. Verify ping not possible host:data10->10.0.0.4, host:data11->10.0.0.3, host:data10->10.0.0.2, host:data11->10.0.0.1
|
||||
. Verify MAC broadcast isolation within VLANs
|
||||
. Send ping to 10.0.0.255 from host:data10
|
||||
. Verify broadcast is received on host:data20
|
||||
. Verify broadcast is NOT received on host:data11 and host:data21
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
=== Dual bridges on one device
|
||||
==== Description
|
||||
Verify that it is possible to ping through a bridge to another bridge via VETH interfaces.
|
||||
|
||||
....
|
||||
PING --> br0 br1 10.0.0.2
|
||||
/ \ /
|
||||
PC - target:data veth0a - veth0b
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/dual_bridge/topology.svg[Dual bridges on one device topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::dual_bridge/topology.svg[Dual bridges on one device topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Dual bridges on one device topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure two bridges linked and a veth pair
|
||||
. Verify ping from host:data to 10.0.0.2
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
dual_bridge.adoc
|
||||
@@ -1,26 +1,4 @@
|
||||
=== Basic IP GRE test
|
||||
==== Description
|
||||
Test setting up IP GRE tunnels using IPv4 and IPv6,
|
||||
and then a connectivity test.
|
||||
include::gre_basic.adoc[]
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/gre_basic/topology.svg[Basic IP GRE test topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::gre_basic/topology.svg[Basic IP GRE test topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Basic IP GRE test topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure DUTs
|
||||
. Test connectivity host:data to gre 10.0.0.2
|
||||
. Test connectivity host:data to gre on right 2001:db8::c0a8:0a02
|
||||
|
||||
|
||||
<<<
|
||||
include::gretap_basic.adoc[]
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
=== GRE point-to-point
|
||||
==== Description
|
||||
Test setting up IP GRE tunnels using IPv4 and IPv6,
|
||||
and ends with a connectivity test.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/gre_basic/topology.svg[GRE point-to-point topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::gre_basic/topology.svg[GRE point-to-point topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[GRE point-to-point topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure DUTs
|
||||
. Verify connectivity host:data to 2001:db8::c0a8:0a02
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
=== GRETAP point-to-point
|
||||
==== Description
|
||||
Test setting up IP GRE tunnels using IPv4 and IPv6,
|
||||
and ends with a connectivity test.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/gre_basic/topology.svg[GRETAP point-to-point topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::gre_basic/topology.svg[GRETAP point-to-point topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[GRETAP point-to-point topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure DUTs
|
||||
. Verify connectivity host:data to 2001:db8::c0a8:0a02
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,21 +1,25 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Basic IP GRE test
|
||||
Basic GRE connectivity test
|
||||
|
||||
Test setting up IP GRE tunnels using IPv4 and IPv6,
|
||||
and then a connectivity test.
|
||||
and ends with a connectivity test.
|
||||
"""
|
||||
|
||||
import infamy
|
||||
|
||||
class ArgumentParser(infamy.ArgumentParser):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.add_argument("--type")
|
||||
|
||||
with infamy.Test() as test:
|
||||
with test.step("Set up topology and attach to target DUTs"):
|
||||
env = infamy.Env()
|
||||
left = env.attach("left", "mgmt")
|
||||
right = env.attach("right", "mgmt")
|
||||
_, leftlink = env.ltop.xlate("left", "link")
|
||||
_, leftdata = env.ltop.xlate("left", "data")
|
||||
_, rightlink = env.ltop.xlate("right", "link")
|
||||
args=ArgumentParser()
|
||||
env = infamy.Env(args=args)
|
||||
type = env.args.type
|
||||
left = env.attach("left", "mgmt")
|
||||
right = env.attach("right", "mgmt")
|
||||
|
||||
|
||||
with test.step("Configure DUTs"):
|
||||
@@ -23,7 +27,7 @@ with infamy.Test() as test:
|
||||
"interfaces": {
|
||||
"interface": [
|
||||
{
|
||||
"name": leftlink,
|
||||
"name": left["link"],
|
||||
"ipv4": {
|
||||
"address": [{
|
||||
"ip": "192.168.50.1",
|
||||
@@ -40,7 +44,7 @@ with infamy.Test() as test:
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": leftdata,
|
||||
"name": left["data"],
|
||||
"ipv4": {
|
||||
"address": [{
|
||||
"ip": "192.168.10.1",
|
||||
@@ -58,7 +62,7 @@ with infamy.Test() as test:
|
||||
},
|
||||
{
|
||||
"name": "gre0",
|
||||
"type": "infix-if-type:gre",
|
||||
"type": f"infix-if-type:{type}",
|
||||
"ipv4": {
|
||||
"address": [{
|
||||
"ip": "192.168.30.1",
|
||||
@@ -74,7 +78,7 @@ with infamy.Test() as test:
|
||||
},
|
||||
{
|
||||
"name": "gre6",
|
||||
"type": "infix-if-type:gre",
|
||||
"type": f"infix-if-type:{type}",
|
||||
"ipv6": {
|
||||
"address": [{
|
||||
"ip": "2001:db8:3c4d:30::1",
|
||||
@@ -95,7 +99,7 @@ with infamy.Test() as test:
|
||||
"interfaces": {
|
||||
"interface": [
|
||||
{
|
||||
"name": rightlink,
|
||||
"name": right["link"],
|
||||
"ipv4": {
|
||||
"address": [{
|
||||
"ip": "192.168.50.2",
|
||||
@@ -112,7 +116,7 @@ with infamy.Test() as test:
|
||||
},
|
||||
{
|
||||
"name": "gre1",
|
||||
"type": "infix-if-type:gre",
|
||||
"type": f"infix-if-type:{type}",
|
||||
"ipv4": {
|
||||
"address": [{
|
||||
"ip": "192.168.30.2",
|
||||
@@ -127,7 +131,7 @@ with infamy.Test() as test:
|
||||
},
|
||||
{
|
||||
"name": "gre6",
|
||||
"type": "infix-if-type:gre",
|
||||
"type": f"infix-if-type:{type}",
|
||||
"ipv6": {
|
||||
"address": [{
|
||||
"ip": "2001:db8:3c4d:30::2",
|
||||
@@ -171,16 +175,15 @@ with infamy.Test() as test:
|
||||
}
|
||||
})
|
||||
_, hport = env.ltop.xlate("host", "data")
|
||||
with test.step("Test connectivity host:data to gre 10.0.0.2"):
|
||||
with test.step(f"Verify connectivity host:data to 10.0.0.2"):
|
||||
with infamy.IsolatedMacVlan(hport) as ns0:
|
||||
ns0.addip("192.168.10.2")
|
||||
ns0.addroute("192.168.30.0/24", "192.168.10.1")
|
||||
ns0.must_reach("192.168.30.2")
|
||||
with test.step("Test connectivity host:data to gre on right 2001:db8::c0a8:0a02"):
|
||||
with test.step("Verify connectivity host:data to 2001:db8::c0a8:0a02"):
|
||||
with infamy.IsolatedMacVlan(hport) as ns0:
|
||||
ns0.addip("2001:db8:3c4d:10::2", prefix_length=64, proto="ipv6")
|
||||
ns0.addroute("2001:db8:3c4d:30::/64", "2001:db8:3c4d:10::1", proto="ipv6")
|
||||
#breakpoint()
|
||||
ns0.must_reach("2001:db8:3c4d:30::2")
|
||||
|
||||
test.succeed()
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
---
|
||||
- name: gre_basic
|
||||
case: test.py
|
||||
opts: ["--type", "gre"]
|
||||
infamy:
|
||||
title: GRE point-to-point
|
||||
|
||||
- name: gretap_basic
|
||||
case: test.py
|
||||
opts: ["--type", "gretap"]
|
||||
infamy:
|
||||
title: GRETAP point-to-point
|
||||
@@ -1,24 +0,0 @@
|
||||
=== GRETAP interface bridged with physical
|
||||
==== Description
|
||||
Test that GRETAP works as it should and that it possible to bridge it.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/gretap_bridged/topology.svg[GRETAP interface bridged with physical topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::gretap_bridged/topology.svg[GRETAP interface bridged with physical topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[GRETAP interface bridged with physical topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure DUTs
|
||||
. Test connectivity host:data to right:gre0 at 192.168.10.2
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
gretap_bridged.adoc
|
||||
@@ -0,0 +1,24 @@
|
||||
=== GRETAP interface bridged with physical
|
||||
==== Description
|
||||
Test that GRETAP works as it should and that it possible to bridge it.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/gretap_bridged/topology.svg[GRETAP interface bridged with physical topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::gretap_bridged/topology.svg[GRETAP interface bridged with physical topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[GRETAP interface bridged with physical topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure DUTs
|
||||
. Test connectivity host:data to right:gre0 at 192.168.10.2
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
case: vlan_iface_termination/test.py
|
||||
|
||||
- name: gre_basic
|
||||
case: gre_basic/test.py
|
||||
suite: gre_basic/test.yaml
|
||||
|
||||
- name: gretap_bridged
|
||||
case: gretap_bridged/test.py
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
=== Interface status
|
||||
==== Description
|
||||
Verify interface status properly propagate changes when an interface
|
||||
is disabled and then re-enabled.
|
||||
|
||||
Both admin-status and oper-status are verified.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/iface_enable_disable/topology.svg[Interface status topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::iface_enable_disable/topology.svg[Interface status topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Interface status topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure bridge and associated interfaces in target1
|
||||
. Disable interface in target2
|
||||
. Verify the interface is disabled
|
||||
. Enable the interface and assign an IP address
|
||||
. Verify the interface is enabled
|
||||
. Verify it is possible to ping the interface
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
iface_enable_disable.adoc
|
||||
@@ -0,0 +1,31 @@
|
||||
=== Interface status
|
||||
==== Description
|
||||
Verify interface status properly propagate changes when an interface
|
||||
is disabled and then re-enabled.
|
||||
|
||||
Both admin-status and oper-status are verified.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/iface_enable_disable/topology.svg[Interface status topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::iface_enable_disable/topology.svg[Interface status topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Interface status topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure bridge and associated interfaces in target1
|
||||
. Disable interface in target2
|
||||
. Verify the interface is disabled
|
||||
. Enable the interface and assign an IP address
|
||||
. Verify the interface is enabled
|
||||
. Verify it is possible to ping the interface
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
=== Custom MAC address on interface
|
||||
==== Description
|
||||
Verify support for setting and removing a custom MAC address on interfaces.
|
||||
Both static MAC address and derived from the chassis MAC with, or without,
|
||||
an offset applied.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/iface_phys_address/topology.svg[Custom MAC address on interface topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::iface_phys_address/topology.svg[Custom MAC address on interface topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Custom MAC address on interface topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Set target:data static MAC address '02:01:00:c0:ff:ee'
|
||||
. Verify target:data has MAC address '02:01:00:c0:ff:ee'
|
||||
. Reset target:data MAC address to default
|
||||
. Verify target:data MAC address is reset to default
|
||||
. Set target:data to chassis MAC
|
||||
. Verify target:data has chassis MAC
|
||||
. Set target:data to chassis MAC + offset
|
||||
. Verify target:data has chassis MAC + offset
|
||||
. Reset target:data MAC address to default
|
||||
. Verify target:data MAC address is reset to default
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
iface_phys_address.adoc
|
||||
@@ -0,0 +1,34 @@
|
||||
=== Custom MAC address on interface
|
||||
==== Description
|
||||
Verify support for setting and removing a custom MAC address on interfaces.
|
||||
Both static MAC address and derived from the chassis MAC with, or without,
|
||||
an offset applied.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/iface_phys_address/topology.svg[Custom MAC address on interface topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::iface_phys_address/topology.svg[Custom MAC address on interface topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Custom MAC address on interface topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Set target:data static MAC address '02:01:00:c0:ff:ee'
|
||||
. Verify target:data has MAC address '02:01:00:c0:ff:ee'
|
||||
. Reset target:data MAC address to default
|
||||
. Verify target:data MAC address is reset to default
|
||||
. Set target:data to chassis MAC
|
||||
. Verify target:data has chassis MAC
|
||||
. Set target:data to chassis MAC + offset
|
||||
. Verify target:data has chassis MAC + offset
|
||||
. Reset target:data MAC address to default
|
||||
. Verify target:data MAC address is reset to default
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
=== Interface Description (ifAlias)
|
||||
==== Description
|
||||
Verify interface description (ifAlias) can be set on an interface and
|
||||
then be read back from the operational datastore.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/ifalias/topology.svg[Interface Description (ifAlias) topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ifalias/topology.svg[Interface Description (ifAlias) topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Interface Description (ifAlias) topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Set up interface target:data with description
|
||||
. Verify description can be read back from operational
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ifalias.adoc
|
||||
@@ -0,0 +1,25 @@
|
||||
=== Interface Description (ifAlias)
|
||||
==== Description
|
||||
Verify interface description (ifAlias) can be set on an interface and
|
||||
then be read back from the operational datastore.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/ifalias/topology.svg[Interface Description (ifAlias) topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ifalias/topology.svg[Interface Description (ifAlias) topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Interface Description (ifAlias) topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Set up interface target:data with description
|
||||
. Verify description can be read back from operational
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
=== IGMP basic
|
||||
==== Description
|
||||
Verify that all multicast get flooded when no IGMP join exists in the system and
|
||||
the flooding stops as soon a join arrives
|
||||
|
||||
.1
|
||||
.---------------------------.
|
||||
| DUT |
|
||||
'-data1-----data2-----data3-'
|
||||
| | |
|
||||
| | | 10.0.0.0/24
|
||||
| | |
|
||||
.-data1-. .-data2-. .-data3-.
|
||||
| msend | | mrecv | | !memb |
|
||||
'-------' '-------' '-------'
|
||||
.2 .3 .4
|
||||
HOST
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/igmp_basic/topology.svg[IGMP basic topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::igmp_basic/topology.svg[IGMP basic topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[IGMP basic topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure device
|
||||
. Start multicast sender on host:data0, group 224.1.1.1
|
||||
. Verify that the group 224.1.1.1 is flooded on host:data2 and host:data3
|
||||
. Join multicast group 224.1.1.1 on host:data2
|
||||
. Verify group 224.1.1.1 is received on host:data2
|
||||
. Verify that the group 224.1.1.1 is no longer received on host:data3
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
igmp_basic.adoc
|
||||
@@ -0,0 +1,42 @@
|
||||
=== IGMP basic
|
||||
==== Description
|
||||
Verify that all multicast get flooded when no IGMP join exists in the system and
|
||||
the flooding stops as soon a join arrives
|
||||
|
||||
.1
|
||||
.---------------------------.
|
||||
| DUT |
|
||||
'-data1-----data2-----data3-'
|
||||
| | |
|
||||
| | | 10.0.0.0/24
|
||||
| | |
|
||||
.-data1-. .-data2-. .-data3-.
|
||||
| msend | | mrecv | | !memb |
|
||||
'-------' '-------' '-------'
|
||||
.2 .3 .4
|
||||
HOST
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/igmp_basic/topology.svg[IGMP basic topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::igmp_basic/topology.svg[IGMP basic topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[IGMP basic topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure device
|
||||
. Start multicast sender on host:data0, group 224.1.1.1
|
||||
. Verify that the group 224.1.1.1 is flooded on host:data2 and host:data3
|
||||
. Join multicast group 224.1.1.1 on host:data2
|
||||
. Verify group 224.1.1.1 is received on host:data2
|
||||
. Verify that the group 224.1.1.1 is no longer received on host:data3
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
=== IGMP VLAN
|
||||
==== Description
|
||||
Test tagged IGMP control traffic and that VLAN separation is respected for multicast
|
||||
|
||||
....
|
||||
VLAN55 VLAN77 VLAN55 VLAN77
|
||||
10.0.1.1 10.0.2.1 10.0.1.2 10.0.2.2
|
||||
\ / \ /
|
||||
\--------------/ VLAN 1,2 T \---------------/
|
||||
| DUT1 +---------------------------------+ DUT2 |
|
||||
| |dut1:link dut2:link| |
|
||||
+--------------+ +-----+---------+
|
||||
dut1:data1| |dut1:data2 dut2:data1| |dut2:data2
|
||||
VLAN55 U | | VLAN77 U VLAN55 U | | VLAN77 U
|
||||
| | | |
|
||||
+-------+ | +----------+ +------------+ +--------+
|
||||
| msend +--+ | mreceive | | mreceive | | msend |
|
||||
+-------+ +----------+ +------------+ +--------+
|
||||
10.0.1.11 10.0.2.11 10.0.1.22 10.0.2.22
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/igmp_vlan/topology.svg[IGMP VLAN topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::igmp_vlan/topology.svg[IGMP VLAN topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[IGMP VLAN topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure device
|
||||
. Start multicast sender on host:data11, group 224.2.2.2
|
||||
. Start multicast sender on host:data22, group 224.1.1.1
|
||||
. Verify group 224.2.2.2 is flooded to host:data21
|
||||
. Verify group 224.1.1.1 is flooded to host:data12
|
||||
. Verify group 224.2.2.2 on host:data11, 224.1.1.1 on host:data21, 224.2.2.2 on host:data12 and 224.1.1.1 on host:data22 is not received
|
||||
. Join multicast group 224.2.2.2 on host:data21
|
||||
. Verify group 224.2.2.2 on host:data11, 224.1.1.1 on host:data21, 224.2.2.2 on host:data12 and 224.1.1.1 on host:data22 is not received
|
||||
. Verify group 224.2.2.2 is forwarded to host:data21
|
||||
. Verify group 224.1.1.1 is forwarded to host:data12
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
igmp_vlan.adoc
|
||||
@@ -0,0 +1,49 @@
|
||||
=== IGMP VLAN
|
||||
==== Description
|
||||
Test tagged IGMP control traffic and that VLAN separation is respected for multicast
|
||||
|
||||
....
|
||||
VLAN55 VLAN77 VLAN55 VLAN77
|
||||
10.0.1.1 10.0.2.1 10.0.1.2 10.0.2.2
|
||||
\ / \ /
|
||||
\--------------/ VLAN 1,2 T \---------------/
|
||||
| DUT1 +---------------------------------+ DUT2 |
|
||||
| |dut1:link dut2:link| |
|
||||
+--------------+ +-----+---------+
|
||||
dut1:data1| |dut1:data2 dut2:data1| |dut2:data2
|
||||
VLAN55 U | | VLAN77 U VLAN55 U | | VLAN77 U
|
||||
| | | |
|
||||
+-------+ | +----------+ +------------+ +--------+
|
||||
| msend +--+ | mreceive | | mreceive | | msend |
|
||||
+-------+ +----------+ +------------+ +--------+
|
||||
10.0.1.11 10.0.2.11 10.0.1.22 10.0.2.22
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/igmp_vlan/topology.svg[IGMP VLAN topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::igmp_vlan/topology.svg[IGMP VLAN topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[IGMP VLAN topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure device
|
||||
. Start multicast sender on host:data11, group 224.2.2.2
|
||||
. Start multicast sender on host:data22, group 224.1.1.1
|
||||
. Verify group 224.2.2.2 is flooded to host:data21
|
||||
. Verify group 224.1.1.1 is flooded to host:data12
|
||||
. Verify group 224.2.2.2 on host:data11, 224.1.1.1 on host:data21, 224.2.2.2 on host:data12 and 224.1.1.1 on host:data22 is not received
|
||||
. Join multicast group 224.2.2.2 on host:data21
|
||||
. Verify group 224.2.2.2 on host:data11, 224.1.1.1 on host:data21, 224.2.2.2 on host:data12 and 224.1.1.1 on host:data22 is not received
|
||||
. Verify group 224.2.2.2 is forwarded to host:data21
|
||||
. Verify group 224.1.1.1 is forwarded to host:data12
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
=== Interface with IPv4
|
||||
==== Description
|
||||
Test that it is possible to set and remove the IPv4 address on an interface
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/ipv4_address/topology.svg[Interface with IPv4 topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ipv4_address/topology.svg[Interface with IPv4 topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Interface with IPv4 topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure IPv4 address 10.10.10.20/24 on target:mgmt
|
||||
. Verify '10.10.10.20/24' exists on target:mgmt
|
||||
. Remove all IPv4 addresses from target:mgmt
|
||||
. Verify target:mgmt no longer has the address 10.10.10.20
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ipv4_address.adoc
|
||||
@@ -0,0 +1,26 @@
|
||||
=== Interface with IPv4
|
||||
==== Description
|
||||
Test that it is possible to set and remove the IPv4 address on an interface
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/ipv4_address/topology.svg[Interface with IPv4 topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ipv4_address/topology.svg[Interface with IPv4 topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Interface with IPv4 topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure IPv4 address 10.10.10.20/24 on target:mgmt
|
||||
. Verify '10.10.10.20/24' exists on target:mgmt
|
||||
. Remove all IPv4 addresses from target:mgmt
|
||||
. Verify target:mgmt no longer has the address 10.10.10.20
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
=== IPv4 link-local
|
||||
==== Description
|
||||
Verifies that link-local (IPv4LL/ZeroConf) address assignment work as
|
||||
expected. Checks random address, the request-address setting, and
|
||||
address removal on autoconf disable.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/ipv4_autoconf/topology.svg[IPv4 link-local topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ipv4_autoconf/topology.svg[IPv4 link-local topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[IPv4 link-local topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure interface target:data with IPv4 ZeroConf IP
|
||||
. Verify link-local address exist on target:data
|
||||
. Configure target:data with a specific IPv4 ZeroConf IP
|
||||
. Verify target:data has link-local address 169.254.42.42
|
||||
. Remove IPv4 link-local addresses from target:data
|
||||
. Verify link-local addresses has been removed from target:data
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ipv4_autoconf.adoc
|
||||
@@ -0,0 +1,30 @@
|
||||
=== IPv4 link-local
|
||||
==== Description
|
||||
Verifies that link-local (IPv4LL/ZeroConf) address assignment work as
|
||||
expected. Checks random address, the request-address setting, and
|
||||
address removal on autoconf disable.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/ipv4_autoconf/topology.svg[IPv4 link-local topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ipv4_autoconf/topology.svg[IPv4 link-local topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[IPv4 link-local topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure interface target:data with IPv4 ZeroConf IP
|
||||
. Verify link-local address exist on target:data
|
||||
. Configure target:data with a specific IPv4 ZeroConf IP
|
||||
. Verify target:data has link-local address 169.254.42.42
|
||||
. Remove IPv4 link-local addresses from target:data
|
||||
. Verify link-local addresses has been removed from target:data
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
=== Interface IPv6 autoconf for bridges
|
||||
==== Description
|
||||
Verify IPv6 autoconf on a bridge is properly set up for global prefix.
|
||||
See issue #473 for details.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/ipv6_address/topology.svg[Interface IPv6 autoconf for bridges topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ipv6_address/topology.svg[Interface IPv6 autoconf for bridges topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Interface IPv6 autoconf for bridges topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Setting up bridge with IPv6 SLAAC for global prefix on target:data
|
||||
. Verify using sysctl that 'net.ipv6.conf.br0.autoconf' is 1 on target
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ipv6_address.adoc
|
||||
@@ -0,0 +1,25 @@
|
||||
=== Interface IPv6 autoconf for bridges
|
||||
==== Description
|
||||
Verify IPv6 autoconf on a bridge is properly set up for global prefix.
|
||||
See issue #473 for details.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/ipv6_address/topology.svg[Interface IPv6 autoconf for bridges topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ipv6_address/topology.svg[Interface IPv6 autoconf for bridges topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Interface IPv6 autoconf for bridges topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Setting up bridge with IPv6 SLAAC for global prefix on target:data
|
||||
. Verify using sysctl that 'net.ipv6.conf.br0.autoconf' is 1 on target
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
=== Routing basic
|
||||
==== Description
|
||||
Verify routing between interfaces is possible. That enable/disable routing
|
||||
in configuration has the expected result.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/routing_basic/topology.svg[Routing basic topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::routing_basic/topology.svg[Routing basic topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Routing basic topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Setup host
|
||||
. Enable forwarding on target:data1 and target:data2
|
||||
. Verify ping from host:data1 to 10.0.0.10
|
||||
. Verify ping from host:data2 to 192.168.0.10
|
||||
. Disable forwarding on target:data1 and target:data2
|
||||
. Verify ping does not work host:data1 to 10.0.0.10 and host:data2 to 192.168.0.10
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
routing_basic.adoc
|
||||
@@ -0,0 +1,29 @@
|
||||
=== Routing basic
|
||||
==== Description
|
||||
Verify routing between interfaces is possible. That enable/disable routing
|
||||
in configuration has the expected result.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/routing_basic/topology.svg[Routing basic topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::routing_basic/topology.svg[Routing basic topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Routing basic topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Setup host
|
||||
. Enable forwarding on target:data1 and target:data2
|
||||
. Verify ping from host:data1 to 10.0.0.10
|
||||
. Verify ping from host:data2 to 192.168.0.10
|
||||
. Disable forwarding on target:data1 and target:data2
|
||||
. Verify ping does not work host:data1 to 10.0.0.10 and host:data2 to 192.168.0.10
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
=== Static multicast filters
|
||||
==== Description
|
||||
Verify that static multicast filters work (remember that snooping needs to
|
||||
enabled when using static multicast filters)
|
||||
|
||||
....
|
||||
.1
|
||||
.---------------------------.
|
||||
| DUT |
|
||||
'-data1-----data2-----data3-'
|
||||
| | |
|
||||
| | | 10.0.0.0/24
|
||||
| | |
|
||||
.-data1-. .-data2-. .-data3-.
|
||||
| msend | | mrecv | | !memb |
|
||||
'-------' '-------' '-------'
|
||||
.2 .3 .4
|
||||
HOST
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/static_multicast_filters/topology.svg[Static multicast filters topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::static_multicast_filters/topology.svg[Static multicast filters topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Static multicast filters topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure device without static filter
|
||||
. Start multicast sender on host:data1, group 224.1.1.1
|
||||
. Verify that 224.1.1.1 is flooded to host:data2 and host:data3
|
||||
. Enable IPv4 multicast filter on host:data2, group 224.1.1.1
|
||||
. Verify that the group is still forwarded to host:data2
|
||||
. Verify that the group is no longer forwarded to host:data3
|
||||
. Start MAC multicast sender on host:data1, group 01:00:00:01:02:03
|
||||
. Verify MAC multicast 01:00:00:01:02:03 is flooded to host:data2 and host:data3
|
||||
. Enable MAC multicast filter on host:data2, group 01:00:00:01:02:03
|
||||
. Verify that the MAC group is still forwarded to host:data2
|
||||
. Verify that the MAC group is no longer forwarded to host:data3
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
static_multicast_filters.adoc
|
||||
@@ -0,0 +1,49 @@
|
||||
=== Static multicast filters
|
||||
==== Description
|
||||
Verify that static multicast filters work (remember that snooping needs to
|
||||
enabled when using static multicast filters)
|
||||
|
||||
....
|
||||
.1
|
||||
.---------------------------.
|
||||
| DUT |
|
||||
'-data1-----data2-----data3-'
|
||||
| | |
|
||||
| | | 10.0.0.0/24
|
||||
| | |
|
||||
.-data1-. .-data2-. .-data3-.
|
||||
| msend | | mrecv | | !memb |
|
||||
'-------' '-------' '-------'
|
||||
.2 .3 .4
|
||||
HOST
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/static_multicast_filters/topology.svg[Static multicast filters topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::static_multicast_filters/topology.svg[Static multicast filters topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Static multicast filters topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure device without static filter
|
||||
. Start multicast sender on host:data1, group 224.1.1.1
|
||||
. Verify that 224.1.1.1 is flooded to host:data2 and host:data3
|
||||
. Enable IPv4 multicast filter on host:data2, group 224.1.1.1
|
||||
. Verify that the group is still forwarded to host:data2
|
||||
. Verify that the group is no longer forwarded to host:data3
|
||||
. Start MAC multicast sender on host:data1, group 01:00:00:01:02:03
|
||||
. Verify MAC multicast 01:00:00:01:02:03 is flooded to host:data2 and host:data3
|
||||
. Enable MAC multicast filter on host:data2, group 01:00:00:01:02:03
|
||||
. Verify that the MAC group is still forwarded to host:data2
|
||||
. Verify that the MAC group is no longer forwarded to host:data3
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
=== Verify that all interface types can be created
|
||||
==== Description
|
||||
This test verifies that all interface types can be created and also
|
||||
checks the configuration when applied sequentially. This method takes
|
||||
slightly longer than sending the entire configuration at once.
|
||||
|
||||
....
|
||||
|
||||
lo br-0 br-Q.40 br-D br-X
|
||||
| | | | |
|
||||
o o ethQ.10 br-Q veth0a.20 ethX.30
|
||||
\ / \ | |
|
||||
ethQ veth0b veth0a ethX
|
||||
`---------'
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/verify_all_interface_types/topology.svg[Verify that all interface types can be created topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::verify_all_interface_types/topology.svg[Verify that all interface types can be created topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Verify that all interface types can be created topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure an empty bridge br-0
|
||||
. Configure bridge br-X and associated interfaces
|
||||
. Configure VETH pair
|
||||
. Configure bridge br-D and associated interfaces
|
||||
. Configure br-Q and associated interfaces
|
||||
. Verify interface 'lo' is of type loopback
|
||||
. Verify interfaces 'ethX' and 'ethQ' are of type 'ethernet' (or etherlike if running Qemu)
|
||||
. Verify interfaces 'br-0', 'br-X', 'br-D' and 'br-Q' are of type 'bridge'
|
||||
. Verify interfaces 'veth0a' and 'veth0b' are of type 'veth'
|
||||
. Verify interfaces 'veth0a.20', 'ethQ.10', 'ethX.30', 'ethQ.10' and 'br-Q.40' are of type 'vlan'
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
verify_all_interface_types.adoc
|
||||
@@ -0,0 +1,44 @@
|
||||
=== Verify that all interface types can be created
|
||||
==== Description
|
||||
This test verifies that all interface types can be created and also
|
||||
checks the configuration when applied sequentially. This method takes
|
||||
slightly longer than sending the entire configuration at once.
|
||||
|
||||
....
|
||||
|
||||
lo br-0 br-Q.40 br-D br-X
|
||||
| | | | |
|
||||
o o ethQ.10 br-Q veth0a.20 ethX.30
|
||||
\ / \ | |
|
||||
ethQ veth0b veth0a ethX
|
||||
`---------'
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/verify_all_interface_types/topology.svg[Verify that all interface types can be created topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::verify_all_interface_types/topology.svg[Verify that all interface types can be created topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Verify that all interface types can be created topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Configure an empty bridge br-0
|
||||
. Configure bridge br-X and associated interfaces
|
||||
. Configure VETH pair
|
||||
. Configure bridge br-D and associated interfaces
|
||||
. Configure br-Q and associated interfaces
|
||||
. Verify interface 'lo' is of type loopback
|
||||
. Verify interfaces 'ethX' and 'ethQ' are of type 'ethernet' (or etherlike if running Qemu)
|
||||
. Verify interfaces 'br-0', 'br-X', 'br-D' and 'br-Q' are of type 'bridge'
|
||||
. Verify interfaces 'veth0a' and 'veth0b' are of type 'veth'
|
||||
. Verify interfaces 'veth0a.20', 'ethQ.10', 'ethX.30', 'ethQ.10' and 'br-Q.40' are of type 'vlan'
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
=== Verify that VETH pairs can be deleted
|
||||
==== Description
|
||||
```
|
||||
veth0b veth0a data1 data2
|
||||
`---------'
|
||||
```
|
||||
|
||||
Each test step to create, add address, or delete an interace is distinct
|
||||
from any other step. This to trigger a new configuration "generation".
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/veth_delete/topology.svg[Verify that VETH pairs can be deleted topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::veth_delete/topology.svg[Verify that VETH pairs can be deleted topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Verify that VETH pairs can be deleted topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Create VETH pair
|
||||
. Verify interfaces 'veth0a' and 'veth0b' exist
|
||||
. Set IP address on target:data1 (dummy op)
|
||||
. Set IP address on target:data2 (dummy op)
|
||||
. Reset configuration
|
||||
. Verify target:data1 and target:data2 still exist
|
||||
. Verify VETH pair have been removed
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
veth_delete.adoc
|
||||
@@ -0,0 +1,35 @@
|
||||
=== Verify that VETH pairs can be deleted
|
||||
==== Description
|
||||
```
|
||||
veth0b veth0a data1 data2
|
||||
`---------'
|
||||
```
|
||||
|
||||
Each test step to create, add address, or delete an interace is distinct
|
||||
from any other step. This to trigger a new configuration "generation".
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/veth_delete/topology.svg[Verify that VETH pairs can be deleted topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::veth_delete/topology.svg[Verify that VETH pairs can be deleted topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[Verify that VETH pairs can be deleted topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Create VETH pair
|
||||
. Verify interfaces 'veth0a' and 'veth0b' exist
|
||||
. Set IP address on target:data1 (dummy op)
|
||||
. Set IP address on target:data2 (dummy op)
|
||||
. Reset configuration
|
||||
. Verify target:data1 and target:data2 still exist
|
||||
. Verify VETH pair have been removed
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
=== VLAN Interface Termination
|
||||
==== Description
|
||||
Verify that VLANs stacked on top of an interfaces that are also
|
||||
attached to a VLAN filtering bridge are always locally terminated.
|
||||
|
||||
....
|
||||
.---------------------------.
|
||||
| target |
|
||||
| |
|
||||
| data0.10 br0 data1.10 |
|
||||
| \ / \ / |
|
||||
'------data0-----data1------'
|
||||
| |
|
||||
| |
|
||||
.------data0-----data1------.
|
||||
| / : \ |
|
||||
| data0.10 : data1.10 |
|
||||
| : |
|
||||
| host |
|
||||
| : |
|
||||
'---------------------------'
|
||||
....
|
||||
|
||||
In this setup, even though VLAN 10 is allowed to ingress and egress on
|
||||
both `data0` and `data1`, _bridging_ of packets from one to the other
|
||||
must _not_ be allowed.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/vlan_iface_termination/topology.svg[VLAN Interface Termination topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::vlan_iface_termination/topology.svg[VLAN Interface Termination topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[VLAN Interface Termination topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target
|
||||
. Configure bridge and VLAN interfaces on target
|
||||
. Configure IP addresses and VLAN interfaces on host
|
||||
. Verify that host:data0 reaches host:data1 with untagged packets
|
||||
. Verify that traffic on VLAN 10 from host:data0 does not reach host:data1
|
||||
. Verify that host:data0 can reach target on VLAN 10
|
||||
. Verify that host:data1 can reach target on VLAN 10
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
vlan_iface_termination.adoc
|
||||
@@ -0,0 +1,51 @@
|
||||
=== VLAN Interface Termination
|
||||
==== Description
|
||||
Verify that VLANs stacked on top of an interfaces that are also
|
||||
attached to a VLAN filtering bridge are always locally terminated.
|
||||
|
||||
....
|
||||
.---------------------------.
|
||||
| target |
|
||||
| |
|
||||
| data0.10 br0 data1.10 |
|
||||
| \ / \ / |
|
||||
'------data0-----data1------'
|
||||
| |
|
||||
| |
|
||||
.------data0-----data1------.
|
||||
| / : \ |
|
||||
| data0.10 : data1.10 |
|
||||
| : |
|
||||
| host |
|
||||
| : |
|
||||
'---------------------------'
|
||||
....
|
||||
|
||||
In this setup, even though VLAN 10 is allowed to ingress and egress on
|
||||
both `data0` and `data1`, _bridging_ of packets from one to the other
|
||||
must _not_ be allowed.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/vlan_iface_termination/topology.svg[VLAN Interface Termination topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::vlan_iface_termination/topology.svg[VLAN Interface Termination topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[VLAN Interface Termination topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target
|
||||
. Configure bridge and VLAN interfaces on target
|
||||
. Configure IP addresses and VLAN interfaces on host
|
||||
. Verify that host:data0 reaches host:data1 with untagged packets
|
||||
. Verify that traffic on VLAN 10 from host:data0 does not reach host:data1
|
||||
. Verify that host:data0 can reach target on VLAN 10
|
||||
. Verify that host:data1 can reach target on VLAN 10
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
=== VLAN ping connectivity
|
||||
==== Description
|
||||
Very basic test if the VLAN interface configuration works.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/vlan_ping/topology.svg[VLAN ping connectivity topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::vlan_ping/topology.svg[VLAN ping connectivity topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[VLAN ping connectivity topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Set up VLAN interface on host:data with IP 10.0.0.1
|
||||
. Configure VLAN 10 interface on target:data with IP 10.0.0.2
|
||||
. Wait for links to come up
|
||||
. Verify that host:data can reach 10.0.0.2
|
||||
. Remove VLAN interface from target:data
|
||||
. Verify that host:data can no longer reach 10.0.0.2
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
vlan_ping.adoc
|
||||
@@ -0,0 +1,28 @@
|
||||
=== VLAN ping connectivity
|
||||
==== Description
|
||||
Very basic test if the VLAN interface configuration works.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/vlan_ping/topology.svg[VLAN ping connectivity topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::vlan_ping/topology.svg[VLAN ping connectivity topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[VLAN ping connectivity topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Set up VLAN interface on host:data with IP 10.0.0.1
|
||||
. Configure VLAN 10 interface on target:data with IP 10.0.0.2
|
||||
. Wait for links to come up
|
||||
. Verify that host:data can reach 10.0.0.2
|
||||
. Remove VLAN interface from target:data
|
||||
. Verify that host:data can no longer reach 10.0.0.2
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
=== VLAN Interface Ingress/Egress QoS
|
||||
==== Description
|
||||
Inject different packets from the host and verify that the VLAN priority
|
||||
is handled correctly for traffic ingressing and egressing a VLAN interface.
|
||||
|
||||
The test verifies that ingress PCP priority is mapped correctly to internal
|
||||
priority ('from pcp' or static '0..7'), and that internal priority is mapped
|
||||
correctly to PCP on egress ('from internal priority' or static '0..7').
|
||||
|
||||
{ "id": 1, "pcp": 0, "ingress": 0, "egress": 0, "expect": 0 },
|
||||
{ "id": 2, "pcp": 0, "ingress": 0, "egress": 1, "expect": 1 },
|
||||
{ "id": 3, "pcp": 0, "ingress": 3, "egress": 0, "expect": 0 },
|
||||
{ "id": 4, "pcp": 0, "ingress": 4, "egress": "from-priority", "expect": 4 },
|
||||
{ "id": 5, "pcp": 5, "ingress": "from-pcp", "egress": "from-priority", "expect": 5 },
|
||||
{ "id": 6, "pcp": 6, "ingress": "from-pcp", "egress": "from-priority", "expect": 6 },
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/vlan_qos/topology.svg[VLAN Interface Ingress/Egress QoS topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::vlan_qos/topology.svg[VLAN Interface Ingress/Egress QoS topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[VLAN Interface Ingress/Egress QoS topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Apply initial config without priority mapping
|
||||
. Setup host VLANs
|
||||
. Verify that packet with id=1 egressed with pcp=0
|
||||
. Verify that packet with id=2 egressed with pcp=1
|
||||
. Verify that packet with id=3 egressed with pcp=0
|
||||
. Verify that packet with id=4 egressed with pcp=4
|
||||
. Verify that packet with id=5 egressed with pcp=5
|
||||
. Verify that packet with id=6 egressed with pcp=6
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
vlan_qos.adoc
|
||||
@@ -0,0 +1,42 @@
|
||||
=== VLAN Interface Ingress/Egress QoS
|
||||
==== Description
|
||||
Inject different packets from the host and verify that the VLAN priority
|
||||
is handled correctly for traffic ingressing and egressing a VLAN interface.
|
||||
|
||||
The test verifies that ingress PCP priority is mapped correctly to internal
|
||||
priority ('from pcp' or static '0..7'), and that internal priority is mapped
|
||||
correctly to PCP on egress ('from internal priority' or static '0..7').
|
||||
|
||||
{ "id": 1, "pcp": 0, "ingress": 0, "egress": 0, "expect": 0 },
|
||||
{ "id": 2, "pcp": 0, "ingress": 0, "egress": 1, "expect": 1 },
|
||||
{ "id": 3, "pcp": 0, "ingress": 3, "egress": 0, "expect": 0 },
|
||||
{ "id": 4, "pcp": 0, "ingress": 4, "egress": "from-priority", "expect": 4 },
|
||||
{ "id": 5, "pcp": 5, "ingress": "from-pcp", "egress": "from-priority", "expect": 5 },
|
||||
{ "id": 6, "pcp": 6, "ingress": "from-pcp", "egress": "from-priority", "expect": 6 },
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_interfaces/vlan_qos/topology.svg[VLAN Interface Ingress/Egress QoS topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::vlan_qos/topology.svg[VLAN Interface Ingress/Egress QoS topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[VLAN Interface Ingress/Egress QoS topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUT
|
||||
. Apply initial config without priority mapping
|
||||
. Setup host VLANs
|
||||
. Verify that packet with id=1 egressed with pcp=0
|
||||
. Verify that packet with id=2 egressed with pcp=1
|
||||
. Verify that packet with id=3 egressed with pcp=0
|
||||
. Verify that packet with id=4 egressed with pcp=4
|
||||
. Verify that packet with id=5 egressed with pcp=5
|
||||
. Verify that packet with id=6 egressed with pcp=6
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
=== OSPF Basic
|
||||
==== Description
|
||||
Very basic OSPF test just test that OSPF sends HELLO packets between the DUTs
|
||||
and that they exchange routes, ending with a simple connectivity check.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_routing/ospf_basic/topology.svg[OSPF Basic topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ospf_basic/topology.svg[OSPF Basic topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[OSPF Basic topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure targets
|
||||
. Wait for OSPF routes
|
||||
. Test connectivity from PC:data to 192.168.200.1
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ospf_basic.adoc
|
||||
@@ -0,0 +1,26 @@
|
||||
=== OSPF Basic
|
||||
==== Description
|
||||
Very basic OSPF test just test that OSPF sends HELLO packets between the DUTs
|
||||
and that they exchange routes, ending with a simple connectivity check.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_routing/ospf_basic/topology.svg[OSPF Basic topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ospf_basic/topology.svg[OSPF Basic topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[OSPF Basic topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure targets
|
||||
. Wait for OSPF routes
|
||||
. Test connectivity from PC:data to 192.168.200.1
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
=== OSPF BFD
|
||||
==== Description
|
||||
Verify that a router running OSPF, with Bidirectional Forwarding
|
||||
Detection (BFD) enabled, will detect link faults even when the
|
||||
physical layer is still operational.
|
||||
|
||||
This can typically happen when one logical link, from OSPF's
|
||||
perspective, is made up of multiple physical links containing media
|
||||
converters without link fault forwarding.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_routing/ospf_bfd/topology.svg[OSPF BFD topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ospf_bfd/topology.svg[OSPF BFD topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[OSPF BFD topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Setup TPMR between R1fast and R2fast
|
||||
. Configure R1 and R2
|
||||
. Setup IP addresses and default routes on h1 and h2
|
||||
. Wait for R1 and R2 to peer
|
||||
. Verify connectivity from PC:src to PC:dst via fast link
|
||||
. Disable forwarding between R1fast and R2fast to trigger fail-over
|
||||
. Verify connectivity from PC:src to PC:dst via slow link
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ospf_bfd.adoc
|
||||
@@ -0,0 +1,35 @@
|
||||
=== OSPF BFD
|
||||
==== Description
|
||||
Verify that a router running OSPF, with Bidirectional Forwarding
|
||||
Detection (BFD) enabled, will detect link faults even when the
|
||||
physical layer is still operational.
|
||||
|
||||
This can typically happen when one logical link, from OSPF's
|
||||
perspective, is made up of multiple physical links containing media
|
||||
converters without link fault forwarding.
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_routing/ospf_bfd/topology.svg[OSPF BFD topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ospf_bfd/topology.svg[OSPF BFD topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[OSPF BFD topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Setup TPMR between R1fast and R2fast
|
||||
. Configure R1 and R2
|
||||
. Setup IP addresses and default routes on h1 and h2
|
||||
. Wait for R1 and R2 to peer
|
||||
. Verify connectivity from PC:src to PC:dst via fast link
|
||||
. Disable forwarding between R1fast and R2fast to trigger fail-over
|
||||
. Verify connectivity from PC:src to PC:dst via slow link
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
=== OSPF Default route advertise
|
||||
==== Description
|
||||
Verify _default-route-advertising_ in OSPF, sometimes called 'redistribute origin'. Verify both
|
||||
always (regardless if a local default route exist or not) and only redistribute
|
||||
when local default route exist.
|
||||
|
||||
The test is performed by setting a default route on R1 to 192.168.10.2, and setting
|
||||
_default-route-advertising_ in OSPF, this will result that R2 will see a default route.
|
||||
|
||||
When set interface R1:data down, OSPF will no longer redistribute default route to R2,
|
||||
unless _always_ is set for _default-route-advertising_.
|
||||
....
|
||||
+-------------------+ Area 0 +------------------+
|
||||
| R1 |.1 192.168.50.0/24 .2| R2 |
|
||||
| 192.169.100.1/32 +------------------------+ 192.168.200.1/32|
|
||||
| 10.10.10.10/32 |R1:link R2:link | |
|
||||
+--------------+----+ +---+--------------+
|
||||
R1:data |.1 R2:data |.1
|
||||
| |
|
||||
| 192.168.10.0/24 | 192.168.20.0/24
|
||||
| |
|
||||
host:data1 |.2 host:data2 |.2
|
||||
+-----+---------------------------------+-------+
|
||||
| |
|
||||
| host |
|
||||
| |
|
||||
+-----------------------------------------------+
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_routing/ospf_default_route_advertise/topology.svg[OSPF Default route advertise topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ospf_default_route_advertise/topology.svg[OSPF Default route advertise topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[OSPF Default route advertise topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure targets
|
||||
. Verify R2 has a default route and 192.168.100.1/32 from OSPF
|
||||
. Verify connectivity from PC:data2 to 10.10.10.10
|
||||
. Disable link PC:data1 <--> R1:data (take default gateway down)
|
||||
. Verify R2 does not have a default route but a 192.168.100.1/32 from OSPF
|
||||
. Verify no connectivity from PC:data2 to 10.10.10.10
|
||||
. Enable redistribute default route 'always' on R1
|
||||
. Wait for all neighbors to peer
|
||||
. Verify R2 has a default route and 192.168.100.1/32 from OSPF
|
||||
. Verify connectivity from PC:data2 to 10.10.10.10
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ospf_default_route_advertise.adoc
|
||||
@@ -0,0 +1,57 @@
|
||||
=== OSPF Default route advertise
|
||||
==== Description
|
||||
Verify _default-route-advertising_ in OSPF, sometimes called 'redistribute origin'. Verify both
|
||||
always (regardless if a local default route exist or not) and only redistribute
|
||||
when local default route exist.
|
||||
|
||||
The test is performed by setting a default route on R1 to 192.168.10.2, and setting
|
||||
_default-route-advertising_ in OSPF, this will result that R2 will see a default route.
|
||||
|
||||
When set interface R1:data down, OSPF will no longer redistribute default route to R2,
|
||||
unless _always_ is set for _default-route-advertising_.
|
||||
....
|
||||
+-------------------+ Area 0 +------------------+
|
||||
| R1 |.1 192.168.50.0/24 .2| R2 |
|
||||
| 192.169.100.1/32 +------------------------+ 192.168.200.1/32|
|
||||
| 10.10.10.10/32 |R1:link R2:link | |
|
||||
+--------------+----+ +---+--------------+
|
||||
R1:data |.1 R2:data |.1
|
||||
| |
|
||||
| 192.168.10.0/24 | 192.168.20.0/24
|
||||
| |
|
||||
host:data1 |.2 host:data2 |.2
|
||||
+-----+---------------------------------+-------+
|
||||
| |
|
||||
| host |
|
||||
| |
|
||||
+-----------------------------------------------+
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_routing/ospf_default_route_advertise/topology.svg[OSPF Default route advertise topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ospf_default_route_advertise/topology.svg[OSPF Default route advertise topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[OSPF Default route advertise topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure targets
|
||||
. Verify R2 has a default route and 192.168.100.1/32 from OSPF
|
||||
. Verify connectivity from PC:data2 to 10.10.10.10
|
||||
. Disable link PC:data1 <--> R1:data (take default gateway down)
|
||||
. Verify R2 does not have a default route but a 192.168.100.1/32 from OSPF
|
||||
. Verify no connectivity from PC:data2 to 10.10.10.10
|
||||
. Enable redistribute default route 'always' on R1
|
||||
. Wait for all neighbors to peer
|
||||
. Verify R2 has a default route and 192.168.100.1/32 from OSPF
|
||||
. Verify connectivity from PC:data2 to 10.10.10.10
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
=== OSPF with multiple areas
|
||||
==== Description
|
||||
This test evaluates various OSPF features across three areas (one NSSA area, with no summary)
|
||||
to ensure that route distribution is deterministic (based on cost). It also tests link
|
||||
failures using BFD, though BFD is not yet implemented in test framework (Infamy).
|
||||
|
||||
This test also verifies broadcast and point-to-point interface types on /30 network, and
|
||||
explicit router-id.
|
||||
|
||||
....
|
||||
+-------------+ +---------------+ +-------------+ +---------------+
|
||||
| R1 | | R2 | | R3 | | R4 |
|
||||
| 10.0.0.1/32 | | 10.0.0.2/32 | | 10.0.0.3/32 | | 10.0.0.4/32 |
|
||||
| (lo) | | 11.0.9.1/24 | | (lo) | | (lo) |
|
||||
+-------------+ | 11.0.10.1/24 | +-------------+ +---------------+
|
||||
| 11.0.11.1/24 |
|
||||
| 11.0.12.1/24 |
|
||||
| 11.0.13.1/24 |
|
||||
| 11.0.14.1/24 |
|
||||
| 11.0.15.1/24 |
|
||||
| (lo) |
|
||||
+---------------+
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_routing/ospf_multiarea/topology.svg[OSPF with multiple areas topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ospf_multiarea/topology.svg[OSPF with multiple areas topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[OSPF with multiple areas topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure targets
|
||||
. Wait for all neighbors to peer
|
||||
. Wait for routes from OSPF on all routers
|
||||
. Verify Area 0.0.0.1 on R3 is NSSA area
|
||||
. Verify R1:ring2 is of type point-to-point
|
||||
. Verify R4:ring1 is of type point-to-point
|
||||
. Verify on R3, there are no routes beyond 10.0.23.1, just a default route
|
||||
. Testing connectivity through NSSA area, from PC:data3 to 11.0.8.1
|
||||
. Verify that the route to 10.0.0.3 from PC:data4, go through 10.0.41.2
|
||||
. Break link R1:ring2 --- R4:ring1
|
||||
. Verify that the route to 10.0.0.3 from PC:data4, go through 10.0.24.1
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ospf_multiarea.adoc
|
||||
@@ -0,0 +1,53 @@
|
||||
=== OSPF with multiple areas
|
||||
==== Description
|
||||
This test evaluates various OSPF features across three areas (one NSSA area, with no summary)
|
||||
to ensure that route distribution is deterministic (based on cost). It also tests link
|
||||
failures using BFD, though BFD is not yet implemented in test framework (Infamy).
|
||||
|
||||
This test also verifies broadcast and point-to-point interface types on /30 network, and
|
||||
explicit router-id.
|
||||
|
||||
....
|
||||
+-------------+ +---------------+ +-------------+ +---------------+
|
||||
| R1 | | R2 | | R3 | | R4 |
|
||||
| 10.0.0.1/32 | | 10.0.0.2/32 | | 10.0.0.3/32 | | 10.0.0.4/32 |
|
||||
| (lo) | | 11.0.9.1/24 | | (lo) | | (lo) |
|
||||
+-------------+ | 11.0.10.1/24 | +-------------+ +---------------+
|
||||
| 11.0.11.1/24 |
|
||||
| 11.0.12.1/24 |
|
||||
| 11.0.13.1/24 |
|
||||
| 11.0.14.1/24 |
|
||||
| 11.0.15.1/24 |
|
||||
| (lo) |
|
||||
+---------------+
|
||||
....
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_routing/ospf_multiarea/topology.svg[OSPF with multiple areas topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ospf_multiarea/topology.svg[OSPF with multiple areas topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[OSPF with multiple areas topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure targets
|
||||
. Wait for all neighbors to peer
|
||||
. Wait for routes from OSPF on all routers
|
||||
. Verify Area 0.0.0.1 on R3 is NSSA area
|
||||
. Verify R1:ring2 is of type point-to-point
|
||||
. Verify R4:ring1 is of type point-to-point
|
||||
. Verify on R3, there are no routes beyond 10.0.23.1, just a default route
|
||||
. Testing connectivity through NSSA area, from PC:data3 to 11.0.8.1
|
||||
. Verify that the route to 10.0.0.3 from PC:data4, go through 10.0.41.2
|
||||
. Break link R1:ring2 --- R4:ring1
|
||||
. Verify that the route to 10.0.0.3 from PC:data4, go through 10.0.24.1
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
=== OSPF unnumbered interfaces
|
||||
==== Description
|
||||
This test that a configuration expecting unnumbered interfaces
|
||||
get that also in OSPF. Also verify that passive interface in
|
||||
the configuration gets activated in OSPF.
|
||||
|
||||
When this test pass, you can expect unnumbered interfaces, interface type
|
||||
configuration and passive to function
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_routing/ospf_unnumbered_interface/topology.svg[OSPF unnumbered interfaces topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ospf_unnumbered_interface/topology.svg[OSPF unnumbered interfaces topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[OSPF unnumbered interfaces topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure targets
|
||||
. Wait for OSPF routes
|
||||
. Verify interface type on R1:link and R2:link is point-to-point
|
||||
. Verify there are no OSPF HELLO packets on PC:data
|
||||
. Test connectivity from PC:data to 192.168.200.1
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ospf_unnumbered_interface.adoc
|
||||
@@ -0,0 +1,32 @@
|
||||
=== OSPF unnumbered interfaces
|
||||
==== Description
|
||||
This test that a configuration expecting unnumbered interfaces
|
||||
get that also in OSPF. Also verify that passive interface in
|
||||
the configuration gets activated in OSPF.
|
||||
|
||||
When this test pass, you can expect unnumbered interfaces, interface type
|
||||
configuration and passive to function
|
||||
|
||||
==== Topology
|
||||
ifdef::topdoc[]
|
||||
image::../../test/case/ietf_routing/ospf_unnumbered_interface/topology.svg[OSPF unnumbered interfaces topology]
|
||||
endif::topdoc[]
|
||||
ifndef::topdoc[]
|
||||
ifdef::testgroup[]
|
||||
image::ospf_unnumbered_interface/topology.svg[OSPF unnumbered interfaces topology]
|
||||
endif::testgroup[]
|
||||
ifndef::testgroup[]
|
||||
image::topology.svg[OSPF unnumbered interfaces topology]
|
||||
endif::testgroup[]
|
||||
endif::topdoc[]
|
||||
==== Test sequence
|
||||
. Set up topology and attach to target DUTs
|
||||
. Configure targets
|
||||
. Wait for OSPF routes
|
||||
. Verify interface type on R1:link and R2:link is point-to-point
|
||||
. Verify there are no OSPF HELLO packets on PC:data
|
||||
. Test connectivity from PC:data to 192.168.200.1
|
||||
|
||||
|
||||
<<<
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user