Commit d171e18c authored by frtabu's avatar frtabu

fix some cppcheck errors and warnings in config module and T Tracer

parent 974167b5
...@@ -171,7 +171,7 @@ int config_check_unknown_cmdlineopt(char *prefix) { ...@@ -171,7 +171,7 @@ int config_check_unknown_cmdlineopt(char *prefix) {
if (strcmp(prefix,CONFIG_CHECKALLSECTIONS) == 0) if (strcmp(prefix,CONFIG_CHECKALLSECTIONS) == 0)
finalcheck = 1; finalcheck = 1;
else if (strlen(prefix) > 0) { else if (strlen(prefix) > 0) {
sprintf(testprefix,"--%s.",prefix); sprintf(testprefix,"--%.*s.",CONFIG_MAXOPTLENGTH-1,prefix);
} }
} }
......
...@@ -345,7 +345,7 @@ void free_configmodule(void) { ...@@ -345,7 +345,7 @@ void free_configmodule(void) {
if( cfgptr->cfgmode != NULL) free(cfgptr->cfgmode); if( cfgptr->cfgmode != NULL) free(cfgptr->cfgmode);
printf ("[CONFIG] free %u config parameter pointers\n",cfgptr->num_cfgP); printf ("[CONFIG] free %i config parameter pointers\n",cfgptr->num_cfgP);
for (int i=0; i<cfgptr->num_cfgP; i++) { for (int i=0; i<cfgptr->num_cfgP; i++) {
if ( cfgptr->cfgP[i] != NULL) free(cfgptr->cfgP[i]); if ( cfgptr->cfgP[i] != NULL) free(cfgptr->cfgP[i]);
......
...@@ -202,9 +202,9 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork) { ...@@ -202,9 +202,9 @@ void T_init(int remote_port, int wait_for_tracer, int dont_fork) {
} }
void T_Config_Init(void) { void T_Config_Init(void) {
int T_port; /* by default we wait for the tracer */ int T_port=TTRACER_DEFAULT_PORTNUM; /* by default we wait for the tracer */
int T_nowait; /* default port to listen to to wait for the tracer */ int T_nowait=0; /* default port to listen to to wait for the tracer */
int T_dont_fork; /* default is to fork, see 'T_init' to understand */ int T_dont_fork=0; /* default is to fork, see 'T_init' to understand */
paramdef_t ttraceparams[] = CMDLINE_TTRACEPARAMS_DESC; paramdef_t ttraceparams[] = CMDLINE_TTRACEPARAMS_DESC;
/* for a cleaner config file, TTracer params should be defined in a /* for a cleaner config file, TTracer params should be defined in a
* specific section... * specific section...
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include "T_defs.h" #include "T_defs.h"
#ifdef T_SEND_TIME #ifdef T_SEND_TIME
#include <time.h> #include <time.h>
#endif #endif
/* T message IDs */ /* T message IDs */
...@@ -76,13 +76,13 @@ ...@@ -76,13 +76,13 @@
T_BUFFER_MAX - T_LOCAL_size, T_PUT_printf_deref x); \ T_BUFFER_MAX - T_LOCAL_size, T_PUT_printf_deref x); \
if (T_PUT_len < 0) { \ if (T_PUT_len < 0) { \
printf("%s:%d:%s: you can't read this, or can you?", \ printf("%s:%d:%s: you can't read this, or can you?", \
__FILE__, __LINE__, __FUNCTION__); \ __FILE__, __LINE__, __FUNCTION__); \
abort(); \ abort(); \
} \ } \
if (T_PUT_len >= T_BUFFER_MAX - T_LOCAL_size) { \ if (T_PUT_len >= T_BUFFER_MAX - T_LOCAL_size) { \
printf("%s:%d:%s: cannot put argument %d in T macro, not enough space" \ printf("%s:%d:%s: cannot put argument %d in T macro, not enough space" \
", consider increasing T_BUFFER_MAX (%d)\n", \ ", consider increasing T_BUFFER_MAX (%d)\n", \
__FILE__, __LINE__, __FUNCTION__, argnum, T_BUFFER_MAX); \ __FILE__, __LINE__, __FUNCTION__, argnum, T_BUFFER_MAX); \
abort(); \ abort(); \
} \ } \
T_LOCAL_size += T_PUT_len + 1; \ T_LOCAL_size += T_PUT_len + 1; \
...@@ -97,9 +97,9 @@ struct T_header; ...@@ -97,9 +97,9 @@ struct T_header;
/* T macro tricks */ /* T macro tricks */
extern int T_stdout; extern int T_stdout;
#define TN(...) TN_N(__VA_ARGS__,33,32,31,30,29,28,27,26,25,24,23,22,21,\ #define TN(...) TN_N(__VA_ARGS__,33,32,31,30,29,28,27,26,25,24,23,22,21,\
20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)(__VA_ARGS__) 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)(__VA_ARGS__)
#define TN_N(n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,\ #define TN_N(n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,\
n18,n19,n20,n21,n22,n23,n24,n25,n26,n27,n28,n29,n30,n31,n32,n,...) T##n n18,n19,n20,n21,n22,n23,n24,n25,n26,n27,n28,n29,n30,n31,n32,n,...) T##n
#define T(...) do { if (T_stdout == 0) TN(__VA_ARGS__); } while (0) #define T(...) do { if (T_stdout == 0) TN(__VA_ARGS__); } while (0)
/* type used to send arbitrary buffer data */ /* type used to send arbitrary buffer data */
...@@ -119,30 +119,30 @@ extern int *T_active; ...@@ -119,30 +119,30 @@ extern int *T_active;
*/ */
#if BASIC_SIMULATOR #if BASIC_SIMULATOR
# define T_GET_SLOT \ # define T_GET_SLOT \
do { \ do { \
extern volatile uint64_t T_next_id; \ extern volatile uint64_t T_next_id; \
extern volatile uint64_t T_active_id; \ extern volatile uint64_t T_active_id; \
uint64_t id; \ uint64_t id; \
/* get a ticket */ \ /* get a ticket */ \
id = __sync_fetch_and_add(&T_next_id, 1); \ id = __sync_fetch_and_add(&T_next_id, 1); \
/* wait for our turn */ \ /* wait for our turn */ \
while (id != __sync_fetch_and_add(&T_active_id, 0)) /* busy wait */; \ while (id != __sync_fetch_and_add(&T_active_id, 0)) /* busy wait */; \
/* this is our turn, try to acquire the slot until it's free */ \ /* this is our turn, try to acquire the slot until it's free */ \
do { \ do { \
T_LOCAL_busy = __sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x01); \ T_LOCAL_busy = __sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x01); \
if (T_LOCAL_busy & 0x01) usleep(100); \ if (T_LOCAL_busy & 0x01) usleep(100); \
} while (T_LOCAL_busy & 0x01); \ } while (T_LOCAL_busy & 0x01); \
/* check that there are still some tickets */ \ /* check that there are still some tickets */ \
if (__sync_fetch_and_add(&T_active_id, 0) == 0xffffffffffffffff) { \ if (__sync_fetch_and_add(&T_active_id, 0) == 0xffffffffffffffff) { \
printf("T: reached the end of times, bye...\n"); \ printf("T: reached the end of times, bye...\n"); \
abort(); \ abort(); \
} \ } \
/* free our ticket, which signals the next waiter that it's its turn */ \ /* free our ticket, which signals the next waiter that it's its turn */ \
(void)__sync_fetch_and_add(&T_active_id, 1); \ (void)__sync_fetch_and_add(&T_active_id, 1); \
} while (0) } while (0)
#else #else
# define T_GET_SLOT \ # define T_GET_SLOT \
T_LOCAL_busy = __sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x01); T_LOCAL_busy = __sync_fetch_and_or(&T_cache[T_LOCAL_slot].busy, 0x01);
#endif #endif
/* used at header of Tn, allocates buffer */ /* used at header of Tn, allocates buffer */
...@@ -172,8 +172,8 @@ extern int *T_active; ...@@ -172,8 +172,8 @@ extern int *T_active;
#define T_CHECK_SIZE(len, argnum) \ #define T_CHECK_SIZE(len, argnum) \
if (T_LOCAL_size + (len) > T_BUFFER_MAX) { \ if (T_LOCAL_size + (len) > T_BUFFER_MAX) { \
printf("%s:%d:%s: cannot put argument %d in T macro, not enough space" \ printf("%s:%d:%s: cannot put argument %d in T macro, not enough space" \
", consider increasing T_BUFFER_MAX (%d)\n", \ ", consider increasing T_BUFFER_MAX (%d)\n", \
__FILE__, __LINE__, __FUNCTION__, argnum, T_BUFFER_MAX); \ __FILE__, __LINE__, __FUNCTION__, argnum, T_BUFFER_MAX); \
abort(); \ abort(); \
} }
...@@ -598,20 +598,21 @@ extern int *T_active; ...@@ -598,20 +598,21 @@ extern int *T_active;
#define TTRACER_CONFIG_PREFIX "TTracer" #define TTRACER_CONFIG_PREFIX "TTracer"
/*------------------------------------------------------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------------------------------------------------------------*/
/* configuration parameters for TTRACE utility */ /* configuration parameters for TTRACE utility */
/* optname helpstr paramflags XXXptr defXXXval type numelt */ /* optname helpstr paramflags XXXptr defXXXval type numelt */
/*------------------------------------------------------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------------------------------------------------------------*/
#define TTRACER_DEFAULT_PORTNUM 2021
#define CMDLINE_TTRACEPARAMS_DESC { \ #define CMDLINE_TTRACEPARAMS_DESC { \
{"T_port", CONFIG_HLP_TPORT, 0, iptr:&T_port, defintval:2021, TYPE_INT, 0}, \ {"T_port", CONFIG_HLP_TPORT, 0, iptr:&T_port, defintval:TTRACER_DEFAULT_PORTNUM, TYPE_INT, 0},\
{"T_nowait", CONFIG_HLP_NOTWAIT, PARAMFLAG_BOOL, iptr:&T_nowait, defintval:0, TYPE_INT, 0}, \ {"T_nowait", CONFIG_HLP_NOTWAIT, PARAMFLAG_BOOL, iptr:&T_nowait, defintval:0, TYPE_INT, 0},\
{"T_dont_fork", CONFIG_HLP_TNOFORK, PARAMFLAG_BOOL, iptr:&T_dont_fork, defintval:0, TYPE_INT, 0}, \ {"T_dont_fork", CONFIG_HLP_TNOFORK, PARAMFLAG_BOOL, iptr:&T_dont_fork, defintval:0, TYPE_INT, 0},\
{"T_stdout", CONFIG_HLP_STDOUT, PARAMFLAG_BOOL, iptr:&T_stdout, defintval:1, TYPE_INT, 0}, \ {"T_stdout", CONFIG_HLP_STDOUT, PARAMFLAG_BOOL, iptr:&T_stdout, defintval:1, TYPE_INT, 0},\
} }
/* log on stdout */ /* log on stdout */
void T_init(int remote_port, int wait_for_tracer, int dont_fork); void T_init(int remote_port, int wait_for_tracer, int dont_fork);
void T_Config_Init(void); void T_Config_Init(void);
#else /* T_TRACER */ #else /* T_TRACER */
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
//------------------------------- //-------------------------------
FILE* g_msc_fd; FILE *g_msc_fd;
char g_msc_proto2str[MAX_MSC_PROTOS][MSC_MAX_PROTO_NAME_LENGTH]; char g_msc_proto2str[MAX_MSC_PROTOS][MSC_MAX_PROTO_NAME_LENGTH];
...@@ -70,15 +70,11 @@ void *msc_task(void *args_p) ...@@ -70,15 +70,11 @@ void *msc_task(void *args_p)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
{ {
MessageDef *received_message_p = NULL; MessageDef *received_message_p = NULL;
// const char *msg_name = NULL; // const char *msg_name = NULL;
// instance_t instance = 0; // instance_t instance = 0;
long timer_id; long timer_id;
itti_mark_task_ready(TASK_MSC); itti_mark_task_ready(TASK_MSC);
msc_start_use(); msc_start_use();
timer_setup(0, // seconds timer_setup(0, // seconds
50000, // usec 50000, // usec
TASK_MSC, TASK_MSC,
...@@ -91,20 +87,18 @@ void *msc_task(void *args_p) ...@@ -91,20 +87,18 @@ void *msc_task(void *args_p)
itti_receive_msg(TASK_MSC, &received_message_p); itti_receive_msg(TASK_MSC, &received_message_p);
if (received_message_p != NULL) { if (received_message_p != NULL) {
// msg_name = ITTI_MSG_NAME (received_message_p); // msg_name = ITTI_MSG_NAME (received_message_p);
// instance = ITTI_MSG_INSTANCE (received_message_p); // instance = ITTI_MSG_INSTANCE (received_message_p);
switch (ITTI_MSG_ID(received_message_p)) { switch (ITTI_MSG_ID(received_message_p)) {
case TIMER_HAS_EXPIRED: { case TIMER_HAS_EXPIRED: {
msc_flush_messages(); msc_flush_messages();
} }
break; break;
case TERMINATE_MESSAGE: { case TERMINATE_MESSAGE: {
fprintf(stderr, " *** Exiting MSC thread\n"); fprintf(stderr, " *** Exiting MSC thread\n");
timer_remove(timer_id); timer_remove(timer_id);
msc_end(); msc_end();
itti_exit_task(); itti_exit_task();
} }
break; break;
...@@ -119,6 +113,7 @@ void *msc_task(void *args_p) ...@@ -119,6 +113,7 @@ void *msc_task(void *args_p)
} }
} }
} }
fprintf(stderr, "Task MSC exiting\n"); fprintf(stderr, "Task MSC exiting\n");
return NULL; return NULL;
} }
...@@ -132,15 +127,16 @@ int msc_init(const msc_env_t envP, const int max_threadsP) ...@@ -132,15 +127,16 @@ int msc_init(const msc_env_t envP, const int max_threadsP)
void *pointer_p; void *pointer_p;
char msc_filename[256]; char msc_filename[256];
fprintf(stderr, "Initializing MSC logs\n"); fprintf(stderr, "Initializing MSC logs\n");
rv = snprintf(msc_filename, 256, "/tmp/openair.msc.%i.log", envP); // TODO NAME
rv = snprintf(msc_filename, 256, "/tmp/openair.msc.%u.log", envP); // TODO NAME if ((0 >= rv) || (256 < rv)) {
if ((0 >= rv) || (256 < rv)){
fprintf(stderr, "Error in MSC log file name"); fprintf(stderr, "Error in MSC log file name");
} }
g_msc_fd = fopen(msc_filename,"w"); g_msc_fd = fopen(msc_filename,"w");
AssertFatal(g_msc_fd != NULL, "Could not open MSC log file %s : %s", msc_filename, strerror(errno)); AssertFatal(g_msc_fd != NULL, "Could not open MSC log file %s : %s", msc_filename, strerror(errno));
rv = lfds611_stack_new(&g_msc_memory_stack_p, (lfds611_atom_t)max_threadsP + 2); rv = lfds611_stack_new(&g_msc_memory_stack_p, (lfds611_atom_t)max_threadsP + 2);
if (0 >= rv) { if (0 >= rv) {
AssertFatal (0, "lfds611_stack_new failed!\n"); AssertFatal (0, "lfds611_stack_new failed!\n");
} }
...@@ -153,7 +149,7 @@ int msc_init(const msc_env_t envP, const int max_threadsP) ...@@ -153,7 +149,7 @@ int msc_init(const msc_env_t envP, const int max_threadsP)
for (i=0; i < max_threadsP * 30; i++) { for (i=0; i < max_threadsP * 30; i++) {
pointer_p = malloc(MSC_MAX_MESSAGE_LENGTH); pointer_p = malloc(MSC_MAX_MESSAGE_LENGTH);
AssertFatal (pointer_p, "malloc failed!\n"); AssertFatal (pointer_p, "malloc failed!\n");
rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, pointer_p ); rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, pointer_p );
AssertFatal (rv, "lfds611_stack_guaranteed_push failed for item %u\n", i); AssertFatal (rv, "lfds611_stack_guaranteed_push failed for item %u\n", i);
} }
...@@ -161,182 +157,335 @@ int msc_init(const msc_env_t envP, const int max_threadsP) ...@@ -161,182 +157,335 @@ int msc_init(const msc_env_t envP, const int max_threadsP)
switch (i) { switch (i) {
case MSC_IP_UE: case MSC_IP_UE:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "IP_UE"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "IP_UE");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_IP_ENB: case MSC_IP_ENB:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "IP_ENB"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "IP_ENB");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if (envP == MSC_E_UTRAN_LIPA) { if (envP == MSC_E_UTRAN_LIPA) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_NAS_UE: case MSC_NAS_UE:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_UE"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_UE");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_RRC_UE: case MSC_RRC_UE:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RRC_UE"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RRC_UE");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_PDCP_UE: case MSC_PDCP_UE:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PDCP_UE"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PDCP_UE");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_RLC_UE: case MSC_RLC_UE:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RLC_UE"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RLC_UE");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_MAC_UE: case MSC_MAC_UE:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MAC_UE"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MAC_UE");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_PHY_UE: case MSC_PHY_UE:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PHY_UE"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PHY_UE");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_PHY_ENB: case MSC_PHY_ENB:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PHY_ENB"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PHY_ENB");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_MAC_ENB: case MSC_MAC_ENB:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MAC_ENB"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MAC_ENB");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_RLC_ENB: case MSC_RLC_ENB:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RLC_ENB"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RLC_ENB");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_PDCP_ENB: case MSC_PDCP_ENB:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PDCP_ENB"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "PDCP_ENB");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_RRC_ENB: case MSC_RRC_ENB:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RRC_ENB"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "RRC_ENB");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_S1AP_ENB: case MSC_S1AP_ENB:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S1AP_ENB"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S1AP_ENB");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_MME_GW) || (envP == MSC_MME)) { if ((envP == MSC_E_UTRAN) || (envP == MSC_MME_GW) || (envP == MSC_MME)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_GTPU_ENB: case MSC_GTPU_ENB:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "GTPU_ENB"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "GTPU_ENB");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_GTPU_SGW: case MSC_GTPU_SGW:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "GTPU_SGW"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "GTPU_SGW");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_MME_GW) || (envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_MME_GW) || (envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_S1AP_MME: case MSC_S1AP_MME:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S1AP_MME"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S1AP_MME");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_MME_GW) || (envP == MSC_MME) || (envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) { if ((envP == MSC_MME_GW) || (envP == MSC_MME) || (envP == MSC_E_UTRAN) || (envP == MSC_E_UTRAN_LIPA)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_MMEAPP_MME: case MSC_MMEAPP_MME:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MME_APP"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "MME_APP");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_MME_GW) || (envP == MSC_MME)) { if ((envP == MSC_MME_GW) || (envP == MSC_MME)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_NAS_MME: case MSC_NAS_MME:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_MME"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_MME");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
msc_log_declare_proto(i); msc_log_declare_proto(i);
break; break;
case MSC_NAS_EMM_MME: case MSC_NAS_EMM_MME:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_EMM"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_EMM");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_MME_GW) || (envP == MSC_MME)) { if ((envP == MSC_MME_GW) || (envP == MSC_MME)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_NAS_ESM_MME: case MSC_NAS_ESM_MME:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_ESM"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "NAS_ESM");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_MME_GW) || (envP == MSC_MME)) { if ((envP == MSC_MME_GW) || (envP == MSC_MME)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_SP_GWAPP_MME: case MSC_SP_GWAPP_MME:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "SP_GW_MME"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "SP_GW_MME");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if (envP == MSC_MME_GW) { if (envP == MSC_MME_GW) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_S11_MME: case MSC_S11_MME:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S11_MME"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S11_MME");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if (envP == MSC_MME) { if (envP == MSC_MME) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_S6A_MME: case MSC_S6A_MME:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S6A"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "S6A");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_MME_GW) || (envP == MSC_MME)) { if ((envP == MSC_MME_GW) || (envP == MSC_MME)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
case MSC_HSS: case MSC_HSS:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "HSS"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "HSS");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
if ((envP == MSC_MME_GW) || (envP == MSC_MME)) { if ((envP == MSC_MME_GW) || (envP == MSC_MME)) {
msc_log_declare_proto(i); msc_log_declare_proto(i);
} }
break; break;
default: default:
rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "UNKNOWN"); rv = snprintf(&g_msc_proto2str[i][0], MSC_MAX_PROTO_NAME_LENGTH, "UNKNOWN");
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;}
if (rv >= MSC_MAX_PROTO_NAME_LENGTH) {
g_msc_proto2str[i][MSC_MAX_PROTO_NAME_LENGTH-1] = 0;
}
} }
} }
rv = itti_create_task (TASK_MSC, msc_task, NULL); rv = itti_create_task (TASK_MSC, msc_task, NULL);
AssertFatal (rv == 0, "Create task for MSC failed!\n"); AssertFatal (rv == 0, "Create task for MSC failed!\n");
fprintf(stderr, "Initializing MSC logs Done\n"); fprintf(stderr, "Initializing MSC logs Done\n");
...@@ -359,15 +508,17 @@ void msc_flush_messages(void) ...@@ -359,15 +508,17 @@ void msc_flush_messages(void)
int rv; int rv;
msc_queue_item_t *item_p = NULL; msc_queue_item_t *item_p = NULL;
while ((rv = lfds611_queue_dequeue( g_msc_message_queue_p, (void**)&item_p )) == 1) { while ((rv = lfds611_queue_dequeue( g_msc_message_queue_p, (void **)&item_p )) == 1) {
if (NULL != item_p->message_str) { if (NULL != item_p->message_str) {
fputs(item_p->message_str, g_msc_fd); fputs(item_p->message_str, g_msc_fd);
// TODO BIN DATA // TODO BIN DATA
rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, item_p->message_str ); rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, item_p->message_str );
} }
// TODO FREE BIN DATA
free(item_p); // TODO FREE BIN DATA
free(item_p);
} }
fflush(g_msc_fd); fflush(g_msc_fd);
} }
...@@ -377,23 +528,27 @@ void msc_end(void) ...@@ -377,23 +528,27 @@ void msc_end(void)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
{ {
int rv; int rv;
if (NULL != g_msc_fd ) { if (NULL != g_msc_fd ) {
msc_flush_messages(); msc_flush_messages();
rv = fflush(g_msc_fd); rv = fflush(g_msc_fd);
if (rv != 0) {
fprintf(stderr, "Error while flushing stream of MSC log file: %s", strerror(errno)); if (rv != 0) {
fprintf(stderr, "Error while flushing stream of MSC log file: %s", strerror(errno));
} }
rv = fclose(g_msc_fd); rv = fclose(g_msc_fd);
if (rv != 0) { if (rv != 0) {
fprintf(stderr, "Error while closing MSC log file: %s", strerror(errno)); fprintf(stderr, "Error while closing MSC log file: %s", strerror(errno));
} }
} }
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void msc_log_declare_proto( void msc_log_declare_proto(
const msc_proto_t protoP const msc_proto_t protoP
) )
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
{ {
int rv = 0; int rv = 0;
...@@ -401,47 +556,55 @@ void msc_log_declare_proto( ...@@ -401,47 +556,55 @@ void msc_log_declare_proto(
char *char_message_p = NULL; char *char_message_p = NULL;
if ((MIN_MSC_PROTOS <= protoP) && (MAX_MSC_PROTOS > protoP)) { if ((MIN_MSC_PROTOS <= protoP) && (MAX_MSC_PROTOS > protoP)) {
// may be build a memory pool for that also ? // may be build a memory pool for that also ?
new_item_p = malloc(sizeof(msc_queue_item_t)); new_item_p = malloc(sizeof(msc_queue_item_t));
if (NULL != new_item_p) {
if (NULL != new_item_p) {
rv = lfds611_stack_pop(g_msc_memory_stack_p, (void**)&char_message_p); rv = lfds611_stack_pop(g_msc_memory_stack_p, (void **)&char_message_p);
if (0 == rv) {
msc_flush_messages(); if (0 == rv) {
rv = lfds611_stack_pop(g_msc_memory_stack_p, (void**)&char_message_p); msc_flush_messages();
} rv = lfds611_stack_pop(g_msc_memory_stack_p, (void **)&char_message_p);
if (1 == rv) { }
if (1 == rv) {
rv = snprintf(char_message_p, MSC_MAX_MESSAGE_LENGTH, "%"PRIu64" [PROTO] %d %s\n", __sync_fetch_and_add (&g_message_number, 1), protoP, &g_msc_proto2str[protoP][0]); rv = snprintf(char_message_p, MSC_MAX_MESSAGE_LENGTH, "%"PRIu64" [PROTO] %d %s\n", __sync_fetch_and_add (&g_message_number, 1), protoP, &g_msc_proto2str[protoP][0]);
if (0 > rv) { if (0 > rv) {
fprintf(stderr, "Error while declaring new protocol in MSC: %s", strerror(errno)); fprintf(stderr, "Error while declaring new protocol in MSC: %s", strerror(errno));
} }
new_item_p->message_str = char_message_p; new_item_p->message_str = char_message_p;
new_item_p->message_str_size = rv; new_item_p->message_str_size = rv;
new_item_p->message_bin = NULL; new_item_p->message_bin = NULL;
new_item_p->message_bin_size = 0; new_item_p->message_bin_size = 0;
rv = lfds611_queue_enqueue( g_msc_message_queue_p, new_item_p ); rv = lfds611_queue_enqueue( g_msc_message_queue_p, new_item_p );
if (0 == rv) {
rv = lfds611_queue_guaranteed_enqueue(g_msc_message_queue_p, new_item_p ); if (0 == rv) {
if (0 == rv) { rv = lfds611_queue_guaranteed_enqueue(g_msc_message_queue_p, new_item_p );
if (0 == rv) {
fprintf(stderr, "Error while lfds611_queue_guaranteed_enqueue message %s in MSC", char_message_p); fprintf(stderr, "Error while lfds611_queue_guaranteed_enqueue message %s in MSC", char_message_p);
rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p ); rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p );
free(new_item_p); free(new_item_p);
} }
} }
return;
} else { return;
fprintf(stderr, "Error while lfds611_stack_pop()\n"); } else {
} fprintf(stderr, "Error while lfds611_stack_pop()\n");
}
free(new_item_p); free(new_item_p);
} else { } else {
fprintf(stderr, "Error while malloc in MSC"); fprintf(stderr, "Error while malloc in MSC");
} }
} }
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void msc_log_event( void msc_log_event(
const msc_proto_t protoP, const msc_proto_t protoP,
char *format, ...) char *format, ...)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
{ {
va_list args; va_list args;
...@@ -450,52 +613,62 @@ void msc_log_event( ...@@ -450,52 +613,62 @@ void msc_log_event(
msc_queue_item_t *new_item_p = NULL; msc_queue_item_t *new_item_p = NULL;
char *char_message_p = NULL; char *char_message_p = NULL;
if ((MIN_MSC_PROTOS > protoP) || (MAX_MSC_PROTOS <= protoP)) { if ((MIN_MSC_PROTOS > protoP) || (MAX_MSC_PROTOS <= protoP)) {
return; return;
} }
new_item_p = malloc(sizeof(msc_queue_item_t)); new_item_p = malloc(sizeof(msc_queue_item_t));
if (NULL != new_item_p) { if (NULL != new_item_p) {
rv = lfds611_stack_pop(g_msc_memory_stack_p, (void **)&char_message_p);
rv = lfds611_stack_pop(g_msc_memory_stack_p, (void**)&char_message_p);
if (0 == rv) { if (0 == rv) {
msc_flush_messages(); msc_flush_messages();
rv = lfds611_stack_pop(g_msc_memory_stack_p, (void**)&char_message_p); rv = lfds611_stack_pop(g_msc_memory_stack_p, (void **)&char_message_p);
} }
if (1 == rv) { if (1 == rv) {
rv = snprintf(char_message_p, MSC_MAX_MESSAGE_LENGTH, "%"PRIu64" [EVENT] %d ", __sync_fetch_and_add (&g_message_number, 1), protoP); rv = snprintf(char_message_p, MSC_MAX_MESSAGE_LENGTH, "%"PRIu64" [EVENT] %d ", __sync_fetch_and_add (&g_message_number, 1), protoP);
if ((0 > rv) || (MSC_MAX_MESSAGE_LENGTH < rv)) { if ((0 > rv) || (MSC_MAX_MESSAGE_LENGTH < rv)) {
fprintf(stderr, "Error while logging MSC event : %s", &g_msc_proto2str[protoP][0]); fprintf(stderr, "Error while logging MSC event : %s", &g_msc_proto2str[protoP][0]);
goto error_event; goto error_event;
} }
va_start(args, format); va_start(args, format);
rv2 = vsnprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, format, args); rv2 = vsnprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, format, args);
va_end(args); va_end(args);
if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) { if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) {
fprintf(stderr, "Error while logging MSC event : %s", &g_msc_proto2str[protoP][0]); fprintf(stderr, "Error while logging MSC event : %s", &g_msc_proto2str[protoP][0]);
goto error_event; goto error_event;
} }
rv += rv2; rv += rv2;
rv2 = snprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, "\n"); rv2 = snprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, "\n");
if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) { if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) {
fprintf(stderr, "Error while logging MSC event : %s", &g_msc_proto2str[protoP][0]); fprintf(stderr, "Error while logging MSC event : %s", &g_msc_proto2str[protoP][0]);
goto error_event; goto error_event;
} }
rv += rv2; rv += rv2;
new_item_p->message_str = char_message_p; new_item_p->message_str = char_message_p;
new_item_p->message_str_size = rv; new_item_p->message_str_size = rv;
new_item_p->message_bin = NULL; new_item_p->message_bin = NULL;
new_item_p->message_bin_size = 0; new_item_p->message_bin_size = 0;
rv = lfds611_queue_enqueue( g_msc_message_queue_p, new_item_p ); rv = lfds611_queue_enqueue( g_msc_message_queue_p, new_item_p );
if (0 == rv) {
if (0 == rv) {
fprintf(stderr, "Error while lfds611_queue_guaranteed_enqueue message %s in MSC", char_message_p); fprintf(stderr, "Error while lfds611_queue_guaranteed_enqueue message %s in MSC", char_message_p);
rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p ); rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p );
free(new_item_p); free(new_item_p);
} }
} else { } else {
fprintf(stderr, "Error while lfds611_stack_pop()\n"); fprintf(stderr, "Error while lfds611_stack_pop()\n");
} }
} }
return; return;
error_event: error_event:
rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p ); rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p );
...@@ -503,12 +676,12 @@ error_event: ...@@ -503,12 +676,12 @@ error_event:
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void msc_log_message( void msc_log_message(
const char * const message_operationP, const char *const message_operationP,
const msc_proto_t proto1P, const msc_proto_t proto1P,
const msc_proto_t proto2P, const msc_proto_t proto2P,
const uint8_t * const bytesP, const uint8_t *const bytesP,
const unsigned int num_bytes, const unsigned int num_bytes,
char *format, ...) char *format, ...)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
{ {
va_list args; va_list args;
...@@ -518,56 +691,65 @@ void msc_log_message( ...@@ -518,56 +691,65 @@ void msc_log_message(
msc_queue_item_t *new_item_p = NULL; msc_queue_item_t *new_item_p = NULL;
char *char_message_p = NULL; char *char_message_p = NULL;
if ((MIN_MSC_PROTOS > proto1P) || (MAX_MSC_PROTOS <= proto1P) || if ((MIN_MSC_PROTOS > proto1P) || (MAX_MSC_PROTOS <= proto1P) ||
(MIN_MSC_PROTOS > proto2P) || (MAX_MSC_PROTOS <= proto2P) ) { (MIN_MSC_PROTOS > proto2P) || (MAX_MSC_PROTOS <= proto2P) ) {
return; return;
} }
new_item_p = malloc(sizeof(msc_queue_item_t)); new_item_p = malloc(sizeof(msc_queue_item_t));
if (NULL != new_item_p) { if (NULL != new_item_p) {
rv = lfds611_stack_pop(g_msc_memory_stack_p, (void **)&char_message_p);
rv = lfds611_stack_pop(g_msc_memory_stack_p, (void**)&char_message_p);
if (0 == rv) { if (0 == rv) {
msc_flush_messages(); msc_flush_messages();
rv = lfds611_stack_pop(g_msc_memory_stack_p, (void**)&char_message_p); rv = lfds611_stack_pop(g_msc_memory_stack_p, (void **)&char_message_p);
} }
if (1 == rv) { if (1 == rv) {
rv = snprintf(char_message_p, MSC_MAX_MESSAGE_LENGTH, "%"PRIu64" [MESSAGE] %d %s %d %"PRIu64" ", rv = snprintf(char_message_p, MSC_MAX_MESSAGE_LENGTH, "%"PRIu64" [MESSAGE] %d %s %d %"PRIu64" ",
__sync_fetch_and_add (&g_message_number, 1), proto1P, message_operationP, proto2P, mac); __sync_fetch_and_add (&g_message_number, 1), proto1P, message_operationP, proto2P, mac);
if ((0 > rv) || (MSC_MAX_MESSAGE_LENGTH < rv)) { if ((0 > rv) || (MSC_MAX_MESSAGE_LENGTH < rv)) {
fprintf(stderr, "Error while logging MSC message : %s/%s", &g_msc_proto2str[proto1P][0], &g_msc_proto2str[proto2P][0]); fprintf(stderr, "Error while logging MSC message : %s/%s", &g_msc_proto2str[proto1P][0], &g_msc_proto2str[proto2P][0]);
goto error_event; goto error_event;
} }
va_start(args, format); va_start(args, format);
rv2 = vsnprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, format, args); rv2 = vsnprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, format, args);
va_end(args); va_end(args);
if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) { if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) {
fprintf(stderr, "Error while logging MSC message : %s/%s", &g_msc_proto2str[proto1P][0], &g_msc_proto2str[proto2P][0]); fprintf(stderr, "Error while logging MSC message : %s/%s", &g_msc_proto2str[proto1P][0], &g_msc_proto2str[proto2P][0]);
goto error_event; goto error_event;
} }
rv += rv2; rv += rv2;
rv2 = snprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, "\n"); rv2 = snprintf(&char_message_p[rv],MSC_MAX_MESSAGE_LENGTH - rv, "\n");
if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) { if ((0 > rv2) || ((MSC_MAX_MESSAGE_LENGTH - rv) < rv2)) {
fprintf(stderr, "Error while logging MSC message : %s/%s", &g_msc_proto2str[proto1P][0], &g_msc_proto2str[proto2P][0]); fprintf(stderr, "Error while logging MSC message : %s/%s", &g_msc_proto2str[proto1P][0], &g_msc_proto2str[proto2P][0]);
goto error_event; goto error_event;
} }
rv += rv2; rv += rv2;
new_item_p->message_str = char_message_p; new_item_p->message_str = char_message_p;
new_item_p->message_str_size = rv; new_item_p->message_str_size = rv;
new_item_p->message_bin = NULL; // TO DO new_item_p->message_bin = NULL; // TO DO
new_item_p->message_bin_size = 0; // TO DO new_item_p->message_bin_size = 0; // TO DO
rv = lfds611_queue_enqueue( g_msc_message_queue_p, new_item_p ); rv = lfds611_queue_enqueue( g_msc_message_queue_p, new_item_p );
if (0 == rv) {
if (0 == rv) {
fprintf(stderr, "Error while lfds611_queue_guaranteed_enqueue message %s in MSC", char_message_p); fprintf(stderr, "Error while lfds611_queue_guaranteed_enqueue message %s in MSC", char_message_p);
rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p ); rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p );
free(new_item_p); free(new_item_p);
} }
} else { } else {
fprintf(stderr, "Error while lfds611_stack_pop()\n"); fprintf(stderr, "Error while lfds611_stack_pop()\n");
msc_flush_messages(); msc_flush_messages();
} }
} }
return; return;
error_event: error_event:
rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p ); rv = lfds611_stack_guaranteed_push( g_msc_memory_stack_p, char_message_p );
...@@ -578,8 +760,7 @@ error_event: ...@@ -578,8 +760,7 @@ error_event:
// function called when oai loader loads the msc shared lib // function called when oai loader loads the msc shared lib
int msc_autoinit(msc_interface_t *msc_interface) int msc_autoinit(msc_interface_t *msc_interface)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
{ {
msc_interface->msc_init = msc_init; msc_interface->msc_init = msc_init;
msc_interface->msc_start_use = msc_start_use; msc_interface->msc_start_use = msc_start_use;
msc_interface->msc_end = msc_end; msc_interface->msc_end = msc_end;
...@@ -587,4 +768,4 @@ int msc_autoinit(msc_interface_t *msc_interface) ...@@ -587,4 +768,4 @@ int msc_autoinit(msc_interface_t *msc_interface)
msc_interface->msc_log_message = msc_log_message; msc_interface->msc_log_message = msc_log_message;
msc_interface->msc_loaded = 1; msc_interface->msc_loaded = 1;
return 0; return 0;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment