From 8b1e2f101fd56038cfcefb96cb1ca59ca4db912d Mon Sep 17 00:00:00 2001 From: mstaylor Date: Mon, 10 Jun 2024 13:45:25 -0400 Subject: [PATCH 01/16] initial commit --- extern/TCPunch | 1 - extern/TCPunch/client/CMakeLists.txt | 50 +++++ .../client/cmake/tcpunchConfig.cmake.in | 8 + extern/TCPunch/client/tcpunch.cpp | 194 ++++++++++++++++++ extern/TCPunch/client/tcpunch.h | 16 ++ 5 files changed, 268 insertions(+), 1 deletion(-) delete mode 160000 extern/TCPunch create mode 100644 extern/TCPunch/client/CMakeLists.txt create mode 100644 extern/TCPunch/client/cmake/tcpunchConfig.cmake.in create mode 100644 extern/TCPunch/client/tcpunch.cpp create mode 100644 extern/TCPunch/client/tcpunch.h diff --git a/extern/TCPunch b/extern/TCPunch deleted file mode 160000 index befd086..0000000 --- a/extern/TCPunch +++ /dev/null @@ -1 +0,0 @@ -Subproject commit befd086c88fd974684f3e8c6ec05826696dc7ef7 diff --git a/extern/TCPunch/client/CMakeLists.txt b/extern/TCPunch/client/CMakeLists.txt new file mode 100644 index 0000000..5222f85 --- /dev/null +++ b/extern/TCPunch/client/CMakeLists.txt @@ -0,0 +1,50 @@ +cmake_minimum_required(VERSION 3.10) + +set(CMAKE_THREAD_PREFER_PTHREAD TRUE) +set(THREADS_PREFER_PTHREAD_FLAG TRUE) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + + +project(tcpunch VERSION 1.0) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED True) + +find_package(Threads REQUIRED) +add_library(tcpunch STATIC tcpunch.cpp) +target_include_directories(tcpunch PUBLIC + $ + $ +) +target_link_libraries(tcpunch PRIVATE Threads::Threads) + + +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) + +install(FILES tcpunch.h DESTINATION include) +install(TARGETS + tcpunch + EXPORT tcpunchTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +) + +install(EXPORT + tcpunchTargets + FILE tcpunchTargets.cmake + DESTINATION "${CMAKE_INSTALL_DATADIR}/tcpunch/cmake" + NAMESPACE tcpunch:: +) +configure_package_config_file( + cmake/tcpunchConfig.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/tcpunchConfig.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_DATADIR}/tcpunch/cmake" +) + +install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/tcpunchConfig.cmake" + DESTINATION "${CMAKE_INSTALL_DATADIR}/tcpunch/cmake" +) + diff --git a/extern/TCPunch/client/cmake/tcpunchConfig.cmake.in b/extern/TCPunch/client/cmake/tcpunchConfig.cmake.in new file mode 100644 index 0000000..f9b2a16 --- /dev/null +++ b/extern/TCPunch/client/cmake/tcpunchConfig.cmake.in @@ -0,0 +1,8 @@ +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) +find_dependency(Threads) + +include("${CMAKE_CURRENT_LIST_DIR}/tcpunchTargets.cmake") + +check_required_components(tcpunch) diff --git a/extern/TCPunch/client/tcpunch.cpp b/extern/TCPunch/client/tcpunch.cpp new file mode 100644 index 0000000..0b12634 --- /dev/null +++ b/extern/TCPunch/client/tcpunch.cpp @@ -0,0 +1,194 @@ +#include "tcpunch.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "../common/utils.h" + + +std::atomic connection_established(false); +std::atomic accepting_socket(-1); + +void* peer_listen(void* p) { + auto* info = (PeerConnectionData*)p; + + // Create socket on the port that was previously used to contact the rendezvous server + int listen_socket = socket(AF_INET, SOCK_STREAM, 0); + if (listen_socket == -1) { + error_exit_errno("Socket creation failed: "); + } + int enable_flag = 1; + if (setsockopt(listen_socket, SOL_SOCKET, SO_REUSEADDR, &enable_flag, sizeof(int)) < 0 || + setsockopt(listen_socket, SOL_SOCKET, SO_REUSEPORT, &enable_flag, sizeof(int)) < 0) { + error_exit_errno("Setting REUSE options failed: "); + } + + struct sockaddr_in local_port_data{}; + local_port_data.sin_family = AF_INET; + local_port_data.sin_addr.s_addr = INADDR_ANY; + local_port_data.sin_port = info->port; + + if (bind(listen_socket, (const struct sockaddr *)&local_port_data, sizeof(local_port_data)) < 0) { + error_exit_errno("Could not bind to local port: "); + } + + if (listen(listen_socket, 1) == -1) { + error_exit_errno("Listening on local port failed: "); + } + + struct sockaddr_in peer_info{}; + unsigned int len = sizeof(peer_info); + + while(true) { + int peer = accept(listen_socket, (struct sockaddr*)&peer_info, &len); + if (peer == -1) { +#if DEBUG + std::cout << "Error when connecting to peer" << strerror(errno) << std::endl; +#endif + } else { +#if DEBUG + std::cout << "Succesfully connected to peer, accepting" << std::endl; +#endif + accepting_socket = peer; + connection_established = true; + return 0; + } + } +} + +int pair(const std::string& pairing_name, const std::string& server_address, int port, int timeout_ms) { + connection_established = false; + accepting_socket = -1; + struct timeval timeout; + timeout.tv_sec = timeout_ms / 1000; + timeout.tv_usec = (timeout_ms % 1000) * 1000; + + int socket_rendezvous; + struct sockaddr_in server_data{}; + + socket_rendezvous = socket(AF_INET, SOCK_STREAM, 0); + if (socket_rendezvous == -1) { + error_exit_errno("Could not create socket for rendezvous server: "); + } + + // Enable binding multiple sockets to the same local endpoint, see https://bford.info/pub/net/p2pnat/ for details + int enable_flag = 1; + if (setsockopt(socket_rendezvous, SOL_SOCKET, SO_REUSEADDR, &enable_flag, sizeof(int)) < 0 || + setsockopt(socket_rendezvous, SOL_SOCKET, SO_REUSEPORT, &enable_flag, sizeof(int)) < 0) { + error_exit_errno("Setting REUSE options failed: "); + } + if (setsockopt(socket_rendezvous, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof timeout) < 0 || + setsockopt(socket_rendezvous, SOL_SOCKET, SO_REUSEPORT, &enable_flag, sizeof(int)) < 0) { + error_exit_errno("Setting timeout failed: "); + } + + server_data.sin_family = AF_INET; + server_data.sin_addr.s_addr = inet_addr(server_address.c_str()); + server_data.sin_port = htons(port); + + if (connect(socket_rendezvous, (struct sockaddr *)&server_data, sizeof(server_data)) != 0) { + error_exit_errno("Connection with the rendezvous server failed: "); + } + + if(send(socket_rendezvous, pairing_name.c_str(), pairing_name.length(), MSG_DONTWAIT) == -1) { + error_exit_errno("Failed to send data to rendezvous server: "); + } + + PeerConnectionData public_info; + ssize_t bytes = recv(socket_rendezvous, &public_info, sizeof(public_info), MSG_WAITALL); + if (bytes == -1) { + error_exit_errno("Failed to get data from rendezvous server: "); + } else if(bytes == 0) { + error_exit("Server has disconnected"); + } + + pthread_t peer_listen_thread; + int thread_return = pthread_create(&peer_listen_thread, nullptr, peer_listen, (void*) &public_info); + if(thread_return) { + error_exit_errno("Error when creating thread for listening: "); + } + + PeerConnectionData peer_data; + + // Wait until rendezvous server sends info about peer + ssize_t bytes_received = recv(socket_rendezvous, &peer_data, sizeof(peer_data), MSG_WAITALL); + if(bytes_received == -1) { + error_exit_errno("Failed to get peer data from rendezvous server: "); + } else if(bytes_received == 0) { + error_exit("Server has disconnected when waiting for peer data"); + } +#if DEBUG + std::cout << "Peer: " << ip_to_string(&peer_data.ip.s_addr) << ":" << ntohs(peer_data.port) << std::endl; +#endif + + //We do NOT close the socket_rendezvous socket here, otherwise the next binds sometimes fail (although SO_REUSEADDR|SO_REUSEPORT is set)! + + int peer_socket = socket(AF_INET, SOCK_STREAM, 0); + if (setsockopt(peer_socket, SOL_SOCKET, SO_REUSEADDR, &enable_flag, sizeof(int)) < 0 || + setsockopt(peer_socket, SOL_SOCKET, SO_REUSEPORT, &enable_flag, sizeof(int)) < 0) { + error_exit("Setting REUSE options failed"); + } + + //Set socket to non blocking for the following polling operations + if(fcntl(peer_socket, F_SETFL, O_NONBLOCK) != 0) { + error_exit_errno("Setting O_NONBLOCK failed: "); + } + + struct sockaddr_in local_port_addr = {0}; + local_port_addr.sin_family = AF_INET; + local_port_addr.sin_addr.s_addr = INADDR_ANY; + local_port_addr.sin_port = public_info.port; + + if (bind(peer_socket, (const struct sockaddr *)&local_port_addr, sizeof(local_port_addr))) { + error_exit_errno("Binding to same port failed: "); + } + + struct sockaddr_in peer_addr = {0}; + peer_addr.sin_family = AF_INET; + peer_addr.sin_addr.s_addr = peer_data.ip.s_addr; + peer_addr.sin_port = peer_data.port; + + while(!connection_established.load()) { + int peer_status = connect(peer_socket, (struct sockaddr *)&peer_addr, sizeof(struct sockaddr)); + if (peer_status != 0) { + if (errno == EALREADY || errno == EAGAIN || errno == EINPROGRESS) { + continue; + } else if(errno == EISCONN) { + #if DEBUG + std::cout << "Succesfully connected to peer, EISCONN" << std::endl; + #endif + break; + } else { + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + continue; + } + } else { + #if DEBUG + std::cout << "Succesfully connected to peer, peer_status" << std::endl; + #endif + break; + } + } + + if(connection_established.load()) { + pthread_join(peer_listen_thread, nullptr); + peer_socket = accepting_socket.load(); + } + + int flags = fcntl(peer_socket, F_GETFL, 0); + flags &= ~(O_NONBLOCK); + fcntl(peer_socket, F_SETFL, flags); + + return peer_socket; +} \ No newline at end of file diff --git a/extern/TCPunch/client/tcpunch.h b/extern/TCPunch/client/tcpunch.h new file mode 100644 index 0000000..6835eb2 --- /dev/null +++ b/extern/TCPunch/client/tcpunch.h @@ -0,0 +1,16 @@ +#ifndef HOLE_PUNCHING_CLIENT_H +#define HOLE_PUNCHING_CLIENT_H +#include +#include +#include +#include +#include +#include + +#define DEBUG 0 + +struct Timeout : public std::exception {}; + +int pair(const std::string& pairing_name, const std::string& server_address, int port = 10000, int timeout_ms = 0); + +#endif \ No newline at end of file From 7a76c4badb91dc232d4b3b2415494ea1ec5b3de4 Mon Sep 17 00:00:00 2001 From: mstaylor Date: Mon, 10 Jun 2024 13:56:46 -0400 Subject: [PATCH 02/16] initial commit --- extern/TCPunch/common/utils.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 extern/TCPunch/common/utils.h diff --git a/extern/TCPunch/common/utils.h b/extern/TCPunch/common/utils.h new file mode 100644 index 0000000..2e8e652 --- /dev/null +++ b/extern/TCPunch/common/utils.h @@ -0,0 +1,32 @@ +#ifndef HOLEPUNCHINGSERVERCLIENT_UTILS_H +#define HOLEPUNCHINGSERVERCLIENT_UTILS_H + +#include +#include +#include "../client/tcpunch.h" + +typedef struct { + struct in_addr ip; + in_port_t port; +} PeerConnectionData; + +void error_exit(const std::string& error_string) { + throw std::runtime_error{error_string}; +} + +void error_exit_errno(const std::string& error_string) { + if (errno == EAGAIN) { + throw Timeout(); + } else { + std::string err = error_string + strerror(errno); + throw std::runtime_error{err}; + } +} + +std::string ip_to_string(in_addr_t *ip) { + char str_buffer[20]; + inet_ntop(AF_INET, ip, str_buffer, sizeof(str_buffer)); + return {str_buffer}; +} + +#endif //HOLEPUNCHINGSERVERCLIENT_UTILS_H From 5f4ad508fd53885ec2adeb5ed0642d7804c54f2a Mon Sep 17 00:00:00 2001 From: mstaylor Date: Mon, 10 Jun 2024 16:37:27 -0400 Subject: [PATCH 03/16] initial commit --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index beda6f2..8a306fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,7 @@ find_package(AWSSDK COMPONENTS s3 REQUIRED) find_package(hiredis REQUIRED) add_subdirectory(extern/TCPunch/client/) +find_package(ZLIB REQUIRED) add_library(FMI STATIC src/Communicator.cpp src/utils/Configuration.cpp src/comm/Channel.cpp src/comm/ClientServer.cpp src/comm/S3.cpp src/comm/Redis.cpp src/utils/ChannelPolicy.cpp src/comm/PeerToPeer.cpp src/comm/Direct.cpp) From b4c345b60dd65338b51d81884f014261f69460df Mon Sep 17 00:00:00 2001 From: mstaylor Date: Mon, 10 Jun 2024 16:41:42 -0400 Subject: [PATCH 04/16] initial commit --- src/comm/S3.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/comm/S3.cpp b/src/comm/S3.cpp index 7dde3a5..5f04d69 100644 --- a/src/comm/S3.cpp +++ b/src/comm/S3.cpp @@ -24,8 +24,9 @@ FMI::Comm::S3::S3(std::map params, std::map(TAG); - client = Aws::MakeUnique(TAG, credentialsProvider, config); + //auto credentialsProvider = Aws::MakeShared(TAG); + //client = Aws::MakeUnique(TAG, credentialsProvider, config); + client = Aws::MakeUnique(TAG, config); } FMI::Comm::S3::~S3() { From 8a4b5bf5f7fe73ba21fd369061f71fb88b62df39 Mon Sep 17 00:00:00 2001 From: mstaylor Date: Sun, 16 Jun 2024 12:08:58 -0400 Subject: [PATCH 05/16] Adds support for resolving host for Direct Mode --- include/comm/Direct.h | 1 + src/comm/Direct.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/include/comm/Direct.h b/include/comm/Direct.h index 9dc9f86..9f2059f 100644 --- a/include/comm/Direct.h +++ b/include/comm/Direct.h @@ -22,6 +22,7 @@ namespace FMI::Comm { std::vector sockets; std::string hostname; int port; + bool resolve_host_dns; unsigned int max_timeout; // Model params double bandwidth; diff --git a/src/comm/Direct.cpp b/src/comm/Direct.cpp index 1dc8d64..f25dd7f 100644 --- a/src/comm/Direct.cpp +++ b/src/comm/Direct.cpp @@ -7,8 +7,48 @@ #include FMI::Comm::Direct::Direct(std::map params, std::map model_params) { + struct addrinfo hints, *res, *p; + int status; + char ipstr[INET6_ADDRSTRLEN]; + hostname = params["host"]; port = std::stoi(params["port"]); + if (model_params["resolve_host_dns"] == "true") { + + memset(&hints, 0, sizeof hints); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + + if ((status = getaddrinfo(hostname.c_str(), nullptr, &hints, &res)) != 0) { + std::cerr << "getaddrinfo error: " << gai_strerror(status) << std::endl; + } else { + // Iterate through the result list and convert each address to a string + for(p = res; p != nullptr; p = p->ai_next) { + void *addr; + + // Get the pointer to the address itself, + struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr; + addr = &(ipv4->sin_addr); + ipver = "IPv4"; + + // Convert the IP to a string and print it: + inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr); + std::cout << " resolved dns: " << ipstr << std::endl; + } + + freeaddrinfo(res); // Free the linked list + hostname = ipstr; + + } + + + + + resolve_host_dns = true; + } else { + resolve_host_dns = false; + } + max_timeout = std::stoi(params["max_timeout"]); bandwidth = std::stod(model_params["bandwidth"]); overhead = std::stod(model_params["overhead"]); From 5c26bb15e9586038e09f3567b4f2f9327e014e87 Mon Sep 17 00:00:00 2001 From: mstaylor Date: Sun, 16 Jun 2024 12:16:28 -0400 Subject: [PATCH 06/16] Adds support for resolving host for Direct Mode --- src/comm/Direct.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/comm/Direct.cpp b/src/comm/Direct.cpp index f25dd7f..552eaca 100644 --- a/src/comm/Direct.cpp +++ b/src/comm/Direct.cpp @@ -5,6 +5,13 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include FMI::Comm::Direct::Direct(std::map params, std::map model_params) { struct addrinfo hints, *res, *p; From 446e10f74b988a40639d0e982e9768906bb203ee Mon Sep 17 00:00:00 2001 From: mstaylor Date: Sun, 16 Jun 2024 12:17:14 -0400 Subject: [PATCH 07/16] Adds support for resolving host for Direct Mode --- src/comm/Direct.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/comm/Direct.cpp b/src/comm/Direct.cpp index 552eaca..fdaac51 100644 --- a/src/comm/Direct.cpp +++ b/src/comm/Direct.cpp @@ -36,7 +36,6 @@ FMI::Comm::Direct::Direct(std::map params, std::mapai_addr; addr = &(ipv4->sin_addr); - ipver = "IPv4"; // Convert the IP to a string and print it: inet_ntop(p->ai_family, addr, ipstr, sizeof ipstr); From 847cfbe6e7b2ea408199f8fee3ba16357d7a9efe Mon Sep 17 00:00:00 2001 From: mstaylor Date: Mon, 17 Jun 2024 15:33:33 -0400 Subject: [PATCH 08/16] Adds support for resolving host for Direct Mode --- extern/TCPunch/client/tcpunch.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extern/TCPunch/client/tcpunch.h b/extern/TCPunch/client/tcpunch.h index 6835eb2..a219968 100644 --- a/extern/TCPunch/client/tcpunch.h +++ b/extern/TCPunch/client/tcpunch.h @@ -7,7 +7,7 @@ #include #include -#define DEBUG 0 +#define DEBUG 1 struct Timeout : public std::exception {}; From 5553df2e8cae5bd48cfbb3fdf1062d961d3bffda Mon Sep 17 00:00:00 2001 From: mstaylor Date: Tue, 18 Jun 2024 12:05:23 -0400 Subject: [PATCH 09/16] Adds support for resolving host for Direct Mode --- extern/TCPunch/client/tcpunch.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/extern/TCPunch/client/tcpunch.cpp b/extern/TCPunch/client/tcpunch.cpp index 0b12634..0233fe6 100644 --- a/extern/TCPunch/client/tcpunch.cpp +++ b/extern/TCPunch/client/tcpunch.cpp @@ -113,11 +113,11 @@ int pair(const std::string& pairing_name, const std::string& server_address, int error_exit("Server has disconnected"); } - pthread_t peer_listen_thread; + /*pthread_t peer_listen_thread; int thread_return = pthread_create(&peer_listen_thread, nullptr, peer_listen, (void*) &public_info); if(thread_return) { error_exit_errno("Error when creating thread for listening: "); - } + }*/ PeerConnectionData peer_data; @@ -175,16 +175,16 @@ int pair(const std::string& pairing_name, const std::string& server_address, int } } else { #if DEBUG - std::cout << "Succesfully connected to peer, peer_status" << std::endl; + std::cout << "Succesfully connected to peer" << std::endl; #endif break; } } - if(connection_established.load()) { + /*if(connection_established.load()) { pthread_join(peer_listen_thread, nullptr); peer_socket = accepting_socket.load(); - } + }*/ int flags = fcntl(peer_socket, F_GETFL, 0); flags &= ~(O_NONBLOCK); From 212369787a7788efd16d5d983a5f154385498900 Mon Sep 17 00:00:00 2001 From: mstaylor Date: Thu, 29 Aug 2024 14:02:42 -0400 Subject: [PATCH 10/16] Adds output to show max_timeout --- src/comm/Direct.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/comm/Direct.cpp b/src/comm/Direct.cpp index fdaac51..e21af58 100644 --- a/src/comm/Direct.cpp +++ b/src/comm/Direct.cpp @@ -56,11 +56,18 @@ FMI::Comm::Direct::Direct(std::map params, std::map> max_timeout << std::endl; bandwidth = std::stod(model_params["bandwidth"]); + overhead = std::stod(model_params["overhead"]); + transfer_price = std::stod(model_params["transfer_price"]); + vm_price = std::stod(model_params["vm_price"]); + requests_per_hour = std::stoi(model_params["requests_per_hour"]); + + if (model_params["include_infrastructure_costs"] == "true") { include_infrastructure_costs = true; } else { From ee9e693e1781d3b5cc3ba12bc5b093ef38c64bcf Mon Sep 17 00:00:00 2001 From: mstaylor Date: Thu, 29 Aug 2024 14:40:32 -0400 Subject: [PATCH 11/16] Adds output to show max_timeout --- src/comm/Direct.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/comm/Direct.cpp b/src/comm/Direct.cpp index e21af58..eb73b44 100644 --- a/src/comm/Direct.cpp +++ b/src/comm/Direct.cpp @@ -56,7 +56,7 @@ FMI::Comm::Direct::Direct(std::map params, std::map> max_timeout << std::endl; + std::cout << "max_timeout set to: " << max_timeout << std::endl; bandwidth = std::stod(model_params["bandwidth"]); overhead = std::stod(model_params["overhead"]); From 94ccfa1946fe4b02976a3ae64f49d04c343067da Mon Sep 17 00:00:00 2001 From: APKAI5AM767AKRTSIELQ Date: Sun, 22 Sep 2024 12:29:40 -0400 Subject: [PATCH 12/16] wiki version 1 --- videos/video1529911804.mp4 | Bin 0 -> 11278452 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 videos/video1529911804.mp4 diff --git a/videos/video1529911804.mp4 b/videos/video1529911804.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..9ead43000d3cd130d6b567cc40a25047e12f8ad3 GIT binary patch literal 11278452 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