X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=simulators%2Fe2sim%2Fsrc%2FSCTP%2Fe2sim_sctp.cpp;h=15892d4ef18fb14f9516a96ce24529f8caab8316;hb=refs%2Fchanges%2F52%2F1252%2F3;hp=3d808c512bc61cc4cd4252d1bddb6bbe61fc23ee;hpb=7bd8a0bd3e84d325d1a5d1df6feb7a259fee2004;p=it%2Ftest.git diff --git a/simulators/e2sim/src/SCTP/e2sim_sctp.cpp b/simulators/e2sim/src/SCTP/e2sim_sctp.cpp index 3d808c5..15892d4 100644 --- a/simulators/e2sim/src/SCTP/e2sim_sctp.cpp +++ b/simulators/e2sim/src/SCTP/e2sim_sctp.cpp @@ -29,6 +29,16 @@ #include "e2sim_sctp.hpp" // #include "e2sim_defs.h" + +#include +#include +#include +#include +#include +#include +#include +#include + int sctp_start_server(const char *server_ip_str, const int server_port) { if(server_port < 1 || server_port > 65535) { @@ -108,18 +118,14 @@ int sctp_start_client(const char *server_ip_str, const int server_port) { server4_addr.sin_family = AF_INET; server4_addr.sin_port = htons(server_port); - server_addr = (struct sockaddr*)&server4_addr; - af = AF_INET; addr_len = sizeof(server4_addr); } else if(inet_pton(AF_INET6, server_ip_str, &server6_addr.sin6_addr) == 1) { server6_addr.sin6_family = AF_INET6; server6_addr.sin6_port = htons(server_port); - server_addr = (struct sockaddr*)&server6_addr; - af = AF_INET6; addr_len = sizeof(server6_addr); } else { @@ -127,25 +133,47 @@ int sctp_start_client(const char *server_ip_str, const int server_port) exit(1); } - if((client_fd = socket(af, SOCK_STREAM, IPPROTO_SCTP)) == -1) + if((client_fd = socket(AF_INET6, SOCK_STREAM, IPPROTO_SCTP)) == -1) { perror("socket"); exit(1); } - LOG_I("[SCTP] Connecting to server at %s:%d ...", server_ip_str, server_port); + //-------------------------------- + //Bind before connect + auto optval = 1; + if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof optval) != 0 ){ + perror("setsockopt port"); + exit(1); + } + + if( setsockopt(client_fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval) != 0 ){ + perror("setsockopt addr"); + exit(1); + } + struct sockaddr_in6 client6_addr {}; + client6_addr.sin6_family = AF_INET6; + client6_addr.sin6_port = htons(RIC_SCTP_SRC_PORT); + client6_addr.sin6_addr = in6addr_any; + + LOG_I("[SCTP] Binding client socket to source port %d", RIC_SCTP_SRC_PORT); + if(bind(client_fd, (struct sockaddr*)&client6_addr, sizeof(client6_addr)) == -1) { + perror("bind"); + exit(1); + } + // end binding --------------------- + + LOG_I("[SCTP] Connecting to server at %s:%d ...", server_ip_str, server_port); if(connect(client_fd, server_addr, addr_len) == -1) { perror("connect"); exit(1); } - assert(client_fd != 0); LOG_I("[SCTP] Connection established"); return client_fd; - } int sctp_accept_connection(const char *server_ip_str, const int server_fd) @@ -193,6 +221,18 @@ int sctp_send_data(int &socket_fd, sctp_buffer_t &data) return sent_len; } +int sctp_send_data_X2AP(int &socket_fd, sctp_buffer_t &data) +{ + int sent_len = sctp_sendmsg(socket_fd, (void*)(&(data.buffer[0])), data.len, + NULL, 0, (uint32_t) X2AP_PPID, 0, 0, 0, 0); + + if(sent_len == -1) { + perror("[SCTP] sctp_send_data"); + exit(1); + } + +} + /* Receive data from SCTP socket Outcome of recv()