xref: /openbsd/regress/sys/netinet6/rh0/Makefile (revision 70788dfd)
1*70788dfdSkn#	$OpenBSD: Makefile,v 1.16 2020/12/30 21:40:33 kn Exp $
2694d4422Sbluhm
3694d4422Sbluhm# The following ports must be installed:
4694d4422Sbluhm#
5694d4422Sbluhm# scapy			powerful interactive packet manipulation in python
6694d4422Sbluhm
7*70788dfdSkn.if ! exists(/usr/local/bin/scapy)
87b3475a7Sbluhm.BEGIN:
97b3475a7Sbluhm	@true
10a91e3c70Sbluhmregress:
11*70788dfdSkn	@echo Install scapy package to run this regress.
1254eefd0cSbluhm	@echo SKIPPED
13a91e3c70Sbluhm.endif
14a91e3c70Sbluhm
15694d4422Sbluhm# This test needs a manual setup of two machines
167b3475a7Sbluhm# Set up machines: LOCAL REMOTE
177b3475a7Sbluhm# LOCAL is the machine where this makefile is running.
187b3475a7Sbluhm# REMOTE is running OpenBSD, pf gets disabled to test the IPv6 stack.
197b3475a7Sbluhm# OTHER is an address on REMOTE, but configured on another interface.
207b3475a7Sbluhm# OTHER_FAKE source routed host, no packets reach this host,
217b3475a7Sbluhm#     it represents just bunch of addresses in the OTHER net.
22694d4422Sbluhm
23694d4422Sbluhm# Configure Addresses on the machines.
24694d4422Sbluhm# Adapt interface and address variables to your local setup.
25694d4422Sbluhm
267b3475a7SbluhmLOCAL_IF ?=	em1
277b3475a7SbluhmLOCAL_MAC ?=	00:1b:21:0e:6e:8e
287b3475a7SbluhmREMOTE_MAC ?=	00:04:23:b0:68:8e
29a91e3c70Sbluhm
307b3475a7SbluhmLOCAL_ADDR6 ?=	fdd7:e83e:66bc:81::21
317b3475a7SbluhmREMOTE_ADDR6 ?=	fdd7:e83e:66bc:81::22
327b3475a7SbluhmOTHER_ADDR6 ?=	fdd7:e83e:66bc:82::22
337b3475a7SbluhmOTHER_FAKE1_ADDR6 ?=	fdd7:e83e:66bc:82::dead
347b3475a7SbluhmOTHER_FAKE2_ADDR6 ?=	fdd7:e83e:66bc:82::beef
357b3475a7Sbluhm
367b3475a7SbluhmREMOTE_SSH ?=
377b3475a7Sbluhm
387b3475a7Sbluhm.if empty (LOCAL_IF) || empty (LOCAL_MAC) || empty (REMOTE_MAC) || \
397b3475a7Sbluhm    empty (LOCAL_ADDR6) || empty (REMOTE_ADDR6) || empty(OTHER_ADDR6) || \
407b3475a7Sbluhm    empty (OTHER_FAKE1_ADDR6) || empty (OTHER_FAKE2_ADDR6) || \
417b3475a7Sbluhm    empty (REMOTE_SSH)
427b3475a7Sbluhm.BEGIN:
437b3475a7Sbluhm	@true
44a91e3c70Sbluhmregress:
452d33a7beSbluhm	@echo This tests needs a remote machine to operate on.
467b3475a7Sbluhm	@echo LOCAL_IF LOCAL_MAC REMOTE_MAC LOCAL_ADDR6 REMOTE_ADDR6
477b3475a7Sbluhm	@echo OTHER_ADDR6 OTHER_FAKE1_ADDR6 OTHER_FAKE2_ADDR6 REMOTE_SSH
482d33a7beSbluhm	@echo Fill out these variables for additional tests.
4954eefd0cSbluhm	@echo SKIPPED
50a91e3c70Sbluhm.endif
51694d4422Sbluhm
522d33a7beSbluhm.MAIN: all
532d33a7beSbluhm
542d33a7beSbluhm.if make (regress) || make (all)
55fa6bead2Sbluhm.BEGIN:
562d33a7beSbluhm	${SUDO} true
57653fceecSbluhm	ssh -t ${REMOTE_SSH} ${SUDO} true
582d33a7beSbluhm	rm -f stamp-stack stamp-pf
59e7599a67Sbluhm	@echo
602d33a7beSbluhm.endif
612d33a7beSbluhm
62694d4422Sbluhm# Create python include file containing the addresses.
63694d4422Sbluhmaddr.py: Makefile
64694d4422Sbluhm	rm -f $@ $@.tmp
657b3475a7Sbluhm	echo 'LOCAL_IF = "${LOCAL_IF}"' >>$@.tmp
667b3475a7Sbluhm	echo 'LOCAL_MAC = "${LOCAL_MAC}"' >>$@.tmp
677b3475a7Sbluhm	echo 'REMOTE_MAC = "${REMOTE_MAC}"' >>$@.tmp
687b3475a7Sbluhm.for var in LOCAL_ADDR REMOTE_ADDR OTHER_FAKE1_ADDR OTHER_FAKE2_ADDR
69694d4422Sbluhm	echo '${var}6 = "${${var}6}"' >>$@.tmp
70694d4422Sbluhm.endfor
71694d4422Sbluhm	mv $@.tmp $@
72694d4422Sbluhm
73a91e3c70Sbluhm# Set variables so that make runs with and without obj directory.
74a91e3c70Sbluhm# Only do that if necessary to keep visible output short.
75a91e3c70Sbluhm.if ${.CURDIR} == ${.OBJDIR}
76e7599a67SbluhmPYTHON =	python3 -u ./
77a91e3c70Sbluhm.else
78e7599a67SbluhmPYTHON =	PYTHONPATH=${.OBJDIR} python3 -u ${.CURDIR}/
79a91e3c70Sbluhm.endif
80a91e3c70Sbluhm
812d33a7beSbluhmstamp-stack:
822d33a7beSbluhm	rm -f stamp-stack stamp-pf
83653fceecSbluhm	-ssh ${REMOTE_SSH} ${SUDO} pfctl -d
84653fceecSbluhm	ssh ${REMOTE_SSH} ${SUDO} pfctl -a regress -Fr
852d33a7beSbluhm	date >$@
862d33a7beSbluhm
87f39ab060Sbluhm# After running the tests, turn on pf on remote machine.
88f39ab060Sbluhm# This is the expected default configuration.
89f39ab060SbluhmREGRESS_CLEANUP +=      stamp-pf
902d33a7beSbluhmstamp-pf:
912d33a7beSbluhm	rm -f stamp-stack stamp-pf
922d33a7beSbluhm	echo 'pass proto tcp from port ssh no state\n'\
932d33a7beSbluhm	    'pass proto tcp to port ssh no state'|\
94653fceecSbluhm	    ssh ${REMOTE_SSH} ${SUDO} pfctl -a regress -f -
95653fceecSbluhm	-ssh ${REMOTE_SSH} ${SUDO} pfctl -e
962d33a7beSbluhm	date >$@
972d33a7beSbluhm
982d33a7beSbluhmRH0_SCRIPTS !!=		cd ${.CURDIR} && ls -1 rh0*.py
992d33a7beSbluhm
1002d33a7beSbluhm.for s in ${RH0_SCRIPTS}
101f39ab060SbluhmREGRESS_TARGETS =	run-${s}
102f39ab060Sbluhmrun-${s}: addr.py stamp-stack
1032d33a7beSbluhm	${SUDO} ${PYTHON}${s}
1042d33a7beSbluhm.endfor
105694d4422Sbluhm
1062d33a7beSbluhmCLEANFILES +=		addr.py *.pyc *.log stamp-*
107694d4422Sbluhm
1087b3475a7Sbluhm.PHONY: check-setup check-setup-local check-setup-remote
1097e8c0af0Sbluhm
1107e8c0af0Sbluhm# Check wether the address, route and remote setup is correct
1117b3475a7Sbluhmcheck-setup: check-setup-local check-setup-remote
1127b3475a7Sbluhm
1137b3475a7Sbluhmcheck-setup-local:
114c54bd846Sbluhm	@echo '\n======== $@ ========'
1157b3475a7Sbluhm	ping6 -n -c 1 ${LOCAL_ADDR6}  # LOCAL_ADDR6
1167b3475a7Sbluhm	route -n get -inet6 ${LOCAL_ADDR6} |\
1177b3475a7Sbluhm	    grep -q 'flags: .*LOCAL'  # LOCAL_ADDR6
1187b3475a7Sbluhm	ping6 -n -c 1 ${REMOTE_ADDR6}  # REMOTE_ADDR6
1197b3475a7Sbluhm	route -n get -inet6 ${REMOTE_ADDR6} |\
1207b3475a7Sbluhm	    grep -q 'interface: ${LOCAL_IF}$$'  # REMOTE_ADDR6 LOCAL_IF
1217b3475a7Sbluhm.for ip in OTHER_ADDR6 OTHER_FAKE1_ADDR6 OTHER_FAKE2_ADDR6
1227b3475a7Sbluhm	route -n get -inet6 ${${ip}} |\
1237b3475a7Sbluhm	    grep -q 'gateway: ${REMOTE_ADDR6}$$'  # ${ip} REMOTE_ADDR6
1247b3475a7Sbluhm.endfor
1257b3475a7Sbluhm	ndp -n ${REMOTE_ADDR6} |\
1267b3475a7Sbluhm	    grep -q ' ${REMOTE_MAC} '  # REMOTE_ADDR6 REMOTE_MAC
1277b3475a7Sbluhm
1287b3475a7Sbluhmcheck-setup-remote:
1297b3475a7Sbluhm	@echo '\n======== $@ ========'
1307b3475a7Sbluhm	ssh ${REMOTE_SSH} ping6 -n -c 1 ${REMOTE_ADDR6}  # REMOTE_ADDR6
1317b3475a7Sbluhm	ssh ${REMOTE_SSH} route -n get -inet6 ${REMOTE_ADDR6} |\
1327b3475a7Sbluhm	    grep -q 'flags: .*LOCAL'  # REMOTE_ADDR6
1337b3475a7Sbluhm	ssh ${REMOTE_SSH} ping6 -n -c 1 ${LOCAL_ADDR6}  # LOCAL_ADDR6
1347b3475a7Sbluhm	ssh ${REMOTE_SSH} ping6 -n -c 1 ${OTHER_ADDR6}  # OTHER_ADDR6
1357b3475a7Sbluhm	ssh ${REMOTE_SSH} route -n get -inet6 ${OTHER_ADDR6} |\
1367b3475a7Sbluhm	    grep -q 'flags: .*LOCAL'  # OTHER_ADDR6
1377b3475a7Sbluhm.for ip in OTHER_FAKE1_ADDR6 OTHER_FAKE2_ADDR6
1387b3475a7Sbluhm	ssh ${REMOTE_SSH} route -n get -inet6 ${${ip}} |\
1397b3475a7Sbluhm	    grep -q 'if address: ${OTHER_ADDR6}$$'  # ${ip} OTHER_ADDR6
1407b3475a7Sbluhm.endfor
1417b3475a7Sbluhm	ssh ${REMOTE_SSH} ndp -n ${LOCAL_ADDR6} |\
1427b3475a7Sbluhm	    grep -q ' ${LOCAL_MAC} '  # LOCAL_ADDR6 LOCAL_MAC
1437e8c0af0Sbluhm
144694d4422Sbluhm.include <bsd.regress.mk>
145