xref: /openbsd/regress/sys/netinet6/rh0/Makefile (revision 5dea098c)
1#	$OpenBSD: Makefile,v 1.16 2020/12/30 21:40:33 kn Exp $
2
3# The following ports must be installed:
4#
5# scapy			powerful interactive packet manipulation in python
6
7.if ! exists(/usr/local/bin/scapy)
8.BEGIN:
9	@true
10regress:
11	@echo Install scapy package to run this regress.
12	@echo SKIPPED
13.endif
14
15# This test needs a manual setup of two machines
16# Set up machines: LOCAL REMOTE
17# LOCAL is the machine where this makefile is running.
18# REMOTE is running OpenBSD, pf gets disabled to test the IPv6 stack.
19# OTHER is an address on REMOTE, but configured on another interface.
20# OTHER_FAKE source routed host, no packets reach this host,
21#     it represents just bunch of addresses in the OTHER net.
22
23# Configure Addresses on the machines.
24# Adapt interface and address variables to your local setup.
25
26LOCAL_IF ?=	em1
27LOCAL_MAC ?=	00:1b:21:0e:6e:8e
28REMOTE_MAC ?=	00:04:23:b0:68:8e
29
30LOCAL_ADDR6 ?=	fdd7:e83e:66bc:81::21
31REMOTE_ADDR6 ?=	fdd7:e83e:66bc:81::22
32OTHER_ADDR6 ?=	fdd7:e83e:66bc:82::22
33OTHER_FAKE1_ADDR6 ?=	fdd7:e83e:66bc:82::dead
34OTHER_FAKE2_ADDR6 ?=	fdd7:e83e:66bc:82::beef
35
36REMOTE_SSH ?=
37
38.if empty (LOCAL_IF) || empty (LOCAL_MAC) || empty (REMOTE_MAC) || \
39    empty (LOCAL_ADDR6) || empty (REMOTE_ADDR6) || empty(OTHER_ADDR6) || \
40    empty (OTHER_FAKE1_ADDR6) || empty (OTHER_FAKE2_ADDR6) || \
41    empty (REMOTE_SSH)
42.BEGIN:
43	@true
44regress:
45	@echo This tests needs a remote machine to operate on.
46	@echo LOCAL_IF LOCAL_MAC REMOTE_MAC LOCAL_ADDR6 REMOTE_ADDR6
47	@echo OTHER_ADDR6 OTHER_FAKE1_ADDR6 OTHER_FAKE2_ADDR6 REMOTE_SSH
48	@echo Fill out these variables for additional tests.
49	@echo SKIPPED
50.endif
51
52.MAIN: all
53
54.if make (regress) || make (all)
55.BEGIN:
56	${SUDO} true
57	ssh -t ${REMOTE_SSH} ${SUDO} true
58	rm -f stamp-stack stamp-pf
59	@echo
60.endif
61
62# Create python include file containing the addresses.
63addr.py: Makefile
64	rm -f $@ $@.tmp
65	echo 'LOCAL_IF = "${LOCAL_IF}"' >>$@.tmp
66	echo 'LOCAL_MAC = "${LOCAL_MAC}"' >>$@.tmp
67	echo 'REMOTE_MAC = "${REMOTE_MAC}"' >>$@.tmp
68.for var in LOCAL_ADDR REMOTE_ADDR OTHER_FAKE1_ADDR OTHER_FAKE2_ADDR
69	echo '${var}6 = "${${var}6}"' >>$@.tmp
70.endfor
71	mv $@.tmp $@
72
73# Set variables so that make runs with and without obj directory.
74# Only do that if necessary to keep visible output short.
75.if ${.CURDIR} == ${.OBJDIR}
76PYTHON =	python3 -u ./
77.else
78PYTHON =	PYTHONPATH=${.OBJDIR} python3 -u ${.CURDIR}/
79.endif
80
81stamp-stack:
82	rm -f stamp-stack stamp-pf
83	-ssh ${REMOTE_SSH} ${SUDO} pfctl -d
84	ssh ${REMOTE_SSH} ${SUDO} pfctl -a regress -Fr
85	date >$@
86
87# After running the tests, turn on pf on remote machine.
88# This is the expected default configuration.
89REGRESS_CLEANUP +=      stamp-pf
90stamp-pf:
91	rm -f stamp-stack stamp-pf
92	echo 'pass proto tcp from port ssh no state\n'\
93	    'pass proto tcp to port ssh no state'|\
94	    ssh ${REMOTE_SSH} ${SUDO} pfctl -a regress -f -
95	-ssh ${REMOTE_SSH} ${SUDO} pfctl -e
96	date >$@
97
98RH0_SCRIPTS !!=		cd ${.CURDIR} && ls -1 rh0*.py
99
100.for s in ${RH0_SCRIPTS}
101REGRESS_TARGETS =	run-${s}
102run-${s}: addr.py stamp-stack
103	${SUDO} ${PYTHON}${s}
104.endfor
105
106CLEANFILES +=		addr.py *.pyc *.log stamp-*
107
108.PHONY: check-setup check-setup-local check-setup-remote
109
110# Check wether the address, route and remote setup is correct
111check-setup: check-setup-local check-setup-remote
112
113check-setup-local:
114	@echo '\n======== $@ ========'
115	ping6 -n -c 1 ${LOCAL_ADDR6}  # LOCAL_ADDR6
116	route -n get -inet6 ${LOCAL_ADDR6} |\
117	    grep -q 'flags: .*LOCAL'  # LOCAL_ADDR6
118	ping6 -n -c 1 ${REMOTE_ADDR6}  # REMOTE_ADDR6
119	route -n get -inet6 ${REMOTE_ADDR6} |\
120	    grep -q 'interface: ${LOCAL_IF}$$'  # REMOTE_ADDR6 LOCAL_IF
121.for ip in OTHER_ADDR6 OTHER_FAKE1_ADDR6 OTHER_FAKE2_ADDR6
122	route -n get -inet6 ${${ip}} |\
123	    grep -q 'gateway: ${REMOTE_ADDR6}$$'  # ${ip} REMOTE_ADDR6
124.endfor
125	ndp -n ${REMOTE_ADDR6} |\
126	    grep -q ' ${REMOTE_MAC} '  # REMOTE_ADDR6 REMOTE_MAC
127
128check-setup-remote:
129	@echo '\n======== $@ ========'
130	ssh ${REMOTE_SSH} ping6 -n -c 1 ${REMOTE_ADDR6}  # REMOTE_ADDR6
131	ssh ${REMOTE_SSH} route -n get -inet6 ${REMOTE_ADDR6} |\
132	    grep -q 'flags: .*LOCAL'  # REMOTE_ADDR6
133	ssh ${REMOTE_SSH} ping6 -n -c 1 ${LOCAL_ADDR6}  # LOCAL_ADDR6
134	ssh ${REMOTE_SSH} ping6 -n -c 1 ${OTHER_ADDR6}  # OTHER_ADDR6
135	ssh ${REMOTE_SSH} route -n get -inet6 ${OTHER_ADDR6} |\
136	    grep -q 'flags: .*LOCAL'  # OTHER_ADDR6
137.for ip in OTHER_FAKE1_ADDR6 OTHER_FAKE2_ADDR6
138	ssh ${REMOTE_SSH} route -n get -inet6 ${${ip}} |\
139	    grep -q 'if address: ${OTHER_ADDR6}$$'  # ${ip} OTHER_ADDR6
140.endfor
141	ssh ${REMOTE_SSH} ndp -n ${LOCAL_ADDR6} |\
142	    grep -q ' ${LOCAL_MAC} '  # LOCAL_ADDR6 LOCAL_MAC
143
144.include <bsd.regress.mk>
145