1#
2# Copyright (C) 2012 by Darren Reed.
3#
4# Redistribution and use in source and binary forms are permitted
5# provided that this notice is preserved and due credit is given
6# to the original author and the contributors.
7#
8# $FreeBSD$
9# Id: Makefile,v 2.76.2.24 2007/09/26 10:04:03 darrenr Exp $
10#
11SHELL=/bin/sh
12BINDEST=/usr/local/bin
13SBINDEST=/sbin
14MANDIR=/usr/local/man
15#To test prototyping
16CC=gcc -Wstrict-prototypes -Wmissing-prototypes -Wunused -Wuninitialized
17#CC=gcc
18#CC=cc -Dconst=
19DEBUG=-g
20# -O
21CFLAGS=-I$$(TOP) -D_BSD_SOURCE
22CPU=`uname -m`
23CPUDIR=`uname -s|sed -e 's@/@@g'`-`uname -r`-`uname -m`
24OBJ=.
25#
26# To enable this to work as a Loadable Kernel Module...
27#
28IPFLKM=-DIPFILTER_LKM
29#
30# To enable logging of blocked/passed packets...
31#
32IPFLOG=-DIPFILTER_LOG
33#
34# To enable loading filter rules compiled to C code...
35#
36#COMPIPF=-DIPFILTER_COMPILED
37#
38# To enable IPFilter compatibility with older CLI utilities
39#
40#COMPATIPF=-DIPFILTER_COMPAT
41#
42# To enable synchronisation between IPFilter hosts
43#
44#SYNC=-DIPFILTER_SYNC
45#
46# The facility you wish to log messages from ipmon to syslogd with.
47#
48LOGFAC=-DLOGFAC=LOG_SECURITY
49#
50# To enable rules to be written with BPF syntax, uncomment these two lines.
51#
52# WARNING: If you're building a commercial product based on IPFilter, using
53#          this options *may* infringe at least one patent held by CheckPoint
54#          (5,606,668.)
55#
56#IPFBPF=-DIPFILTER_BPF -I/usr/local/include
57#LIBBPF=-L/usr/local/lib -lpcap
58#
59# HP-UX and Solaris require this uncommented for BPF.
60#
61#BPFILTER=bpf_filter.o
62#
63# LINUXKERNEL is the path to the top of your Linux kernel source tree.
64# By default IPFilter looks for /usr/src/linux, but you may have to change
65# it to /usr/src/linux-2.4 or similar.
66#
67LINUXKERNEL=/usr/src/kernels/2.6.29.5-191.fc11.i586
68LINUX=`uname -r | awk -F. ' { printf"%d",$$1;for(i=1;i<NF&&i<3;i++){printf("%02d",$$(i+1));}}'`
69#
70#
71#
72#BUILDROOT=/usr/src/redhat/BUILD/ipfilter
73BUILDROOT=${HOME}/rpmbuild/BUILDROOT/ipfilter-4.1.32-1.i386
74
75#
76# All of the compile-time options are here, used for compiling the userland
77# tools for regression testing.  Well, all except for IPFILTER_LKM, of course.
78#
79ALLOPTS=-DIPFILTER_LOG -DIPFILTER_LOOKUP \
80        -DIPFILTER_SYNC -DIPFILTER_CKSUM
81
82#
83# Uncomment the next 3 lines if you want to view the state table a la top(1)
84# (requires that you have installed ncurses).
85#STATETOP_CFLAGS=-DSTATETOP
86#
87# Where to find the ncurses include files (if not in default path),
88#
89#STATETOP_INC=
90#STATETOP_INC=-I/usr/local/include
91#
92# How to link the ncurses library
93#
94#STATETOP_LIB=-lncurses
95#STATETOP_LIB=-L/usr/local/lib -lncurses
96
97#
98# Uncomment this when building IPv6 capability.
99#
100INET6=-DUSE_INET6
101#
102# For packets which don't match any pass rules or any block rules, set either
103# FR_PASS or FR_BLOCK (respectively).  It defaults to FR_PASS if left
104# undefined.  This is ignored for ipftest, which can thus return three
105# results: pass, block and nomatch.  This is the sort of "block unless
106# explicitly allowed" type #define switch.
107#
108POLICY=-DIPF_DEFAULT_PASS=FR_PASS
109#
110MFLAGS1='CFLAGS=$(CFLAGS) $(ARCHINC) $(SOLARIS2) $(SGIREV) $(INET6)' \
111	"IPFLOG=$(IPFLOG)" "LOGFAC=$(LOGFAC)" "POLICY=$(POLICY)" \
112	"SOLARIS2=$(SOLARIS2)" "DEBUG=$(DEBUG)" "DCPU=$(CPU)" \
113        "LIBBPF=$(LIBBPF)" "CPUDIR=$(CPUDIR)" "IPFBPF=$(IPFBPF)" \
114        'STATETOP_CFLAGS=$(STATETOP_CFLAGS)' "BPFILTER=$(BPFILTER)" \
115        'STATETOP_INC=$(STATETOP_INC)' 'STATETOP_LIB=$(STATETOP_LIB)' \
116	"BITS=$(BITS)" "OBJ=$(OBJ)" "LOOKUP=$(LOOKUP)" "COMPIPF=$(COMPIPF)" \
117	"COMPATIPF=$(COMPATIPF)" \
118	'SYNC=$(SYNC)' 'ALLOPTS=$(ALLOPTS)' 'LIBBPF=$(LIBBPF)'
119MFLAGS=$(MFLAGS1) "IPFLKM=$(IPFLKM)"
120MACHASSERT=`/bin/ls -1 /usr/sys/*/mach_assert.h | head -1`
121#
122SHELL=/bin/sh
123#
124########## ########## ########## ########## ########## ########## ##########
125#
126CP=/bin/cp
127RM=/bin/rm
128CHMOD=/bin/chmod
129INSTALL=install
130#
131
132all:
133	@echo "Chose one of the following targets for making IP filter:"
134	@echo ""
135	@echo "solaris	- auto-selects SunOS4.1.x/Solaris 2.3-6/Solaris2.4-6x86"
136	@echo "netbsd	- compile for NetBSD"
137	@echo "openbsd	- compile for OpenBSD"
138	@echo "freebsd20	- compile for FreeBSD 2.0, 2.1 or earlier"
139	@echo "freebsd22	- compile for FreeBSD-2.2 or greater"
140	@echo "freebsd  - compile for all other versions of FreeBSD"
141	@echo "bsd	- compile for generic 4.4BSD systems"
142	@echo "bsdi	- compile for BSD/OS"
143	@echo "irix	- compile for SGI IRIX"
144	@echo "hpux	- compile for HP-UX 11.00"
145	@echo "osf	- compile for OSF/Tru64 5.1"
146	@echo ""
147
148tests:
149	@if [ -d test ]; then (cd test; make) \
150	else echo test directory not present, sorry; fi
151
152retest:
153	@if [ -d test ]; then (cd test; make clean && make) \
154	else echo test directory not present, sorry; fi
155
156include:
157	-mkdir -p net netinet
158	if [ ! -f netinet/done ] ; then \
159		(cd netinet; ln -s ../*.h .; ln -s ../ip_*_pxy.c .;); \
160		(cd netinet; ln -s ../ipsend/tcpip.h tcpip.h); \
161		touch netinet/done; \
162	fi
163	-(cd netinet; ln -s ../ip_rules.h ip_rules.h)
164
165sunos solaris: include
166	MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" BPFILTER=$(BPFILTER) \
167		CC="$(CC)" DEBUG="$(DEBUG)" ./buildsunos
168
169freebsd:
170	make freebsd`uname -r|cut -c1`
171
172freebsd22: include
173	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
174	-rm -f BSD/$(CPUDIR)/ioconf.h
175	-if [ x$(IPFILKERN) != x ] ; then \
176		if [ -f /sys/compile/$(IPFILKERN)/ioconf.h ] ; then \
177			ln -s /sys/compile/$(IPFILKERN)/ioconf.h BSD/$$y; \
178		else \
179			ln -s /sys/$(IPFILKERN)/ioconf.h BSD/$$y; \
180		fi \
181	else \
182		x=`uname -v|sed -e 's@^.*:\(/[^: ]*\).*$$@\1/ioconf.h@'`; \
183		y=`uname -s|sed -e 's@/@@g'`-`uname -r`-`uname -m`; \
184		if [ ! -f $$x ] ; then \
185			echo -n "Can't find ioconf.h at $$x "; \
186			exit 1;\
187		else \
188			ln -s $$x BSD/$$y ; \
189		fi \
190	fi
191	make freebsd20
192
193freebsd5 freebsd6 freebsd7 freebsd8: include
194	if [ x$(INET6) = x ] ; then \
195		echo "#undef INET6" > opt_inet6.h; \
196	else \
197		echo "#define INET6" > opt_inet6.h; \
198	fi
199	if [ "x$(IPFBPF)" = "x" ] ; then \
200		echo "#undef NBPF" > opt_bpf.h; \
201		echo "#undef NBPFILTER" > opt_bpf.h; \
202		echo "#undef DEV_BPF" > opt_bpf.h; \
203	else \
204		echo "#define NBPF" > opt_bpf.h; \
205		echo "#define NBPFILTER" > opt_bpf.h; \
206		echo "#define DEV_BPF" > opt_bpf.h; \
207	fi
208	if [ x$(ENABLE_PFIL) = x ] ; then \
209		echo "#undef PFIL_HOOKS" > opt_pfil.h; \
210	else \
211		echo "#define PFIL_HOOKS" > opt_pfil.h; \
212	fi
213
214	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
215	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS) "ML=mlfk_ipl.c" "MLD=mlfk_ipl.c" "LKM=ipf.ko.5" "LKMR=ipfrule.ko.5" "DLKM=-DKLD_MODULE" "MLR=mlfk_rule.o"; cd ..)
216#	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS1); cd ..)
217
218freebsd4 : include
219	if [ x$(INET6) = x ] ; then \
220		echo "#undef INET6" > opt_inet6.h; \
221	else \
222		echo "#define INET6" > opt_inet6.h; \
223	fi
224	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
225	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS) "ML=mlfk_ipl.c" "MLD=mlfk_ipl.c" "LKM=ipf.ko" "LKMR=ipfrule.ko" "DLKM=-DKLD_MODULE" "MLR=mlfk_rule.o"; cd ..)
226	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS1); cd ..)
227
228freebsd3 freebsd30: include
229	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
230	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS1) "ML=mlf_ipl.c" "MLR=mlf_rule.o" LKM= LKMR=; cd ..)
231	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS1); cd ..)
232
233netbsd: include
234	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
235	@if [ ! -d /sys -o ! -d /sys/arch ] ; then \
236		echo "*****************************************************"; \
237		echo "*                                                   *"; \
238		echo "* Please extract source code to create /sys and     *";\
239		echo "* /sys/arch and run 'config GENERIC'                *"; \
240		echo "*                                                   *"; \
241		echo "*****************************************************"; \
242		exit 1; \
243	fi
244	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS) 'DLKM=-D_LKM' "ML=mln_ipl.c" LKMR= "MLR=mln_rule.o"; cd ..)
245#	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS); cd ..)
246
247openbsd: include
248	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
249	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS) 'DLKM=-D_LKM' "ML=mlo_ipl.c" LKMR= "MLR=mlo_rule.o"; cd ..)
250	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS); cd ..)
251
252freebsd20 freebsd21: include
253	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
254	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS) "ML=mlf_ipl.c" "MLR=mlf_rule.o"; cd ..)
255	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS); cd ..)
256
257osf tru64: null include
258	make setup "TARGOS=OSF" "CPUDIR=`OSF/cpurev`"
259	(cd OSF/`OSF/cpurev`; make build TRU64=`uname -v` TOP=../.. "DEBUG=-g" $(MFLAGS) "MACHASSERT=$(MACHASSERT)" "OSREV=`../cpurev`"; cd ..)
260	(cd OSF/`OSF/cpurev`; make -f Makefile.ipsend build TRU64=`uname -v` TOP=../.. $(MFLAGS) "OSREV=`../cpurev`"; cd ..)
261
262aix: null include
263	make setup "TARGOS=AIX" "CPUDIR=`AIX/cpurev`"
264	(cd AIX/`AIX/cpurev`; make build AIX=`uname -v` TOP=../.. "DEBUG=-g" $(MFLAGS) "OSREV=`../cpurev`" BITS=`../bootbits.sh`; cd ..)
265#	(cd AIX/`AIX/cpurev`; make -f Makefile.ipsend build AIX=`uname -v` TOP=../.. $(MFLAGS) "OSREV=`../cpurev`"; cd ..)
266
267bsd: include
268	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
269	(cd BSD/$(CPUDIR); make build TOP=../.. $(MFLAGS) 'DLKM=-D_LKM' "ML=mln_ipl.c" "MLR=mln_rule.o"; cd ..)
270	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build TOP=../.. $(MFLAGS); cd ..)
271
272bsdi bsdos: include
273	make setup "TARGOS=BSD" "CPUDIR=$(CPUDIR)"
274	(cd BSD/$(CPUDIR); make build "CC=$(CC)" TOP=../.. $(MFLAGS) LKM= LKMR= ; cd ..)
275	(cd BSD/$(CPUDIR); make -f Makefile.ipsend build "CC=$(CC)" TOP=../.. $(MFLAGS); cd ..)
276
277irix IRIX: include
278	make setup TARGOS=IRIX CPUDIR=`IRIX/cpurev`
279	if [ "x${SGIREV}" = "x" ] ; then \
280		make irix "SGIREV=-D_KMEMUSER -DIRIX=`IRIX/getrev`"; \
281	else \
282		(cd IRIX/`IRIX/cpurev`; smake -l -J 1 build TOP=../.. $(DEST) $(MFLAGS) IRIX=`../getrev` SGI=$$(IRIX) CPUDIR=`../cpurev`; cd ..); \
283		(cd IRIX/`IRIX/cpurev`; make -f Makefile.ipsend build TOP=../.. $(DEST) $(MFLAGS) IRIX=`../getrev` SGI=$$(IRIX) CPUDIR=`../cpurev`; cd ..); \
284	fi
285
286setup:
287	-if [ ! -d $(TARGOS)/$(CPUDIR) ] ; then mkdir $(TARGOS)/$(CPUDIR); fi
288	-rm -f $(TARGOS)/$(CPUDIR)/Makefile $(TARGOS)/$(CPUDIR)/Makefile.ipsend
289	-ln -s ../Makefile $(TARGOS)/$(CPUDIR)/Makefile
290	-ln -s ../Makefile.ipsend $(TARGOS)/$(CPUDIR)/Makefile.ipsend
291	-if [ -f $(TARGOS)/Makefile.common ] ; then \
292		rm -f $(TARGOS)/$(CPUDIR)/Makefile.common; \
293		ln -s ../Makefile.common $(TARGOS)/$(CPUDIR)/Makefile.common;\
294	fi
295
296clean: clean-include
297	/bin/rm -rf h y.output
298	${RM} -f core *.o ipt fils ipf ipfstat ipftest ipmon if_ipl ipflkm \
299	vnode_if.h $(LKM) *~
300	/bin/rm -rf sparcv7 sparcv9 mdbgen_build
301	(cd SunOS4; $(MAKE) TOP=.. clean)
302	-(cd SunOS5; $(MAKE) TOP=.. clean)
303	(cd BSD; $(MAKE) TOP=.. clean)
304	(cd HPUX; $(MAKE) BITS=32 TOP=.. clean)
305	(cd Linux; $(MAKE) TOP=.. clean)
306	(cd OSF; $(MAKE) TOP=.. clean)
307	(cd AIX; $(MAKE) TOP=.. clean)
308	if [ "`uname -s`" = "IRIX" ]; then (cd IRIX; $(MAKE) clean); fi
309	[ -d test ] && (cd test; $(MAKE) clean)
310	(cd ipsend; $(MAKE) clean)
311
312clean-include:
313	sh -c 'if [ -d netinet ] ; then cd netinet; for i in *; do if [ -h $$i ] ; then /bin/rm -f $$i; fi; done fi'
314	sh -c 'if [ -d net ] ; then cd net; for i in *; do if [ -h $$i ] ; then /bin/rm -f $$i; fi; done fi'
315	${RM} -f netinet/done net/done
316
317clean-bsd: clean-include
318	(cd BSD; make TOP=.. clean)
319
320clean-hpux: clean-include
321	(cd HPUX; $(MAKE) BITS=32 clean)
322
323clean-osf: clean-include
324	(cd OSF; make clean)
325
326clean-aix: clean-include
327	(cd AIX; make clean)
328
329clean-linux: clean-include
330	(cd Linux; make clean)
331
332clean-sunos4: clean-include
333	(cd SunOS4; make clean)
334
335clean-sunos5: clean-include
336	(cd SunOS5; $(MAKE) clean)
337	/bin/rm -rf sparcv?
338
339clean-irix: clean-include
340	(cd IRIX; $(MAKE) clean)
341
342h/xti.h:
343	mkdir -p h
344	ln -s /usr/include/sys/xti.h h
345
346hpux: include h/xti.h
347	make setup CPUDIR=`HPUX/cpurev` TARGOS=HPUX
348	(cd HPUX/`HPUX/cpurev`; $(MAKE) build TOP=../.. $(DEST) $(MFLAGS) "BITS=`getconf KERNEL_BITS`" `../makeargs`; cd ..)
349	(cd HPUX/`HPUX/cpurev`; $(MAKE) -f Makefile.ipsend build TOP=../.. $(DEST) $(MFLAGS) "BITS=`getconf KERNEL_BITS`" `../makeargs`; cd ..)
350
351sunos4 solaris1:
352	(cd SunOS4; make build TOP=.. "CC=$(CC)" $(DEST) $(MFLAGS); cd ..)
353	(cd SunOS4; make -f Makefile.ipsend build "CC=$(CC)" TOP=.. $(DEST) $(MFLAGS); cd ..)
354
355sunos5 solaris2: null
356	(cd SunOS5/$(CPUDIR); $(MAKE) build TOP=../.. "CC=$(CC)" $(DEST) $(MFLAGS) "SOLARIS2=$(SOLARIS2)" INSTANCE=$(INSTANCE); cd ..)
357	(cd SunOS5/$(CPUDIR); $(MAKE) -f Makefile.ipsend build TOP=../.. "CC=$(CC)" $(DEST) $(MFLAGS); cd ..)
358
359linux: include
360	(cd Linux; make build LINUX=$(LINUX) TOP=.. "DEBUG=-g" "CC=$(CC)" $(MFLAGS) OBJ=$(CPUDIR) LINUXKERNEL=$(LINUXKERNEL); cd ..)
361	(cd Linux; make ipflkm LINUX=$(LINUX) TOP=.. "DEBUG=-g" "CC=$(CC)" $(MFLAGS) OBJ=$(CPUDIR) LINUXKERNEL=$(LINUXKERNEL) WORKDIR=`pwd`; cd ..)
362#	(cd Linux; make -f Makefile.ipsend build LINUX=$(LINUX) TOP=.. "CC=$(CC)" $(MFLAGS); cd ..)
363
364install-linux: linux
365	(cd Linux/; make LINUX=$(LINUX) TOP=.. "DEBUG=-g" "CC=$(CC)" $(MFLAGS) OBJ=$(CPUDIR) ROOTDIR=$(BUILDROOT) install ; cd ..)
366
367install-bsd:
368	(cd BSD/$(CPUDIR); make install "TOP=../.." $(MFLAGS); cd ..)
369	(cd BSD/$(CPUDIR); make -f Makefile.ipsend INSTALL=$(INSTALL) install "TOP=../.." $(MFLAGS); cd ..)
370
371install-sunos4: solaris
372	(cd SunOS4; $(MAKE) CPU=$(CPU) TOP=.. install)
373
374install-sunos5: solaris null
375	(cd SunOS5; $(MAKE) TOP=.. install)
376
377install-aix:
378	(cd AIX/`AIX/cpurev`; make install "TOP=../.." $(MFLAGS); cd ..)
379#	(cd AIX/`AIX/cpurev`; make -f Makefile.ipsend INSTALL=$(INSTALL) install "TOP=../.." $(MFLAGS); cd ..)
380
381install-hpux: hpux
382	(cd HPUX/`HPUX/cpurev`; $(MAKE) CPU=$(CPU) TOP=../.. "BITS=`getconf KERNEL_BITS`" install)
383
384install-irix: irix
385	(cd IRIX; smake install CPU=$(CPU) TOP=.. $(DEST) $(MFLAGS) CPUDIR=`./cpurev`)
386
387install-osf install-tru64:
388	(cd OSF/`OSF/cpurev`; make install "TOP=../.." $(MFLAGS); cd ..)
389
390do-cvs:
391	find . -type d -name CVS -print | xargs /bin/rm -rf
392	find . -type f -name .cvsignore -print | xargs /bin/rm -f
393	/bin/rm -f ip_msnrpc_pxy.c ip_sunrpc_pxy.c
394
395ip_rules.c ip_rules.h: rules/ip_rules tools/ipfcomp.c
396	-./ipf -n -cc -f rules/ip_rules 2>/dev/null 1>&2
397
398null:
399	@if [ "`$(MAKE) -v 2>&1 | sed -ne 's/GNU.*/GNU/p'`" = "GNU" ] ; then \
400		echo 'Do not use GNU make (gmake) to compile IPFilter'; \
401		exit 1; \
402	fi
403	-@echo make ok
404
405mdb:
406	/bin/rm -rf mdbgen_build
407	mdbgen -D_KERNEL -DIPFILTER_LOG -DIPFILTER_LOOKUP -DSUNDDI \
408	       -DIPFILTER_SCAN -DIPFILTER_LKM -DSOLARIS2=10 -n ipf_mdb -k \
409	       -I/home/dr146992/pfil -I/home/dr146992/ipf -f \
410	       /usr/include/netinet/in_systm.h,/usr/include/sys/ethernet.h,/usr/include/netinet/in.h,/usr/include/netinet/ip.h,/usr/include/netinet/ip_var.h,/usr/include/netinet/tcp.h,/usr/include/netinet/tcpip.h,/usr/include/netinet/ip_icmp.h,/usr/include/netinet/udp.h,ip_compat.h,ip_fil.h,ip_nat.h,ip_state.h,ip_proxy.h,ip_scan.h
411