From dbd934e9fe368aacc3d56e2d121d24c56e1a9a55 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 25 Feb 2018 23:19:44 +0000 Subject: [PATCH] dynamic linking FossilOrigin-Name: fb76bfb278b3ba6d0caf0c4a67f739c020c778623239db0efe950ae8311ca34f --- .gitignore | 3 + actube.workspace | 4 +- src/ACConfig.mak | 7 +-- src/{CapwapConfig.mak => CWConfig.mak} | 0 src/Config.mak | 36 ++++++++---- src/Macros.mak | 4 -- src/ac/Makefile | 41 +++++++------ src/ac/ac_main.c | 8 +-- src/ac/conf.c | 2 +- src/cw/Makefile | 79 ++++++++++---------------- src/cw/mbag.c | 13 +++-- src/cw/mod.c | 28 +++++++-- src/cw/mod.h | 2 +- src/mod/capwap/mod_capwap_ac.c | 5 ++ 14 files changed, 122 insertions(+), 110 deletions(-) rename src/{CapwapConfig.mak => CWConfig.mak} (100%) diff --git a/.gitignore b/.gitignore index 50b47adf..1d3e5b1a 100644 --- a/.gitignore +++ b/.gitignore @@ -47,4 +47,7 @@ ssl/intermediate-ca/ # other stuff .codelite/ +lib/ +obj/ +bin/ diff --git a/actube.workspace b/actube.workspace index e0162c79..b8870938 100644 --- a/actube.workspace +++ b/actube.workspace @@ -3,9 +3,9 @@ - + - + diff --git a/src/ACConfig.mak b/src/ACConfig.mak index a010dc95..b8bd23b5 100644 --- a/src/ACConfig.mak +++ b/src/ACConfig.mak @@ -1,8 +1,7 @@ include ../Config.mak -#Define SSL Library: OPENSSL or GNUTLS -#SSL_LIBRARY=OPENSSL -SSL_LIBRARY=GNUTLS - +# Define SSL Library: OPENSSL or GNUTLS +# SSL_LIBRARY=OPENSSL +SSL_LIBRARY=OPENSSL diff --git a/src/CapwapConfig.mak b/src/CWConfig.mak similarity index 100% rename from src/CapwapConfig.mak rename to src/CWConfig.mak diff --git a/src/Config.mak b/src/Config.mak index 1c0f0f40..2d0e2e69 100644 --- a/src/Config.mak +++ b/src/Config.mak @@ -1,25 +1,37 @@ - # # OpenSSL definitions # -#OPENSSL_VERSION=openssl-1.0.1l # doesn't work -#OPENSSL_VERSION=openssl-1.0.2 # doesn't work -OPENSSL_VERSION=openssl-1.0.1i +# OPENSSL_VERSION=openssl-1.0.1i USE_CONTRIB_OPENSSL=0 # GnuTLS definitions -GNUTLS_VERSION=3.3.9 +# GNUTLS_VERSION=3.3.9 + USE_CONTRIB_GNUTLS=0 # Compiler to use -CC=clang -#CC=gcc -#CC=mips-openwrt-linux-uclibc-gcc -#LD=mips-openwrt-linux-uclibc-ld -#AR=mips-openwrt-linux-uclibc-ar - - +# CC=clang +# CC=mips-openwrt-linux-uclibc-gcc +# LD=mips-openwrt-linux-uclibc-ld +# AR=mips-openwrt-linux-uclibc-ar +# CC=clang COMPDEFS=-DWITH_CW_LOG COMPDEFS+=-DWITH_CW_LOG_DEBUG + +# LIBCW settings + +# WITH_GNUTLS +# compile in support for GnuTLS +# +WITH_GNUTLS=1 + +# Compile in openssl support +WITH_OPENSSL=1 + +# +# +LIBDIR=lib + + diff --git a/src/Macros.mak b/src/Macros.mak index 1b0f1e6b..d58ae344 100644 --- a/src/Macros.mak +++ b/src/Macros.mak @@ -9,16 +9,12 @@ endif ifeq ($(USE_CONTRIB_GNUTLS),1) GNUTLS_CFLAGS=-I../contrib/gnutls-${GNUTLS_VERSION}/lib/includes -#GNUTLS_LIBS=-lnettle -lgmp ../contrib/gnutls-${GNUTLS_VERSION}/lib/.libs/libgnutls.a GNUTLS_LIBS=-lgmp -lgnutls -lnettle - GNUTLS_LDFLAGS=-L../contrib/gnutls-${GNUTLS_VERSION}/lib/.libs/ else GNUTLS_CFLAGS= GNUTLS_LIBS=-lgnutls -lnettle -lgmp GNUTLS_LDFLAGS= -#-lgnutls -lnettle -lgmp - endif diff --git a/src/ac/Makefile b/src/ac/Makefile index cdbbcdfe..53bfbe2b 100644 --- a/src/ac/Makefile +++ b/src/ac/Makefile @@ -1,25 +1,21 @@ - -include ../ACConfig.mak include ../Macros.mak - -ifndef CC - CC=gcc -endif -#SYSARCH := $(shell uname -m) -ifndef ARCH - ARCH = $(shell $(CC) -dumpmachine) -endif - -LDFLAGS+=-g -D_REENTRANT -L/usr/local/lib -L../lib/$(ARCH) -CFLAGS += -Wall -g -O0 -D_REENTRANT -DIPV6 -I/usr/local/include -I../ -DSYS_ARCH=\"${ARCH}\" +include ../Config.mak +include ../ACConfig.mak +-include ../Config.local.mak -LIBS+=-lcapwap -LIBS+=-lcapwap80211 -LIBS+=-lcipwap -LIBS+=-lcisco -LIBS+=-lfortinet -LIBS+=-lzyxel +LIBARCHDIR=../../lib/$(ARCH) + +LDFLAGS+=-g -D_REENTRANT -L/usr/local/lib -L$(LIBARCHDIR) +CFLAGS += -W -g -O0 -D_REENTRANT -DIPV6 -I/usr/local/include -I../ -DSYS_ARCH=\"${ARCH}\" + + +#LIBS+=-lcapwap +#LIBS+=-lcapwap80211 +#LIBS+=-lcipwap +#LIBS+=-lcisco +#LIBS+=-lfortinet +#LIBS+=-lzyxel LIBS+=-lcw LIBS+=-lrt LIBS+=-lpthread @@ -52,7 +48,7 @@ CFLAGS += -DWITH_IPV6 RM = /bin/rm -f -AC_MODULES = mod_cipwap.o +#AC_MODULES = mod_cipwap.o # list of generated object files for AC. @@ -78,12 +74,13 @@ AC_NAME = actube all: $(AC_NAME) %.o:%.c - @echo " CC "$< + @echo " $(CC) "$< @$(CC) -c $(CFLAGS) $< -o $@ $(AC_NAME): $(AC_OBJS) - $(CC) $(AC_OBJS) ../mod/modload_ac.o -o $(AC_NAME) $(LDFLAGS) $(LIBS) +# $(CC) $(AC_OBJS) ../mod/modload_ac.o -o $(AC_NAME) $(LDFLAGS) $(LIBS) + $(CC) $(AC_OBJS) -o $(AC_NAME) $(LDFLAGS) $(LIBS) clean: diff --git a/src/ac/ac_main.c b/src/ac/ac_main.c index 61484bb9..e852a35d 100644 --- a/src/ac/ac_main.c +++ b/src/ac/ac_main.c @@ -99,10 +99,6 @@ int main(int argc, char *argv[]) - cw_mod_add_dynamic("../../lib/actube/capwap.so" ); - - exit(0); - @@ -128,6 +124,10 @@ int main(int argc, char *argv[]) developers is turned on ;) */ DBGX("Attention! %s", "DBG X is ON!"); + cw_mod_add_dynamic("../../lib/actube","capwap"); + + exit(0); + test_sets(); exit(0); diff --git a/src/ac/conf.c b/src/ac/conf.c index 38506b49..bf683a1e 100644 --- a/src/ac/conf.c +++ b/src/ac/conf.c @@ -574,7 +574,7 @@ static int conf_read_mods(cfg_t *cfg){ for (i=0; i < n; i++){ char *modname = cfg_getnstr(cfg, CFG_ENTRY_MODS, i); - conf_mods[i] = modload_ac(modname); + conf_mods[i] = NULL; //modload_ac(modname); if (!conf_mods[i]){ cw_log(LOG_ERR,"Can't load mod: %s",modname); return 0; diff --git a/src/cw/Makefile b/src/cw/Makefile index f5bf9feb..25233b89 100644 --- a/src/cw/Makefile +++ b/src/cw/Makefile @@ -1,25 +1,16 @@ -include ../CapwapConfig.mak include ../Macros.mak - -ifndef CC - CC=gcc -endif - -ifndef AR - AR = ar -endif - -#ifndef ARCH -# ARCH = $(shell $(CC) -dumpmachine) -#endif +include ../CWConfig.mak +-include ../Config.local.mak +LIBARCHDIR := ../../lib/$(ARCH) +OBJDIR := ../../obj/cw/$(ARCH) -#OPENSSLINC=$(OPENSSLINC) -#../contrib/openssl-1.0.1i/include +SNAME := $(LIBARCHDIR)/libcw.a +DNAME := $(LIBARCHDIR)/libcw.so + +LDFLAGS+=-g -D_REENTRANT -L/usr/local/lib -NAME=libcw.a -LIBDIR=../lib/$(ARCH) SOCKOBJS=\ sock_create.o\ @@ -203,6 +194,8 @@ CAPWAP80211OBJS=\ # SSL objects # +LIBS= + ifeq ($(WITH_OPENSSL),1) CFLAGS+=$(OPENSSL_CFLAGS) CFLAGS+=-DWITH_OPENSSL @@ -211,6 +204,7 @@ DTLSOBJS += dtls_openssl.o \ dtls_openssl_connect.o \ dtls_openssl_get_cipher.o \ dtls_openssl_bio.o +LIBS+=-lssl endif ifeq ($(WITH_GNUTLS),1) @@ -222,6 +216,7 @@ DTLSOBJS+= dtls_gnutls.o \ dtls_gnutls_bio.o \ dtls_gnutls_get_cipher.o \ dtls_gnutls_get_peers_cert.o +LIBS+=-lgnutls endif DTLSOBJS+=dtls_bio.o @@ -323,18 +318,15 @@ OBJS=$(CONNOBJS) $(FRAGOBJS) $(SOCKOBJS) $(CAPWAPOBJS) $(WTPINFOOBJS) \ $(MBAGOBJS) \ $(CAPWAP80211OBJS) -#include $(OBJS:.o=.d) - O:=$(OBJS); -OBJS:=$(patsubst %.o,$(ARCH)/%.o,$(OBJS)) +OBJS:=$(patsubst %.o,$(OBJDIR)/%.o,$(OBJS)) +all: $(SNAME) $(DNAME) - -CFLAGS = -Wall -fPIC -g -O0 -D_REENTRANT -DWITH_IPV6 -DWITH_RMAC_SUPPORT -I /usr/local/include -I../ -#CFLAGS = -Wall -Os -D_REENTRANT -DWITH_IPV6 -DWITH_RMAC_SUPPORT -I/usr/local/include +CFLAGS = -W -fPIC -g -O0 -D_REENTRANT -DWITH_IPV6 -DWITH_RMAC_SUPPORT -I /usr/local/include -I../ CFLAGS += $(GNUTLS_CFLAGS) \ -DWITH_CW_LOG \ @@ -345,22 +337,21 @@ CFLAGS += $(GNUTLS_CFLAGS) \ -Werror - - -#SRCS = $(OBJS:.o=.c) -#MODOBJS=$(wildcard ./mod/cipwap/$(ARCH)/*.o) -#MODOBJS+=$(wildcard ./mod/capwap/$(ARCH)/*.o) - -$(ARCH)/%.o:%.c - @mkdir -p $(ARCH) - @echo " CC "$< +$(OBJDIR)/%.o:%.c + @mkdir -p $(OBJDIR) + @echo " $(CC) "$< @$(CC) -c $(CFLAGS) $< -o $@ -# @$(CC) -MM $(CFLAGS) $< > $*.d -$(LIBDIR)/$(NAME) : $(OBJS) $(MODOBJS) - @mkdir -p $(LIBDIR) - @echo " AR $(LIBDIR)/$(NAME)" - @$(AR) rcs $(LIBDIR)/$(NAME) $(OBJS) $(MODOBJS) +$(SNAME) : $(OBJS) $(MODOBJS) + @mkdir -p $(LIBARCHDIR) + @echo " AR $(SNAME)" + @$(AR) rcs $(SNAME) $(OBJS) $(MODOBJS) + +$(DNAME) : $(OBJS) $(MODOBJS) + @mkdir -p $(LIBARCHDIR) + @echo " AR $(DNAME)" + @$(CC) $(LDFLAGS) -shared -o $(DNAME) $(OBJS) $(MODOBJS) $(LIBS) + SRCS = $(OBJS:.o=.c) @@ -370,19 +361,11 @@ DEPS := $(OBJS:.o=.d) .PHONY: deps clean clean_libs libs -# top-level rule, to compile everything. -all: $(ARCH)/$(NAME) - - - - clean: - $(RM) $(ARCH)/* - $(RM) $(LIBDIR)/$(NAME) -# $(RM) $(OBJS) -# $(RM) $(DEPS) -# $(RM) $(ARCH)/$(NAME) + $(RM) $(OBJDIR)/* + $(RM) $(DNAME) + $(RM) $(SNAME) clean_deps: diff --git a/src/cw/mbag.c b/src/cw/mbag.c index 0829e848..e2ff03e1 100644 --- a/src/cw/mbag.c +++ b/src/cw/mbag.c @@ -94,14 +94,15 @@ static void mbag_type_mbag_del(void *i) mavl_destroy(x); } -const struct mbag_typedef mbag_type_mbag = { +/*const struct mbag_typedef mbag_type_mbag = { +# "mbag",mbag_type_mbag_del +}; +*/ + +/*const struct mbag_typedef mbag_type_mbag_dyn = { "mbag",mbag_type_mbag_del }; - -const struct mbag_typedef mbag_type_mbag_dyn = { - "mbag",mbag_type_mbag_del -}; - +*/ static void mbag_del_data(struct mbag_item *i) { diff --git a/src/cw/mod.c b/src/cw/mod.c index d7272259..fd6ce57b 100644 --- a/src/cw/mod.c +++ b/src/cw/mod.c @@ -182,16 +182,32 @@ int cw_mod_add(struct cw_Mod * (*modfn)() ){ } -int cw_mod_add_dynamic(const char * filename){ +int cw_mod_add_dynamic(const char * path, const char * mod_name){ + + char * filename = malloc(strlen(path)+strlen(mod_name)+8); + if (!filename) + return 0; + strcpy(filename,path); + strcat(filename,"/"); + strcat(filename,mod_name); + strcat(filename,".so"); + + int rc=0; + void * handle; handle = dlopen(filename,RTLD_NOW); if (!handle){ - printf("Error: %s",dlerror()); + cw_log(LOG_ERROR,"Failed to load module: %s",dlerror()); + goto errX; } - printf("Load DLL %p\n",handle); + void * ifu = dlsym(handle,"mod_get_interface"); + if (!ifu){ + cw_log(LOG_ERROR,"Failed to load module: %s",dlerror()); + goto errX; + } - void * ifu = dlsym(handle,"bstr_create"); - - printf("IFU DLL %p\n",ifu); +errX: + free(filename); + return rc; } \ No newline at end of file diff --git a/src/cw/mod.h b/src/cw/mod.h index 97558c72..e5d8d26c 100644 --- a/src/cw/mod.h +++ b/src/cw/mod.h @@ -84,6 +84,6 @@ extern int mod_caching; #define mod_set_caching(var) (mod_caching=var) #define mod_get_caching() (mod_caching) -extern int cw_mod_add_dynamic(const char * filename); +extern int cw_mod_add_dynamic(const char * path, const char * file); #endif diff --git a/src/mod/capwap/mod_capwap_ac.c b/src/mod/capwap/mod_capwap_ac.c index 84faeac1..37ac3278 100644 --- a/src/mod/capwap/mod_capwap_ac.c +++ b/src/mod/capwap/mod_capwap_ac.c @@ -53,3 +53,8 @@ struct cw_Mod *mod_capwap_ac() { return &capwap_ac; }; + + +struct cw_Mod * mod_get_interface(){ + return &capwap_ac; +} \ No newline at end of file