Commit bbb301a7 authored by 's avatar

+ Ruler library now compiles correctly.
- Filter does not work yet!



git-svn-id: file:///home/svn/mapi/trunk@1277 8d5bb341-7cf1-0310-8cf6-ba355fef3186
parent e5ac5ac6
......@@ -346,7 +346,7 @@ AS_HELP_STRING([--enable-rulerflib], [Build the Ruler interface library]),
no) rulerflib=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-rulerflib) ;;
esac], [rulerflib=false])
AM_CONDITIONAL(BINARY_TRACKFLIB, test x$rulerflib = xtrue)
AM_CONDITIONAL(BINARY_RULERFLIB, test x$rulerflib = xtrue)
if test x$rulerflib = xtrue; then
MAPI_FUNC_LIBS="${MAPI_FUNC_LIBS}:rulerflib.so"
AC_DEFINE(RULERFLIB_COMPILED, 1, [rulerflib is enabled in the build])
......@@ -806,6 +806,7 @@ AC_CONFIG_FILES([
src/drivers/Makefile
src/stdflib/Makefile
src/trackflib/Makefile
src/rulerflib/Makefile
src/ipfixflib/Makefile
src/anonflib/Makefile
src/bpfcompiler/Makefile
......
......@@ -50,3 +50,5 @@ Please send bug reports to mapi@uninett.no
.BR mapi (3),
.BR mapi_stdflib (3),
.BR ruler (1)
.LP
For more information about Ruler, see <http://projects.gforge.cs.vu.nl/ruler/>
......@@ -3,6 +3,9 @@ AM_CPPFLAGS = -I$(srcdir)/lib -I$(srcdir)/common -I$(srcdir)/drivers -D_GNU_SOUR
if BINARY_TRACKFLIB
BUILD_trackflib = trackflib
endif
if BINARY_RULERFLIB
BUILD_rulerflib = rulerflib
endif
if BINARY_IPFIXFLIB
BUILD_ipfixflib = ipfixflib
endif
......@@ -20,6 +23,7 @@ endif
# common must be built first
SUBDIRS = common lib $(BUILD_bpfcompiler) drivers stdflib \
$(BUILD_trackflib) \
$(BUILD_rulerflib) \
$(BUILD_ipfixflib) \
$(BUILD_anonflib) \
$(BUILD_dagflib) \
......
This directory contains the sources of a MAPI library with one
function, named RULER. The RULER function takes a single parameter,
the name of a filter for the Ruler packet rewriting compiler. This
filter is compiled upon initialisation of the function, and all
packets in a flow are then applied to the compiled ruler filter.
For more information about Ruler, see
<http://projects.gforge.cs.vu.nl/ruler/>.
AM_CPPFLAGS = -I$(srcdir)/.. -I$(srcdir)/../lib -I$(srcdir)/../drivers -I$(srcdir)/../common -D_GNU_SOURCE -D_THREAD_SAFE
libdir = $(pkgdatadir)
# rulerflib
# mapi function libraries are dynamically loadable modules (but not standalone
# libraries for users)
lib_LTLIBRARIES = rulerflib.la
rulerflib_la_LDFLAGS = -module
rulerflib_la_SOURCES = rulerflib.c
# File: $Id: Makefile.in,v 1.27 2006/08/07 16:45:44 reeuwijk Exp $
# Makefile for ruler/mapi.
@SET_MAKE@
# Distribution version number
VERSION = 0.2
MAPISRCDIR = ..
prefix=@prefix@
exec_prefix=@exec_prefix@
datadir=@datadir@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
UNISTALL_PROGRAM = rm -rf
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_DATA = @INSTALL_DATA@
DYLIB_FLAGS = -dynamic -shared -fPIC
INCLUDEFLAGS = -I$(MAPISRCDIR)-I$(MAPISRCDIR)/drivers
CFLAGS = @CFLAGS@ -W -Wall $(INCLUDEFLAGS)
ECHO = echo
#EFENCE = -lefence
GNUWFLAGS = # -Waggregate-return -Wconversion
ERRWFLAGS = # -Werror -pedantic-errors
EXTRAFLAGS += -g -O2
LINTFLAGS = '-width(0,4)'
MAKEFILE = Makefile
DEPENDFILE = $(MAKEFILE).d
LD = $(CXX)
LIBS =
LDFLAGS = -g $(EFENCE)
LAUNCHER = mapi-ruler-launcher.so
# Various categories of source code files.
LAUNCHERSRC = rulerlib.c
TESTLAUNCHERSRC = test-launcher.c
SRC = $(LAUNCHERSRC) $(TESTLAUNCHERSRC)
SCRIPTFILES = build-mapi-library-body.sh script-develop-prefix.sh.in script-install-prefix.sh.in
GENSRC =
GENHDR =
OBJ = $(SRC:%.c=%.o) $(GENSRC:%.c=%.o)
# Build instructions for specific modules
$(LAUNCHER): $(LAUNCHERSRC) build-mapi-library helper-functions.c
./build-mapi-library --mapi $(LAUNCHERSRC)
# Non-generated header files.
HDRS = helper-functions.c
TESTFILES = filter.rl
DOCS = Implementation.txt
TEMPLATES =
CONFIGUREFILES = configure.ac configure
DISTFILES = Makefile.in $(SRC) $(HDRS) $(SCRIPTFILES) $(TESTFILES) $(DOCS) $(TEMPLATES) $(CONFIGUREFILES)
# Sources we get dependency information from. The generated sources
# still need to be incorporated into this scheme.
DEPENDSRC = $(LAUNCHERSRC)
DEPENDHDR = $(GENHDR) $(HDRS)
# Files to be deleted upon cleanup
JUNK = $(GENSRC) $(GENHDR) $(OBJ)
all: $(LAUNCHER) ruler test-launcher
ruler:
ln -s ../ruler .
help:
@$(ECHO) " Possible make targets:"
@$(ECHO) "all Create local running programs."
@$(ECHO) "test Run tests."
@$(ECHO) "clean Delete all temporary files."
@$(ECHO) "empty Delete all temporary files and executables."
@$(ECHO) "depend Update dependencies in $(DEPENDFILE)."
@$(ECHO) "tests Run tests."
@$(ECHO) "check Run tests."
@$(ECHO) "runs Run tests."
@$(ECHO) "install Install the program."
@$(ECHO) "uninstall Uninstall the program."
@$(ECHO) "dist Construct distribution files."
# ------ Builder scripts
build-mapi-library: script-develop-prefix.sh build-mapi-library-body.sh
cat script-develop-prefix.sh build-mapi-library-body.sh > $@
chmod +x $@
build-mapi-library-install: script-install-prefix.sh build-mapi-library-body.sh
cat script-install-prefix.sh build-mapi-library-body.sh > $@
chmod +x $@
JUNK += build-mapi-library build-mapi-library-install
# ------ Tests
test-launcher: test-launcher.c helper-functions.c
$(CC) $(CFLAGS) -ldl $< -o $@
filter.so: filter.rl ruler build-mapi-library
sh build-mapi-library filter.rl
test: ltest
tests: ltest
check: ltest
ltest: test-launcher filter.so
./test-launcher
JUNK += filter.so filter.c
# ------ Other
gfiles: $(GENHDR) $(GENSRC)
# ------ Configuration
configure: configure.ac
autoconf
config.status: configure
./config.status --recheck
script-develop-prefix.sh script-install-prefix.sh Makefile: Makefile.in config.status script-develop-prefix.sh.in script-install-prefix.sh.in
./config.status
JUNK += script-develop-prefix.sh script-install-prefix.sh
# ------ Dependencies
stats: empty
wc -l *.c *.h
genstats: $(GENSRC) $(GENHDR)
wc -l $(GENSRC) $(GENHDR)
# Configure-related rules.
PRECIOUSJUNK += $(LAUNCHER) $(DEPENDFILE) ruler
clean:
rm -f $(JUNK)
distclean:
rm -f $(JUNK) $(PRECIOUSJUNK)
empty:
rm -f $(JUNK) $(PRECIOUSJUNK)
# ------ Install
MAPICONFFILE=/etc/mapi.conf
install: rulerlib.so build-mapi-library
cp build-mapi-library ../demo/
sudo cp rulerlib.so $(MAPI_DIR)/lib/mapi
-grep rulerlib.so $(MAPICONFFILE) || echo "add rulerlib.so to the libs= line in $(MAPICONFFILE)"
# ------ Construct a distribution
JUNK += dist.lst distlist
dist.lst: $(DISTFILES) $(MAKEFILE)
@echo "Building $@"
@echo $(DISTFILES) | tr ' ' '\012' > $@
dnl Process this file with autoconf to produce a configure script.
AC_INIT(ruler-launcher-module.c)
dnl Checks for programs.
AC_PROG_CC
AC_PROG_MAKE_SET
AC_PROG_INSTALL
AC_PATH_PROGS(GLIBTOOL, glibtool libtool)
dnl Checks for libraries.
dnl Checks for header files.
AC_HEADER_STDC
dnl Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_SIZE_T
dnl AC_CONFIG_HEADER(config.h)
AC_OUTPUT(Makefile script-develop-prefix.sh script-install-prefix.sh)
#! /bin/sh
#
# install - install a program, script, or datafile
# This comes from X11R5.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch.
#
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit="${DOITPROG-}"
# put in absolute paths if you don't have them in your path; or use env. vars.
mvprog="${MVPROG-mv}"
cpprog="${CPPROG-cp}"
chmodprog="${CHMODPROG-chmod}"
chownprog="${CHOWNPROG-chown}"
chgrpprog="${CHGRPPROG-chgrp}"
stripprog="${STRIPPROG-strip}"
rmprog="${RMPROG-rm}"
mkdirprog="${MKDIRPROG-mkdir}"
tranformbasename=""
transform_arg=""
instcmd="$mvprog"
chmodcmd="$chmodprog 0755"
chowncmd=""
chgrpcmd=""
stripcmd=""
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=""
dst=""
dir_arg=""
while [ x"$1" != x ]; do
case $1 in
-c) instcmd="$cpprog"
shift
continue;;
-d) dir_arg=true
shift
continue;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
-s) stripcmd="$stripprog"
shift
continue;;
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
shift
continue;;
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
shift
continue;;
*) if [ x"$src" = x ]
then
src=$1
else
# this colon is to work around a 386BSD /bin/sh bug
:
dst=$1
fi
shift
continue;;
esac
done
if [ x"$src" = x ]
then
echo "install: no input file specified"
exit 1
else
true
fi
if [ x"$dir_arg" != x ]; then
dst=$src
src=""
if [ -d $dst ]; then
instcmd=:
else
instcmd=mkdir
fi
else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if [ -f $src -o -d $src ]
then
true
else
echo "install: $src does not exist"
exit 1
fi
if [ x"$dst" = x ]
then
echo "install: no destination specified"
exit 1
else
true
fi
# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic
if [ -d $dst ]
then
dst="$dst"/`basename $src`
else
true
fi
fi
## this sed command emulates the dirname command
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# this part is taken from Noah Friedman's mkinstalldirs script
# Skip lots of stat calls in the usual case.
if [ ! -d "$dstdir" ]; then
defaultIFS='
'
IFS="${IFS-${defaultIFS}}"
oIFS="${IFS}"
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS="${oIFS}"
pathcomp=''
while [ $# -ne 0 ] ; do
pathcomp="${pathcomp}${1}"
shift
if [ ! -d "${pathcomp}" ] ;
then
$mkdirprog "${pathcomp}"
else
true
fi
pathcomp="${pathcomp}/"
done
fi
if [ x"$dir_arg" != x ]
then
$doit $instcmd $dst &&
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
else
# If we're going to rename the final executable, determine the name now.
if [ x"$transformarg" = x ]
then
dstfile=`basename $dst`
else
dstfile=`basename $dst $transformbasename |
sed $transformarg`$transformbasename
fi
# don't allow the sed command to completely eliminate the filename
if [ x"$dstfile" = x ]
then
dstfile=`basename $dst`
else
true
fi
# Make a temp file name in the proper directory.
dsttmp=$dstdir/#inst.$$#
# Move or copy the file name to the temp name
$doit $instcmd $src $dsttmp &&
trap "rm -f ${dsttmp}" 0 &&
# and set any options; do chmod last to preserve setuid bits
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $instcmd $src $dsttmp" command.
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
# Now rename the file to the real destination.
$doit $rmcmd -f $dstdir/$dstfile &&
$doit $mvcmd $dsttmp $dstdir/$dstfile
fi &&
exit 0
......@@ -22,6 +22,7 @@ typedef volatile int pthread_spinlock_t;
#include "mapidevices.h"
#include "mapid.h"
#include "mapiipc.h"
#include "mapi_errors.h"
#include "fhelp.h"
static char libname[] = "rulerlauncher";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment