From ab814d635529787036b3caddb590034a4e6a48e6 Mon Sep 17 00:00:00 2001 From: Andreas Henriksson Date: Mon, 12 Apr 2010 20:24:23 +0200 Subject: [PATCH] iproute2: add option to build m_xt as a tc module (v3) This will build the xt module (action ipt) of tc as a shared object that is linked at runtime by tc if used, rather then built into tc. This is similar to how the atm qdisc support is handled (q_atm.so). Signed-off-by: Andreas Henriksson --- tc/Makefile | 39 +++++++++++++++++++++++++-------------- tc/m_action.c | 2 +- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/tc/Makefile b/tc/Makefile index 805c108..01a16fc 100644 --- a/tc/Makefile +++ b/tc/Makefile @@ -43,19 +43,20 @@ TCMODULES += em_cmp.o TCMODULES += em_u32.o TCMODULES += em_meta.o +TCSO := +ifeq ($(TC_CONFIG_ATM),y) + TCSO += q_atm.so +endif ifeq ($(TC_CONFIG_XT),y) - TCMODULES += m_xt.o - LDLIBS += -lxtables + TCSO += m_xt.so else ifeq ($(TC_CONFIG_XT_OLD),y) - TCMODULES += m_xt_old.o - LDLIBS += -lxtables + TCSO += m_xt_old.so else ifeq ($(TC_CONFIG_XT_OLD_H),y) CFLAGS += -DTC_CONFIG_XT_H - TCMODULES += m_xt_old.o - LDLIBS += -lxtables + TCSO += m_xt_old.so else TCMODULES += m_ipt.o endif @@ -81,14 +82,11 @@ ifneq ($(IPT_LIB_DIR),) CFLAGS += -DIPT_LIB_DIR=\"$(IPT_LIB_DIR)\" endif -TCSO := -ifeq ($(TC_CONFIG_ATM),y) - TCSO += q_atm.so -endif - YACC := bison LEX := flex +MODDESTDIR := $(DESTDIR)$(patsubst /usr%,%,$(LIBDIR))/tc + %.so: %.c $(CC) $(CFLAGS) $(LDFLAGS) -shared -fpic $< -o $@ @@ -101,11 +99,18 @@ libtc.a: $(TCLIB) $(AR) rcs $@ $(TCLIB) install: all - mkdir -p $(DESTDIR)$(LIBDIR)/tc - install -m 0755 tc $(DESTDIR)$(SBINDIR) + echo mkdir -p $(MODDESTDIR) + echo install -m 0755 tc $(DESTDIR)$(SBINDIR) for i in $(TCSO); \ - do install -m 755 $$i $(DESTDIR)$(LIBDIR)/tc; \ + do echo install -m 755 $$i $(MODDESTDIR); \ done + if [ ! -f $(MODDESTDIR)/m_ipt.so ]; then \ + if [ -f $(MODDESTDIR)/m_xt.so ]; \ + then ln -s m_xt.so $(MODDESTDIR)/m_ipt.so ; \ + elif [ -f $(MODDESTDIR)/m_xt_old.so ]; \ + then ln -s m_xt_old.so $(MODDESTDIR)/m_ipt.so ; \ + fi; \ + fi clean: rm -f $(TCOBJ) $(TCLIB) libtc.a tc *.so emp_ematch.yacc.h; \ @@ -114,6 +119,12 @@ clean: q_atm.so: q_atm.c $(CC) $(CFLAGS) $(LDFLAGS) -shared -fpic -o q_atm.so q_atm.c -latm +m_xt.so: m_xt.c + $(CC) $(CFLAGS) $(LDFLAGS) -shared -fpic -o m_xt.so m_xt.c -lxtables + +m_xt_old.so: m_xt_old.c + $(CC) $(CFLAGS) $(LDFLAGS) -shared -fpic -o m_xt_old.so m_xt_old.c -lxtables + %.yacc.c: %.y $(YACC) $(YACCFLAGS) -o $@ $< diff --git a/tc/m_action.c b/tc/m_action.c index 9f24022..a198158 100644 --- a/tc/m_action.c +++ b/tc/m_action.c @@ -98,7 +98,7 @@ restart_s: return a; } - snprintf(buf, sizeof(buf), "m_%s.so", str); + snprintf(buf, sizeof(buf), "%s/m_%s.so", get_tc_lib(), str); dlh = dlopen(buf, RTLD_LAZY); if (dlh == NULL) { dlh = aBODY; -- 2.39.2