+++ /dev/null
-/*
-======================================================================
- 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 <ctype.h>
-#include <string.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <time.h>
-
-#define UTA_COMPAT
-#include "ric_wg.h"
-#include <rmr/rmr.h>
-
-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;
-}