1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

moving generic node code to libs2ss to be reusable across server, send, receive, test and 3party executables

This commit is contained in:
Steffen Vogel 2015-11-23 16:44:01 +01:00
parent 9f82b91f2b
commit 3b6e7ef70c
9 changed files with 126 additions and 64 deletions

1
server/.gitignore vendored
View file

@ -2,6 +2,7 @@ logs/
*.d
*.o
*.so
*~
server

View file

@ -1,72 +1,82 @@
# Executables
TARGETS = server send random receive test
# Common objs
OBJS = path.o node.o hooks.o msg.o cfg.o
# Helper libs
OBJS += utils.o list.o hist.o log.o timing.o checks.o
# Libraries
LIBS = libs2ss.so
VPATH = src
# Common objs
OBJS = path.o hooks.o cfg.o utils.o list.o hist.o log.o timing.o checks.o
# Object files for libs2ss
LIB_OBJS = msg.o node.o checks.o list.o
# Source directories
VPATH = src lib
# Default debug level
V ?= 2
# Compiler and linker flags
CC = gcc
LDLIBS = -pthread -lrt -lm -lconfig
override CFLAGS += -std=gnu99 -Iinclude/ -MMD -Wall
override CFLAGS += -D_POSIX_C_SOURCE=200809L -D_GNU_SOURCE=1 -DV=$(V)
LDLIBS = -pthread -lrt -lm -lconfig -ls2ss
LDFLAGS = -Wl,-L.
CFLAGS += -std=gnu99 -Iinclude/ -MMD -Wall
CFLAGS += -D_POSIX_C_SOURCE=200809L -D_GNU_SOURCE=1 -DV=$(V)
# Add more compiler flags
ifdef DEBUG
override CFLAGS += -O0 -g
CFLAGS += -O0 -g
else
override CFLAGS += -O3
CFLAGS += -O3
endif
ifneq (,$(shell which git))
override CFLAGS += -D_GIT_REV='"$(shell git rev-parse --short HEAD)"'
CFLAGS += -D_GIT_REV='"$(shell git rev-parse --short HEAD)"'
endif
######## Node types ########
# Enable file node type support
ifndef DISABLE_FILE
override CFLAGS += -DENABLE_FILE
OBJS += file.o
LIB_OBJS += file.o
endif
# Enable Socket node type when libnl3 is available
ifeq ($(shell pkg-config libnl-3.0; echo $$?),0)
override CFLAGS += -DENABLE_SOCKET $(shell pkg-config --cflags libnl-3.0)
LDLIBS += -lnl-3 -lnl-route-3
OBJS += nl.o tc.o if.o socket.o
LIB_OBJS += socket.o nl.o tc.o if.o
LIB_CFLAGS += $(shell pkg-config --cflags libnl-3.0)
LIB_LDLIBS += -lnl-3 -lnl-route-3
endif
# Enable GTFPGA support when libpci is available
ifeq ($(shell pkg-config libpci; echo $$?),0)
override CFLAGS += -DENABLE_GTFPGA $(shell pkg-config --cflags libpci)
LDLIBS += $(shell pkg-config --libs libpci)
OBJS += gtfpga.o
LIB_OBJS += gtfpga.o
LIB_CFLAGS += $(shell pkg-config --cflags libpci)
LIB_LDLIBS += $(shell pkg-config --libs libpci)
endif
# Enable NGSI support
ifeq ($(shell pkg-config libcurl jansson uuid; echo $$?),0)
override CFLAGS += -DENABLE_NGSI $(shell pkg-config --cflags libcurl jansson uuid)
LDLIBS += $(shell pkg-config --libs libcurl jansson uuid)
OBJS += ngsi.o
LIB_OBJS += ngsi.o
LIB_CFLAGS += $(shell pkg-config --cflags libcurl jansson uuid)
LIB_LDLIBS += $(shell pkg-config --libs libcurl jansson uuid)
endif
# Enable OPAL-RT Asynchronous Process support (will result in 32bit binary!!!)
ifneq (,$(wildcard $(OPALDIR)/include_target/AsyncApi.h))
override CFLAGS += -m32 -DENABLE_OPAL_ASYNC
LDFLAGS += -m32 -Wl,-L/lib/i386-linux-gnu/,-L/usr/lib/i386-linux-gnu/
LDLIBS += $(addprefix $(OPALDIR)/lib/redhawk/, libOpalAsyncApiCore.a libOpalCore.a libOpalUtils.a libirc.a)
OBJS += opal.o
LIB_OBJS += opal.o
LIB_CFLAGS += -m32 -I$(OPALDIR)/include_target
LIB_LDFLAGS += -m32 -Wl,-L/lib/i386-linux-gnu/,-L/usr/lib/i386-linux-gnu/,-L$(OPALDIR)/lib/redhawk/
LIB_LDLIBS += -lOpalAsyncApiCore -lOpalCore -lOpalUtils -lirc
endif
.PHONY: all clean strip protected
######## Targets ########
.PHONY: all clean install
# Default target: build everything
all: $(TARGETS)
all: $(LIBS) $(TARGETS)
# Dependencies for individual binaries
server: server.o $(OBJS)
@ -75,9 +85,15 @@ receive: receive.o $(OBJS)
test: test.o $(OBJS)
random: random.o msg.o utils.o timing.o log.o
lib/%.o:
$(CC) $(LIB_CFLAGS) -o $@ $^
libs2ss.so: CFLAGS += -fPIC $(LIB_CFLAGS)
libs2ss.so: $(LIB_OBJS)
$(CC) $(LIB_LDFLAGS) $(LIB_LDLIBS) -shared -o $@ $^
clean:
$(RM) *~ *.o *.d
$(RM) *~ *.o *.d *.so
$(RM) $(TARGETS)
# Include auto-generated dependencies

View file

@ -27,14 +27,9 @@
#include "list.h"
/* Helper macros for virtual node type */
#define REGISTER_NODE_TYPE(type, name, fnc) \
__attribute__((constructor)) void __register_node_ ## fnc () { \
static struct node_type t = { name, type, \
fnc ## _parse, fnc ## _print, \
fnc ## _open, fnc ## _close, \
fnc ## _read, fnc ## _write, \
fnc ## _init, fnc ## _deinit };\
list_push(&node_types, &t); \
#define REGISTER_NODE_TYPE(vt) \
__attribute__((constructor)) static void __register() { \
list_push(&node_types, vt); \
}
extern struct list node_types;
@ -43,6 +38,8 @@ extern struct list node_types;
struct node_type {
/** The unique name of this node. This must be allways the first member! */
const char *name;
/** A short description of this node type. Will be shown in help text. */
const char *description;
/** A list of all existing nodes of this type. */
struct list instances;
@ -58,13 +55,6 @@ struct node_type {
*/
int (*init)(int argc, char *argv[], struct settings *set);
enum {
BSD_SOCKET, /**< BSD Socket API */
LOG_FILE, /**< File IO */
OPAL_ASYNC, /**< OPAL-RT Asynchronous Process Api */
GTFPGA, /**< Xilinx ML507 GTFPGA card */
NGSI /**< NGSI 9/10 HTTP RESTful API (FIRWARE ContextBroker) */
} type; /**< Node type */
/** Global de-initialization per node type.
*
* This callback is invoked once per node-type.

View file

@ -371,4 +371,16 @@ int file_write(struct node *n, struct msg *pool, int poolsize, int first, int cn
return i;
}
REGISTER_NODE_TYPE(LOG_FILE, "file", file)
static struct node_type vt = {
.name = "file",
.description = "support for file log / replay node type",
.reverse = file_reverse,
.parse = file_parse,
.print = file_print,
.open = file_open,
.close = file_close,
.read = file_read,
.write = file_write
};
REGISTER_NODE_TYPE(&vt)

View file

@ -267,4 +267,17 @@ int gtfpga_write(struct node *n, struct msg *pool, int poolsize, int first, int
return 0;
}
REGISTER_NODE_TYPE(GTFPGA, "gtfpga", gtfpga)
static struct node_type vt = {
.name = "gtfpga",
.description = "GTFPGA PCIe card (libpci)",
.parse = gtfpga_parse,
.print = gtfpga_print,
.open = gtfpga_open,
.close = gtfpga_close,
.read = gtfpga_read,
.write = gtfpga_write,
.init = gtfpga_init,
.deinit = gtfpga_deinit
};
REGISTER_NODE_TYPE(&vt)

View file

@ -586,4 +586,17 @@ int ngsi_write(struct node *n, struct msg *pool, int poolsize, int first, int cn
return ret ? 0 : cnt;
}
REGISTER_NODE_TYPE(NGSI, "ngsi", ngsi)
static struct node_type vt = {
.name = "ngsi",
.description = "OMA Next Generation Services Interface 10 (libcurl, libjansson, libuuid)",
.parse = ngsi_parse,
.print = ngsi_print,
.open = ngsi_open,
.close = ngsi_close,
.read = ngsi_read,
.write = ngsi_write,
.init = ngsi_init,
.deinit = ngsi_deinit
};
REGISTER_NODE_TYPE(&vt)

View file

@ -284,4 +284,17 @@ int opal_write(struct node *n, struct msg *pool, int poolsize, int first, int cn
return 1;
}
REGISTER_NODE_TYPE(OPAL_ASYNC, "opal", opal)
static struct node_type vt = {
.name = "opal",
.description = "run as OPAL Asynchronous Process (libOpalAsyncApi)",
.parse = opal_parse,
.print = opal_print,
.open = opal_open,
.close = opal_close,
.read = opal_read,
.write = opal_write,
.init = opal_init,
.deinit = opal_deinit
};
REGISTER_NODE_TYPE(&vt)

View file

@ -107,21 +107,8 @@ static void usage(const char *name)
printf(" See in the RT-LAB User Guide for more information.\n\n");
#endif
printf("Supported node types:\n");
#ifdef ENABLE_FILE
printf(" - file: support for file log / replay node type\n");
#endif
#ifdef ENABLE_SOCKET
printf(" - socket: Network socket (libnl3)\n");
#endif
#ifdef ENABLE_GTFPGA
printf(" - gtfpga: GTFPGA PCIe card (libpci)\n");
#endif
#ifdef ENABLE_OPAL_ASYNC
printf(" - opal: run as OPAL Asynchronous Process (libOpalAsyncApi)\n");
#endif
#ifdef ENABLE_NGSI
printf(" - ngsi: OMA Next Generation Services Interface 10 (libcurl, libjansson, libuuid)\n");
#endif
list_foreach(struct node_type *vt, &node_types)
printf(" - %s: %s\n", vt->name, vt->description);
printf("\n");
printf("Simulator2Simulator Server %s (built on %s %s)\n",
BLU(VERSION), MAG(__DATE__), MAG(__TIME__));

View file

@ -35,6 +35,8 @@
/** Linked list of interfaces */
extern struct list interfaces;
/* Forward declartions */
static struct node_type vt;
int socket_init(int argc, char * argv[], struct settings *set)
{ INDENT
@ -473,4 +475,19 @@ int socket_parse_addr(const char *addr, struct sockaddr *saddr, enum socket_laye
return ret;
}
REGISTER_NODE_TYPE(BSD_SOCKET, "socket", socket)
static struct node_type vt = {
.name = "socket",
.description = "Network socket (libnl3)",
.destroy = socket_destroy,
.reverse = socket_reverse,
.parse = socket_parse,
.print = socket_print,
.open = socket_open,
.close = socket_close,
.read = socket_read,
.write = socket_write,
.init = socket_init,
.deinit = socket_deinit
};
REGISTER_NODE_TYPE(&vt)