0
0
mirror of https://github.com/OpenVPN/openvpn3.git synced 2024-09-20 12:12:15 +02:00
openvpn3/test/ovpncli/CMakeLists.txt
Lev Stipakov 8593c41540 ovpn-dco: basic communication with kernel module
Add dependency to libnl-genl, which is C library
for generic netlink communication.

Implement C++ wrapper for libnl-genl, inspired by
ovpn-cli - a test client for ovpn-dco kernel module.

Implement ovpn-dco netlink commands:

  - OVPN_CMD_START_VPN - pass transport socket,
protocol (UDP) and mode (client).

  - OVPN_CMD_NEW_PEER - pass local and remote
endpoint info.

  - OVPN_CMD_PACKET - move (control channel) packets
between userspace and kernel.

  - OVPN_CMD_DEL_PEER - sent by kernel when peer is deleted
due to keepalive timeout (causes reconnect) or any other
reason (considered as fatal).

This change allows to perform openvpn handshake and
establish connection which doesn't work, since data channel
keys are not passed to kernel yet.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
2020-08-26 14:59:24 +00:00

54 lines
1.8 KiB
CMake

cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 14)
include(findcoredeps)
option(CLI_NULLTUN "Build ovpncli variant with null tun" OFF)
option(CLI_KOVPN "Build ovpncli variant with kovpn kernel moduke support" OFF)
option(CLI_OVPNDCO "Build ovpncli variant with ovpn-dco kernel module support" OFF)
set(KOVPN_SOURCE "${CORE_DIR}/../kovpn" CACHE PATH "ovpn-dco kernel module source tree")
set(OVPN_DCO_SOURCE "${CORE_DIR}/../ovpn-dco" CACHE PATH "ovpn-dco kernel module source tree")
add_executable(ovpncli cli.cpp)
add_core_dependencies(ovpncli)
if (${CLI_NULLTUN})
add_executable(ovpnclinull cli.cpp)
add_core_dependencies(ovpnclinull)
target_compile_definitions(ovpnclinull PRIVATE -DOPENVPN_FORCE_TUN_NULL)
endif ()
if (${CLI_KOVPN})
add_executable(ovpnclikovpn cli.cpp)
add_core_dependencies(ovpnclikovpn)
target_compile_definitions(ovpnclikovpn PRIVATE -DENABLE_KOVPN)
include(kovpn)
add_kovpn_dependency(ovpnclikovpn)
target_include_directories(ovpnclikovpn PRIVATE ${KOVPN_SOURCE})
endif()
if (${CLI_OVPNDCO})
add_executable(ovpncliovpndco cli.cpp)
add_core_dependencies(ovpncliovpndco)
target_compile_definitions(ovpncliovpndco PRIVATE -DENABLE_OVPNDCO)
find_package(PkgConfig)
pkg_search_module(LIBNL REQUIRED libnl-genl-3.0)
target_include_directories(ovpncliovpndco PRIVATE ${OVPN_DCO_SOURCE}/include/uapi ${LIBNL_INCLUDE_DIRS})
target_link_libraries(ovpncliovpndco ${LIBNL_LIBRARIES})
endif()
if (WIN32)
# for macos, agent-enabled client requires common and is built by scripts there
add_executable(ovpncliagent cli.cpp)
add_core_dependencies(ovpncliagent)
add_json_library(ovpncliagent)
target_compile_definitions(ovpncliagent PRIVATE -DOPENVPN_COMMAND_AGENT -DOVPNAGENT_DISABLE_PATH_CHECK)
endif ()