blob: 49e95caa678a05e2e2e71880da539ab24eb2e2e7 [file] [log] [blame]
Marc Bouchere6869a82000-03-20 06:03:29 +00001#! /usr/bin/make
2
Harald Welte2aa84a42003-01-12 20:30:46 +00003# WARNING:
4# only add extensions here that are either present in the kernel, or whose
5# header files are present in the include/linux directory of this iptables
6# package (HW)
7#
Jan Engelhardt6053fe02007-07-31 16:47:38 +00008PF_EXT_SLIB:=ah addrtype connmark conntrack ecn hashlimit helper icmp iprange owner policy realm state tos ttl unclean CLASSIFY CONNMARK DNAT DSCP ECN LOG MARK MASQUERADE MIRROR NETMAP REDIRECT REJECT SAME SNAT TOS TTL TRACE ULOG
9PF6_EXT_SLIB:=connmark eui64 hl icmp6 owner policy state CONNMARK HL LOG MARK TRACE
10PFX_EXT_SLIB:=comment connlimit dscp esp length limit mac mark multiport physdev pkttype sctp standard tcp tcpmss udp NFQUEUE NOTRACK TCPMSS
Rusty Russell008a83f2001-02-28 11:21:53 +000011
James Morrisc81a3f32006-05-24 16:11:58 +000012ifeq ($(DO_SELINUX), 1)
Yasuyuki KOZAKAIfa00a732007-07-24 07:27:02 +000013PF_EXT_SE_SLIB:=CONNSECMARK
14PF6_EXT_SE_SLIB:=CONNSECMARK
15PFX_EXT_SE_SLIB:=SECMARK
James Morrisc81a3f32006-05-24 16:11:58 +000016endif
17
Rusty Russell52451822000-08-27 07:47:46 +000018# Optionals
19PF_EXT_SLIB_OPTS:=$(foreach T,$(wildcard extensions/.*-test),$(shell KERNEL_DIR=$(KERNEL_DIR) $(T)))
20PF6_EXT_SLIB_OPTS:=$(foreach T,$(wildcard extensions/.*-test6),$(shell KERNEL_DIR=$(KERNEL_DIR) $(T)))
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +000021PFX_EXT_SLIB_OPTS:=$(foreach T,$(wildcard extensions/.*-testx),$(shell KERNEL_DIR=$(KERNEL_DIR) $(T)))
Rusty Russell52451822000-08-27 07:47:46 +000022
Henrik Nordstromc2794132004-01-22 15:04:24 +000023PF_EXT_ALL_SLIB:=$(patsubst extensions/libipt_%.c, %, $(wildcard extensions/libipt_*.c))
Martin Josefssonc9dd71a2004-04-07 13:00:43 +000024PF6_EXT_ALL_SLIB:=$(patsubst extensions/libip6t_%.c, %, $(wildcard extensions/libip6t_*.c))
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +000025PFX_EXT_ALL_SLIB:=$(patsubst extensions/libxt_%.c, %, $(wildcard extensions/libxt_*.c))
Henrik Nordstromc2794132004-01-22 15:04:24 +000026
27PF_EXT_MAN_ALL_MATCHES:=$(foreach T,$(PF_EXT_ALL_SLIB),$(shell test -f extensions/libipt_$(T).man && grep -q register_match extensions/libipt_$(T).c && echo $(T)))
28PF_EXT_MAN_ALL_TARGETS:=$(foreach T,$(PF_EXT_ALL_SLIB),$(shell test -f extensions/libipt_$(T).man && grep -q register_target extensions/libipt_$(T).c && echo $(T)))
29PF6_EXT_MAN_ALL_MATCHES:=$(foreach T,$(PF6_EXT_ALL_SLIB),$(shell test -f extensions/libip6t_$(T).man && grep -q register_match6 extensions/libip6t_$(T).c && echo $(T)))
30PF6_EXT_MAN_ALL_TARGETS:=$(foreach T,$(PF6_EXT_ALL_SLIB),$(shell test -f extensions/libip6t_$(T).man && grep -q register_target6 extensions/libip6t_$(T).c && echo $(T)))
31
32PF_EXT_MAN_MATCHES:=$(filter $(PF_EXT_ALL_SLIB), $(PF_EXT_MAN_ALL_MATCHES))
33PF_EXT_MAN_TARGETS:=$(filter $(PF_EXT_ALL_SLIB), $(PF_EXT_MAN_ALL_TARGETS))
34PF_EXT_MAN_EXTRA_MATCHES:=$(filter-out $(PF_EXT_MAN_MATCHES), $(PF_EXT_MAN_ALL_MATCHES))
35PF_EXT_MAN_EXTRA_TARGETS:=$(filter-out $(PF_EXT_MAN_TARGETS), $(PF_EXT_MAN_ALL_TARGETS))
36PF6_EXT_MAN_MATCHES:=$(filter $(PF6_EXT_ALL_SLIB), $(PF6_EXT_MAN_ALL_MATCHES))
37PF6_EXT_MAN_TARGETS:=$(filter $(PF6_EXT_ALL_SLIB), $(PF6_EXT_MAN_ALL_TARGETS))
38PF6_EXT_MAN_EXTRA_MATCHES:=$(filter-out $(PF6_EXT_MAN_MATCHES), $(PF6_EXT_MAN_ALL_MATCHES))
39PF6_EXT_MAN_EXTRA_TARGETS:=$(filter-out $(PF6_EXT_MAN_TARGETS), $(PF6_EXT_MAN_ALL_TARGETS))
40
41
42allman:
43 @echo ALL_SLIB: $(PF_EXT_ALL_SLIB)
44 @echo ALL_MATCH: $(PF_EXT_MAN_ALL_MATCHES)
45 @echo ALL_TARGET: $(PF_EXT_MAN_ALL_TARGETS)
46
Rusty Russell52451822000-08-27 07:47:46 +000047PF_EXT_SLIB+=$(PF_EXT_SLIB_OPTS)
48PF6_EXT_SLIB+=$(PF6_EXT_SLIB_OPTS)
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +000049PFX_EXT_SLIB+=$(PFX_EXT_SLIB_OPTS)
Rusty Russell52451822000-08-27 07:47:46 +000050
51OPTIONALS+=$(patsubst %,IPv4:%,$(PF_EXT_SLIB_OPTS))
52OPTIONALS+=$(patsubst %,IPv6:%,$(PF6_EXT_SLIB_OPTS))
53
Harald Welte3efb6ea2001-08-06 18:50:21 +000054ifndef NO_SHARED_LIBS
Marc Bouchere6869a82000-03-20 06:03:29 +000055SHARED_LIBS+=$(foreach T,$(PF_EXT_SLIB),extensions/libipt_$(T).so)
James Morrisc81a3f32006-05-24 16:11:58 +000056SHARED_SE_LIBS+=$(foreach T,$(PF_EXT_SE_SLIB),extensions/libipt_$(T).so)
Yasuyuki KOZAKAIdbda07b2007-07-24 06:08:05 +000057EXTRA_INSTALLS+=$(foreach T, $(PF_EXT_SLIB), $(DEST_IPT_LIBDIR)/libipt_$(T).so)
58EXTRA_INSTALLS+=$(foreach T, $(PF_EXT_SE_SLIB), $(DEST_IPT_LIBDIR)/libipt_$(T).so)
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +000059EXTRA_INSTALLS+=$(foreach T, $(PFX_EXT_SLIB), $(DEST_IPT_LIBDIR)/libipt_$(T).so)
Rusty Russella138ba42001-06-05 11:56:17 +000060
Harald Welte2354d922003-03-04 23:15:42 +000061ifeq ($(DO_IPV6), 1)
Rusty Russella138ba42001-06-05 11:56:17 +000062SHARED_LIBS+=$(foreach T,$(PF6_EXT_SLIB),extensions/libip6t_$(T).so)
James Morrisc81a3f32006-05-24 16:11:58 +000063SHARED_SE_LIBS+=$(foreach T,$(PF6_EXT_SE_SLIB),extensions/libip6t_$(T).so)
Yasuyuki KOZAKAIdbda07b2007-07-24 06:08:05 +000064EXTRA_INSTALLS+=$(foreach T, $(PF6_EXT_SLIB), $(DEST_IPT_LIBDIR)/libip6t_$(T).so)
65EXTRA_INSTALLS+=$(foreach T, $(PF6_EXT_SE_SLIB), $(DEST_IPT_LIBDIR)/libip6t_$(T).so)
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +000066EXTRA_INSTALLS+=$(foreach T, $(PFX_EXT_SLIB), $(DEST_IPT_LIBDIR)/libip6t_$(T).so)
Rusty Russella138ba42001-06-05 11:56:17 +000067endif
Yasuyuki KOZAKAIdbda07b2007-07-24 06:08:05 +000068
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +000069SHARED_LIBS+=$(foreach T,$(PFX_EXT_SLIB),extensions/libxt_$(T).so)
Yasuyuki KOZAKAIfa00a732007-07-24 07:27:02 +000070SHARED_SE_LIBS+=$(foreach T,$(PFX_EXT_SE_SLIB),extensions/libxt_$(T).so)
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +000071EXTRA_INSTALLS+=$(foreach T, $(PFX_EXT_SLIB), $(DEST_IPT_LIBDIR)/libxt_$(T).so)
Yasuyuki KOZAKAIfa00a732007-07-24 07:27:02 +000072EXTRA_INSTALLS+=$(foreach T, $(PFX_EXT_SE_SLIB), $(DEST_IPT_LIBDIR)/libxt_$(T).so)
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +000073
Harald Welte3efb6ea2001-08-06 18:50:21 +000074else # NO_SHARED_LIBS
75EXT_OBJS+=$(foreach T,$(PF_EXT_SLIB),extensions/libipt_$(T).o)
James Morrisc81a3f32006-05-24 16:11:58 +000076EXT_OBJS+=$(foreach T,$(PF_EXT_SE_SLIB),extensions/libipt_$(T).o)
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +000077EXT_OBJS+=$(foreach T,$(PFX_EXT_SLIB),extensions/libxt_$(T).o)
Yasuyuki KOZAKAIfa00a732007-07-24 07:27:02 +000078EXT_OBJS+=$(foreach T,$(PFX_EXT_SE_SLIB),extensions/libxt_$(T).o)
Harald Welte3efb6ea2001-08-06 18:50:21 +000079EXT_FUNC+=$(foreach T,$(PF_EXT_SLIB),ipt_$(T))
James Morrisc81a3f32006-05-24 16:11:58 +000080EXT_FUNC+=$(foreach T,$(PF_EXT_SE_SLIB),ipt_$(T))
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +000081EXT_FUNC+=$(foreach T,$(PFX_EXT_SLIB),xt_$(T))
Yasuyuki KOZAKAIfa00a732007-07-24 07:27:02 +000082EXT_FUNC+=$(foreach T,$(PFX_EXT_SE_SLIB),xt_$(T))
Harald Welte3efb6ea2001-08-06 18:50:21 +000083EXT_OBJS+= extensions/initext.o
Harald Welte9c8cdd42003-03-05 11:39:31 +000084ifeq ($(DO_IPV6), 1)
Harald Welte3efb6ea2001-08-06 18:50:21 +000085EXT6_OBJS+=$(foreach T,$(PF6_EXT_SLIB),extensions/libip6t_$(T).o)
James Morrisc81a3f32006-05-24 16:11:58 +000086EXT6_OBJS+=$(foreach T,$(PF6_EXT_SE_SLIB),extensions/libip6t_$(T).o)
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +000087EXT6_OBJS+=$(foreach T,$(PFX_EXT_SLIB),extensions/libxt_$(T).o)
Harald Welte3efb6ea2001-08-06 18:50:21 +000088EXT6_FUNC+=$(foreach T,$(PF6_EXT_SLIB),ip6t_$(T))
James Morrisc81a3f32006-05-24 16:11:58 +000089EXT6_FUNC+=$(foreach T,$(PF6_EXT_SE_SLIB),ip6t_$(T))
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +000090EXT6_FUNC+=$(foreach T,$(PFX_EXT_SLIB),xt_$(T))
Yasuyuki KOZAKAIfa00a732007-07-24 07:27:02 +000091EXT6_OBJS+=$(foreach T,$(PFX_EXT_SE_SLIB),extensions/libxt_$(T).o)
92EXT6_FUNC+=$(foreach T,$(PFX_EXT_SE_SLIB),xt_$(T))
Harald Welte3efb6ea2001-08-06 18:50:21 +000093EXT6_OBJS+= extensions/initext6.o
Harald Welte9c8cdd42003-03-05 11:39:31 +000094endif # DO_IPV6
95endif # NO_SHARED_LIBS
Marc Bouchere6869a82000-03-20 06:03:29 +000096
97ifndef TOPLEVEL_INCLUDED
98local:
James Morrisc81a3f32006-05-24 16:11:58 +000099 cd .. && $(MAKE) $(SHARED_LIBS) $(SHARED_SE_LIBS)
Marc Bouchere6869a82000-03-20 06:03:29 +0000100endif
101
Harald Welte3efb6ea2001-08-06 18:50:21 +0000102ifdef NO_SHARED_LIBS
103extensions/libext.a: $(EXT_OBJS)
104 rm -f $@; ar crv $@ $(EXT_OBJS)
105
106extensions/libext6.a: $(EXT6_OBJS)
107 rm -f $@; ar crv $@ $(EXT6_OBJS)
108
109extensions/initext.o: extensions/initext.c
110extensions/initext6.o: extensions/initext6.c
111
112extensions/initext.c: extensions/Makefile
113 echo "" > $@
114 for i in $(EXT_FUNC); do \
115 echo "extern void $${i}_init(void);" >> $@; \
116 done
117 echo "void init_extensions(void) {" >> $@
118 for i in $(EXT_FUNC); do \
119 echo " $${i}_init();" >> $@; \
120 done
121 echo "}" >> $@
122
123extensions/initext6.c: extensions/Makefile
124 echo "" > $@
125 for i in $(EXT6_FUNC); do \
126 echo "extern void $${i}_init(void);" >> $@; \
127 done
128 echo "void init_extensions(void) {" >> $@
129 for i in $(EXT6_FUNC); do \
130 echo " $${i}_init();" >> $@; \
131 done
132 echo "}" >> $@
133
134extensions/lib%.o: extensions/lib%.c
135 $(CC) $(CFLAGS) -D_INIT=$*_init -c -o $@ $<
136
137endif
138
Henrik Nordstromc2794132004-01-22 15:04:24 +0000139EXTRAS += extensions/libipt_targets.man
140extensions/libipt_targets.man: $(patsubst %,extensions/libipt_%.man,$(PF_EXT_MAN_ALL_TARGETS))
141 @for ext in $(PF_EXT_MAN_TARGETS); do \
142 echo ".SS $$ext" ;\
143 cat extensions/libipt_$$ext.man ;\
144 done >extensions/libipt_targets.man
145 @if [ -n "$(PF_EXT_MAN_EXTRA_TARGETS)" ]; then \
Joszef Kadlecsike4077d02004-06-17 09:02:35 +0000146 extra=$(PF_EXT_MAN_EXTRA_TARGETS) ;\
Joszef Kadlecsikd566c9b2004-06-17 08:48:30 +0000147 for ext in $${extra:-""}; do \
Henrik Nordstromc2794132004-01-22 15:04:24 +0000148 echo ".SS $$ext (not supported, see Patch-O-Matic)" ;\
149 cat extensions/libipt_$$ext.man ;\
150 done ;\
151 fi >>extensions/libipt_targets.man
152
153EXTRAS += extensions/libipt_matches.man
154extensions/libipt_matches.man: $(patsubst %,extensions/libipt_%.man,$(PF_EXT_MAN_ALL_MATCHES))
155 @for ext in $(PF_EXT_MAN_MATCHES); do \
156 echo ".SS $$ext" ;\
157 cat extensions/libipt_$$ext.man ;\
158 done >extensions/libipt_matches.man
159 @if [ -n "$(PF_EXT_MAN_EXTRA_MATCHES)" ]; then \
Joszef Kadlecsike4077d02004-06-17 09:02:35 +0000160 extra=$(PF_EXT_MAN_EXTRA_MATCHES) ;\
Joszef Kadlecsikd566c9b2004-06-17 08:48:30 +0000161 for ext in $${extra:-""}; do \
Henrik Nordstromc2794132004-01-22 15:04:24 +0000162 echo ".SS $$ext (not supported, see Patch-O-Matic)" ;\
163 cat extensions/libipt_$$ext.man ;\
164 done ;\
165 fi >>extensions/libipt_matches.man
166
167EXTRAS += extensions/libip6t_targets.man
168extensions/libip6t_targets.man: $(patsubst %, extensions/libip6t_%.man, $(PF6_EXT_MAN_ALL_TARGETS))
169 @for ext in $(PF6_EXT_MAN_TARGETS); do \
170 echo ".SS $$ext" ;\
171 cat extensions/libip6t_$$ext.man ;\
172 done >extensions/libip6t_targets.man
173 @if [ -n "$(PF6_EXT_MAN_EXTRA_TARGETS)" ]; then \
Joszef Kadlecsike4077d02004-06-17 09:02:35 +0000174 extra=$(PF6_EXT_MAN_EXTRA_TARGETS) ;\
Joszef Kadlecsikd566c9b2004-06-17 08:48:30 +0000175 for ext in $${extra:-""}; do \
Henrik Nordstromc2794132004-01-22 15:04:24 +0000176 echo ".SS $$ext (not supported, see Patch-O-Matic)" ;\
177 cat extensions/libip6t_$$ext.man ;\
178 done ;\
179 fi >>extensions/libip6t_targets.man
180
181EXTRAS += extensions/libip6t_matches.man
182extensions/libip6t_matches.man: $(patsubst %, extensions/libip6t_%.man, $(PF6_EXT_MAN_ALL_MATCHES))
183 @for ext in $(PF6_EXT_MAN_MATCHES); do \
184 echo ".SS $$ext" ;\
185 cat extensions/libip6t_$$ext.man ;\
186 done >extensions/libip6t_matches.man
187 @if [ -n "$(PF6_EXT_MAN_EXTRA_MATCHES)" ]; then \
Joszef Kadlecsike4077d02004-06-17 09:02:35 +0000188 extra=$(PF6_EXT_MAN_EXTRA_MATCHES) ;\
Joszef Kadlecsikd566c9b2004-06-17 08:48:30 +0000189 for ext in $${extra:-""}; do \
Henrik Nordstromc2794132004-01-22 15:04:24 +0000190 echo ".SS $$ext (not supported, see Patch-O-Matic)" ;\
191 cat extensions/libip6t_$$ext.man ;\
192 done ;\
193 fi >>extensions/libip6t_matches.man
194
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +0000195PF_XTLIBS=$(foreach T, $(PFX_EXT_SLIB), $(DEST_IPT_LIBDIR)/libipt_$(T).so)
196$(PF_XTLIBS): $(DEST_IPT_LIBDIR)/libipt_%.so : $(DEST_IPT_LIBDIR)/libxt_%.so
197 @[ -d $(DEST_IPT_LIBDIR)/ ] || mkdir -p $(DEST_IPT_LIBDIR)/
198 ln -sf $< $@
199
200PF6_XTLIBS=$(foreach T, $(PFX_EXT_SLIB), $(DEST_IPT_LIBDIR)/libip6t_$(T).so)
201$(PF6_XTLIBS): $(DEST_IPT_LIBDIR)/libip6t_%.so : $(DEST_IPT_LIBDIR)/libxt_%.so
202 @[ -d $(DEST_IPT_LIBDIR)/ ] || mkdir -p $(DEST_IPT_LIBDIR)/
203 ln -sf $< $@
204
Yasuyuki KOZAKAIdbda07b2007-07-24 06:08:05 +0000205$(DEST_IPT_LIBDIR)/libipt_%.so: extensions/libipt_%.so
206 @[ -d $(DEST_IPT_LIBDIR)/ ] || mkdir -p $(DEST_IPT_LIBDIR)/
Marc Bouchere6869a82000-03-20 06:03:29 +0000207 cp $< $@
Philip Blundell57e07af2000-06-04 17:25:33 +0000208
Yasuyuki KOZAKAIdbda07b2007-07-24 06:08:05 +0000209$(DEST_IPT_LIBDIR)/libip6t_%.so: extensions/libip6t_%.so
210 @[ -d $(DEST_IPT_LIBDIR)/ ] || mkdir -p $(DEST_IPT_LIBDIR)/
Philip Blundell57e07af2000-06-04 17:25:33 +0000211 cp $< $@
Yasuyuki KOZAKAI68c79152007-07-24 06:09:15 +0000212
213$(DEST_IPT_LIBDIR)/libxt_%.so: extensions/libxt_%.so
214 @[ -d $(DEST_IPT_LIBDIR)/ ] || mkdir -p $(DEST_IPT_LIBDIR)/
215 cp $< $@