From: Harry Tran Date: Sun, 17 Nov 2019 00:43:38 +0000 (-0500) Subject: e2sim: add support for Resource Status Request, Response, Update X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=9a7f69ba0badcc679ecad5ef3523b549a0032206;p=it%2Ftest.git e2sim: add support for Resource Status Request, Response, Update Change-Id: I8fd9c076576d6134fafd0f8f28f5a161689a3d98 Signed-off-by: Harry Tran --- diff --git a/simulators/e2sim/README.md b/simulators/e2sim/README.md index db93deb..ed260c3 100644 --- a/simulators/e2sim/README.md +++ b/simulators/e2sim/README.md @@ -46,22 +46,26 @@ $ $E2SIM_DIR/build/e2sim [SERVER IP] [PORT] By default, SERVER IP = 127.0.0.1, PORT = 36421 + The RIC (i.e., E2 Manager) will need to setup X2 or E2 connection to e2sim on + this SERVER IP and PORT # DOCKER - Note: The commands in this section must be run from $E2SIM_DIR - - * Build docker image + * Build docker image: run this command from $E2SIM_DIR $ sudo docker build -f docker/Dockerfile -t [DOCKER_IMAGE]:[TAG] . * Example how to run docker container $ sudo docker run --rm --net host -it [DOCKER_IMAGE]:[TAG] sh -c "./build/e2sim [SERVER IP] [PORT]" + ex: sudo docker run --rm --net host -it e2sim:1.0.0 sh -c "./build/e2sim 127.0.0.1 36422" # SUPPORTED MESSAGE FLOWS +- RESOURCE STATUS REQUEST (RIC -> RAN) version 1.4.0 November 16, 2019 +- RESOURCE STATUS RESPONSE (RAN -> RIC) +- RESOURCE STATUS UPDATE (RAN -> RIC) -- RIC INDICATION (RAN -> RIC) version 1.3.0 September 13, 2019 +- RIC INDICATION (RAN -> RIC) version 1.3.0 September 13, 2019 SgNBAdditionRequest -- RIC SUBSCRIPTION REQUEST (RIC -> RAN) version 1.2.0 May 24, 2019 +- RIC SUBSCRIPTION REQUEST (RIC -> RAN) version 1.2.0 May 24, 2019 - RIC SUBSCRIPTION RESPONSE (RAN -> RIC) - RIC SUBSCRIPTION FAILURE (RAN -> RIC) @@ -76,14 +80,16 @@ ./tools/install_asn1c 2. Generate asn1c codes using e2ap, e2sm and x2ap specs - Download the following files into tools/asn_defs + This requires the following files in tools/asn_defs - e2ap-v031.asn - e2sm-gNB-X2-release-1-v041.asn - x2ap-no-desc-15-04.asn # Change logs: - 03/12/2019: currently supports sending and receiving X2 SETUP messages + 11/16/2019: - Switch back to using asn1c compiler + - add support to Resource Status Request, Response, and Update (over X2) + 05/24/2019: add support for RIC SUBSCRIPTION REQUEST, RESPONSE, and FAILURE 05/21/2019: add support for ENDC X2 SETUP no longer use asn1c all X2AP and E2AP messages are encapsulated into E2AP-PDU - 05/24/2019: add support for RIC SUBSCRIPTION REQUEST, RESPONSE, and FAILURE + 03/12/2019: currently supports sending and receiving X2 SETUP messages diff --git a/simulators/e2sim/build_e2sim b/simulators/e2sim/build_e2sim index ede61a7..80a53c6 100755 --- a/simulators/e2sim/build_e2sim +++ b/simulators/e2sim/build_e2sim @@ -20,7 +20,7 @@ set -e -E2SIM_VERSION='1.3.0' +E2SIM_VERSION='1.4.0' export E2SIM_DIR=$PWD source $E2SIM_DIR/tools/build_helper.bash DOCKER_IMAGE='e2sim' diff --git a/simulators/e2sim/docker/Dockerfile b/simulators/e2sim/docker/Dockerfile index 3bee1c0..1233a12 100644 --- a/simulators/e2sim/docker/Dockerfile +++ b/simulators/e2sim/docker/Dockerfile @@ -40,6 +40,9 @@ RUN apt-get update \ net-tools \ nano \ vim \ + tcpdump \ + net-tools \ + nmap \ && apt-get clean # Copy E2Sim sources into the container diff --git a/simulators/e2sim/e2sim.cpp b/simulators/e2sim/e2sim.cpp index 77f6be1..e60a13f 100644 --- a/simulators/e2sim/e2sim.cpp +++ b/simulators/e2sim/e2sim.cpp @@ -22,6 +22,7 @@ #include #include + #include "e2sim_defs.h" #include "e2sim_sctp.hpp" #include "e2ap_message_handler.hpp" @@ -33,6 +34,7 @@ int main(int argc, char* argv[]){ options_t ops = read_input_options(argc, argv); + //E2 Agent will automatically restart upon sctp disconnection int server_fd = sctp_start_server(ops.server_ip, ops.server_port); int client_fd = sctp_accept_connection(ops.server_ip, server_fd); diff --git a/simulators/e2sim/ricsim.cpp b/simulators/e2sim/ricsim.cpp index e42e9d2..6bdc5b6 100644 --- a/simulators/e2sim/ricsim.cpp +++ b/simulators/e2sim/ricsim.cpp @@ -38,7 +38,7 @@ void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) sctp_buffer_t data; data.len = e2ap_asn1c_encode_pdu(pdu, &buf); - memcpy(data.buffer, buf, data.len); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); sctp_send_data(client_fd, data); } diff --git a/simulators/e2sim/src/DEF/e2sim_defs.cpp b/simulators/e2sim/src/DEF/e2sim_defs.cpp index f80977d..f1730d3 100644 --- a/simulators/e2sim/src/DEF/e2sim_defs.cpp +++ b/simulators/e2sim/src/DEF/e2sim_defs.cpp @@ -19,6 +19,24 @@ #include "e2sim_defs.h" #include +#include +#include + +char* time_stamp(void) +{ + timeval curTime; + gettimeofday(&curTime, NULL); + int milli = curTime.tv_usec / 1000; + + char buffer [80]; + strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", localtime(&curTime.tv_sec)); + + const int time_buffer_len = 84; + static char currentTime[time_buffer_len] = ""; + snprintf(currentTime, time_buffer_len, "%s:%03d", buffer, milli); + + return currentTime; +} options_t read_input_options_old(int argc, char* argv[]) { diff --git a/simulators/e2sim/src/DEF/e2sim_defs.h b/simulators/e2sim/src/DEF/e2sim_defs.h index 74bf619..cf4a0d6 100644 --- a/simulators/e2sim/src/DEF/e2sim_defs.h +++ b/simulators/e2sim/src/DEF/e2sim_defs.h @@ -29,9 +29,15 @@ #define X2AP_PPID (452984832) //27 = 1b, PPID = 1b000000(hex) -> 452984832(dec) #define X2AP_SCTP_PORT 36421 #define RIC_SCTP_SRC_PORT 36422 -#define MAX_SCTP_BUFFER 1024 +#define MAX_SCTP_BUFFER 10000 #define WORKDIR_ENV "E2SIM_DIR" //environment variable +char* time_stamp(void); + +// #define LOG_I(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} +// #define LOG_E(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} +// #define LOG_D(...) {printf("[%s]", time_stamp()); printf(__VA_ARGS__); printf("\n");} + #define LOG_I(...) {printf(__VA_ARGS__); printf("\n");} #define LOG_E(...) {printf(__VA_ARGS__); printf("\n");} #define LOG_D(...) {printf(__VA_ARGS__); printf("\n");} @@ -54,4 +60,6 @@ typedef struct { options_t read_input_options(int argc, char *argv[]); +#define min(a, b) ((a) < (b)) ? (a) : (b) + #endif diff --git a/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml new file mode 100644 index 0000000..9898d55 --- /dev/null +++ b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusFailure.xml @@ -0,0 +1,35 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 74 + + + + 5 + + + + + + + + + + + + diff --git a/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml new file mode 100644 index 0000000..a807971 --- /dev/null +++ b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 11111110000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml new file mode 100644 index 0000000..6968e71 --- /dev/null +++ b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusRequest_bad.xml @@ -0,0 +1,85 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 28 + + + + + + + 38 + + + + 00000000000000000000000000000000 + + + + + 29 + + + + + 31 + + + + + 02 07 9f + + 0010101100000000001100001010 + + + + + + + + + + 30 + + + + + + + 64 + + + + + + + 109 + + + + + + + 145 + + + + + + + + + + diff --git a/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml new file mode 100644 index 0000000..12542a8 --- /dev/null +++ b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusResponse.xml @@ -0,0 +1,134 @@ + + + 9 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 65 + + + + + 66 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 67 + + + + + 00000010000000000000000000000000 + + + + + + + + + 67 + + + + + 00000100000000000000000000000000 + + + + + + + + + 67 + + + + + 00001000000000000000000000000000 + + + + + + + + + 67 + + + + + 00100000000000000000000000000000 + + + + + + + + + 67 + + + + + 01000000000000000000000000000000 + + + + + + + + + 67 + + + + + 10000000000000000000000000000000 + + + + + + + + + + + + + + + + + + + diff --git a/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml new file mode 100644 index 0000000..b5630bc --- /dev/null +++ b/simulators/e2sim/src/E2AP/XML/E2AP_ResourceStatusUpdate.xml @@ -0,0 +1,66 @@ + + + 10 + + + + + + 39 + + + 1 + + + + 40 + + + 75 + + + + 32 + + + + + 33 + + + + + 13 30 23 + + 0000001010110000001100001010 + + + + + 42 + + + + + 100 + 99 + + + 100 + 99 + + + + + + + + + + + + + + + + diff --git a/simulators/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml b/simulators/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml index 03682d9..af42d5b 100644 --- a/simulators/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml +++ b/simulators/e2sim/src/E2AP/XML/E2AP_X2SetupResponse.xml @@ -10,10 +10,10 @@ - 02 F8 39 + 13 30 23 - 00000000111000110000 + 00000010101100000011 @@ -26,25 +26,53 @@ - 0 + 308 - 02 F8 39 + 13 30 23 - 0000000011100011000000000000 + 0000001010110000001100001010 - 00 01 + 64 03 - 02 F8 39 + 13 30 23 - 21400 - 3400 + 18650 + 650 + + + 41 + + + + + + + 55 + + + + 344 + 12 + + 5 + + + + + 160 + + + + + + @@ -56,8 +84,8 @@ - 02 F8 39 - 00 00 + 13 30 23 + 80 00 diff --git a/simulators/e2sim/src/E2AP/e2ap_message_handler.cpp b/simulators/e2sim/src/E2AP/e2ap_message_handler.cpp index d8f5e6b..39347a1 100644 --- a/simulators/e2sim/src/E2AP/e2ap_message_handler.cpp +++ b/simulators/e2sim/src/E2AP/e2ap_message_handler.cpp @@ -46,6 +46,7 @@ void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data) case E2AP_PDU_PR_successfulOutcome: //successfulOutcome LOG_I("[E2AP] Received X2-SETUP-RESPONSE"); + e2ap_handle_X2SetupResponse(pdu, socket_fd); break; case E2AP_PDU_PR_unsuccessfulOutcome: @@ -138,6 +139,43 @@ void e2ap_handle_sctp_data(int &socket_fd, sctp_buffer_t &data) } break; + case ProcedureCode_id_resourceStatusReportingInitiation: //9 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received RESOURCE-STATUS-REQUEST"); + e2ap_handle_ResourceStatusRequest(pdu, socket_fd); + break; + + case E2AP_PDU_PR_successfulOutcome: //successfulOutcome + LOG_I("[E2AP] Received RESOURCE-STATUS-RESPONSE"); + break; + + case E2AP_PDU_PR_unsuccessfulOutcome: + LOG_I("[E2AP] Received RESOURCE-STATUS-FAILURE"); + break; + + default: + LOG_E("[E2AP] Invalid message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_resourceStatusReportingInitiation); + break; + } + break; + + case ProcedureCode_id_resourceStatusReporting: // 10 + switch(index) + { + case E2AP_PDU_PR_initiatingMessage: //initiatingMessage + LOG_I("[E2AP] Received RESOURCE-STATUS-UPDATE"); + break; + + default: + LOG_E("[E2AP] Unable to process message index=%d in E2AP-PDU %d", index, + (int)ProcedureCode_id_resourceStatusReporting); + break; + } + break; + default: LOG_E("[E2AP] No available handler for procedureCode=%d", procedureCode); break; @@ -160,7 +198,7 @@ void e2ap_handle_X2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd) sctp_buffer_t data; data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); - memcpy(data.buffer, buf, data.len); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); //send response data over sctp if(sctp_send_data(socket_fd, data) > 0) { @@ -170,6 +208,30 @@ void e2ap_handle_X2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd) } } +void e2ap_handle_X2SetupResponse(E2AP_PDU_t* pdu, int &socket_fd) +{ + E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_ResourceStatusRequest.xml"); + // E2AP_PDU_t* req_pdu = e2ap_xml_to_pdu("E2AP_ResourceStatusRequest_bad.xml"); + + LOG_D("[E2AP] Created RESOURCE-STATUS-REQUEST"); + + e2ap_asn1c_print_pdu(req_pdu); + + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(req_pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent RESOURCE-STATUS-REQUEST"); + } else { + LOG_E("[SCTP] Unable to send RESOURCE-STATUS-REQUEST to peer"); + } + +} + /* Simply send back ENDCX2SetupResponse Todo: add more handling options (failure, duplicated request, etc.) @@ -186,7 +248,7 @@ void e2ap_handle_ENDCX2SetupRequest(E2AP_PDU_t* pdu, int &socket_fd) sctp_buffer_t data; data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); - memcpy(data.buffer, buf, data.len); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); //send response data over sctp if(sctp_send_data(socket_fd, data) > 0) { @@ -212,7 +274,7 @@ void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd) sctp_buffer_t data; data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); - memcpy(data.buffer, buf, data.len); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); //send response data over sctp if(sctp_send_data(socket_fd, data) > 0) { @@ -234,7 +296,7 @@ void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socke sctp_buffer_t data; data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); - memcpy(data.buffer, buf, data.len); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); //send response data over sctp if(sctp_send_data(socket_fd, data) > 0) { @@ -252,10 +314,10 @@ void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socke uint8_t *buf1, *buf2; sctp_buffer_t data1, data2; data1.len = e2ap_asn1c_encode_pdu(indication_type1, &buf1); - memcpy(data1.buffer, buf1, data1.len); + memcpy(data1.buffer, buf1, min(data1.len, MAX_SCTP_BUFFER)); data2.len = e2ap_asn1c_encode_pdu(indication_type2, &buf2); - memcpy(data2.buffer, buf2, data2.len); + memcpy(data2.buffer, buf2, min(data2.len, MAX_SCTP_BUFFER)); while(1){ sleep(1); @@ -279,76 +341,48 @@ void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socke } -// void e2ap_handle_RICSubscriptionRequest_old(e2ap_pdu_t* pdu, int &socket_fd) -// { -// RICsubscription_params_t params; -// e2ap_parse_RICsubscriptionRequest(pdu, params); -// -// /* Example handling logic -// - Accept if request id is even-numbered -> send back response -// in this case, accept every other actions -// -// - Reject if request id is odd-numbered -> send back failure -// */ -// -// e2ap_pdu_t* res_pdu = new_e2ap_pdu(); -// bool is_failure = false; -// -// if(params.request_id % 2 == 0) -// { -// for(size_t i = 0; i < params.actionList.size(); i++) -// { -// if(i%2 == 0){ -// params.actionList[i].isAdmitted = true; -// } else { -// params.actionList[i].isAdmitted = false; -// params.actionList[i].notAdmitted_cause = RICcause_radioNetwork; -// params.actionList[i].notAdmitted_subCause = 5; -// } -// } -// -// e2ap_create_RICsubscriptionResponse(res_pdu, params); -// LOG_I("[E2AP] Created RIC-SUBSCRIPTION-RESPONSE"); -// } -// else -// { -// is_failure = true; -// -// for(size_t i = 0; i < params.actionList.size(); i++) -// { -// params.actionList[i].isAdmitted = false; -// params.actionList[i].notAdmitted_cause = RICcause_radioNetwork; -// params.actionList[i].notAdmitted_subCause = 5; -// } -// -// e2ap_create_RICsubscriptionFailure(res_pdu, params); -// LOG_I("[E2AP] Created RIC-SUBSCRIPTION-FAILURE"); -// } -// -// e2ap_print_pdu(res_pdu); -// -// //Encode into buffer -// sctp_buffer_t data; -// e2ap_encode_pdu(res_pdu, data.buffer, sizeof(data.buffer), data.len); -// -// //send response data over sctp -// if(sctp_send_data(socket_fd, data) > 0) -// { -// if(is_failure) { -// LOG_I("[SCTP] Sent RIC-SUBSCRIPTION-FAILURE"); -// } -// else { -// LOG_I("[SCTP] Sent RIC-SUBSCRIPTION-RESPONSE"); -// } -// } -// else -// { -// if(is_failure) { -// LOG_I("[SCTP] Unable to send RIC-SUBSCRIPTION-FAILURE"); -// } -// else { -// LOG_E("[SCTP] Unable to send RIC-SUBSCRIPTION-RESPONSE"); -// } -// } -// -// } +void e2ap_handle_ResourceStatusRequest(E2AP_PDU_t* pdu, int &socket_fd) +{ + //send back ResourceStatusResponse, followed by resource status update + E2AP_PDU_t* res_pdu = e2ap_xml_to_pdu("E2AP_ResourceStatusResponse.xml"); + + LOG_D("[E2AP] Created RESOURCE-STATUS-RESPONSE"); + + e2ap_asn1c_print_pdu(res_pdu); + + uint8_t *buf; + sctp_buffer_t data; + + data.len = e2ap_asn1c_encode_pdu(res_pdu, &buf); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); + + //send response data over sctp + if(sctp_send_data(socket_fd, data) > 0) { + LOG_I("[SCTP] Sent RESOURCE-STATUS-RESPONSE"); + } else { + LOG_E("[SCTP] Unable to send RESOURCE-STATUS-RESPONSE to peer"); + } + + + //send ResourceStatusUpdate periodically + E2AP_PDU_t* update_pdu = e2ap_xml_to_pdu("E2AP_ResourceStatusUpdate.xml"); + + uint8_t *update_buf; + sctp_buffer_t update_data; + + update_data.len = e2ap_asn1c_encode_pdu(update_pdu, &update_buf); + memcpy(update_data.buffer, update_buf, min(update_data.len, MAX_SCTP_BUFFER)); + + while(1) { + // e2ap_asn1c_print_pdu(update_pdu); + + if(sctp_send_data(socket_fd, update_data) > 0) { + LOG_I("[SCTP] Sent RESOURCE-STATUS-UPDATE"); + } else { + LOG_E("[SCTP] Unable to send RESOURCE-STATUS-UPDATE to peer"); + } + + sleep(1); + + } +} diff --git a/simulators/e2sim/src/E2AP/e2ap_message_handler.hpp b/simulators/e2sim/src/E2AP/e2ap_message_handler.hpp index c7af948..f53cce1 100644 --- a/simulators/e2sim/src/E2AP/e2ap_message_handler.hpp +++ b/simulators/e2sim/src/E2AP/e2ap_message_handler.hpp @@ -38,4 +38,6 @@ void e2ap_handle_RICSubscriptionRequest(E2AP_PDU_t* pdu, int &socket_fd); void e2ap_handle_RICSubscriptionRequest_securityDemo(E2AP_PDU_t* pdu, int &socket_fd); +void e2ap_handle_ResourceStatusRequest(E2AP_PDU_t* pdu, int &socket_fd); + #endif diff --git a/simulators/e2sim/src/SCTP/e2sim_sctp.cpp b/simulators/e2sim/src/SCTP/e2sim_sctp.cpp index 15892d4..de68ec7 100644 --- a/simulators/e2sim/src/SCTP/e2sim_sctp.cpp +++ b/simulators/e2sim/src/SCTP/e2sim_sctp.cpp @@ -84,6 +84,17 @@ int sctp_start_server(const char *server_ip_str, const int server_port) exit(1); } + //set send_buffer + // int sendbuff = 10000; + // socklen_t optlen = sizeof(sendbuff); + // if(getsockopt(server_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) { + // perror("getsockopt send"); + // exit(1); + // } + // else + // LOG_D("[SCTP] send buffer size = %d\n", sendbuff); + + if(bind(server_fd, server_addr, addr_len) == -1) { perror("bind"); exit(1); @@ -139,6 +150,15 @@ int sctp_start_client(const char *server_ip_str, const int server_port) exit(1); } + // int sendbuff = 10000; + // socklen_t optlen = sizeof(sendbuff); + // if(getsockopt(client_fd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen) == -1) { + // perror("getsockopt send"); + // exit(1); + // } + // else + // LOG_D("[SCTP] send buffer size = %d\n", sendbuff); + //-------------------------------- //Bind before connect auto optval = 1; diff --git a/simulators/e2sim/test/Misc/test_asn1c.cpp b/simulators/e2sim/test/Misc/test_asn1c.cpp index d10273c..690f767 100644 --- a/simulators/e2sim/test/Misc/test_asn1c.cpp +++ b/simulators/e2sim/test/Misc/test_asn1c.cpp @@ -59,7 +59,7 @@ int main(int argc, char* argv[]){ sctp_buffer_t data; data.len = e2ap_asn1c_encode_pdu(pdu, &buf); - memcpy(data.buffer, buf, data.len); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); /* Test decoding */ E2AP_PDU_t* pdu1 = new E2AP_PDU_t(); diff --git a/simulators/e2sim/test/WLG/ric_perf.cpp b/simulators/e2sim/test/WLG/ric_perf.cpp index ae140f8..9403283 100644 --- a/simulators/e2sim/test/WLG/ric_perf.cpp +++ b/simulators/e2sim/test/WLG/ric_perf.cpp @@ -40,7 +40,7 @@ void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) sctp_buffer_t data; data.len = e2ap_asn1c_encode_pdu(pdu, &buf); - memcpy(data.buffer, buf, data.len); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); sctp_send_data(client_fd, data); } diff --git a/simulators/e2sim/test/X2/x2term.cpp b/simulators/e2sim/test/X2/x2term.cpp index 9feccca..e325827 100644 --- a/simulators/e2sim/test/X2/x2term.cpp +++ b/simulators/e2sim/test/X2/x2term.cpp @@ -38,7 +38,7 @@ void encode_and_send_sctp_data(E2AP_PDU_t* pdu, int client_fd) sctp_buffer_t data; data.len = e2ap_asn1c_encode_pdu(pdu, &buf); - memcpy(data.buffer, buf, data.len); + memcpy(data.buffer, buf, min(data.len, MAX_SCTP_BUFFER)); // sctp_send_data(client_fd, data); sctp_send_data_X2AP(client_fd, data); @@ -64,9 +64,10 @@ int main(int argc, char* argv[]){ //Send X2 Setup Request E2AP_PDU_t* pdu_setup = e2ap_xml_to_pdu("E2AP_X2SetupRequest.xml"); e2ap_asn1c_print_pdu(pdu_setup); - encode_and_send_sctp_data(pdu_setup, client_fd); //wait to receive X2SetupResponse - wait_for_sctp_data(client_fd); + while(1){ + wait_for_sctp_data(client_fd); + } }