CC := gcc
LD := ld
STRIP := strip
RM := rm -f
INSTALL := install
KERNEL_BASE := /usr/src/linux
NF_BASE := ..
PERL_BASE := $(shell perl -e 'use Config; print $$Config{archlibexp}, "\n";')
INSTALL_BASE := $(shell perl -e 'use Config; print $$Config{siteprefixexp}, "\n";')
KERNEL_INC := $(KERNEL_BASE)/include
NF_INC := $(NF_BASE)/include
PERL_INC := $(PERL_BASE)/CORE
ifndef INSTALL_DIR
INSTALL_DIR := $(INSTALL_BASE)/lib/IPTables-IPv4
endif
CFLAGS := -I$(KERNEL_INC) -I$(NF_INC) -I$(PERL_INC) -I.. -Wall -O2 -Wundef
# Basic protocol modules for IPTables::IPv4
MODULE_NAMES := icmp tcp udp ah esp
# Standard external targets
MODULE_NAMES += DNAT LOG MARK MASQUERADE MIRROR REDIRECT REJECT SNAT TOS standard
# Standard matches
MODULE_NAMES += limit mac mark multiport owner state tos unclean
MODULE_NAMES += DSCP ECN FTOS TARPIT TCPMSS TTL ULOG
MODULE_NAMES += ecn dscp iplimit tcpmss ttl
# Default module for IPTables::IPv6
V6_MODULE_NAMES := eui64 hl icmpv6 length limit mac mark multiport owner standard tcp udp HL LOG MARK
# Pick up any modules that are supposed to be conditional
MODULE_NAMES += $(foreach T,$(wildcard ./.*-test),$(shell KERNEL_DIR=$(KERNEL_BASE) sh $(T)))
V6_MODULE_NAMES += $(foreach T,$(wildcard ./.*-test6),$(shell KERNEL_DIR=$(KERNEL_BASE) sh $(T)))
MODULE_LIST := $(foreach T,$(MODULE_NAMES),ipt_pl_$(T).so)
V6_MODULE_LIST := $(foreach T,$(V6_MODULE_NAMES),ip6t_pl_$(T).so)
default: all
clean:
-$(RM) *.so *.o
all: $(MODULE_LIST) $(V6_MODULE_LIST)
@echo "Module build complete."
%.so: %.o
$(LD) -shared -o $@ $<
%.o: %.c
$(CC) -o $@ -c $< $(CFLAGS)
strip: $(MODULE_LIST) $(V6_MODULE_LIST)
$(STRIP) $^
install: all strip
@echo "Installing modules in $(INSTALL_DIR):"
$(INSTALL) -d -m 755 $(INSTALL_DIR)
$(INSTALL) -m 644 $(MODULE_LIST) $(V6_MODULE_LIST) $(INSTALL_DIR)