2009-06-24 00:35:59 -07:00
#
# VERMONT build scripts for CMake
# Copyright (C) 2007 Christoph Sommer <christoph.sommer@informatik.uni-erlangen.de>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
PROJECT ( VERMONT )
### CMake configuration
# allow building with old CMake. Use some bundled modules as a fallback
2017-12-13 04:02:39 -08:00
CMAKE_MINIMUM_REQUIRED ( VERSION 2.8.4 )
2015-05-20 10:07:27 -07:00
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules" )
2009-06-24 00:35:59 -07:00
2015-06-18 05:53:12 -07:00
# TODO: Bonus: Remove -Wno-unused-parameter and fix all code as this one gernerates hundreds of warnings
2017-12-15 07:31:26 -08:00
set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11 -Werror -Wall -pedantic -Wextra -Wno-unused-parameter"
2015-06-18 05:53:12 -07:00
C A C H E S T R I N G
" R e c o m m e n d e d C F l a g s "
F O R C E )
2017-12-15 07:31:26 -08:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Werror -Wall -pedantic -Wextra -Wno-unused-parameter"
2015-06-18 05:53:12 -07:00
C A C H E S T R I N G
" R e c o m m e n d e d C + + F l a g s "
F O R C E )
# Add our own specifc debug flag to the defaults
set ( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -DDEBUG" CACHE STRING "Recommended C Debug Flags" FORCE )
set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -DDEBUG" CACHE STRING "Recommended C++ Debug Flags" FORCE )
IF ( NOT CMAKE_BUILD_TYPE )
SET ( CMAKE_BUILD_TYPE Release CACHE STRING
" C h o o s e t h e t y p e o f b u i l d , o p t i o n s a r e : N o n e D e b u g R e l e a s e R e l W i t h D e b I n f o M i n S i z e R e l . "
F O R C E )
ENDIF ( NOT CMAKE_BUILD_TYPE )
message ( "* Current build type is : ${CMAKE_BUILD_TYPE}" )
2009-06-24 00:35:59 -07:00
# move some config clutter to the advanced section
MARK_AS_ADVANCED (
C M A K E _ B A C K W A R D S _ C O M P A T I B I L I T Y
C M A K E _ I N S T A L L _ P R E F I X
E X E C U T A B L E _ O U T P U T _ P A T H
L I B R A R Y _ O U T P U T _ P A T H
)
2015-06-25 02:07:34 -07:00
include ( CppcheckTargets )
2017-10-13 07:45:30 -07:00
include ( CheckSymbolExists )
include ( CheckIncludeFile )
2015-06-25 02:07:34 -07:00
2009-06-24 00:35:59 -07:00
### basic modules
2016-11-18 03:29:16 -08:00
ENABLE_TESTING ( )
2009-06-24 00:35:59 -07:00
SUBDIRS (
s r c
)
ADD_EXECUTABLE ( vermont
s r c / v e r m o n t . c c
)
INCLUDE_DIRECTORIES ( ${ VERMONT_SOURCE_DIR } /src )
TARGET_LINK_LIBRARIES ( vermont
m o d u l e s
c o r e
a n o n
i p f i x l o l i b
c o m m o n
o s d e p
)
INSTALL ( TARGETS vermont
R U N T I M E D E S T I N A T I O N b i n
)
2017-12-14 07:09:58 -08:00
INSTALL ( FILES README.md LICENSE
2009-06-24 00:35:59 -07:00
D E S T I N A T I O N s h a r e / d o c / v e r m o n t
)
INSTALL ( DIRECTORY configs/
D E S T I N A T I O N s h a r e / v e r m o n t / c o n f i g s
)
2015-06-25 02:07:34 -07:00
add_cppcheck ( vermont STYLE POSSIBLE_ERROR )
2009-06-24 00:35:59 -07:00
2015-06-05 03:17:37 -07:00
SET ( PKG_CONFIG_USE_CMAKE_PREFIX_PATH 1 )
2009-06-24 00:35:59 -07:00
### doxygen
2010-01-22 07:20:26 -08:00
#FIND_PACKAGE(Doxygen REQUIRED)
2009-06-24 00:35:59 -07:00
### threads
FIND_PACKAGE ( Threads REQUIRED )
TARGET_LINK_LIBRARIES ( vermont
$ { C M A K E _ T H R E A D _ L I B S _ I N I T }
)
Syslog and journald support
Add new CLI options to support logging to Syslog and journald.
journald support is also behind a new CMake flag, SUPPORT_JOURNALD,
since it adds a dependency on libsystemd-journal.
Add --quiet, which will disable output to STDOUT/STDERR. Useful
when logging directly to the above mentioned loggers.
Add --log-level, to allow for mix and match log levels, for example
only warning and critical can be enabled together.
New usage output:
VERsatile MONitoring Tool - VERMONT
MANDATORY OPTIONS:
-f, --config-file FILE Use configuration file
OTHER OPTIONS:
-h, --help Display this help and exit
-d, --debug Log verbosity: -d NOTICE, -dd INFO,
-ddd DEBUG
-l, --log-level LEVEL Log level. Can be specified multiple
times and mix-matched.
In increasing order:
debug
info
notice
warning
error
critical
Default: critical, warning, error
-q, --quiet Do not write output to console
-b, --daemon Run in daemon mode (implies -q)
-p, --pid-file FILE Set process id filename (use with -d)
-u, --user USER Change user to USER (use with -d)
-g, --group GROUP Change group to GROUP (use with -d)
-s, --syslog Log to syslog
-j, --journald Log to journald
2015-07-07 05:16:02 -07:00
### journald
OPTION ( SUPPORT_JOURNALD "Enable systemd journald support" OFF )
IF ( SUPPORT_JOURNALD )
SET ( PKG_CONFIG_USE_CMAKE_PREFIX_PATH 1 )
FIND_PACKAGE ( PkgConfig REQUIRED )
PKG_CHECK_MODULES ( JOURNALD libsystemd )
IF ( NOT JOURNALD_FOUND )
PKG_CHECK_MODULES ( JOURNALD libsystemd-journal )
IF ( NOT JOURNALD_FOUND )
MESSAGE ( FATAL_ERROR "Could not find journald libraries." )
ENDIF ( NOT JOURNALD_FOUND )
ENDIF ( NOT JOURNALD_FOUND )
ENDIF ( SUPPORT_JOURNALD )
IF ( JOURNALD_FOUND )
ADD_DEFINITIONS ( -DJOURNALD_SUPPORT_ENABLED )
LINK_DIRECTORIES ( ${ JOURNALD_LIBRARY_DIRS } )
INCLUDE_DIRECTORIES ( ${ JOURNALD_INCLUDE_DIRS } )
TARGET_LINK_LIBRARIES ( vermont
$ { J O U R N A L D _ L I B R A R I E S }
)
ELSE ( JOURNALD_FOUND )
REMOVE_DEFINITIONS ( -DJOURNALD_SUPPORT_ENABLED )
ENDIF ( JOURNALD_FOUND )
2015-06-05 03:17:37 -07:00
### ZMQ receiver
OPTION ( SUPPORT_ZMQ "Enable ZMQ support" OFF )
IF ( SUPPORT_ZMQ )
FIND_PACKAGE ( PkgConfig REQUIRED )
PKG_CHECK_MODULES ( CZMQ libczmq )
IF ( NOT CZMQ_FOUND )
MESSAGE ( FATAL_ERROR "Could not find libczmq libraries." )
ELSE ( NOT CZMQ_FOUND )
MESSAGE ( STATUS "Found libczmq libraries" )
ENDIF ( NOT CZMQ_FOUND )
ENDIF ( SUPPORT_ZMQ )
IF ( CZMQ_FOUND )
ADD_DEFINITIONS ( -DZMQ_SUPPORT_ENABLED )
LINK_DIRECTORIES ( ${ CZMQ_LIBRARY_DIRS } )
INCLUDE_DIRECTORIES ( ${ CZMQ_INCLUDE_DIRS } )
TARGET_LINK_LIBRARIES ( vermont
$ { C Z M Q _ L I B R A R I E S }
)
ELSE ( CZMQ_FOUND )
REMOVE_DEFINITIONS ( -DZMQ_SUPPORT_ENABLED )
ENDIF ( CZMQ_FOUND )
2015-08-25 07:55:47 -07:00
OPTION ( DISABLE_UDP_CONNECT "Do not run connect on UDP socket" OFF )
IF ( DISABLE_UDP_CONNECT )
ADD_DEFINITIONS ( -DDISABLE_UDP_CONNECT )
ENDIF ( DISABLE_UDP_CONNECT )
2017-10-13 07:45:30 -07:00
### SO_BINDTODEVICE (VRF) support
OPTION ( ENABLE_VRF "Enable support for binding sockets via SO_BINDTODEVICE (VRF). Warning: requires support in runtime kernel for SO_BINDTODEVICE and VRF !" OFF )
IF ( ENABLE_VRF )
CHECK_SYMBOL_EXISTS ( "SO_BINDTODEVICE" "sys/socket.h" SO_BINDTODEVICE_FOUND )
IF ( SO_BINDTODEVICE_FOUND )
ADD_DEFINITIONS ( -DENABLE_VRF )
ELSE ( SO_BINDTODEVICE_FOUND )
MESSAGE ( WARNING "SO_BINDTODEVICE not found in sys/socket.h, will not build with ENABLE_VRF. Check Linux Kernel's userspace headers (eg: linux-libc-dev)" )
ENDIF ( SO_BINDTODEVICE_FOUND )
ENDIF ( ENABLE_VRF )
2017-11-27 10:16:53 -08:00
CHECK_INCLUDE_FILE ( "linux/if.h" LINUX_IF_H_FOUND "-include sys/socket.h" )
2017-10-13 07:45:30 -07:00
2011-12-14 02:36:16 -08:00
### MongoDB
OPTION ( SUPPORT_MONGO "Enable MongoDB support" OFF )
IF ( SUPPORT_MONGO )
FIND_PACKAGE ( MONGO REQUIRED )
IF ( NOT MONGO_FOUND )
2012-09-04 02:53:00 -07:00
MESSAGE ( FATAL_ERROR "Could not find MongoDB libraries." )
2011-12-14 02:36:16 -08:00
ENDIF ( NOT MONGO_FOUND )
ENDIF ( SUPPORT_MONGO )
IF ( MONGO_FOUND )
ADD_DEFINITIONS ( -DMONGO_SUPPORT_ENABLED )
### Mongo is currently forcing BOOST_FILE_SYSTEM v2 when its
### headers are included. If we use version v3 in the rest of
### vermont, we will get compile time errors because of
### redefinitions of certain boost internals. If we support
### mongo, we therefore force v2 on the complete vermont
### compile process. Remove this if v2 is dropped by the boost
### people and mongo switched to v3
ADD_DEFINITIONS ( -DBOOST_FILESYSTEM_VERSION=2 )
IF ( MONGO_VERSION_2 )
ADD_DEFINITIONS ( -DMONGO_VERSION_2 )
2012-07-17 05:45:32 -07:00
MESSAGE ( STATUS "Found MongoDB libraries (version 2)" )
ELSE ( MONGO_VERSION_2 )
MESSAGE ( STATUS "Found MongoDB libraries" )
2011-12-14 02:36:16 -08:00
ENDIF ( MONGO_VERSION_2 )
INCLUDE_DIRECTORIES ( ${ MONGO_INCLUDE_DIR } )
TARGET_LINK_LIBRARIES ( vermont
$ { M O N G O _ L I B R A R I E S }
)
ELSE ( MONGO_FOUND )
REMOVE_DEFINITIONS ( -DMONGO_SUPPORT_ENABLED )
REMOVE_DEFINITIONS ( -DMONGO_VERSION_2 )
REMOVE_DEFINITIONS ( -DBOOST_FILESYSTEM_VERSION )
ENDIF ( MONGO_FOUND )
2012-09-04 02:53:00 -07:00
### Redis
OPTION ( SUPPORT_REDIS "Enable Redis support (for flow-inspector integration)" OFF )
IF ( SUPPORT_REDIS )
FIND_PACKAGE ( Redis REQUIRED )
IF ( NOT HIREDIS_FOUND )
MESSAGE ( FATAL_ERROR "Could not find hiredis client libraries." )
ENDIF ( NOT HIREDIS_FOUND )
ENDIF ( SUPPORT_REDIS )
IF ( HIREDIS_FOUND )
ADD_DEFINITIONS ( -DREDIS_SUPPORT_ENABLED )
INCLUDE_DIRECTORIES ( ${ HIREDIS_INCLUDE_DIR } )
TARGET_LINK_LIBRARIES ( vermont
$ { H I R E D I S _ L I B R A R I E S }
)
ELSE ( HIREDIS_FOUND )
REMOVE_DEFINITIONS ( -DREDIS_SUPPORT_ENABLED )
ENDIF ( HIREDIS_FOUND )
2009-06-24 00:35:59 -07:00
### boost
2019-12-18 09:58:18 -08:00
FIND_PACKAGE ( Boost REQUIRED COMPONENTS
r e g e x
t h r e a d
f i l e s y s t e m
u n i t _ t e s t _ f r a m e w o r k
s y s t e m )
2009-06-24 00:35:59 -07:00
IF ( Boost_FOUND )
MESSAGE ( STATUS "Found boost libraries" )
ADD_DEFINITIONS ( -DHAVE_BOOST_FILESYSTEM )
INCLUDE_DIRECTORIES ( ${ Boost_INCLUDE_DIRS } )
TARGET_LINK_LIBRARIES ( vermont
2019-12-18 09:58:18 -08:00
B o o s t : : r e g e x
B o o s t : : f i l e s y s t e m
B o o s t : : s y s t e m
2009-06-24 00:35:59 -07:00
)
2011-12-14 03:10:09 -08:00
IF ( SUPPORT_MONGO )
2019-12-18 09:58:18 -08:00
TARGET_LINK_LIBRARIES ( vermont Boost::thread
2011-12-14 03:10:09 -08:00
)
ENDIF ( SUPPORT_MONGO )
2009-06-24 00:35:59 -07:00
ELSE ( Boost_FOUND )
MESSAGE ( FATAL_ERROR "Could not find boost libraries" )
REMOVE_DEFINITIONS ( -DHAVE_BOOST_FILESYSTEM )
ENDIF ( Boost_FOUND )
### libxml2
FIND_PACKAGE ( LibXml2 REQUIRED )
MARK_AS_ADVANCED (
L I B X M L 2 _ I N C L U D E _ D I R
L I B X M L 2 _ L I B R A R I E S
)
IF ( LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARIES )
MESSAGE ( STATUS "Found libxml2 libraries" )
INCLUDE_DIRECTORIES ( ${ LIBXML2_INCLUDE_DIR } )
TARGET_LINK_LIBRARIES ( vermont
$ { L I B X M L 2 _ L I B R A R I E S }
)
ELSE ( LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARIES )
MESSAGE ( FATAL_ERROR "Could not find libxml2 libraries" )
ENDIF ( LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARIES )
2011-12-15 08:37:05 -08:00
### export time sanity checks
2012-03-13 07:09:14 -07:00
OPTION ( EXPORT_TIME_SANITY_CHECK "Enable sanity checks on arrival of flows based on export time" OFF )
2011-12-15 08:37:05 -08:00
IF ( EXPORT_TIME_SANITY_CHECK )
2012-03-13 07:09:14 -07:00
ADD_DEFINITIONS ( -DEXPORT_TIME_SANITY_CHECK )
2011-12-15 08:37:05 -08:00
ENDIF ( EXPORT_TIME_SANITY_CHECK )
2009-06-24 00:35:59 -07:00
### PCAP_MAX_CAPTURE_LENGTH
SET ( PCAP_MAX_CAPTURE_LENGTH 128 CACHE STRING "Maximum PCAP packet capture length (this amount of bytes is always allocated for each packet, the smaller the better!)" )
ADD_DEFINITIONS ( -DPCAP_MAX_CAPTURE_LENGTH= ${ PCAP_MAX_CAPTURE_LENGTH } )
2011-03-24 08:56:21 -07:00
# TODO: there is a bug in the code that occurs then the MAX_CAPTURE_LENGTH is > 65000
# that occurs in the offset calucation in PacketHashTable (the offset is a uint16_t that
# overflows when MAX_CAPTURE_LENGTH is too big.
# until we fixted the bug, we restrict ourselfs on on teh maximum capture length
IF ( PCAP_MAX_CAPTURE_LENGTH GREATER 65000 )
MESSAGE ( FATAL_ERROR "PCAP_MAX_CAPTURE_LENGTH is too big. Make it <= 65000 or fix the bug described in CMakeLists.txt" )
ENDIF ( PCAP_MAX_CAPTURE_LENGTH GREATER 65000 )
2009-06-24 00:35:59 -07:00
### PCAP_DEFAULT_CAPTURE_LENGTH
SET ( PCAP_DEFAULT_CAPTURE_LENGTH 128 CACHE STRING "Default PCAP packet capture length (default value for PCAP snaplen if not defined in configuration)" )
ADD_DEFINITIONS ( -DPCAP_DEFAULT_CAPTURE_LENGTH= ${ PCAP_DEFAULT_CAPTURE_LENGTH } )
### SUPPORT_NETFLOWV9
OPTION ( SUPPORT_NETFLOWV9 "Enable NetFlow version 9 support" ON )
IF ( SUPPORT_NETFLOWV9 )
ADD_DEFINITIONS ( -DSUPPORT_NETFLOWV9 )
ELSE ( SUPPORT_NETFLOWV9 )
REMOVE_DEFINITIONS ( -DSUPPORT_NETFLOWV9 )
ENDIF ( SUPPORT_NETFLOWV9 )
### MySQL
OPTION ( SUPPORT_MYSQL "Enable dbwriter/dbreader support" OFF )
IF ( SUPPORT_MYSQL )
FIND_PACKAGE ( MySQL REQUIRED )
MARK_AS_ADVANCED (
M Y S Q L _ A D D _ I N C L U D E _ D I R
M Y S Q L _ A D D _ L I B R A R Y
M Y S Q L _ C O N F I G
M Y S Q L _ C O N F I G _ P R E F E R _ P A T H
)
IF ( NOT MYSQL_FOUND )
MESSAGE ( FATAL_ERROR "Could not find MySQL libraries." )
ENDIF ( NOT MYSQL_FOUND )
ENDIF ( SUPPORT_MYSQL )
2010-09-28 09:46:08 -07:00
IF ( MYSQL_FOUND AND SUPPORT_MYSQL )
2009-06-24 00:35:59 -07:00
MESSAGE ( STATUS "Found MySQL libraries" )
ADD_DEFINITIONS ( -DDB_SUPPORT_ENABLED )
INCLUDE_DIRECTORIES ( ${ MYSQL_INCLUDE_DIR } )
TARGET_LINK_LIBRARIES ( vermont
$ { M Y S Q L _ L I B R A R I E S }
)
2010-09-28 09:46:08 -07:00
ELSE ( MYSQL_FOUND AND SUPPORT_MYSQL )
2009-06-24 00:35:59 -07:00
REMOVE_DEFINITIONS ( -DDB_SUPPORT_ENABLED )
2010-09-28 09:46:08 -07:00
ENDIF ( MYSQL_FOUND AND SUPPORT_MYSQL )
2009-06-24 00:35:59 -07:00
### PostgreSQL
2015-04-06 06:17:03 -07:00
# Bug in Ubuntu 14.04 does not find PSQL Libs
# https://bugs.launchpad.net/ubuntu/+source/cmake/+bug/1317135
set ( PostgreSQL_ADDITIONAL_SEARCH_PATHS "/usr/include/postgresql/9.3/server" )
2009-06-24 00:35:59 -07:00
2011-08-30 05:42:53 -07:00
OPTION ( SUPPORT_POSTGRESQL "Enable PostgreSQL support" OFF )
IF ( SUPPORT_POSTGRESQL )
2009-06-24 00:35:59 -07:00
FIND_PACKAGE ( PostgreSQL REQUIRED )
2012-10-23 04:05:16 -07:00
IF ( NOT PostgreSQL_FOUND )
2009-06-24 00:35:59 -07:00
MESSAGE ( FATAL_ERROR "Could not find PostgreSQL libraries." )
2012-10-23 04:05:16 -07:00
ENDIF ( NOT PostgreSQL_FOUND )
2011-08-30 05:42:53 -07:00
ENDIF ( SUPPORT_POSTGRESQL )
2012-10-23 04:05:16 -07:00
IF ( PostgreSQL_FOUND )
2009-06-24 00:35:59 -07:00
MESSAGE ( STATUS "Found PostgreSQL libraries" )
ADD_DEFINITIONS ( -DPG_SUPPORT_ENABLED )
2012-10-23 04:05:16 -07:00
INCLUDE_DIRECTORIES ( ${ PostgreSQL_INCLUDE_DIRS } )
2009-06-24 00:35:59 -07:00
TARGET_LINK_LIBRARIES ( vermont
2012-10-23 04:05:16 -07:00
$ { P o s t g r e S Q L _ L I B R A R I E S }
2009-06-24 00:35:59 -07:00
)
2012-10-23 04:05:16 -07:00
ELSE ( PostgreSQL_FOUND )
2009-06-24 00:35:59 -07:00
REMOVE_DEFINITIONS ( -DPG_SUPPORT_ENABLED )
2012-10-23 04:05:16 -07:00
ENDIF ( PostgreSQL_FOUND )
2009-06-24 00:35:59 -07:00
2011-08-25 07:17:19 -07:00
### Oracle
OPTION ( SUPPORT_ORACLE "Enable Oracle support" OFF )
IF ( SUPPORT_ORACLE )
FIND_PACKAGE ( Oracle REQUIRED )
IF ( NOT ORACLE_FOUND )
MESSAGE ( FATAL_ERROR "Could not find Oracle libraries." )
ENDIF ( NOT ORACLE_FOUND )
ENDIF ( SUPPORT_ORACLE )
IF ( ORACLE_FOUND )
MESSAGE ( STATUS "Found Oracle libraries" )
ADD_DEFINITIONS ( -DORACLE_SUPPORT_ENABLED )
INCLUDE_DIRECTORIES ( ${ ORACLE_INCLUDE_DIR } )
TARGET_LINK_LIBRARIES ( vermont
2011-09-07 06:31:46 -07:00
$ { O R A C L E _ C O N N E C T I O N _ L I B R A R I E S }
2011-08-25 07:17:19 -07:00
)
2011-09-07 06:31:46 -07:00
TARGET_LINK_LIBRARIES ( vermont
$ { O R A C L E _ C L I E N T _ L I B R A R I E S }
)
2011-08-25 07:17:19 -07:00
ELSE ( ORACLE_FOUND )
REMOVE_DEFINITIONS ( -DORACLE_SUPPORT_ENABLED )
ENDIF ( ORACLE_FOUND )
2009-06-24 00:35:59 -07:00
### libpcap-mmap
OPTION ( USE_PCAPMMAP "Use libpcap-mmap." OFF )
MARK_AS_ADVANCED (
P C A P _ L I B R A R Y _ R E G U L A R
P C A P _ L I B R A R Y _ M M A P
P C A P _ I N C L U D E _ P A T H
)
2010-07-14 06:45:41 -07:00
OPTION ( USE_PFRING "Use pf_ring optimized libpcap." OFF )
MARK_AS_ADVANCED (
P C A P _ L I B R A R Y _ P F R I N G
P F R I N G _ L I B R A R Y
)
2009-06-24 00:35:59 -07:00
IF ( USE_PCAPMMAP )
2010-07-14 06:45:41 -07:00
IF ( USE_PFRING )
MESSAGE ( FATAL_ERROR "Both USE_PCAPMMAP and USE_PFRING have been selected. At most one of these options may be selected!" )
ENDIF ( USE_PFRING )
2009-06-24 00:35:59 -07:00
FIND_LIBRARY ( PCAP_LIBRARY_MMAP NAMES pcap pcap-mmap PATHS ${ VERMONT_SOURCE_DIR } ${ VERMONT_SOURCE_DIR } /libpcap-mmap ${ VERMONT_SOURCE_DIR } /../libpcap-mmap ${ VERMONT_SOURCE_DIR } /../../../trunk/libpcap-mmap NO_DEFAULT_PATH )
FIND_PATH ( PCAP_INCLUDE_PATH NAMES pcap.h PATHS ${ VERMONT_SOURCE_DIR } ${ VERMONT_SOURCE_DIR } /libpcap-mmap ${ VERMONT_SOURCE_DIR } /../libpcap-mmap ${ VERMONT_SOURCE_DIR } /../../../trunk/libpcap-mmap NO_DEFAULT_PATH )
SET ( PCAP_LIBRARY "${PCAP_LIBRARY_MMAP}" )
IF ( PCAP_LIBRARY_MMAP )
SET ( PCAP_LIBRARY "${PCAP_LIBRARY_MMAP}" )
INCLUDE_DIRECTORIES ( ${ PCAP_INCLUDE_PATH } )
ELSE ( PCAP_LIBRARY_MMAP )
MESSAGE ( FATAL_ERROR "Could not find libpcap-mmap. This script also looks in directory ./libpcap-mmap, so maybe you want to create a symlink to the directory of the library." )
ENDIF ( PCAP_LIBRARY_MMAP )
2010-07-14 06:45:41 -07:00
TARGET_LINK_LIBRARIES ( vermont ${ PCAP_LIBRARY } )
ELSEIF ( USE_PFRING )
FIND_LIBRARY ( PCAP_LIBRARY_PFRING NAMES pcap PATHS ${ VERMONT_SOURCE_DIR } ${ VERMONT_SOURCE_DIR } /PF_RING/userland/libpcap-1.0.0-ring ${ VERMONT_SOURCE_DIR } /../PF_RING/userland/libpcap-1.0.0-ring NO_DEFAULT_PATH )
IF ( NOT PCAP_LIBRARY_PFRING )
MESSAGE ( FATAL_ERROR "Could not find libpcap-ring. This script looks in directories ${VERMONT_SOURCE_DIR}/PF_RING/userland/libpcap-1.0.0-ring and ${VERMONT_SOURCE_DIR}/../PF_RING/userland/libpcap-1.0.0-ring, so maybe you want to create a symlink to the directory of the library." )
ENDIF ( NOT PCAP_LIBRARY_PFRING )
FIND_LIBRARY ( PFRING_LIBRARY NAMES pfring PATHS ${ VERMONT_SOURCE_DIR } ${ VERMONT_SOURCE_DIR } /PF_RING/userland/lib ${ VERMONT_SOURCE_DIR } /../PF_RING/userland/lib NO_DEFAULT_PATH )
IF ( NOT PFRING_LIBRARY )
MESSAGE ( FATAL_ERROR "Could not find libpfring. This script looks in directories ${VERMONT_SOURCE_DIR}/PF_RING/userland/lib and ${VERMONT_SOURCE_DIR}/../PF_RING/userland/lib, so maybe you want to create a symlink to the directory of the library." )
ENDIF ( NOT PFRING_LIBRARY )
FIND_PATH ( PCAP_INCLUDE_PATH NAMES pcap.h PATHS ${ VERMONT_SOURCE_DIR } ${ VERMONT_SOURCE_DIR } /PF_RING/userland/libpcap-1.0.0-ring ${ VERMONT_SOURCE_DIR } /../PF_RING/userland/libpcap-1.0.0-ring NO_DEFAULT_PATH )
TARGET_LINK_LIBRARIES ( vermont ${ PCAP_LIBRARY_PFRING } )
TARGET_LINK_LIBRARIES ( vermont ${ PFRING_LIBRARY } )
INCLUDE_DIRECTORIES ( ${ PCAP_INCLUDE_PATH } )
2009-06-24 00:35:59 -07:00
ELSE ( USE_PCAPMMAP )
2010-07-14 06:45:41 -07:00
2009-06-24 00:35:59 -07:00
FIND_LIBRARY ( PCAP_LIBRARY_REGULAR NAMES pcap )
IF ( PCAP_LIBRARY_REGULAR )
SET ( PCAP_LIBRARY "${PCAP_LIBRARY_REGULAR}" )
ELSE ( PCAP_LIBRARY_REGULAR )
MESSAGE ( FATAL_ERROR "Could not find libpcap" )
ENDIF ( PCAP_LIBRARY_REGULAR )
2010-07-14 06:45:41 -07:00
TARGET_LINK_LIBRARIES ( vermont ${ PCAP_LIBRARY } )
2009-06-24 00:35:59 -07:00
ENDIF ( USE_PCAPMMAP )
2010-07-14 06:45:41 -07:00
IF ( USE_PFRING )
ELSE ( USE_PFRING )
FIND_LIBRARY ( PCAP_LIBRARY_REGULAR NAMES pcap )
IF ( PCAP_LIBRARY_REGULAR )
TARGET_LINK_LIBRARIES ( vermont ${ PCAP_LIBRARY_REGULAR } )
ELSE ( PCAP_LIBRARY_REGULAR )
MESSAGE ( FATAL_ERROR "Could not find libpcap." )
ENDIF ( PCAP_LIBRARY_REGULAR )
ENDIF ( USE_PFRING )
2009-06-24 00:35:59 -07:00
### sctp
OPTION ( SUPPORT_SCTP "Support SCTP transport protocol" ON )
IF ( SUPPORT_SCTP )
FIND_PACKAGE ( Sctp REQUIRED )
MARK_AS_ADVANCED (
S C T P _ L I B R A R I E S
S C T P _ I N C L U D E _ D I R
)
ADD_DEFINITIONS ( -DSUPPORT_SCTP )
ELSE ( SUPPORT_SCTP )
REMOVE_DEFINITIONS ( -DSUPPORT_SCTP )
ENDIF ( SUPPORT_SCTP )
### connection filter
OPTION ( CONNECTION_FILTER "Enables/disables the connection filter." OFF )
OPTION ( USE_GSL "Enables/disables GSL in connectionflter." ON )
IF ( CONNECTION_FILTER AND NOT USE_GSL )
MESSAGE ( FATAL_ERROR " GSL is needed for Connectionfilter at the moment.
Y o u c a n n o t h a v e - D C O N N E C T I O N _ F I L T E R = O N a n d - D U S E _ G S L = O F F " )
ENDIF ( CONNECTION_FILTER AND NOT USE_GSL )
IF ( CONNECTION_FILTER )
### gsl
IF ( USE_GSL )
FIND_PACKAGE ( GSL )
MARK_AS_ADVANCED (
G S L _ I N C L U D E _ D I R
G S L _ L I B R A R I E S
G S L _ L I B R A R Y
B L A S _ L I B R A R Y
)
IF ( GSL_FOUND )
MESSAGE ( STATUS "GNU scientific library found" )
ELSE ( GSL_FOUND )
MESSAGE ( FATAL_ERROR " GNU scientific library not found. Please
i n s t a l l t h e l i b r a r y o r u s e - D C O N N E C T I O N _ F I L T E R = O F F a n d - D U S E _ G S L = O F F " )
ENDIF ( GSL_FOUND )
ADD_DEFINITIONS ( -DHAVE_GSL )
TARGET_LINK_LIBRARIES ( vermont ${ GSL_LIBRARIES } )
ENDIF ( USE_GSL )
ADD_DEFINITIONS ( -DHAVE_CONNECTION_FILTER )
ENDIF ( CONNECTION_FILTER )
2010-05-27 08:44:33 -07:00
### openssl
OPTION ( SUPPORT_DTLS "Enables/Disables encryption support for IPFIX messages." OFF )
IF ( SUPPORT_DTLS )
2020-04-11 03:31:23 -07:00
FIND_PACKAGE ( OpenSSL )
2010-05-27 08:44:33 -07:00
IF ( NOT OPENSSL_FOUND )
MESSAGE ( FATAL_ERROR "Could not find openssl. Please install the library or turn off SUPPORT_DTLS" )
ENDIF ( NOT OPENSSL_FOUND )
2020-04-11 03:31:23 -07:00
IF ( NOT ( ${ OPENSSL_VERSION } VERSION_GREATER_EQUAL 1.1.0 ) )
MESSAGE ( FATAL_ERROR "openssl version must be 1.1.0 or higher" )
ENDIF ( NOT ( ${ OPENSSL_VERSION } VERSION_GREATER_EQUAL 1.1.0 ) )
2020-04-22 12:10:27 -07:00
IF ( ${ OPENSSL_VERSION } VERSION_GREATER_EQUAL 1.1.1 )
ADD_DEFINITIONS ( -DHAVE_DTLS_get_data_mtu )
ENDIF ( ${ OPENSSL_VERSION } VERSION_GREATER_EQUAL 1.1.1 )
2010-05-27 08:44:33 -07:00
INCLUDE_DIRECTORIES ( ${ OPENSSL_INCLUDE_DIR } )
TARGET_LINK_LIBRARIES ( vermont ${ OPENSSL_LIBRARIES } )
ADD_DEFINITIONS ( -DSUPPORT_DTLS )
## check wether there is a libcrypto
# FIND_PACKAGE(Crypto)
# IF (CRYPTO_FOUND)
# TARGET_LINK_LIBRARIES(vermont ${CRYPTO_LIBRARIES})
# ENDIF (CRYPTO_FOUND)
ELSE ( SUPPORT_DTLS )
REMOVE_DEFINITIONS ( -DSUPPORT_DLTS )
ENDIF ( SUPPORT_DTLS )
OPTION ( SUPPORT_DTLS_OVER_SCTP "Enables/Disables DTLS on SCTP streams." OFF )
IF ( SUPPORT_DTLS_OVER_SCTP )
IF ( SUPPORT_SCTP AND SUPPORT_DTLS )
2010-06-25 06:34:17 -07:00
# Make sure OpenSSL was compiled with SCTP support enabled
INCLUDE ( CheckSymbolExists )
SET ( CMAKE_REQUIRED_INCLUDES ${ OPENSSL_INCLUDE_DIR } )
# OpenSSL #defines OPENSSL_SCTP if it supports SCTP
CHECK_SYMBOL_EXISTS ( OPENSSL_SCTP "openssl/ssl.h" OPENSSL_SUPPORTS_SCTP )
SET ( CMAKE_REQUIRED_INCLUDES )
IF ( NOT OPENSSL_SUPPORTS_SCTP )
MESSAGE ( FATAL_ERROR "OpenSSL built without SCTP support. Rebuild OpenSSL with SCTP support or turn off SUPPORT_DTLS_OVER_SCTP" )
ENDIF ( NOT OPENSSL_SUPPORTS_SCTP )
2010-05-27 08:44:33 -07:00
ADD_DEFINITIONS ( -DSUPPORT_DTLS_OVER_SCTP )
ELSE ( SUPPORT_SCTP AND SUPPORT_DTLS )
MESSAGE ( FATAL_ERROR "SUPPORT_DTLS_OVER_SCTP can only be enabled together with SUPPORT_SCTP and SUPPORT_DTLS" )
REMOVE_DEFINITIONS ( -DSUPPORT_DTLS_OVER_SCTP )
ENDIF ( SUPPORT_SCTP AND SUPPORT_DTLS )
ELSE ( SUPPORT_DTLS_OVER_SCTP )
REMOVE_DEFINITIONS ( -DSUPPORT_DTLS_OVER_SCTP )
ENDIF ( SUPPORT_DTLS_OVER_SCTP )
2009-06-24 00:35:59 -07:00
### tools
OPTION ( WITH_TOOLS "Build misc tools." ON )
IF ( WITH_TOOLS )
2015-05-20 10:07:27 -07:00
ADD_SUBDIRECTORY ( tools )
2009-06-24 00:35:59 -07:00
ELSE ( WITH_TOOLS )
ENDIF ( WITH_TOOLS )
2010-07-14 06:45:32 -07:00
OPTION ( DISABLE_MEMMANAGER "Disable custom memory manager (good for finding leaks with valgrind." OFF )
IF ( DISABLE_MEMMANAGER )
2010-09-28 09:46:08 -07:00
if ( NOT DEBUG )
MESSAGE ( FATAL_ERROR "Flag DISABLE_MEMMANAGER may only be set if flag DEBUG is set" )
ENDIF ( NOT DEBUG )
2010-07-14 06:45:32 -07:00
ADD_DEFINITIONS ( -DIM_DISABLE )
ENDIF ( DISABLE_MEMMANAGER )
2020-04-26 05:01:23 -07:00
OPTION ( EXIT_ON_EXCEPTION "Thrown exceptions in VERMONT result in a graceful shutdown. Useful for fuzz testing only." OFF )
MARK_AS_ADVANCED ( EXIT_ON_EXCEPTION )
IF ( EXIT_ON_EXCEPTION )
ADD_DEFINITIONS ( -DEXIT_ON_EXCEPTION )
ENDIF ( EXIT_ON_EXCEPTION )
2009-06-24 00:35:59 -07:00
### IPFIXLOLIB_RAWDIR_SUPPORT
OPTION ( IPFIXLOLIB_RAWDIR_SUPPORT "Enable ipfix rawdir support" OFF )
IF ( IPFIXLOLIB_RAWDIR_SUPPORT )
ADD_DEFINITIONS ( -DIPFIXLOLIB_RAWDIR_SUPPORT )
ELSE ( IPFIXLOLIB_RAWDIR_SUPPORT )
REMOVE_DEFINITIONS ( -DIPFIXLOLIB_RAWDIR_SUPPORT )
ENDIF ( IPFIXLOLIB_RAWDIR_SUPPORT )