1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21#
22# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23# Use is subject to license terms.
24#
25# Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
26#
27# Copyright (c) 2012, Joyent Inc. All rights reserved.
28#
29
30PROG=		ipf ipfs ipmon ipnat ippool ipfstat
31IPFPROG=	ipftest
32
33IPF_OBJS=	ipf.o ipfcomp.o ipfzone.o ipf_y.o ipf_l.o
34IPFS_OBJS=	ipfs.o ipfzone.o
35IPFSTAT_OBJS=	ipfstat.o ipfzone.o
36IPMON_OBJS=	ipmon.o ipfzone.o ipmon_y.o ipmon_l.o
37IPNAT_OBJS=	ipnat.o ipfzone.o ipnat_y.o ipnat_l.o
38IPPOOL_OBJS=	ippool.o ipfzone.o ippool_y.o ippool_l.o
39IPFTEST_OBJS=	ipftest.o ipfzone.o \
40		ip_fil.o ip_state.o ip_compat.o \
41		ip_frag.o ip_nat.o ip_nat6.o fil.o \
42		ip_htable.o ip_lookup.o \
43		ip_proxy.o ip_auth.o ip_log.o \
44		ipf_y.o ipf_l.o \
45		ipnat_y.o ipnat_l.o \
46		ippool_y.o ippool_l.o \
47		ip_pool.o radix.o
48
49OBJS=		$(IPF_OBJS) $(IPFS_OBJS) $(IPFSTAT_OBJS) \
50		$(IPMON_OBJS) $(IPNAT_OBJS) $(IPPOOL_OBJS) $(IPFTEST_OBJS)
51
52OBJSL=		$(IPF_OBJS) $(IPFS_OBJS) $(IPFSTAT_OBJS) \
53		$(IPMON_OBJS) $(IPNAT_OBJS)
54
55SRCS=		$(OBJSL:%.o=../%.c)
56
57include ../../../Makefile.cmd
58include ../../Makefile.ipf
59
60LDLIBS		+= $(LIBBPF)
61LDFLAGS		+= $(MAPFILE.NGB:%=-Wl,-M%)
62
63CPPFLAGS	+= -I. -DIPFILTER_LOOKUP -DIPFILTER_LOG
64
65ipfstat.o	:=	CPPFLAGS += -DSTATETOP
66ipfstat		:=	LDLIBS += -lcurses
67
68ipf		:=	LDLIBS += -lsocket -lnsl
69ipftest		:=	LDLIBS += -lsocket -lnsl -lmd
70ipfstat		:=	LDLIBS += -lsocket -lnsl -lkvm -lelf
71ipmon		:=	LDLIBS += -lsocket -lnsl
72ipnat		:=	LDLIBS += -lsocket -lnsl -lkvm -lelf
73ippool		:=	LDLIBS += -lsocket -lnsl -lkvm -lelf
74
75CLEANFILES	+= $(OBJS)
76CLOBBERFILES	+= $(IPFPROG)
77
78ROOTIPF=	$(ROOTLIB)/ipf
79ROOTIPF32=	$(ROOTIPF)/$(MACH32)
80ROOTIPF64=	$(ROOTIPF)/$(MACH64)
81
82ROOTIPFPROG32=	$(IPFPROG:%=$(ROOTIPF32)/%)
83ROOTIPFPROG64=	$(IPFPROG:%=$(ROOTIPF64)/%)
84
85ROOTIPFLINKS=		$(IPFPROG:%=$(ROOTIPF)/%)
86ROOTUSRSBINLINKS=	$(PROG:%=$(ROOTUSRSBIN)/%)
87
88all:
89
90$(ROOTIPF32):
91	$(INS.dir)
92
93$(ROOTIPF64):
94	$(INS.dir)
95
96$(ROOTIPF)/%: %
97	$(INS.file)
98
99$(ROOTIPF32)/%: %
100	$(INS.file)
101
102$(ROOTIPF64)/%: %
103	$(INS.file)
104
105$(ROOTUSRSBINLINKS): FRC
106	-$(RM) $@; $(LN) $(ISAEXEC) $@
107
108$(ROOTIPFLINKS): FRC
109	-$(RM) $@; $(LN) $(ISAEXEC) $@
110
111
112.KEEP_STATE:
113
114ipf:	$(IPF_OBJS) $(LIBIPF) $(MAPFILE.NGB)
115	$(LINK.c) -o ipf $(IPF_OBJS) $(LDLIBS)
116	$(POST_PROCESS)
117
118ipf_y.o: ../ipf_y.c $(COMMONIPF)/netinet/ip_fil.h $(COMMONIPF)/ipf.h \
119	../ipf_y.c ../ipf_l.h
120
121../ipf_y.c ../ipf_y.h: ../ipf_y.y
122	$(YACC) -d -b ipf ../ipf_y.y
123	sed -e 's/yy/ipf_yy/g' -e 's/y.tab.h/ipf_y.c/' \
124	   ipf.tab.c > ../ipf_y.c
125	sed -e 's/yy/ipf_yy/g' -e 's/y.tab.h/ipf_y.h/' \
126	   ipf.tab.h > ../ipf_y.h
127
128CLEANFILES += ipf.tab.c ipf.tab.h
129CLEANFILES += ../ipf_y.c ../ipf_y.h
130
131ipf_l.o: ../ipf_l.c $(COMMONIPF)/netinet/ip_fil.h $(COMMONIPF)/ipf.h  \
132	 ../ipf_y.h ../ipf_l.h
133	$(COMPILE.c) ../ipf_l.c -o $@
134
135../ipf_l.c: ../lexer.c $(COMMONIPF)/ipf.h $(COMMONIPF)/netinet/ip_fil.h
136	sed -e 's/yy/ipf_yy/g' -e 's/y.tab.h/ipf_y.h/' \
137	       -e 's/lexer.h/ipf_l.h/' ../lexer.c > $@
138
139../ipf_l.h: ../lexer.h
140	sed -e 's/yy/ipf_yy/g' ../lexer.h > $@
141
142CLEANFILES += ../ipf_l.c ../ipf_l.h
143
144
145ipfs:	$(IPFS_OBJS)
146	$(LINK.c) -o ipfs $(IPFS_OBJS) $(LDLIBS)
147	$(POST_PROCESS)
148
149ipfstat:	$(IPFSTAT_OBJS) $(MAPFILE.NGB)
150	$(LINK.c) -o ipfstat $(IPFSTAT_OBJS) $(LDLIBS)
151	$(POST_PROCESS)
152
153ipmon:	$(IPMON_OBJS) $(LIBIPF) $(MAPFILE.NGB)
154	$(LINK.c) -o ipmon $(IPMON_OBJS) $(LDLIBS)
155	$(POST_PROCESS)
156
157ipmon_y.o: ../ipmon_y.c $(COMMONIPF)/ipmon.h \
158	../ipmon_y.h ../ipmon_l.h
159
160../ipmon_y.c ../ipmon_y.h: ../ipmon_y.y
161	$(YACC) -d -b ipmon ../ipmon_y.y
162	sed -e 's/yy/ipmon_yy/g' \
163	    -e 's/extern [a-z]* .*();//' \
164	    -e 's/^\(static [a-z]* .*\)();/\1(void);/' \
165	   ipmon.tab.c > ../ipmon_y.c
166	sed -e 's/yy/ipmon_yy/g' -e 's/y.tab.h/ipmon_y.h/' \
167	   ipmon.tab.h > ../ipmon_y.h
168
169CLEANFILES += ipmon.tab.c ipmon.tab.h
170CLEANFILES += ../ipmon_y.c ../ipmon_y.h
171
172ipmon_l.o: ../ipmon_l.c $(COMMONIPF)/ipmon.h ../ipmon_y.h ../ipmon_l.h
173	$(COMPILE.c) ../ipmon_l.c -o $@
174
175../ipmon_l.c: ../lexer.c $(COMMONIPF)/ipmon.h
176	sed -e 's/yy/ipmon_yy/g' -e 's/y.tab.h/ipmon_y.h/' \
177            -e 's/lexer.h/ipmon_l.h/' ../lexer.c > $@
178
179../ipmon_l.h: ../lexer.h
180	sed -e 's/yy/ipmon_yy/g' ../lexer.h > $@
181
182CLEANFILES += ../ipmon_l.c ../ipmon_l.h
183
184ipnat:	$(IPNAT_OBJS) $(LIBIPF) $(MAPFILE.NGB)
185	$(LINK.c) -o ipnat $(IPNAT_OBJS) $(LDLIBS)
186	$(POST_PROCESS)
187
188ipnat_y.o: ../ipnat_y.c $(COMMONIPF)/netinet/ip_nat.h \
189	../ipnat_y.h ../ipnat_l.h
190
191../ipnat_y.c ../ipnat_y.h: ../ipnat_y.y
192	$(YACC) -d -b ipnat ../ipnat_y.y
193	sed -e 's/yy/ipnat_yy/g' \
194	    -e 's/extern [a-z]* .*();//' \
195	    -e 's/^\(static [a-z]* .*\)();/\1(void);/' \
196	   ipnat.tab.c > ../ipnat_y.c
197	sed -e 's/yy/ipnat_yy/g' -e 's/y.tab.h/ipnat_y.h/' \
198	   ipnat.tab.h > ../ipnat_y.h
199
200CLEANFILES += ipnat.tab.c ipnat.tab.h
201CLEANFILES += ../ipnat_y.c ../ipnat_y.h
202
203ipnat_l.o: ../ipnat_l.c $(COMMONIPF)/netinet/ip_nat.h ../ipnat_l.h
204	$(COMPILE.c) ../ipnat_l.c -o $@
205
206../ipnat_l.c: ../lexer.c $(COMMONIPF)/netinet/ip_nat.h
207	sed -e 's/yy/ipnat_yy/g' -e 's/y.tab.h/ipnat_y.h/' \
208	       -e 's/lexer.h/ipnat_l.h/' ../lexer.c > $@
209
210../ipnat_l.h: ../lexer.h
211	sed -e 's/yy/ipnat_yy/g' ../lexer.h > $@
212
213CLEANFILES += ../ipnat_l.c ../ipnat_l.h
214
215ippool:	$(IPPOOL_OBJS) $(LIBIPF) $(MAPFILE.NGB)
216	$(LINK.c) -o ippool $(IPPOOL_OBJS) $(LDLIBS)
217	$(POST_PROCESS)
218
219ippool_y.o: ../ippool_y.c $(COMMONIPF)/netinet/ip_pool.h \
220	../ippool_y.h ../ippool_l.h
221
222../ippool_y.c ../ippool_y.h: ../ippool_y.y
223	$(YACC) -d -b ippool ../ippool_y.y
224	sed -e 's/yy/ippool_yy/g' \
225	    -e 's/extern [a-z]* .*();//' \
226	    -e 's/^\(static [a-z]* .*\)();/\1(void);/' \
227	   ippool.tab.c > ../ippool_y.c
228	sed -e 's/yy/ippool_yy/g' -e 's/y.tab.h/ippool_y.h/' \
229	   ippool.tab.h > ../ippool_y.h
230
231CLEANFILES += ippool.tab.c ippool.tab.h
232CLEANFILES += ../ippool_y.c ../ippool_y.h
233
234ippool_l.o: ../ippool_l.c $(COMMONIPF)/netinet/ip_pool.h ../ippool_l.h
235	$(COMPILE.c) ../ippool_l.c -o $@
236
237../ippool_l.c: ../lexer.c $(COMMONIPF)/netinet/ip_pool.h
238	sed -e 's/yy/ippool_yy/g' -e 's/y.tab.h/ippool_y.h/' \
239	       -e 's/lexer.h/ippool_l.h/' ../lexer.c > $@
240
241../ippool_l.h: ../lexer.h
242	sed -e 's/yy/ippool_yy/g' ../lexer.h > $@
243
244CLEANFILES += ../ippool_l.c ../ippool_l.h
245
246ipftest:	$(IPFTEST_OBJS) $(LIBIPF) $(MAPFILE.NGB)
247	$(LINK.c) $(ZIGNORE) -o ipftest $(IPFTEST_OBJS) $(LDLIBS)
248	$(POST_PROCESS)
249
250clean:
251	-$(RM) $(CLEANFILES)
252
253#
254# NOTE: all rules must use relative paths otherwise absolute paths will be
255#       embedded into the binaries making them false positives and
256#       reported by wsdiff
257#
258
259%.o:	../../../../uts/common/inet/ipf/%.c
260	$(COMPILE.c) $<
261
262%.o:	../%.c
263	$(COMPILE.c) $<
264
265%.o:	../../../../common/net/patricia/%.c
266	$(COMPILE.c) $<
267
268include ../../../Makefile.targ
269
270FRC:
271