Merge pull request #884 from kernelkit/test-spec-ng

Test specification refactor
This commit is contained in:
Tobias Waldekranz
2025-01-11 23:40:06 +01:00
committed by GitHub
125 changed files with 2185 additions and 2090 deletions
+4 -1
View File
@@ -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
+1 -1
View File
@@ -2,5 +2,5 @@
- name: usb
case: usb/test.py
- name: usb two ports
- name: usb_two_ports
case: usb_two_ports/test.py
-40
View File
@@ -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
View File
@@ -0,0 +1 @@
usb.adoc
+40
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+21 -18
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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
<<<
+1
View File
@@ -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