diff --git a/autotest/units/001_one_port/071_route_directly_connected/001-expect.pcap b/autotest/units/001_one_port/071_route_directly_connected/001-expect.pcap new file mode 100644 index 00000000..ba0f9e8d Binary files /dev/null and b/autotest/units/001_one_port/071_route_directly_connected/001-expect.pcap differ diff --git a/autotest/units/001_one_port/071_route_directly_connected/001-send.pcap b/autotest/units/001_one_port/071_route_directly_connected/001-send.pcap new file mode 100644 index 00000000..f6614385 Binary files /dev/null and b/autotest/units/001_one_port/071_route_directly_connected/001-send.pcap differ diff --git a/autotest/units/001_one_port/071_route_directly_connected/002-expect.pcap b/autotest/units/001_one_port/071_route_directly_connected/002-expect.pcap new file mode 100644 index 00000000..b1918701 Binary files /dev/null and b/autotest/units/001_one_port/071_route_directly_connected/002-expect.pcap differ diff --git a/autotest/units/001_one_port/071_route_directly_connected/002-send.pcap b/autotest/units/001_one_port/071_route_directly_connected/002-send.pcap new file mode 100644 index 00000000..5b47b624 Binary files /dev/null and b/autotest/units/001_one_port/071_route_directly_connected/002-send.pcap differ diff --git a/autotest/units/001_one_port/071_route_directly_connected/003-expect.pcap b/autotest/units/001_one_port/071_route_directly_connected/003-expect.pcap new file mode 100644 index 00000000..aed8593e Binary files /dev/null and b/autotest/units/001_one_port/071_route_directly_connected/003-expect.pcap differ diff --git a/autotest/units/001_one_port/071_route_directly_connected/003-send.pcap b/autotest/units/001_one_port/071_route_directly_connected/003-send.pcap new file mode 100644 index 00000000..3074e8af Binary files /dev/null and b/autotest/units/001_one_port/071_route_directly_connected/003-send.pcap differ diff --git a/autotest/units/001_one_port/071_route_directly_connected/004-expect.pcap b/autotest/units/001_one_port/071_route_directly_connected/004-expect.pcap new file mode 100644 index 00000000..0e51312a Binary files /dev/null and b/autotest/units/001_one_port/071_route_directly_connected/004-expect.pcap differ diff --git a/autotest/units/001_one_port/071_route_directly_connected/004-send.pcap b/autotest/units/001_one_port/071_route_directly_connected/004-send.pcap new file mode 100644 index 00000000..615b85df Binary files /dev/null and b/autotest/units/001_one_port/071_route_directly_connected/004-send.pcap differ diff --git a/autotest/units/001_one_port/071_route_directly_connected/autotest.yaml b/autotest/units/001_one_port/071_route_directly_connected/autotest.yaml new file mode 100644 index 00000000..94de4271 --- /dev/null +++ b/autotest/units/001_one_port/071_route_directly_connected/autotest.yaml @@ -0,0 +1,27 @@ +steps: +- cli: + - neighbor insert route0 kni0.100 10.10.0.2 00:00:ee:10:44:02 + - neighbor insert route0 kni0.100 10.10.0.250 00:00:ee:10:44:fa + - neighbor insert route0 kni0.100 2000:100::2 00:00:ee:10:66:02 + - neighbor insert route0 kni0.100 2000:100::fa 00:00:ee:10:66:fa + - neighbor insert route0 kni0.200 10.20.0.2 00:00:ee:20:44:02 + - neighbor insert route0 kni0.200 10.20.0.250 00:00:ee:20:44:fa + - neighbor insert route0 kni0.200 2000:200::2 00:00:ee:20:66:02 + - neighbor insert route0 kni0.200 2000:200::fa 00:00:ee:20:66:fa + - neighbor flush +- sendPackets: + - port: kni0 + send: 001-send.pcap + expect: 001-expect.pcap +- sendPackets: + - port: kni0 + send: 002-send.pcap + expect: 002-expect.pcap +- sendPackets: + - port: kni0 + send: 003-send.pcap + expect: 003-expect.pcap +- sendPackets: + - port: kni0 + send: 004-send.pcap + expect: 004-expect.pcap diff --git a/autotest/units/001_one_port/071_route_directly_connected/controlplane.conf b/autotest/units/001_one_port/071_route_directly_connected/controlplane.conf new file mode 100644 index 00000000..2f8ead3d --- /dev/null +++ b/autotest/units/001_one_port/071_route_directly_connected/controlplane.conf @@ -0,0 +1,43 @@ +{ + "modules": { + "lp0.100": { + "type": "logicalPort", + "physicalPort": "kni0", + "vlanId": "100", + "macAddress": "00:00:00:11:11:11", + "nextModule": "acl0" + }, + "lp0.200": { + "type": "logicalPort", + "physicalPort": "kni0", + "vlanId": "200", + "macAddress": "00:00:00:22:22:22", + "nextModule": "acl0" + }, + "acl0": { + "type": "acl", + "nextModules": [ + "route0" + ] + }, + "route0": { + "type": "route", + "interfaces": { + "kni0.100": { + "ipAddresses": [ + "10.10.0.1/24", + "2000:100::1/96" + ], + "nextModule": "lp0.100" + }, + "kni0.200": { + "ipAddresses": [ + "10.20.0.1/24", + "2000:200::1/96" + ], + "nextModule": "lp0.200" + } + } + } + } +} diff --git a/autotest/units/001_one_port/071_route_directly_connected/gen.py b/autotest/units/001_one_port/071_route_directly_connected/gen.py new file mode 100755 index 00000000..dad6d661 --- /dev/null +++ b/autotest/units/001_one_port/071_route_directly_connected/gen.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from scapy.all import * +from scapy.contrib.mpls import MPLS + + +def write_pcap(filename, *packetsList): + if len(packetsList) == 0: + PcapWriter(filename)._write_header(Ether()) + return + + PcapWriter(filename) + + for packets in packetsList: + if type(packets) == list: + for packet in packets: + packet.time = 0 + wrpcap(filename, [p for p in packet], append=True) + else: + packets.time = 0 + wrpcap(filename, [p for p in packets], append=True) + + +# 10.10.0.0/24 -> kni0.100 +write_pcap("001-send.pcap", + Ether(dst="00:00:00:11:11:11", src="00:00:DE:AD:00:00")/Dot1Q(vlan=100)/IP(dst="10.10.0.2", src="222.222.222.222")/UDP(), + Ether(dst="00:00:00:11:11:11", src="00:00:DE:AD:00:00")/Dot1Q(vlan=100)/IP(dst="10.10.0.111", src="222.222.222.222")/UDP(), # neighbor mac invalid + Ether(dst="00:00:00:11:11:11", src="00:00:DE:AD:00:00")/Dot1Q(vlan=100)/IP(dst="10.10.0.250", src="222.222.222.222")/UDP(), + Ether(dst="00:00:00:22:22:22", src="00:00:DE:AD:00:00")/Dot1Q(vlan=200)/IP(dst="10.10.0.2", src="222.222.222.222")/UDP(), + Ether(dst="00:00:00:22:22:22", src="00:00:DE:AD:00:00")/Dot1Q(vlan=200)/IP(dst="10.10.0.111", src="222.222.222.222")/UDP(), # neighbor mac invalid + Ether(dst="00:00:00:22:22:22", src="00:00:DE:AD:00:00")/Dot1Q(vlan=200)/IP(dst="10.10.0.250", src="222.222.222.222")/UDP()) + +write_pcap("001-expect.pcap", + Ether(dst="00:00:EE:10:44:02", src="00:00:00:11:11:11")/Dot1Q(vlan=100)/IP(dst="10.10.0.2", src="222.222.222.222", ttl=63)/UDP(), + Ether(dst="00:00:EE:10:44:FA", src="00:00:00:11:11:11")/Dot1Q(vlan=100)/IP(dst="10.10.0.250", src="222.222.222.222", ttl=63)/UDP(), + Ether(dst="00:00:EE:10:44:02", src="00:00:00:11:11:11")/Dot1Q(vlan=100)/IP(dst="10.10.0.2", src="222.222.222.222", ttl=63)/UDP(), + Ether(dst="00:00:EE:10:44:FA", src="00:00:00:11:11:11")/Dot1Q(vlan=100)/IP(dst="10.10.0.250", src="222.222.222.222", ttl=63)/UDP()) + + +# 2000:100::/96 -> kni0.100 +write_pcap("002-send.pcap", + Ether(dst="00:00:00:11:11:11", src="00:00:DE:AD:00:00")/Dot1Q(vlan=100)/IPv6(dst="2000:100::2", src="2222::2222")/UDP(), + Ether(dst="00:00:00:11:11:11", src="00:00:DE:AD:00:00")/Dot1Q(vlan=100)/IPv6(dst="2000:100::6F", src="2222::2222")/UDP(), # neighbor mac invalid + Ether(dst="00:00:00:11:11:11", src="00:00:DE:AD:00:00")/Dot1Q(vlan=100)/IPv6(dst="2000:100::FA", src="2222::2222")/UDP(), + Ether(dst="00:00:00:22:22:22", src="00:00:DE:AD:00:00")/Dot1Q(vlan=200)/IPv6(dst="2000:100::2", src="2222::2222")/UDP(), + Ether(dst="00:00:00:22:22:22", src="00:00:DE:AD:00:00")/Dot1Q(vlan=200)/IPv6(dst="2000:100::6F", src="2222::2222")/UDP(), # neighbor mac invalid + Ether(dst="00:00:00:22:22:22", src="00:00:DE:AD:00:00")/Dot1Q(vlan=200)/IPv6(dst="2000:100::FA", src="2222::2222")/UDP()) + +write_pcap("002-expect.pcap", + Ether(dst="00:00:EE:10:66:02", src="00:00:00:11:11:11")/Dot1Q(vlan=100)/IPv6(dst="2000:100::2", src="2222::2222", hlim=63)/UDP(), + Ether(dst="00:00:EE:10:66:FA", src="00:00:00:11:11:11")/Dot1Q(vlan=100)/IPv6(dst="2000:100::FA", src="2222::2222", hlim=63)/UDP(), + Ether(dst="00:00:EE:10:66:02", src="00:00:00:11:11:11")/Dot1Q(vlan=100)/IPv6(dst="2000:100::2", src="2222::2222", hlim=63)/UDP(), + Ether(dst="00:00:EE:10:66:FA", src="00:00:00:11:11:11")/Dot1Q(vlan=100)/IPv6(dst="2000:100::FA", src="2222::2222", hlim=63)/UDP()) + + +# 10.20.0.0/24 -> kni0.200 +write_pcap("003-send.pcap", + Ether(dst="00:00:00:11:11:11", src="00:00:DE:AD:00:00")/Dot1Q(vlan=100)/IP(dst="10.20.0.2", src="222.222.222.222")/UDP(), + Ether(dst="00:00:00:11:11:11", src="00:00:DE:AD:00:00")/Dot1Q(vlan=100)/IP(dst="10.20.0.111", src="222.222.222.222")/UDP(), # neighbor mac invalid + Ether(dst="00:00:00:11:11:11", src="00:00:DE:AD:00:00")/Dot1Q(vlan=100)/IP(dst="10.20.0.250", src="222.222.222.222")/UDP(), + Ether(dst="00:00:00:22:22:22", src="00:00:DE:AD:00:00")/Dot1Q(vlan=200)/IP(dst="10.20.0.2", src="222.222.222.222")/UDP(), + Ether(dst="00:00:00:22:22:22", src="00:00:DE:AD:00:00")/Dot1Q(vlan=200)/IP(dst="10.20.0.111", src="222.222.222.222")/UDP(), # neighbor mac invalid + Ether(dst="00:00:00:22:22:22", src="00:00:DE:AD:00:00")/Dot1Q(vlan=200)/IP(dst="10.20.0.250", src="222.222.222.222")/UDP()) + +write_pcap("003-expect.pcap", + Ether(dst="00:00:EE:20:44:02", src="00:00:00:22:22:22")/Dot1Q(vlan=200)/IP(dst="10.20.0.2", src="222.222.222.222", ttl=63)/UDP(), + Ether(dst="00:00:EE:20:44:FA", src="00:00:00:22:22:22")/Dot1Q(vlan=200)/IP(dst="10.20.0.250", src="222.222.222.222", ttl=63)/UDP(), + Ether(dst="00:00:EE:20:44:02", src="00:00:00:22:22:22")/Dot1Q(vlan=200)/IP(dst="10.20.0.2", src="222.222.222.222", ttl=63)/UDP(), + Ether(dst="00:00:EE:20:44:FA", src="00:00:00:22:22:22")/Dot1Q(vlan=200)/IP(dst="10.20.0.250", src="222.222.222.222", ttl=63)/UDP()) + + +# 2000:200::/96 -> kni0.200 +write_pcap("004-send.pcap", + Ether(dst="00:00:00:11:11:11", src="00:00:DE:AD:00:00")/Dot1Q(vlan=100)/IPv6(dst="2000:200::2", src="2222::2222")/UDP(), + Ether(dst="00:00:00:11:11:11", src="00:00:DE:AD:00:00")/Dot1Q(vlan=100)/IPv6(dst="2000:200::6F", src="2222::2222")/UDP(), # neighbor mac invalid + Ether(dst="00:00:00:11:11:11", src="00:00:DE:AD:00:00")/Dot1Q(vlan=100)/IPv6(dst="2000:200::FA", src="2222::2222")/UDP(), + Ether(dst="00:00:00:22:22:22", src="00:00:DE:AD:00:00")/Dot1Q(vlan=200)/IPv6(dst="2000:200::2", src="2222::2222")/UDP(), + Ether(dst="00:00:00:22:22:22", src="00:00:DE:AD:00:00")/Dot1Q(vlan=200)/IPv6(dst="2000:200::6F", src="2222::2222")/UDP(), # neighbor mac invalid + Ether(dst="00:00:00:22:22:22", src="00:00:DE:AD:00:00")/Dot1Q(vlan=200)/IPv6(dst="2000:200::FA", src="2222::2222")/UDP()) + +write_pcap("004-expect.pcap", + Ether(dst="00:00:EE:20:66:02", src="00:00:00:22:22:22")/Dot1Q(vlan=200)/IPv6(dst="2000:200::2", src="2222::2222", hlim=63)/UDP(), + Ether(dst="00:00:EE:20:66:FA", src="00:00:00:22:22:22")/Dot1Q(vlan=200)/IPv6(dst="2000:200::FA", src="2222::2222", hlim=63)/UDP(), + Ether(dst="00:00:EE:20:66:02", src="00:00:00:22:22:22")/Dot1Q(vlan=200)/IPv6(dst="2000:200::2", src="2222::2222", hlim=63)/UDP(), + Ether(dst="00:00:EE:20:66:FA", src="00:00:00:22:22:22")/Dot1Q(vlan=200)/IPv6(dst="2000:200::FA", src="2222::2222", hlim=63)/UDP())