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