# ipvs: IP Virtual Server Module for the NetFilter framework

# uncomment the following line for debugging
DEBUGFLAGS	= -DCONFIG_IP_VS_DEBUG -g

# need to specify the path of kernel source
KERNELSOURCE	= /usr/src/linux


KERNELRELEASE	= $(shell echo -e "\#include <linux/version.h>\nUTS_RELEASE" \
		    > conftest.c &&					     \
		    gcc -E -I$(KERNELSOURCE)/include conftest.c | tail -1    \
		    | cut -d '"' -f 2 && rm -f conftest.c)

KERNELSYMS	= /boot/System.map-$(KERNELRELEASE)

# As per the Linux Kernel's Makefile:
# INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory
# relocations required by build roots.  This is not defined in the
# makefile but the arguement can be passed to make if needed.

MODLIB		= $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)/kernel/net/ipv4/ipvs/

# Set DEPMOD_OPTS if INSTALL_MOD_PATH is not null
ifneq (, $(INSTALL_MOD_PATH))
	DEPMOD_OPTS = -b $(INSTALL_MOD_PATH)
endif

CC		= gcc
CFLAGS		= -D__KERNEL__ -DMODULE -DEXPORT_SYMTAB -DMODVERSIONS	\
		  $(DEBUGFLAGS) -O2 -Wall -Wstrict-prototypes		\
		  -I$(KERNELSOURCE)/include				\
		  -include $(KERNELSOURCE)/include/linux/modversions.h

CORE		= ip_vs.o
CORE_OBJS	= ip_vs_conn.o ip_vs_core.o ip_vs_ctl.o ip_vs_sched.o	\
		  ip_vs_app.o ip_vs_sync.o ip_vs_est.o
SCHEDULERS	= ip_vs_lc.o ip_vs_rr.o ip_vs_wlc.o ip_vs_wrr.o		\
		  ip_vs_lblc.o ip_vs_lblcr.o ip_vs_dh.o ip_vs_sh.o	\
		  ip_vs_sed.o ip_vs_nq.o
APPMODS		= ip_vs_ftp.o


all:		$(CORE) $(SCHEDULERS) $(APPMODS)

ip_vs.o:	$(CORE_OBJS)
		$(LD) -r $^ -o $@

install:	ip_vs.o
		-rmmod ip_vs
		insmod ip_vs.o
		lsmod

modules_install:
		if [ ! -d "$(MODLIB)" ]; then mkdir -p "$(MODLIB)"; fi
		install -m 600 -c $(CORE) $(SCHEDULERS) $(APPMODS) "$(MODLIB)"
		depmod -ae -F $(KERNELSYMS) $(DEPMOD_OPTS) $(KERNELRELEASE)

modules_uninstall:
		(cd "$(MODLIB)"; rm -f $(CORE) $(SCHEDULERS) $(APPMODS))
		rmdir "$(MODLIB)"

clean:
		rm -f *.o *~ *.bak *.orig *.rej

distclean:	clean
		make -C ipvsadm distclean
		rm -f TAGS tags
