Files
Joachim Wiberg 1bbd80d8c7 test: drop leading ietf/infix prefix from directories
Let's drop the leading IETF or Infix prefixes from tests.  Initially the
idea was to mimnic the YANG models, but it's difficult to navigate and
does not provide any real benefit to developers or end-users.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-11-20 20:23:23 +01:00

210 lines
7.4 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Basic tunnel connectivity test
Set up a tunnel between two DUTs, host connected to the first DUT. Enable
IP forwarding on first DUT's interface to host and the tunnel interface to
the second DUT. On host, add route to IP network of second DUT and verify
connectivity with the second DUT through the tunnel.
- Tunnel types: GRE, GRETAP, and VxLAN
- Connectivity: IPv4 and IPv6
"""
import infamy
class ArgumentParser(infamy.ArgumentParser):
def __init__(self):
super().__init__()
self.add_argument("--tunnel")
with infamy.Test() as test:
with test.step("Set up topology and attach to target DUTs"):
arg = ArgumentParser()
env = infamy.Env(args=arg)
tunnel = env.args.tunnel
left = env.attach("left", "mgmt")
right = env.attach("right", "mgmt")
with test.step("Configure DUTs with tunnel {tunnel}"):
container_left4 = {
"local": "192.168.50.1",
"remote": "192.168.50.2"
}
container_left6 = {
"local": "2001:db8:3c4d:50::1",
"remote": "2001:db8:3c4d:50::2",
}
container_right4 = {
"local": "192.168.50.2",
"remote": "192.168.50.1"
}
container_right6 = {
"local": "2001:db8:3c4d:50::2",
"remote": "2001:db8:3c4d:50::1",
}
if tunnel in ("gretap", "gre"):
CONTAINER_TYPE = "gre"
else:
CONTAINER_TYPE = tunnel
container_left4.update({
"vni": 4
})
container_left6.update({
"vni": 6
})
container_right4.update({
"vni": 4
})
container_right6.update({
"vni": 6
})
left.put_config_dicts({"ietf-interfaces": {
"interfaces": {
"interface": [{
"name": left["link"],
"ipv4": {
"address": [{
"ip": "192.168.50.1",
"prefix-length": 24
}],
"forwarding": True
},
"ipv6": {
"address": [{
"ip": "2001:db8:3c4d:50::1",
"prefix-length": 64
}],
"forwarding": True
}
}, {
"name": left["data"],
"ipv4": {
"address": [{
"ip": "192.168.10.1",
"prefix-length": 24
}],
"forwarding": True
},
"ipv6": {
"address": [{
"ip": "2001:db8:3c4d:10::1",
"prefix-length": 64
}],
"forwarding": True
}
}, {
"name": f"{tunnel}4",
"type": f"infix-if-type:{tunnel}",
"ipv4": {
"address": [{
"ip": "192.168.30.1",
"prefix-length": 24
}],
"forwarding": True
},
CONTAINER_TYPE: container_left4
}, {
"name": f"{tunnel}6",
"type": f"infix-if-type:{tunnel}",
"ipv6": {
"address": [{
"ip": "2001:db8:3c4d:30::1",
"prefix-length": 64
}]
},
CONTAINER_TYPE: container_left6
}]
}
}})
right.put_config_dicts({
"ietf-interfaces": {
"interfaces": {
"interface": [{
"name": right["link"],
"ipv4": {
"address": [{
"ip": "192.168.50.2",
"prefix-length": 24
}],
"forwarding": True
},
"ipv6": {
"address": [{
"ip": "2001:db8:3c4d:50::2",
"prefix-length": 64
}]
}
}, {
"name": f"{tunnel}4",
"type": f"infix-if-type:{tunnel}",
"ipv4": {
"address": [{
"ip": "192.168.30.2",
"prefix-length": 24
}],
"forwarding": True
},
CONTAINER_TYPE: container_right4
}, {
"name": f"{tunnel}",
"type": f"infix-if-type:{tunnel}",
"ipv6": {
"address": [{
"ip": "2001:db8:3c4d:30::2",
"prefix-length": 64
}]
},
CONTAINER_TYPE: container_right6
}]
}
},
"ietf-routing": {
"routing": {
"control-plane-protocols": {
"control-plane-protocol": [{
"type": "infix-routing:static",
"name": "default",
"static-routes": {
"ipv4": {
"route": [{
"destination-prefix": "192.168.10.0/24",
"next-hop": {
"next-hop-address": "192.168.30.1"
}
}]
},
"ipv6": {
"route": [{
"destination-prefix": "2001:db8:3c4d:10::/64",
"next-hop": {
"next-hop-address": "2001:db8:3c4d:30::1"
}
}]
}
}
}]
}
}
}
})
_, hport = env.ltop.xlate("host", "data")
with test.step("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("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")
ns0.must_reach("2001:db8:3c4d:30::2")
test.succeed()