diff --git a/.dep.inc b/.dep.inc index 4560e55..38ba445 100644 --- a/.dep.inc +++ b/.dep.inc @@ -1,5 +1,5 @@ # This code depends on make tool being used -DEPFILES=$(wildcard $(addsuffix .d, ${OBJECTFILES})) +DEPFILES=$(wildcard $(addsuffix .d, ${OBJECTFILES} ${TESTOBJECTFILES})) ifneq (${DEPFILES},) include ${DEPFILES} endif diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..47d2f3b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_minimum_required(VERSION 3.3.2) +project (121Nat) +ADD_SUBDIRECTORY(src) + diff --git a/dist/package/PKGBUILD b/dist/package/PKGBUILD new file mode 100644 index 0000000..5ae0bfe --- /dev/null +++ b/dist/package/PKGBUILD @@ -0,0 +1,26 @@ +pkgname=121Nat +pkgver=1.0 # note: if the pkgver had been '0.99-10' then use an underscore. like '0.99_10' +pkgrel=1 +pkgdesc="transparent one to one nat" +arch=(any) +url="http://www.foo.org" +license=('MIT') +depends=('pth' 'jsoncpp') +makedepends=('cmake') +source=(./$pkgname-$pkgver.tar.gz) +md5sums=('0e1494ebbcf0b0ca1bfa8475c5078f21') + +build() { + cd $srcdir/$pkgname + mkdir build + cd build + cmake -DCMAKE_INSTALL_PREFIX=/usr ../ + make +} + +package() { + cd $srcdir/$pkgname/build + make DESTDIR=$pkgdir install + mkdir -p $pkgdir/etc/$pkgname + cp ../src/config.json $pkgdir/etc/$pkgname/config-example.json +} diff --git a/nbproject/Makefile-Debug.mk b/nbproject/Makefile-Debug.mk index 6eeb954..5e718d6 100644 --- a/nbproject/Makefile-Debug.mk +++ b/nbproject/Makefile-Debug.mk @@ -21,7 +21,7 @@ FC=gfortran AS=as # Macros -CND_PLATFORM=GNU-Linux-x86 +CND_PLATFORM=GNU-Linux CND_DLIB_EXT=so CND_CONF=Debug CND_DISTDIR=dist @@ -46,8 +46,16 @@ TESTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tests # Test Files TESTFILES= \ + ${TESTDIR}/TestFiles/f2 \ ${TESTDIR}/TestFiles/f1 +# Test Object Files +TESTOBJECTFILES= \ + ${TESTDIR}/tests/jsontest.o \ + ${TESTDIR}/tests/jsontestrunner.o \ + ${TESTDIR}/tests/nattest.o \ + ${TESTDIR}/tests/nattestrunner.o + # C Compiler Flags CFLAGS= @@ -62,61 +70,79 @@ FFLAGS= ASFLAGS= # Link Libraries and Options -LDLIBSOPTIONS=-ltins -lpthread +LDLIBSOPTIONS=-ltins -lpthread `pkg-config --libs jsoncpp` # Build Targets .build-conf: ${BUILD_SUBPROJECTS} - "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat + "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat -${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat: ${OBJECTFILES} +${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat: ${OBJECTFILES} ${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM} - ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat ${OBJECTFILES} ${LDLIBSOPTIONS} + ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat ${OBJECTFILES} ${LDLIBSOPTIONS} ${OBJECTDIR}/src/PduSender.o: src/PduSender.cpp ${MKDIR} -p ${OBJECTDIR}/src ${RM} "$@.d" - $(COMPILE.cc) -g -Wall -std=c++11 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/PduSender.o src/PduSender.cpp + $(COMPILE.cc) -g -Wall `pkg-config --cflags jsoncpp` -std=c++11 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/PduSender.o src/PduSender.cpp ${OBJECTDIR}/src/PduSniffer.o: src/PduSniffer.cpp ${MKDIR} -p ${OBJECTDIR}/src ${RM} "$@.d" - $(COMPILE.cc) -g -Wall -std=c++11 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/PduSniffer.o src/PduSniffer.cpp + $(COMPILE.cc) -g -Wall `pkg-config --cflags jsoncpp` -std=c++11 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/PduSniffer.o src/PduSniffer.cpp ${OBJECTDIR}/src/main.o: src/main.cpp ${MKDIR} -p ${OBJECTDIR}/src ${RM} "$@.d" - $(COMPILE.cc) -g -Wall -std=c++11 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/main.o src/main.cpp + $(COMPILE.cc) -g -Wall `pkg-config --cflags jsoncpp` -std=c++11 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/main.o src/main.cpp ${OBJECTDIR}/src/map/NatRange.o: src/map/NatRange.cpp ${MKDIR} -p ${OBJECTDIR}/src/map ${RM} "$@.d" - $(COMPILE.cc) -g -Wall -std=c++11 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/map/NatRange.o src/map/NatRange.cpp + $(COMPILE.cc) -g -Wall `pkg-config --cflags jsoncpp` -std=c++11 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/map/NatRange.o src/map/NatRange.cpp ${OBJECTDIR}/src/map/natmap.o: src/map/natmap.cpp ${MKDIR} -p ${OBJECTDIR}/src/map ${RM} "$@.d" - $(COMPILE.cc) -g -Wall -std=c++11 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/map/natmap.o src/map/natmap.cpp + $(COMPILE.cc) -g -Wall `pkg-config --cflags jsoncpp` -std=c++11 -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/map/natmap.o src/map/natmap.cpp # Subprojects .build-subprojects: # Build Test Targets -.build-tests-conf: .build-conf ${TESTFILES} +.build-tests-conf: .build-tests-subprojects .build-conf ${TESTFILES} +.build-tests-subprojects: + +${TESTDIR}/TestFiles/f2: ${TESTDIR}/tests/jsontest.o ${TESTDIR}/tests/jsontestrunner.o ${OBJECTFILES:%.o=%_nomain.o} + ${MKDIR} -p ${TESTDIR}/TestFiles + ${LINK.cc} -o ${TESTDIR}/TestFiles/f2 $^ ${LDLIBSOPTIONS} `cppunit-config --libs` + ${TESTDIR}/TestFiles/f1: ${TESTDIR}/tests/nattest.o ${TESTDIR}/tests/nattestrunner.o ${OBJECTFILES:%.o=%_nomain.o} ${MKDIR} -p ${TESTDIR}/TestFiles ${LINK.cc} -o ${TESTDIR}/TestFiles/f1 $^ ${LDLIBSOPTIONS} `cppunit-config --libs` +${TESTDIR}/tests/jsontest.o: tests/jsontest.cpp + ${MKDIR} -p ${TESTDIR}/tests + ${RM} "$@.d" + $(COMPILE.cc) -g -Wall `pkg-config --cflags jsoncpp` -std=c++11 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/jsontest.o tests/jsontest.cpp + + +${TESTDIR}/tests/jsontestrunner.o: tests/jsontestrunner.cpp + ${MKDIR} -p ${TESTDIR}/tests + ${RM} "$@.d" + $(COMPILE.cc) -g -Wall `pkg-config --cflags jsoncpp` -std=c++11 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/jsontestrunner.o tests/jsontestrunner.cpp + + ${TESTDIR}/tests/nattest.o: tests/nattest.cpp ${MKDIR} -p ${TESTDIR}/tests ${RM} "$@.d" - $(COMPILE.cc) -g -Wall -I. -std=c++11 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/nattest.o tests/nattest.cpp + $(COMPILE.cc) -g -Wall -I. `pkg-config --cflags jsoncpp` -std=c++11 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/nattest.o tests/nattest.cpp ${TESTDIR}/tests/nattestrunner.o: tests/nattestrunner.cpp ${MKDIR} -p ${TESTDIR}/tests ${RM} "$@.d" - $(COMPILE.cc) -g -Wall -I. -std=c++11 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/nattestrunner.o tests/nattestrunner.cpp + $(COMPILE.cc) -g -Wall -I. `pkg-config --cflags jsoncpp` -std=c++11 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/nattestrunner.o tests/nattestrunner.cpp ${OBJECTDIR}/src/PduSender_nomain.o: ${OBJECTDIR}/src/PduSender.o src/PduSender.cpp @@ -127,7 +153,7 @@ ${OBJECTDIR}/src/PduSender_nomain.o: ${OBJECTDIR}/src/PduSender.o src/PduSender. (echo "$$NMOUTPUT" | ${GREP} 'T _main$$'); \ then \ ${RM} "$@.d";\ - $(COMPILE.cc) -g -Wall -std=c++11 -Dmain=__nomain -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/PduSender_nomain.o src/PduSender.cpp;\ + $(COMPILE.cc) -g -Wall `pkg-config --cflags jsoncpp` -std=c++11 -Dmain=__nomain -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/PduSender_nomain.o src/PduSender.cpp;\ else \ ${CP} ${OBJECTDIR}/src/PduSender.o ${OBJECTDIR}/src/PduSender_nomain.o;\ fi @@ -140,7 +166,7 @@ ${OBJECTDIR}/src/PduSniffer_nomain.o: ${OBJECTDIR}/src/PduSniffer.o src/PduSniff (echo "$$NMOUTPUT" | ${GREP} 'T _main$$'); \ then \ ${RM} "$@.d";\ - $(COMPILE.cc) -g -Wall -std=c++11 -Dmain=__nomain -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/PduSniffer_nomain.o src/PduSniffer.cpp;\ + $(COMPILE.cc) -g -Wall `pkg-config --cflags jsoncpp` -std=c++11 -Dmain=__nomain -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/PduSniffer_nomain.o src/PduSniffer.cpp;\ else \ ${CP} ${OBJECTDIR}/src/PduSniffer.o ${OBJECTDIR}/src/PduSniffer_nomain.o;\ fi @@ -153,7 +179,7 @@ ${OBJECTDIR}/src/main_nomain.o: ${OBJECTDIR}/src/main.o src/main.cpp (echo "$$NMOUTPUT" | ${GREP} 'T _main$$'); \ then \ ${RM} "$@.d";\ - $(COMPILE.cc) -g -Wall -std=c++11 -Dmain=__nomain -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/main_nomain.o src/main.cpp;\ + $(COMPILE.cc) -g -Wall `pkg-config --cflags jsoncpp` -std=c++11 -Dmain=__nomain -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/main_nomain.o src/main.cpp;\ else \ ${CP} ${OBJECTDIR}/src/main.o ${OBJECTDIR}/src/main_nomain.o;\ fi @@ -166,7 +192,7 @@ ${OBJECTDIR}/src/map/NatRange_nomain.o: ${OBJECTDIR}/src/map/NatRange.o src/map/ (echo "$$NMOUTPUT" | ${GREP} 'T _main$$'); \ then \ ${RM} "$@.d";\ - $(COMPILE.cc) -g -Wall -std=c++11 -Dmain=__nomain -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/map/NatRange_nomain.o src/map/NatRange.cpp;\ + $(COMPILE.cc) -g -Wall `pkg-config --cflags jsoncpp` -std=c++11 -Dmain=__nomain -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/map/NatRange_nomain.o src/map/NatRange.cpp;\ else \ ${CP} ${OBJECTDIR}/src/map/NatRange.o ${OBJECTDIR}/src/map/NatRange_nomain.o;\ fi @@ -179,7 +205,7 @@ ${OBJECTDIR}/src/map/natmap_nomain.o: ${OBJECTDIR}/src/map/natmap.o src/map/natm (echo "$$NMOUTPUT" | ${GREP} 'T _main$$'); \ then \ ${RM} "$@.d";\ - $(COMPILE.cc) -g -Wall -std=c++11 -Dmain=__nomain -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/map/natmap_nomain.o src/map/natmap.cpp;\ + $(COMPILE.cc) -g -Wall `pkg-config --cflags jsoncpp` -std=c++11 -Dmain=__nomain -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/src/map/natmap_nomain.o src/map/natmap.cpp;\ else \ ${CP} ${OBJECTDIR}/src/map/natmap.o ${OBJECTDIR}/src/map/natmap_nomain.o;\ fi @@ -188,6 +214,7 @@ ${OBJECTDIR}/src/map/natmap_nomain.o: ${OBJECTDIR}/src/map/natmap.o src/map/natm .test-conf: @if [ "${TEST}" = "" ]; \ then \ + ${TESTDIR}/TestFiles/f2 || true; \ ${TESTDIR}/TestFiles/f1 || true; \ else \ ./${TEST} || true; \ @@ -196,7 +223,7 @@ ${OBJECTDIR}/src/map/natmap_nomain.o: ${OBJECTDIR}/src/map/natmap.o src/map/natm # Clean Targets .clean-conf: ${CLEAN_SUBPROJECTS} ${RM} -r ${CND_BUILDDIR}/${CND_CONF} - ${RM} ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat + ${RM} ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat # Subprojects .clean-subprojects: diff --git a/nbproject/Makefile-Release.mk b/nbproject/Makefile-Release.mk index 554cc2e..c1f6f30 100644 --- a/nbproject/Makefile-Release.mk +++ b/nbproject/Makefile-Release.mk @@ -21,7 +21,7 @@ FC=gfortran AS=as # Macros -CND_PLATFORM=GNU-Linux-x86 +CND_PLATFORM=GNU-Linux CND_DLIB_EXT=so CND_CONF=Release CND_DISTDIR=dist @@ -46,8 +46,16 @@ TESTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tests # Test Files TESTFILES= \ + ${TESTDIR}/TestFiles/f2 \ ${TESTDIR}/TestFiles/f1 +# Test Object Files +TESTOBJECTFILES= \ + ${TESTDIR}/tests/jsontest.o \ + ${TESTDIR}/tests/jsontestrunner.o \ + ${TESTDIR}/tests/nattest.o \ + ${TESTDIR}/tests/nattestrunner.o + # C Compiler Flags CFLAGS= @@ -66,11 +74,11 @@ LDLIBSOPTIONS= # Build Targets .build-conf: ${BUILD_SUBPROJECTS} - "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat + "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat -${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat: ${OBJECTFILES} +${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat: ${OBJECTFILES} ${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM} - ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat ${OBJECTFILES} ${LDLIBSOPTIONS} + ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat ${OBJECTFILES} ${LDLIBSOPTIONS} ${OBJECTDIR}/src/PduSender.o: src/PduSender.cpp ${MKDIR} -p ${OBJECTDIR}/src @@ -101,12 +109,30 @@ ${OBJECTDIR}/src/map/natmap.o: src/map/natmap.cpp .build-subprojects: # Build Test Targets -.build-tests-conf: .build-conf ${TESTFILES} +.build-tests-conf: .build-tests-subprojects .build-conf ${TESTFILES} +.build-tests-subprojects: + +${TESTDIR}/TestFiles/f2: ${TESTDIR}/tests/jsontest.o ${TESTDIR}/tests/jsontestrunner.o ${OBJECTFILES:%.o=%_nomain.o} + ${MKDIR} -p ${TESTDIR}/TestFiles + ${LINK.cc} -o ${TESTDIR}/TestFiles/f2 $^ ${LDLIBSOPTIONS} `cppunit-config --libs` + ${TESTDIR}/TestFiles/f1: ${TESTDIR}/tests/nattest.o ${TESTDIR}/tests/nattestrunner.o ${OBJECTFILES:%.o=%_nomain.o} ${MKDIR} -p ${TESTDIR}/TestFiles ${LINK.cc} -o ${TESTDIR}/TestFiles/f1 $^ ${LDLIBSOPTIONS} `cppunit-config --libs` +${TESTDIR}/tests/jsontest.o: tests/jsontest.cpp + ${MKDIR} -p ${TESTDIR}/tests + ${RM} "$@.d" + $(COMPILE.cc) -O2 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/jsontest.o tests/jsontest.cpp + + +${TESTDIR}/tests/jsontestrunner.o: tests/jsontestrunner.cpp + ${MKDIR} -p ${TESTDIR}/tests + ${RM} "$@.d" + $(COMPILE.cc) -O2 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/jsontestrunner.o tests/jsontestrunner.cpp + + ${TESTDIR}/tests/nattest.o: tests/nattest.cpp ${MKDIR} -p ${TESTDIR}/tests ${RM} "$@.d" @@ -188,6 +214,7 @@ ${OBJECTDIR}/src/map/natmap_nomain.o: ${OBJECTDIR}/src/map/natmap.o src/map/natm .test-conf: @if [ "${TEST}" = "" ]; \ then \ + ${TESTDIR}/TestFiles/f2 || true; \ ${TESTDIR}/TestFiles/f1 || true; \ else \ ./${TEST} || true; \ @@ -196,7 +223,7 @@ ${OBJECTDIR}/src/map/natmap_nomain.o: ${OBJECTDIR}/src/map/natmap.o src/map/natm # Clean Targets .clean-conf: ${CLEAN_SUBPROJECTS} ${RM} -r ${CND_BUILDDIR}/${CND_CONF} - ${RM} ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat + ${RM} ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat # Subprojects .clean-subprojects: diff --git a/nbproject/Makefile-Unitest.mk b/nbproject/Makefile-Unitest.mk index aa716f9..205e653 100644 --- a/nbproject/Makefile-Unitest.mk +++ b/nbproject/Makefile-Unitest.mk @@ -21,7 +21,7 @@ FC=gfortran AS=as # Macros -CND_PLATFORM=GNU-Linux-x86 +CND_PLATFORM=GNU-Linux CND_DLIB_EXT=so CND_CONF=Unitest CND_DISTDIR=dist @@ -46,8 +46,16 @@ TESTDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tests # Test Files TESTFILES= \ + ${TESTDIR}/TestFiles/f2 \ ${TESTDIR}/TestFiles/f1 +# Test Object Files +TESTOBJECTFILES= \ + ${TESTDIR}/tests/jsontest.o \ + ${TESTDIR}/tests/jsontestrunner.o \ + ${TESTDIR}/tests/nattest.o \ + ${TESTDIR}/tests/nattestrunner.o + # C Compiler Flags CFLAGS= @@ -66,11 +74,11 @@ LDLIBSOPTIONS= # Build Targets .build-conf: ${BUILD_SUBPROJECTS} - "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat + "${MAKE}" -f nbproject/Makefile-${CND_CONF}.mk ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat -${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat: ${OBJECTFILES} +${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat: ${OBJECTFILES} ${MKDIR} -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM} - ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat ${OBJECTFILES} ${LDLIBSOPTIONS} + ${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat ${OBJECTFILES} ${LDLIBSOPTIONS} ${OBJECTDIR}/src/PduSender.o: src/PduSender.cpp ${MKDIR} -p ${OBJECTDIR}/src @@ -101,12 +109,30 @@ ${OBJECTDIR}/src/map/natmap.o: src/map/natmap.cpp .build-subprojects: # Build Test Targets -.build-tests-conf: .build-conf ${TESTFILES} +.build-tests-conf: .build-tests-subprojects .build-conf ${TESTFILES} +.build-tests-subprojects: + +${TESTDIR}/TestFiles/f2: ${TESTDIR}/tests/jsontest.o ${TESTDIR}/tests/jsontestrunner.o ${OBJECTFILES:%.o=%_nomain.o} + ${MKDIR} -p ${TESTDIR}/TestFiles + ${LINK.cc} -o ${TESTDIR}/TestFiles/f2 $^ ${LDLIBSOPTIONS} `cppunit-config --libs` + ${TESTDIR}/TestFiles/f1: ${TESTDIR}/tests/nattest.o ${TESTDIR}/tests/nattestrunner.o ${OBJECTFILES:%.o=%_nomain.o} ${MKDIR} -p ${TESTDIR}/TestFiles ${LINK.cc} -o ${TESTDIR}/TestFiles/f1 $^ ${LDLIBSOPTIONS} `cppunit-config --libs` +${TESTDIR}/tests/jsontest.o: tests/jsontest.cpp + ${MKDIR} -p ${TESTDIR}/tests + ${RM} "$@.d" + $(COMPILE.cc) -g -Itest -std=c++11 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/jsontest.o tests/jsontest.cpp + + +${TESTDIR}/tests/jsontestrunner.o: tests/jsontestrunner.cpp + ${MKDIR} -p ${TESTDIR}/tests + ${RM} "$@.d" + $(COMPILE.cc) -g -Itest -std=c++11 `cppunit-config --cflags` -MMD -MP -MF "$@.d" -o ${TESTDIR}/tests/jsontestrunner.o tests/jsontestrunner.cpp + + ${TESTDIR}/tests/nattest.o: tests/nattest.cpp ${MKDIR} -p ${TESTDIR}/tests ${RM} "$@.d" @@ -188,6 +214,7 @@ ${OBJECTDIR}/src/map/natmap_nomain.o: ${OBJECTDIR}/src/map/natmap.o src/map/natm .test-conf: @if [ "${TEST}" = "" ]; \ then \ + ${TESTDIR}/TestFiles/f2 || true; \ ${TESTDIR}/TestFiles/f1 || true; \ else \ ./${TEST} || true; \ @@ -196,7 +223,7 @@ ${OBJECTDIR}/src/map/natmap_nomain.o: ${OBJECTDIR}/src/map/natmap.o src/map/natm # Clean Targets .clean-conf: ${CLEAN_SUBPROJECTS} ${RM} -r ${CND_BUILDDIR}/${CND_CONF} - ${RM} ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat + ${RM} ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat # Subprojects .clean-subprojects: diff --git a/nbproject/Makefile-impl.mk b/nbproject/Makefile-impl.mk index 69be870..9fdd9a2 100644 --- a/nbproject/Makefile-impl.mk +++ b/nbproject/Makefile-impl.mk @@ -24,7 +24,7 @@ CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}} # Project Name -PROJECTNAME=1T1NAT +PROJECTNAME=121Nat # Active Configuration DEFAULTCONF=Debug @@ -76,7 +76,7 @@ ALLCONFS=Debug Release Unitest .depcheck-impl: @echo "# This code depends on make tool being used" >.dep.inc @if [ -n "${MAKE_VERSION}" ]; then \ - echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \ + echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES} \$${TESTOBJECTFILES}))" >>.dep.inc; \ echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \ echo "include \$${DEPFILES}" >>.dep.inc; \ echo "endif" >>.dep.inc; \ diff --git a/nbproject/Makefile-variables.mk b/nbproject/Makefile-variables.mk index 82ad315..22b2158 100644 --- a/nbproject/Makefile-variables.mk +++ b/nbproject/Makefile-variables.mk @@ -7,29 +7,29 @@ CND_BASEDIR=`pwd` CND_BUILDDIR=build CND_DISTDIR=dist # Debug configuration -CND_PLATFORM_Debug=GNU-Linux-x86 -CND_ARTIFACT_DIR_Debug=dist/Debug/GNU-Linux-x86 -CND_ARTIFACT_NAME_Debug=1t1nat -CND_ARTIFACT_PATH_Debug=dist/Debug/GNU-Linux-x86/1t1nat -CND_PACKAGE_DIR_Debug=dist/Debug/GNU-Linux-x86/package -CND_PACKAGE_NAME_Debug=1t1nat.tar -CND_PACKAGE_PATH_Debug=dist/Debug/GNU-Linux-x86/package/1t1nat.tar +CND_PLATFORM_Debug=GNU-Linux +CND_ARTIFACT_DIR_Debug=dist/Debug/GNU-Linux +CND_ARTIFACT_NAME_Debug=121nat +CND_ARTIFACT_PATH_Debug=dist/Debug/GNU-Linux/121nat +CND_PACKAGE_DIR_Debug=dist/Debug/GNU-Linux/package +CND_PACKAGE_NAME_Debug=121nat.tar +CND_PACKAGE_PATH_Debug=dist/Debug/GNU-Linux/package/121nat.tar # Release configuration -CND_PLATFORM_Release=GNU-Linux-x86 -CND_ARTIFACT_DIR_Release=dist/Release/GNU-Linux-x86 -CND_ARTIFACT_NAME_Release=1t1nat -CND_ARTIFACT_PATH_Release=dist/Release/GNU-Linux-x86/1t1nat -CND_PACKAGE_DIR_Release=dist/Release/GNU-Linux-x86/package -CND_PACKAGE_NAME_Release=1t1nat.tar -CND_PACKAGE_PATH_Release=dist/Release/GNU-Linux-x86/package/1t1nat.tar +CND_PLATFORM_Release=GNU-Linux +CND_ARTIFACT_DIR_Release=dist/Release/GNU-Linux +CND_ARTIFACT_NAME_Release=121nat +CND_ARTIFACT_PATH_Release=dist/Release/GNU-Linux/121nat +CND_PACKAGE_DIR_Release=dist/Release/GNU-Linux/package +CND_PACKAGE_NAME_Release=121nat.tar +CND_PACKAGE_PATH_Release=dist/Release/GNU-Linux/package/121nat.tar # Unitest configuration -CND_PLATFORM_Unitest=GNU-Linux-x86 -CND_ARTIFACT_DIR_Unitest=dist/Unitest/GNU-Linux-x86 -CND_ARTIFACT_NAME_Unitest=1t1nat -CND_ARTIFACT_PATH_Unitest=dist/Unitest/GNU-Linux-x86/1t1nat -CND_PACKAGE_DIR_Unitest=dist/Unitest/GNU-Linux-x86/package -CND_PACKAGE_NAME_Unitest=1t1nat.tar -CND_PACKAGE_PATH_Unitest=dist/Unitest/GNU-Linux-x86/package/1t1nat.tar +CND_PLATFORM_Unitest=GNU-Linux +CND_ARTIFACT_DIR_Unitest=dist/Unitest/GNU-Linux +CND_ARTIFACT_NAME_Unitest=121nat +CND_ARTIFACT_PATH_Unitest=dist/Unitest/GNU-Linux/121nat +CND_PACKAGE_DIR_Unitest=dist/Unitest/GNU-Linux/package +CND_PACKAGE_NAME_Unitest=121nat.tar +CND_PACKAGE_PATH_Unitest=dist/Unitest/GNU-Linux/package/121nat.tar # # include compiler specific variables # diff --git a/nbproject/Package-Debug.bash b/nbproject/Package-Debug.bash index cf4e434..70bd631 100644 --- a/nbproject/Package-Debug.bash +++ b/nbproject/Package-Debug.bash @@ -6,16 +6,16 @@ # Macros TOP=`pwd` -CND_PLATFORM=GNU-Linux-x86 +CND_PLATFORM=GNU-Linux CND_CONF=Debug CND_DISTDIR=dist CND_BUILDDIR=build CND_DLIB_EXT=so NBTMPDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tmp-packaging TMPDIRNAME=tmp-packaging -OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat -OUTPUT_BASENAME=1t1nat -PACKAGE_TOP_DIR=1t1nat/ +OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat +OUTPUT_BASENAME=121nat +PACKAGE_TOP_DIR=121nat/ # Functions function checkReturnCode @@ -60,15 +60,15 @@ mkdir -p ${NBTMPDIR} # Copy files and create directories and links cd "${TOP}" -makeDirectory "${NBTMPDIR}/1t1nat/bin" +makeDirectory "${NBTMPDIR}/121nat/bin" copyFileToTmpDir "${OUTPUT_PATH}" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755 # Generate tar file cd "${TOP}" -rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/1t1nat.tar +rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/121nat.tar cd ${NBTMPDIR} -tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/1t1nat.tar * +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/121nat.tar * checkReturnCode # Cleanup diff --git a/nbproject/Package-Release.bash b/nbproject/Package-Release.bash index d3456b5..6517dc1 100644 --- a/nbproject/Package-Release.bash +++ b/nbproject/Package-Release.bash @@ -6,16 +6,16 @@ # Macros TOP=`pwd` -CND_PLATFORM=GNU-Linux-x86 +CND_PLATFORM=GNU-Linux CND_CONF=Release CND_DISTDIR=dist CND_BUILDDIR=build CND_DLIB_EXT=so NBTMPDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tmp-packaging TMPDIRNAME=tmp-packaging -OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat -OUTPUT_BASENAME=1t1nat -PACKAGE_TOP_DIR=1t1nat/ +OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat +OUTPUT_BASENAME=121nat +PACKAGE_TOP_DIR=121nat/ # Functions function checkReturnCode @@ -60,15 +60,15 @@ mkdir -p ${NBTMPDIR} # Copy files and create directories and links cd "${TOP}" -makeDirectory "${NBTMPDIR}/1t1nat/bin" +makeDirectory "${NBTMPDIR}/121nat/bin" copyFileToTmpDir "${OUTPUT_PATH}" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755 # Generate tar file cd "${TOP}" -rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/1t1nat.tar +rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/121nat.tar cd ${NBTMPDIR} -tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/1t1nat.tar * +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/121nat.tar * checkReturnCode # Cleanup diff --git a/nbproject/Package-Unitest.bash b/nbproject/Package-Unitest.bash index 5a4cfdd..ea596c1 100644 --- a/nbproject/Package-Unitest.bash +++ b/nbproject/Package-Unitest.bash @@ -6,16 +6,16 @@ # Macros TOP=`pwd` -CND_PLATFORM=GNU-Linux-x86 +CND_PLATFORM=GNU-Linux CND_CONF=Unitest CND_DISTDIR=dist CND_BUILDDIR=build CND_DLIB_EXT=so NBTMPDIR=${CND_BUILDDIR}/${CND_CONF}/${CND_PLATFORM}/tmp-packaging TMPDIRNAME=tmp-packaging -OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/1t1nat -OUTPUT_BASENAME=1t1nat -PACKAGE_TOP_DIR=1t1nat/ +OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/121nat +OUTPUT_BASENAME=121nat +PACKAGE_TOP_DIR=121nat/ # Functions function checkReturnCode @@ -60,15 +60,15 @@ mkdir -p ${NBTMPDIR} # Copy files and create directories and links cd "${TOP}" -makeDirectory "${NBTMPDIR}/1t1nat/bin" +makeDirectory "${NBTMPDIR}/121nat/bin" copyFileToTmpDir "${OUTPUT_PATH}" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}" 0755 # Generate tar file cd "${TOP}" -rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/1t1nat.tar +rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/121nat.tar cd ${NBTMPDIR} -tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/1t1nat.tar * +tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/121nat.tar * checkReturnCode # Cleanup diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml index ab6086a..3a62e2c 100644 --- a/nbproject/configurations.xml +++ b/nbproject/configurations.xml @@ -1,5 +1,5 @@ - + + src/config.json + + tests/jsontest.cpp + tests/jsontest.h + tests/jsontestrunner.cpp + tests/nattest.cpp tests/nattest.h @@ -60,6 +66,7 @@ tins pthread + `pkg-config --libs jsoncpp` @@ -83,6 +90,20 @@ + + + `cppunit-config --cflags` + + + `cppunit-config --cflags` + + + ${TESTDIR}/TestFiles/f2 + + `cppunit-config --libs` + + + @@ -91,6 +112,8 @@ + + @@ -101,6 +124,12 @@ + + + + + + @@ -148,6 +177,20 @@ + + + `cppunit-config --cflags` + + + `cppunit-config --cflags` + + + ${TESTDIR}/TestFiles/f2 + + `cppunit-config --libs` + + + @@ -156,6 +199,8 @@ + + @@ -166,6 +211,12 @@ + + + + + + @@ -207,6 +258,20 @@ + + + `cppunit-config --cflags` + + + `cppunit-config --cflags` + + + ${TESTDIR}/TestFiles/f2 + + `cppunit-config --libs` + + + @@ -215,6 +280,8 @@ + + @@ -225,6 +292,12 @@ + + + + + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..cfc8b08 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,8 @@ +file(GLOB_RECURSE 121Nat_Src_Files "*.h" "*.cpp") +add_executable(121Nat ${121Nat_Src_Files}) +target_link_libraries (121Nat tins pthread jsoncpp) +target_compile_features(121Nat PRIVATE cxx_range_for) +install(TARGETS 121Nat + RUNTIME DESTINATION bin +) + diff --git a/src/config.json b/src/config.json new file mode 100644 index 0000000..919d942 --- /dev/null +++ b/src/config.json @@ -0,0 +1,12 @@ +[{ + "vboxnet0": { + "rangeIpAddr": "10.0.0.0", + "rangeNetmask": "255.255.240.0" + } + }, { + "vboxnet1": { + "rangeIpAddr": "172.27.0.0", + "rangeNetmask": "255.255.0.0" + } + }] + diff --git a/src/main.cpp b/src/main.cpp index 61ac28c..df627a5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,27 +4,42 @@ #include "map/natmap.h" #include "PduSniffer.h" #include "PduSender.h" - -int main() +#include +#include +#include +int main(int argc, char** argv) { - Tins::NetworkInterface net1("vboxnet0"); - Tins::NetworkInterface net2("vboxnet1"); - otonat::NatRange range1(net1, "10.0.0.0", "255.255.240.0"); - otonat::NatRange range2(net2, "172.27.0.0", "255.255.0.0"); + if (argc < 2){ + return 0; + } + otonat::NatMap::NatRangeList list; - list.push_back(range1); - list.push_back(range2); + std::ifstream config_doc(argv[1], std::ifstream::binary); + Json::Value root; + config_doc >> root; + const Json::Value netcards = root; + for (Json::Value netcard : netcards) { + const std::string name = netcard.getMemberNames()[0].c_str(); + const Json::Value cardMember = netcard[name]; + const std::string ipStr = cardMember["rangeIpAddr"].asString(); + const std::string maskStr = cardMember["rangeNetmask"].asString(); + + const Tins::NetworkInterface net(name); + const otonat::NatRange netRange(net, Tins::IPv4Address(ipStr), Tins::IPv4Address(maskStr)); + list.push_back(netRange); + } + otonat::NatMap natMap = otonat::NatMap(list); otonat::PduSniffer sniffer(&natMap); otonat::PduSender sender(&natMap); std::thread * mapThread = natMap.translateThread(); std::thread * senderThread = sender.SendPdusFromQueueThread(); - std::thread * snifferThread1 = sniffer.SniffInterfaceInNewThread(net1); - std::thread * snifferThread2 = sniffer.SniffInterfaceInNewThread(net2); + for (otonat::NatRange & net : list) { + sniffer.SniffInterfaceInNewThread(net.interface); + } + mapThread->join(); senderThread->join(); - snifferThread1->join(); - snifferThread2->join(); return 0; } diff --git a/tests/jsontest.cpp b/tests/jsontest.cpp new file mode 100644 index 0000000..6e4decc --- /dev/null +++ b/tests/jsontest.cpp @@ -0,0 +1,58 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: jsontest.cpp + * Author: dev + * + * Created on 18.11.2015, 20:41:37 + */ + +#include "jsontest.h" +#include +#include +#include +#include +#include +#include "../src/map/NatRange.h" +#include +CPPUNIT_TEST_SUITE_REGISTRATION(jsontest); + +jsontest::jsontest() { +} + +jsontest::~jsontest() { +} + +void jsontest::setUp() { +} + +void jsontest::tearDown() { +} + +void jsontest::testReadConfig() { + std::ifstream config_doc("src/config.json", std::ifstream::binary); + Json::Value root; + config_doc >> root; + const Json::Value netcards = root; + for (Json::Value netcard : netcards) { + const std::string name = netcard.getMemberNames()[0].c_str(); + const Json::Value cardMember = netcard[name]; + const std::string ipStr = cardMember["rangeIpAddr"].asString(); + const std::string maskStr = cardMember["rangeNetmask"].asString(); + CPPUNIT_ASSERT(name == "vboxnet0" || name == "vboxnet1"); + CPPUNIT_ASSERT(ipStr == "10.0.0.0" || ipStr == "172.27.0.0"); + CPPUNIT_ASSERT(maskStr == "255.255.240.0" || maskStr == "255.255.0.0"); + const Tins::NetworkInterface net(name); + const otonat::NatRange netRange(net, Tins::IPv4Address(ipStr), Tins::IPv4Address(maskStr)); + CPPUNIT_ASSERT(name == netRange.interface.name()); + CPPUNIT_ASSERT(ipStr == netRange.rangeIpAddr.to_string()); + CPPUNIT_ASSERT(maskStr == netRange.rangeNetmask.to_string()); + } + +} + + diff --git a/tests/jsontest.h b/tests/jsontest.h new file mode 100644 index 0000000..9a9f154 --- /dev/null +++ b/tests/jsontest.h @@ -0,0 +1,37 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: jsontest.h + * Author: dev + * + * Created on 18.11.2015, 20:41:37 + */ + +#ifndef JSONTEST_H +#define JSONTEST_H + +#include + +class jsontest : public CPPUNIT_NS::TestFixture { + CPPUNIT_TEST_SUITE(jsontest); + + CPPUNIT_TEST(testReadConfig); + CPPUNIT_TEST_SUITE_END(); + +public: + jsontest(); + virtual ~jsontest(); + void setUp(); + void tearDown(); + +private: + void testReadConfig(); + +}; + +#endif /* JSONTEST_H */ + diff --git a/tests/jsontestrunner.cpp b/tests/jsontestrunner.cpp new file mode 100644 index 0000000..47a8ce0 --- /dev/null +++ b/tests/jsontestrunner.cpp @@ -0,0 +1,89 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/* + * File: newtestrunner.cpp + * Author: dev + * + * Created on 18.11.2015, 20:41:38 + */ + +// CppUnit site http://sourceforge.net/projects/cppunit/files + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +class ProgressListener : public CPPUNIT_NS::TestListener { +public: + + ProgressListener() + : m_lastTestFailed(false) { + } + + ~ProgressListener() { + } + + void startTest(CPPUNIT_NS::Test *test) { + CPPUNIT_NS::stdCOut() << test->getName(); + CPPUNIT_NS::stdCOut() << "\n"; + CPPUNIT_NS::stdCOut().flush(); + + m_lastTestFailed = false; + } + + void addFailure(const CPPUNIT_NS::TestFailure &failure) { + CPPUNIT_NS::stdCOut() << " : " << (failure.isError() ? "error" : "assertion"); + m_lastTestFailed = true; + } + + void endTest(CPPUNIT_NS::Test *test) { + if (!m_lastTestFailed) + CPPUNIT_NS::stdCOut() << " : OK"; + CPPUNIT_NS::stdCOut() << "\n"; + } + +private: + /// Prevents the use of the copy constructor. + ProgressListener(const ProgressListener ©); + + /// Prevents the use of the copy operator. + void operator=(const ProgressListener ©); + +private: + bool m_lastTestFailed; +}; + +int main() { + // Create the event manager and test controller + CPPUNIT_NS::TestResult controller; + + // Add a listener that colllects test result + CPPUNIT_NS::TestResultCollector result; + controller.addListener(&result); + + // Add a listener that print dots as test run. + ProgressListener progress; + controller.addListener(&progress); + + // Add the top suite to the test runner + CPPUNIT_NS::TestRunner runner; + runner.addTest(CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest()); + runner.run(controller); + + // Print test in a compiler compatible format. + CPPUNIT_NS::CompilerOutputter outputter(&result, CPPUNIT_NS::stdCOut()); + outputter.write(); + + return result.wasSuccessful() ? 0 : 1; +}