From 66e60c32c0dd17b5e8c6db35f18b353e99556da0 Mon Sep 17 00:00:00 2001
From: Dmitriy Gerasimov <naeper@demlabs.net>
Date: Wed, 10 Feb 2021 20:42:03 +0700
Subject: [PATCH] [+] Finished BSD port [-] For BSD: Switched off ping utility
 and VPN service

---
 modules/CMakeLists.txt                             |  6 ++++--
 modules/chain/dap_chain.c                          |  2 +-
 modules/global-db/dap_chain_global_db_driver_cdb.c |  8 +++++++-
 modules/net/CMakeLists.txt                         |  2 +-
 modules/net/dap_chain_net.c                        |  7 ++++++-
 modules/net/dap_chain_node_dns_client.c            |  4 ++--
 modules/service/vpn/dap_chain_net_srv_vpn.c        | 13 +++++++++++--
 7 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt
index 78ae7458e4..6023ff4717 100644
--- a/modules/CMakeLists.txt
+++ b/modules/CMakeLists.txt
@@ -73,8 +73,10 @@ if (CELLFRAME_MODULES MATCHES "srv-datum")
 endif()
 
 # Service VPN
-if (CELLFRAME_MODULES MATCHES "srv-vpn")
-    add_subdirectory(service/vpn)
+if(LINUX)
+    if (CELLFRAME_MODULES MATCHES "srv-vpn")
+	add_subdirectory(service/vpn)
+    endif()
 endif()
 
 # Service eXchange
diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c
index b6b5943cad..d117a5ef9b 100644
--- a/modules/chain/dap_chain.c
+++ b/modules/chain/dap_chain.c
@@ -24,7 +24,7 @@
 #include <dap_chain_ledger.h>
 #include <sys/types.h>
 #include <dirent.h>
-#ifdef DAP_OS_UNIX
+#ifdef DAP_OS_LINUX
 #include <stdc-predef.h>
 #endif
 #include <unistd.h>
diff --git a/modules/global-db/dap_chain_global_db_driver_cdb.c b/modules/global-db/dap_chain_global_db_driver_cdb.c
index 5b54ead3ac..fe44afcd95 100644
--- a/modules/global-db/dap_chain_global_db_driver_cdb.c
+++ b/modules/global-db/dap_chain_global_db_driver_cdb.c
@@ -197,12 +197,18 @@ int dap_db_driver_cdb_init(const char *a_cdb_path, dap_db_driver_callbacks_t *a_
 #ifdef _DIRENT_HAVE_D_TYPE
         if (d->d_type != DT_DIR)
             continue;
-#else
+#elif defined(DAP_OS_LINUX)
         struct _stat buf;
         int res = _stat(d->d_name, &buf);
         if (!S_ISDIR(buf.st_mode) || !res) {
             continue;
         }
+#elif defined (DAP_OS_BSD)        
+        struct stat buf;
+        int res = stat(d->d_name, &buf);
+        if (!S_ISDIR(buf.st_mode) || !res) {
+            continue;
+        }
 #endif
         if (!dap_strcmp(d->d_name, ".") || !dap_strcmp(d->d_name, "..")) {
             continue;
diff --git a/modules/net/CMakeLists.txt b/modules/net/CMakeLists.txt
index 79fe22e7ca..3c1b2a9d5a 100644
--- a/modules/net/CMakeLists.txt
+++ b/modules/net/CMakeLists.txt
@@ -16,7 +16,7 @@ set(IPUTILS_INCLUDE_DIRS
      ../../3rdparty/iputils/traceroute/
     )
 
-if(NOT (WIN32))
+if(LINUX)
   file(GLOB IPUTILS_SRCS ../../3rdparty/iputils/*.c ../../3rdparty/iputils/traceroute/*.c)
   file(GLOB IPUTILS_HEADERS ../../3rdparty/iputils/*.h ${IPUTILS_INCLUDE_DIRS}*.h)
 endif()
diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c
index f13b831171..765113edd0 100644
--- a/modules/net/dap_chain_net.c
+++ b/modules/net/dap_chain_net.c
@@ -1648,7 +1648,12 @@ int s_net_load(const char * a_net_name, uint16_t a_acl_idx)
 
                     l_node_info->hdr.address.uint64 = l_seed_node_addr->uint64;
                     if ( l_node_info->hdr.ext_addr_v4.s_addr ||
-                            l_node_info->hdr.ext_addr_v6.s6_addr32[0] ){
+                    #ifdef DAP_OS_BSD
+                	l_node_info->hdr.ext_addr_v6.__u6_addr.__u6_addr32[0]
+                    #else
+                        l_node_info->hdr.ext_addr_v6.s6_addr32[0] 
+                    #endif
+                            ){
                         int l_ret;
                         if ( (l_ret = dap_chain_node_info_save(l_net, l_node_info)) ==0 ){
                             if (dap_chain_node_alias_register(l_net,l_net_pvt->seed_aliases[i],l_seed_node_addr))
diff --git a/modules/net/dap_chain_node_dns_client.c b/modules/net/dap_chain_node_dns_client.c
index 29c91805a7..2ed130ddc3 100644
--- a/modules/net/dap_chain_node_dns_client.c
+++ b/modules/net/dap_chain_node_dns_client.c
@@ -67,7 +67,7 @@ static void s_dns_client_esocket_read_callback(dap_events_socket_t * a_esocket,
     size_t l_addr_point = DNS_HEADER_SIZE + strlen(l_dns_client->name) + 2 + 2 * sizeof(uint16_t) + DNS_ANSWER_SIZE - sizeof(uint32_t);
     if (l_recieved < l_addr_point + sizeof(uint32_t)) {
         log_it(L_WARNING, "DNS answer incomplete");
-        l_dns_client->callback_error(a_esocket->worker, l_dns_client->result,l_dns_client->callbacks_arg,EREMOTEIO );
+        l_dns_client->callback_error(a_esocket->worker, l_dns_client->result,l_dns_client->callbacks_arg,EIO );
         l_dns_client->is_callbacks_called = true;
         a_esocket->flags |= DAP_SOCK_SIGNAL_CLOSE;
         a_esocket->buf_in_size = a_esocket->buf_out_size = 0;
@@ -77,7 +77,7 @@ static void s_dns_client_esocket_read_callback(dap_events_socket_t * a_esocket,
     int l_answers_count = ntohs(*(uint16_t *)l_cur);
     if (l_answers_count != 1) {
         log_it(L_WARNING, "Incorrect DNS answer format");
-        l_dns_client->callback_error(a_esocket->worker, l_dns_client->result,l_dns_client->callbacks_arg,EMEDIUMTYPE );
+        l_dns_client->callback_error(a_esocket->worker, l_dns_client->result,l_dns_client->callbacks_arg,EINVAL);
         l_dns_client->is_callbacks_called = true;
         a_esocket->flags |= DAP_SOCK_SIGNAL_CLOSE;
         a_esocket->buf_in_size = a_esocket->buf_out_size = 0;
diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c
index d4a4c60020..8cff46d7a9 100644
--- a/modules/service/vpn/dap_chain_net_srv_vpn.c
+++ b/modules/service/vpn/dap_chain_net_srv_vpn.c
@@ -24,17 +24,26 @@
     along with any DAP based project.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#ifdef DAP_OS_UNIX
+#ifdef DAP_OS_LINUX
 #include <netinet/in.h>
 #include <linux/if.h>
 #include <linux/if_tun.h>
 #include <sys/ioctl.h>
+#include <sys/epoll.h>
+#endif
+
+#ifdef DAP_OS_BSD
+#include <netinet/in.h>
+#include <net/if.h>
+#include <net/if_tun.h>
+#include <sys/ioctl.h>
 #endif
 
+
+
 #include <sys/select.h>
 #include <sys/types.h>
 #include <sys/socket.h>
-#include <sys/epoll.h>
 #include <sys/un.h>
 
 #include <netinet/in.h>
-- 
GitLab