X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=simulators%2Fworkload_generators%2Finternal_testing%2Fsrc%2Fric_generator.c;fp=simulators%2Fworkload_generators%2Finternal_testing%2Fsrc%2Fric_generator.c;h=ede2dad07679a6079666fe44497f9318840da188;hb=7e3c61eca8e9224be0190ee126a4eb7fc6b1721c;hp=0000000000000000000000000000000000000000;hpb=0b085bb3d3cbff7a109fc550ffa220e11db0ba2d;p=it%2Ftest.git diff --git a/simulators/workload_generators/internal_testing/src/ric_generator.c b/simulators/workload_generators/internal_testing/src/ric_generator.c new file mode 100644 index 0000000..ede2dad --- /dev/null +++ b/simulators/workload_generators/internal_testing/src/ric_generator.c @@ -0,0 +1,127 @@ +/* +====================================================================== + Copyright (c) 2019 Nokia + Copyright (c) 2018-2019 AT&T Intellectual Property. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied. See the License for the specific language governing + permissions andlimitations under the License. +====================================================================== +*/ + +#include +#include +#include +#include +#include +#include +#include + +#define UTA_COMPAT +#include "ric_wg.h" +#include + +struct timespec ts_start_tx; + +int read_pdu(const char* filename, unsigned char* buffer) { + + FILE* f = fopen(filename, "r"); + + if(f == NULL) { + fprintf(stderr, "abort: unable to open PDU file: %s\n", + strerror(errno)); + return -1; + } + + return fread(buffer, sizeof(unsigned char), 2048, f); +} + + +int main(int argc, char** argv) { + void* mr; + char* proto_port = "tcp:4545"; + rmr_mbuf_t* msg; + // data portion (payload) of the message + msg_t* msg_data; + // total count of msgs sent + int count = 0; + // cyced count used to generate type + int cyc_count = 0; + // number of msgs per second + int rate = argc < 2 ? 10 : atoi(argv[1]); + // the number of msg types depends on the number of xAPPs + int type_n = 2; + // rate in mu-seconds/message + double v = (1.0/(double)rate) * SEC2MUS; + // delay between messages + int delay = (int) v; + // PDU buffer to be copied to each msg + unsigned char pdu_li[2048]; + unsigned char pdu_rs[2048]; + char* pdufile1 = "PDU/pdu1.per"; + char* pdufile2 = "PDU/pdu2.per"; + + struct timespec ts; + long long elapse; + double elapse_s; + + int pdu_li_size = read_pdu(pdufile1, pdu_li); + int pdu_rs_size = read_pdu(pdufile2, pdu_rs); + + if((mr = uta_init(proto_port, 4096, UTAFL_NONE)) == NULL) { + fprintf(stderr, "abort: unable to initialise the lib: %s\n", + strerror(errno)); + exit(1); + } + // get an initial send buffer + msg = uta_alloc_msg(mr, sizeof(msg_t)); + if( msg == NULL ) { + fprintf(stderr, "abort: couldn't allocate initial message\n"); + exit(1); + } + //record starting time + clock_gettime(CLOCK_REALTIME, &ts_start_tx); + while(count < MAX_TX) { + //sleep to have an average msg/sec send rate + usleep(delay); + msg->mtype = cyc_count; + msg_data = (msg_t *) msg->payload; + msg_data->time_counter = count; + + snprintf(msg->xaction, UTA_MAX_XID, "x%05d", count); + + if(msg->mtype == 0) { + msg_data->pdu_length = pdu_li_size; + memcpy(msg_data->payload, pdu_li, sizeof(msg_data->payload)); + } + + if(msg->mtype == 1) { + msg_data->pdu_length = pdu_rs_size; + memcpy(msg_data->payload, pdu_rs, sizeof(msg_data->payload)); + } + msg->len = sizeof(msg_t); + // set timestamp at the absolute last point + clock_gettime(CLOCK_REALTIME, &msg_data->ts); + + msg = uta_send_msg(mr, msg); + + count++; + clock_gettime(CLOCK_REALTIME, &ts); + elapse = (ts.tv_sec - ts_start_tx.tv_sec) * 1000000000 + + ts.tv_nsec - ts_start_tx.tv_nsec; + elapse_s = (double) elapse / 1000000000; + + fprintf(stderr, "\rsent %d msgs", count); + cyc_count = cyc_count < type_n - 1 ? cyc_count + 1 : 0; + } + + return 0; +}