netinet tests: test carp source MAC address

Ensure that (multicast) CARP packets are sent with the expected source
MAC address.

Reviewed by:	melifaro
Sponsored by:	Rubicon Communications, LLC ("Netgate")
Differential Revision:	https://reviews.freebsd.org/D39454
This commit is contained in:
Kristof Provost 2023-04-06 18:10:27 +02:00
parent 20be1b4fc4
commit 5e2e3615d9
2 changed files with 55 additions and 0 deletions

View File

@ -24,6 +24,8 @@ ATF_TESTS_SH= arp \
output \
redirect
ATF_TESTS_PYTEST+= carp.py
TEST_METADATA.divert+= required_programs="python"
TEST_METADATA.forward+= required_programs="python"
TEST_METADATA.output+= required_programs="python"

53
tests/sys/netinet/carp.py Normal file
View File

@ -0,0 +1,53 @@
import pytest
from atf_python.sys.net.tools import ToolsHelper
from atf_python.sys.net.vnet import VnetTestTemplate
sc = None
def filter_f(x):
ip = x.getlayer(sc.IP)
if not ip:
return False
return ip.proto == 112
class TestCarp(VnetTestTemplate):
REQUIRED_MODULES = ["carp"]
TOPOLOGY = {
"vnet1": {"ifaces": ["if1"]},
"if1": {"prefixes4": [("192.0.2.1/24", "192.0.2.2/24")]},
}
def setup_method(self, method):
global sc
if sc is None:
import scapy.all as _sc
sc = _sc
super().setup_method(method)
@classmethod
def check_carp_src_mac(self, pkts):
for p in pkts:
if not filter_f(p):
continue
print("Packet src mac {}".format(p.src))
if p.src != "00:00:5e:00:01:01":
raise
def test_source_mac(self):
"Test carp packets source address"
if1 = self.vnet.iface_alias_map["if1"]
ToolsHelper.print_output(
"ifconfig {} add vhid 1 192.0.2.203/24".format(if1.name)
)
carp_pkts = sc.sniff(iface=if1.name, stop_filter=filter_f, timeout=5)
self.check_carp_src_mac(carp_pkts)