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
8 PF_EXT_SLIB:=ah comment connlimit connmark conntrack dscp ecn esp hashlimit helper icmp iprange length limit mac mark multiport owner physdev pkttype realm rpc sctp standard state tcp tcpmss tos ttl udp unclean CLASSIFY CONNMARK DNAT DSCP ECN LOG MARK MASQUERADE MIRROR NETMAP NOTRACK REDIRECT REJECT SAME SNAT TARPIT TCPMSS TOS TRACE TTL ULOG
9 PF6_EXT_SLIB:=eui64 hl icmpv6 length limit mac mark multiport owner physdev standard tcp udp HL LOG MARK TRACE
12 PF_EXT_SLIB_OPTS:=$(foreach T,$(wildcard extensions/.*-test),$(shell KERNEL_DIR=$(KERNEL_DIR) $(T)))
13 PF6_EXT_SLIB_OPTS:=$(foreach T,$(wildcard extensions/.*-test6),$(shell KERNEL_DIR=$(KERNEL_DIR) $(T)))
15 PF_EXT_ALL_SLIB:=$(patsubst extensions/libipt_%.c, %, $(wildcard extensions/libipt_*.c))
16 PF6_EXT_ALL_SLIB:=$(patsubst extensions/libip6t_%.c, %, $(wildcard extensions/libip6t_*.c))
18 PF_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)))
19 PF_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)))
20 PF6_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)))
21 PF6_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)))
23 PF_EXT_MAN_MATCHES:=$(filter $(PF_EXT_ALL_SLIB), $(PF_EXT_MAN_ALL_MATCHES))
24 PF_EXT_MAN_TARGETS:=$(filter $(PF_EXT_ALL_SLIB), $(PF_EXT_MAN_ALL_TARGETS))
25 PF_EXT_MAN_EXTRA_MATCHES:=$(filter-out $(PF_EXT_MAN_MATCHES), $(PF_EXT_MAN_ALL_MATCHES))
26 PF_EXT_MAN_EXTRA_TARGETS:=$(filter-out $(PF_EXT_MAN_TARGETS), $(PF_EXT_MAN_ALL_TARGETS))
27 PF6_EXT_MAN_MATCHES:=$(filter $(PF6_EXT_ALL_SLIB), $(PF6_EXT_MAN_ALL_MATCHES))
28 PF6_EXT_MAN_TARGETS:=$(filter $(PF6_EXT_ALL_SLIB), $(PF6_EXT_MAN_ALL_TARGETS))
29 PF6_EXT_MAN_EXTRA_MATCHES:=$(filter-out $(PF6_EXT_MAN_MATCHES), $(PF6_EXT_MAN_ALL_MATCHES))
30 PF6_EXT_MAN_EXTRA_TARGETS:=$(filter-out $(PF6_EXT_MAN_TARGETS), $(PF6_EXT_MAN_ALL_TARGETS))
34 @echo ALL_SLIB: $(PF_EXT_ALL_SLIB)
35 @echo ALL_MATCH: $(PF_EXT_MAN_ALL_MATCHES)
36 @echo ALL_TARGET: $(PF_EXT_MAN_ALL_TARGETS)
38 PF_EXT_SLIB+=$(PF_EXT_SLIB_OPTS)
39 PF6_EXT_SLIB+=$(PF6_EXT_SLIB_OPTS)
41 OPTIONALS+=$(patsubst %,IPv4:%,$(PF_EXT_SLIB_OPTS))
42 OPTIONALS+=$(patsubst %,IPv6:%,$(PF6_EXT_SLIB_OPTS))
45 SHARED_LIBS+=$(foreach T,$(PF_EXT_SLIB),extensions/libipt_$(T).so)
46 EXTRA_INSTALLS+=$(foreach T, $(PF_EXT_SLIB), $(DESTDIR)$(LIBDIR)/iptables/libipt_$(T).so)
49 SHARED_LIBS+=$(foreach T,$(PF6_EXT_SLIB),extensions/libip6t_$(T).so)
50 EXTRA_INSTALLS+=$(foreach T, $(PF6_EXT_SLIB), $(DESTDIR)$(LIBDIR)/iptables/libip6t_$(T).so)
53 EXT_OBJS+=$(foreach T,$(PF_EXT_SLIB),extensions/libipt_$(T).o)
54 EXT_FUNC+=$(foreach T,$(PF_EXT_SLIB),ipt_$(T))
55 EXT_OBJS+= extensions/initext.o
57 EXT6_OBJS+=$(foreach T,$(PF6_EXT_SLIB),extensions/libip6t_$(T).o)
58 EXT6_FUNC+=$(foreach T,$(PF6_EXT_SLIB),ip6t_$(T))
59 EXT6_OBJS+= extensions/initext6.o
61 endif # NO_SHARED_LIBS
63 ifndef TOPLEVEL_INCLUDED
65 cd .. && $(MAKE) $(SHARED_LIBS)
69 extensions/libext.a: $(EXT_OBJS)
70 rm -f $@; ar crv $@ $(EXT_OBJS)
72 extensions/libext6.a: $(EXT6_OBJS)
73 rm -f $@; ar crv $@ $(EXT6_OBJS)
75 extensions/initext.o: extensions/initext.c
76 extensions/initext6.o: extensions/initext6.c
78 extensions/initext.c: extensions/Makefile
80 for i in $(EXT_FUNC); do \
81 echo "extern void $${i}_init(void);" >> $@; \
83 echo "void init_extensions(void) {" >> $@
84 for i in $(EXT_FUNC); do \
85 echo " $${i}_init();" >> $@; \
89 extensions/initext6.c: extensions/Makefile
91 for i in $(EXT6_FUNC); do \
92 echo "extern void $${i}_init(void);" >> $@; \
94 echo "void init_extensions(void) {" >> $@
95 for i in $(EXT6_FUNC); do \
96 echo " $${i}_init();" >> $@; \
100 extensions/lib%.o: extensions/lib%.c
101 $(CC) $(CFLAGS) -D_INIT=$*_init -c -o $@ $<
105 EXTRAS += extensions/libipt_targets.man
106 extensions/libipt_targets.man: $(patsubst %,extensions/libipt_%.man,$(PF_EXT_MAN_ALL_TARGETS))
107 @for ext in $(PF_EXT_MAN_TARGETS); do \
109 cat extensions/libipt_$$ext.man ;\
110 done >extensions/libipt_targets.man
111 @if [ -n "$(PF_EXT_MAN_EXTRA_TARGETS)" ]; then \
112 extra=$(PF_EXT_MAN_EXTRA_TARGETS) ;\
113 for ext in $${extra:-""}; do \
114 echo ".SS $$ext (not supported, see Patch-O-Matic)" ;\
115 cat extensions/libipt_$$ext.man ;\
117 fi >>extensions/libipt_targets.man
119 EXTRAS += extensions/libipt_matches.man
120 extensions/libipt_matches.man: $(patsubst %,extensions/libipt_%.man,$(PF_EXT_MAN_ALL_MATCHES))
121 @for ext in $(PF_EXT_MAN_MATCHES); do \
123 cat extensions/libipt_$$ext.man ;\
124 done >extensions/libipt_matches.man
125 @if [ -n "$(PF_EXT_MAN_EXTRA_MATCHES)" ]; then \
126 extra=$(PF_EXT_MAN_EXTRA_MATCHES) ;\
127 for ext in $${extra:-""}; do \
128 echo ".SS $$ext (not supported, see Patch-O-Matic)" ;\
129 cat extensions/libipt_$$ext.man ;\
131 fi >>extensions/libipt_matches.man
133 EXTRAS += extensions/libip6t_targets.man
134 extensions/libip6t_targets.man: $(patsubst %, extensions/libip6t_%.man, $(PF6_EXT_MAN_ALL_TARGETS))
135 @for ext in $(PF6_EXT_MAN_TARGETS); do \
137 cat extensions/libip6t_$$ext.man ;\
138 done >extensions/libip6t_targets.man
139 @if [ -n "$(PF6_EXT_MAN_EXTRA_TARGETS)" ]; then \
140 extra=$(PF6_EXT_MAN_EXTRA_TARGETS) ;\
141 for ext in $${extra:-""}; do \
142 echo ".SS $$ext (not supported, see Patch-O-Matic)" ;\
143 cat extensions/libip6t_$$ext.man ;\
145 fi >>extensions/libip6t_targets.man
147 EXTRAS += extensions/libip6t_matches.man
148 extensions/libip6t_matches.man: $(patsubst %, extensions/libip6t_%.man, $(PF6_EXT_MAN_ALL_MATCHES))
149 @for ext in $(PF6_EXT_MAN_MATCHES); do \
151 cat extensions/libip6t_$$ext.man ;\
152 done >extensions/libip6t_matches.man
153 @if [ -n "$(PF6_EXT_MAN_EXTRA_MATCHES)" ]; then \
154 extra=$(PF6_EXT_MAN_EXTRA_MATCHES) ;\
155 for ext in $${extra:-""}; do \
156 echo ".SS $$ext (not supported, see Patch-O-Matic)" ;\
157 cat extensions/libip6t_$$ext.man ;\
159 fi >>extensions/libip6t_matches.man
161 $(DESTDIR)$(LIBDIR)/iptables/libipt_%.so: extensions/libipt_%.so
162 @[ -d $(DESTDIR)$(LIBDIR)/iptables ] || mkdir -p $(DESTDIR)$(LIBDIR)/iptables
165 $(DESTDIR)$(LIBDIR)/iptables/libip6t_%.so: extensions/libip6t_%.so
166 @[ -d $(DESTDIR)$(LIBDIR)/iptables ] || mkdir -p $(DESTDIR)$(LIBDIR)/iptables