Feature/bacnet secure connect hub (#818)

* Added BACnet Secure Connect datalink.

* Added BACnet/SC hub application
---------

Co-authored-by: Kirill Neznamov <kirill.neznamov@dsr-corporation.com>
Co-authored-by: Mikhail Antropov <michail.antropov@dsr-corporation.com>
Co-authored-by: Ondřej Hruška <ondra@ondrovo.com>
Co-authored-by: Patrick Grimm <patrick@lunatiki.de>
This commit is contained in:
Steve Karg
2024-11-04 07:05:26 -06:00
committed by GitHub
parent 90cdc4920b
commit cf77abac9b
161 changed files with 82982 additions and 23 deletions
+69 -5
View File
@@ -64,13 +64,19 @@ option(
"compile with ipv6 datalink support"
ON)
option(
BACDL_BSC
"compile with secure-connect support"
OFF)
if(NOT (BACDL_ETHERNET OR
BACDL_MSTP OR
BACDL_ARCNET OR
BACDL_BIP OR
BACDL_BIP6 OR
BACDL_BSC OR
BACDL_CUSTOM))
add_definitions(-DBACDL_NONE)
add_definitions(-DBACDL_NONE)
endif()
option(
@@ -174,6 +180,9 @@ elseif(MSVC)
# Might be slower if builded with /Qspectre
add_compile_options(/wd5045)
# format string expected in argument 3 is not a string literal. secure_connect.c:1414
add_compile_options(/wd4774)
endif()
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "AppleClang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU")
@@ -186,6 +195,15 @@ endif()
find_package(Threads)
if(BACDL_BSC)
find_package(libwebsockets CONFIG REQUIRED)
find_package(PkgConfig)
pkg_check_modules(LIB_WEBSOCKETS REQUIRED libwebsockets)
#libwebsocket need C99 with variadic-macros
add_compile_options(-Wno-variadic-macros)
find_package(OpenSSL)
endif()
if(UCI)
FIND_PATH(uci_include_dir uci.h)
FIND_LIBRARY(uci_lib NAMES uci)
@@ -257,12 +275,30 @@ add_library(${PROJECT_NAME}
src/bacnet/weeklyschedule.h
src/bacnet/special_event.c
src/bacnet/special_event.h
src/bacnet/secure_connect.c
src/bacnet/secure_connect.h
$<$<BOOL:${BACDL_BIP}>:src/bacnet/basic/bbmd/h_bbmd.c>
$<$<BOOL:${BACDL_BIP}>:src/bacnet/basic/bbmd/h_bbmd.h>
$<$<BOOL:${BACDL_BIP6}>:src/bacnet/basic/bbmd6/h_bbmd6.c>
$<$<BOOL:${BACDL_BIP6}>:src/bacnet/basic/bbmd6/h_bbmd6.h>
$<$<BOOL:${BACDL_BIP6}>:src/bacnet/basic/bbmd6/vmac.c>
$<$<BOOL:${BACDL_BIP6}>:src/bacnet/basic/bbmd6/vmac.h>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bvlc-sc.c>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bvlc-sc.h>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-socket.c>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-socket.h>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-util.h>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-util.c>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-hub-connector.h>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-hub-connector.c>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-hub-function.h>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-hub-function.c>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-node-switch.h>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-node-switch.c>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-node.h>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-node.c>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-datalink.h>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/datalink/bsc/bsc-datalink.c>
src/bacnet/basic/binding/address.c
src/bacnet/basic/binding/address.h
src/bacnet/basic/npdu/h_npdu.c
@@ -340,6 +376,8 @@ add_library(${PROJECT_NAME}
src/bacnet/basic/object/nc.h
src/bacnet/basic/object/netport.c
src/bacnet/basic/object/netport.h
$<$<BOOL:${BACDL_BSC}>:src/bacnet/basic/object/sc_netport.c>
$<$<BOOL:${BACDL_BSC}>:src/bacnet/basic/object/sc_netport.h>
src/bacnet/basic/object/objects.c
src/bacnet/basic/object/objects.h
src/bacnet/basic/object/osv.c
@@ -623,6 +661,7 @@ target_compile_definitions(
PUBLIC
BACNET_PROTOCOL_REVISION=${BACNET_PROTOCOL_REVISION}
$<$<BOOL:${BACDL_BIP}>:BACDL_BIP>
$<$<BOOL:${BACDL_BSC}>:BACDL_BSC>
$<$<BOOL:${BACDL_BIP6}>:BACDL_BIP6>
$<$<BOOL:${BACDL_ARCNET}>:BACDL_ARCNET>
$<$<BOOL:${BACDL_MSTP}>:BACDL_MSTP>
@@ -633,7 +672,12 @@ target_compile_definitions(
$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:BACNET_STACK_STATIC_DEFINE>
PRIVATE
PRINT_ENABLED=1)
target_link_libraries(${PROJECT_NAME} PUBLIC Threads::Threads)
if(BACDL_BSC)
target_link_libraries(${PROJECT_NAME} PUBLIC Threads::Threads ${LIB_WEBSOCKETS_LIBRARIES} )
else()
target_link_libraries(${PROJECT_NAME} PUBLIC Threads::Threads)
endif()
add_library(
${PROJECT_NAME}::${PROJECT_NAME}
@@ -652,6 +696,7 @@ elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
message(STATUS "BACNET: building for linux")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/linux)
target_link_libraries(${PROJECT_NAME} PUBLIC m)
add_compile_definitions(BACNET_PORT=linux)
target_sources(${PROJECT_NAME} PRIVATE
ports/linux/bacport.h
@@ -663,11 +708,16 @@ elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
$<$<BOOL:${BACDL_MSTP}>:ports/linux/rs485.h>
$<$<BOOL:${BACDL_MSTP}>:ports/linux/dlmstp.c>
$<$<BOOL:${BACDL_ETHERNET}>:ports/linux/ethernet.c>
$<$<BOOL:${BACDL_BSC}>:ports/linux/bsc-event.c>
$<$<BOOL:${BACDL_BSC}>:ports/linux/websocket-cli.c>
$<$<BOOL:${BACDL_BSC}>:ports/linux/websocket-srv.c>
$<$<BOOL:${BACDL_BSC}>:ports/linux/websocket-global.c>
ports/linux/mstimer-init.c)
elseif(WIN32)
message(STATUS "BACNET: building for win32")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/win32)
add_compile_definitions(BACNET_PORT=win32)
target_link_libraries(${PROJECT_NAME} PUBLIC wsock32)
@@ -685,7 +735,11 @@ elseif(WIN32)
# ports/win32/dlmstp-mm.c
ports/win32/mstimer-init.c
$<$<BOOL:${BACDL_MSTP}>:ports/win32/rs485.c>
$<$<BOOL:${BACDL_MSTP}>:ports/win32/rs485.h>)
$<$<BOOL:${BACDL_MSTP}>:ports/win32/rs485.h>
$<$<BOOL:${BACDL_BSC}>:ports/win32/bsc-event.c>
$<$<BOOL:${BACDL_BSC}>:ports/win32/websocket-cli.c>
$<$<BOOL:${BACDL_BSC}>:ports/win32/websocket-srv.c>
$<$<BOOL:${BACDL_BSC}>:ports/win32/websocket-global.c>)
if(BACDL_ETHERNET)
include(ExternalProject)
@@ -729,6 +783,10 @@ elseif(APPLE)
$<$<BOOL:${BACDL_MSTP}>:ports/bsd/dlmstp.c>
ports/bsd/datetime-init.c
ports/bsd/mstimer-init.c
$<$<BOOL:${BACDL_BSC}>:ports/bsd/bsc-event.c>
$<$<BOOL:${BACDL_BSC}>:ports/bsd/websocket-cli.c>
$<$<BOOL:${BACDL_BSC}>:ports/bsd/websocket-srv.c>
$<$<BOOL:${BACDL_BSC}>:ports/bsd/websocket-global.c>
ports/bsd/stdbool.h)
if(BACDL_ETHERNET)
@@ -766,7 +824,8 @@ endif()
target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${BACNET_PORT_DIRECTORY_PATH}>
)
$<$<BOOL:${BACDL_BSC}>:${OPEN_SSL_DIR}/include>
)
#
# examples
@@ -874,7 +933,7 @@ if(BACNET_STACK_BUILD_APPS)
)
endif(BACNET_BUILD_BACDISCOVER_APP)
if(BACDL_BIP)
if(BACDL_BIP AND (NOT BACDL_BSC))
add_executable(readbdt apps/readbdt/main.c)
target_link_libraries(readbdt PRIVATE ${PROJECT_NAME})
@@ -1017,6 +1076,10 @@ if(BACNET_STACK_BUILD_APPS)
add_executable(writepropm apps/writepropm/main.c)
target_link_libraries(writepropm PRIVATE ${PROJECT_NAME})
if(BACDL_BSC)
add_executable(sc-hub apps/sc-hub/main.c)
target_link_libraries(sc-hub PRIVATE ${PROJECT_NAME})
endif()
endif()
#
@@ -1077,6 +1140,7 @@ message(STATUS "BACNET: BACNET_PROTOCOL_REVISION:.......\"${BACNET_PROTOCOL_REVI
message(STATUS "BACNET: Selected datalinks:")
message(STATUS "BACNET: BACDL_BIP6:.....................\"${BACDL_BIP6}\"")
message(STATUS "BACNET: BACDL_BIP:......................\"${BACDL_BIP}\"")
message(STATUS "BACNET: BACDL_BSC:......................\"${BACDL_BSC}\"")
message(STATUS "BACNET: BACDL_ARCNET:...................\"${BACDL_ARCNET}\"")
message(STATUS "BACNET: BACDL_MSTP:.....................\"${BACDL_MSTP}\"")
message(STATUS "BACNET: BACDL_ETHERNET:.................\"${BACDL_ETHERNET}\"")