diff options
Diffstat (limited to 'src/daemon')
-rw-r--r-- | src/daemon/dlt-daemon.c | 52 | ||||
-rw-r--r-- | src/daemon/dlt-daemon.h | 3 | ||||
-rw-r--r-- | src/daemon/dlt.conf | 14 | ||||
-rw-r--r-- | src/daemon/dlt_daemon_client.c | 24 | ||||
-rw-r--r-- | src/daemon/dlt_daemon_common.c | 32 | ||||
-rw-r--r-- | src/daemon/dlt_daemon_common.h | 11 | ||||
-rw-r--r-- | src/daemon/dlt_daemon_common_cfg.h | 5 |
7 files changed, 110 insertions, 31 deletions
diff --git a/src/daemon/dlt-daemon.c b/src/daemon/dlt-daemon.c index c8af773..804b36b 100644 --- a/src/daemon/dlt-daemon.c +++ b/src/daemon/dlt-daemon.c @@ -241,13 +241,16 @@ int option_file_parser(DltDaemonLocal *daemon_local) daemon_local->flags.offlineLogstorageDelimiter = '_'; daemon_local->flags.offlineLogstorageMaxCounter = UINT_MAX; daemon_local->flags.offlineLogstorageMaxCounterIdx = 0; - daemon_local->flags.offlineLogstorageCacheSize = 30000; /* 30MB */ + daemon_local->flags.offlineLogstorageCacheSize = 30000; /* 30MB */ dlt_daemon_logstorage_set_logstorage_cache_size( - daemon_local->flags.offlineLogstorageCacheSize); - strncpy(daemon_local->flags.ctrlSockPath, + daemon_local->flags.offlineLogstorageCacheSize); + strncpy(daemon_local->flags.ctrlSockPath, DLT_DAEMON_DEFAULT_CTRL_SOCK_PATH, sizeof(daemon_local->flags.ctrlSockPath) - 1); - daemon_local->flags.gatewayMode = 0; + daemon_local->flags.gatewayMode = 0; + daemon_local->flags.contextLogLevel = DLT_LOG_INFO; + daemon_local->flags.contextTraceStatus = DLT_TRACE_STATUS_OFF; + daemon_local->flags.enforceContextLLAndTS = 0; /* default is off */ /* open configuration file */ if(daemon_local->flags.cvalue[0]) @@ -489,6 +492,45 @@ int option_file_parser(DltDaemonLocal *daemon_local) daemon_local->flags.gatewayMode = atoi(value); //printf("Option: %s=%s\n",token,value); } + else if(strcmp(token,"ContextLogLevel")==0) + { + int const intval = atoi(value); + if ( (intval >= DLT_LOG_OFF) && (intval <= DLT_LOG_VERBOSE)) + { + daemon_local->flags.contextLogLevel = intval; + printf("Option: %s=%s\n",token,value); + } + else + { + fprintf(stderr, "Invalid value for ContextLogLevel: %i. Must be in range [%i..%i]\n", intval, DLT_LOG_OFF, DLT_LOG_VERBOSE); + } + } + else if(strcmp(token,"ContextTraceStatus")==0) + { + int const intval = atoi(value); + if ( (intval >= DLT_TRACE_STATUS_OFF) && (intval <= DLT_TRACE_STATUS_ON)) + { + daemon_local->flags.contextTraceStatus = intval; + printf("Option: %s=%s\n",token,value); + } + else + { + fprintf(stderr, "Invalid value for ContextTraceStatus: %i. Must be in range [%i..%i]\n", intval, DLT_TRACE_STATUS_OFF, DLT_TRACE_STATUS_ON); + } + } + else if(strcmp(token,"ForceContextLogLevelAndTraceStatus")==0) + { + int const intval = atoi(value); + if ( (intval >= 0) && (intval <= 1)) + { + daemon_local->flags.enforceContextLLAndTS = intval; + printf("Option: %s=%s\n",token,value); + } + else + { + fprintf(stderr, "Invalid value for ForceContextLogLevelAndTraceStatus: %i. Must be 0, 1\n", intval); + } + } else { fprintf(stderr, "Unknown option: %s=%s\n",token,value); @@ -775,7 +817,7 @@ int dlt_daemon_local_init_p2(DltDaemon *daemon, DltDaemonLocal *daemon_local, in } /* Daemon data */ - if (dlt_daemon_init(daemon,daemon_local->RingbufferMinSize,daemon_local->RingbufferMaxSize,daemon_local->RingbufferStepSize,daemon_local->flags.ivalue,daemon_local->flags.vflag)==-1) + if (dlt_daemon_init(daemon,daemon_local->RingbufferMinSize,daemon_local->RingbufferMaxSize,daemon_local->RingbufferStepSize, daemon_local->flags.ivalue,daemon_local->flags.contextLogLevel, daemon_local->flags.contextTraceStatus,daemon_local->flags.enforceContextLLAndTS,daemon_local->flags.vflag)==-1) { dlt_log(LOG_ERR,"Could not initialize daemon data\n"); return -1; diff --git a/src/daemon/dlt-daemon.h b/src/daemon/dlt-daemon.h index 2dffcc9..7f26d82 100644 --- a/src/daemon/dlt-daemon.h +++ b/src/daemon/dlt-daemon.h @@ -124,6 +124,9 @@ typedef struct unsigned int port; /**< port number */ char ctrlSockPath[DLT_DAEMON_FLAG_MAX]; /**< Path to Control socket */ int gatewayMode; /**< (Boolean) Gateway Mode */ + int contextLogLevel; /**< (int) log level sent to context if registered with default log-level or if enforced*/ + int contextTraceStatus; /**< (int) trace status sent to context if registered with default trace status or if enforced*/ + int enforceContextLLAndTS; /**< (Boolean) Enforce log-level, trace-status not to exceed contextLogLevel, contextTraceStatus */ } DltDaemonFlags; /** * The global parameters of a dlt daemon. diff --git a/src/daemon/dlt.conf b/src/daemon/dlt.conf index aab9c7d..376a94f 100644 --- a/src/daemon/dlt.conf +++ b/src/daemon/dlt.conf @@ -6,7 +6,7 @@ # General configuration # ######################################################################## -# Start daemon in dubug mode, so that all internal debug information is printed out on the console +# Start daemon in debug mode, so that all internal debug information is printed out on the console # Verbose = 1 # Daemonize DLT daemon, if it is started as daemon @@ -56,6 +56,18 @@ RingbufferMaxSize = 10000000 # The step size the Ringbuffer is increased, used for storing temporary DLT messages, until client is connected (Default: 500000) RingbufferStepSize = 500000 +# Initial log-level that is sent when an application registers (Default: 4) +# DLT_LOG_OFF = 0, DLT_LOG_FATAL = 1, DLT_LOG_ERROR = 2, DLT_LOG_WARN = 3, DLT_LOG_INFO = 4, DLT_LOG_DEBUG = 5, DLT_LOG_VERBOSE = 6 +# ContextLogLevel = 4 + +# Initial trace-status that is sent when an application registers (Default: 0) +# DLT_TRACE_STATUS_OFF = 0, DLT_TRACE_STATUS_ON = 1 +# ContextTraceStatus = 0 + +# Force log level and trace status of context to not exceed "ContextLogLevel" and "ContextTraceStatus" (Default: 0 = OFF) +# If set to 1 (ON) whenever a context registers or changes the log-level it has to be lower or equal to ContextLogLevel +# ForceContextLogLevelAndTraceStatus = 1 + ######################################################################## # Control Application # ######################################################################## diff --git a/src/daemon/dlt_daemon_client.c b/src/daemon/dlt_daemon_client.c index b23c5bb..9e7638d 100644 --- a/src/daemon/dlt_daemon_client.c +++ b/src/daemon/dlt_daemon_client.c @@ -469,26 +469,26 @@ int dlt_daemon_client_process_control(int sock, DltDaemon *daemon, DltDaemonLoca { if (dlt_daemon_applications_save(daemon, daemon->runtime_application_cfg, verbose)==0) { - if (dlt_daemon_contexts_save(daemon, daemon->runtime_context_cfg, verbose)==0) - { - dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose); - } - else - { - /* Delete saved files */ - dlt_daemon_control_reset_to_factory_default(daemon, daemon->runtime_application_cfg, daemon->runtime_context_cfg, verbose); - dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); - } + if (dlt_daemon_contexts_save(daemon, daemon->runtime_context_cfg, verbose)==0) + { + dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose); + } + else + { + /* Delete saved files */ + dlt_daemon_control_reset_to_factory_default(daemon, daemon->runtime_application_cfg, daemon->runtime_context_cfg, daemon_local->flags.contextLogLevel, daemon_local->flags.contextTraceStatus, daemon_local->flags.enforceContextLLAndTS, verbose); + dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); + } } else { - dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); + dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_ERROR, verbose); } break; } case DLT_SERVICE_ID_RESET_TO_FACTORY_DEFAULT: { - dlt_daemon_control_reset_to_factory_default(daemon, daemon->runtime_application_cfg, daemon->runtime_context_cfg, verbose); + dlt_daemon_control_reset_to_factory_default(daemon, daemon->runtime_application_cfg, daemon->runtime_context_cfg, daemon_local->flags.contextLogLevel, daemon_local->flags.contextTraceStatus, daemon_local->flags.enforceContextLLAndTS, verbose); dlt_daemon_control_service_response(sock, daemon, daemon_local, id, DLT_SERVICE_RESPONSE_OK, verbose); break; } diff --git a/src/daemon/dlt_daemon_common.c b/src/daemon/dlt_daemon_common.c index 5353830..6523136 100644 --- a/src/daemon/dlt_daemon_common.c +++ b/src/daemon/dlt_daemon_common.c @@ -129,7 +129,7 @@ static int dlt_daemon_cmp_apid_ctid(const void *m1, const void *m2) return ret; } -int dlt_daemon_init(DltDaemon *daemon, unsigned long RingbufferMinSize, unsigned long RingbufferMaxSize, unsigned long RingbufferStepSize, const char *runtime_directory, int verbose) +int dlt_daemon_init(DltDaemon *daemon,unsigned long RingbufferMinSize,unsigned long RingbufferMaxSize,unsigned long RingbufferStepSize,const char *runtime_directory,int InitialContextLogLevel, int InitialContextTraceStatus, int ForceLLTS, int verbose) { PRINT_FUNCTION_VERBOSE(verbose); @@ -143,8 +143,9 @@ int dlt_daemon_init(DltDaemon *daemon, unsigned long RingbufferMinSize, unsigned daemon->num_applications = 0; daemon->applications = NULL; - daemon->default_log_level = DLT_DAEMON_INITIAL_LOG_LEVEL ; - daemon->default_trace_status = DLT_DAEMON_INITIAL_TRACE_STATUS ; + daemon->default_log_level = InitialContextLogLevel; + daemon->default_trace_status = InitialContextTraceStatus; + daemon->force_ll_ts = ForceLLTS; daemon->overflow_counter = 0; @@ -704,6 +705,20 @@ DltDaemonContext* dlt_daemon_context_add(DltDaemon *daemon, char *apid, char *ct } } + if (daemon->force_ll_ts) + { + if (log_level > daemon->default_log_level) + { + log_level = daemon->default_log_level; + } + if (trace_status > daemon->default_trace_status) + { + trace_status = daemon->default_trace_status; + } + snprintf(str,DLT_DAEMON_COMMON_TEXTBUFSIZE, "Adapting ll_ts for context: %.4s:%.4s with %i %i\n", apid, ctid, log_level, trace_status); + dlt_log(LOG_NOTICE, str); + } + /* Store log level and trace status, if this is a new context, or if this is an old context and the runtime cfg was not loaded */ @@ -1122,6 +1137,10 @@ int dlt_daemon_user_send_log_level(DltDaemon *daemon, DltDaemonContext *context, usercontext.log_level_pos = context->log_level_pos; + snprintf(str,DLT_DAEMON_COMMON_TEXTBUFSIZE, "Send log-level to context: %.4s:%.4s [%i -> %i] [%i -> %i]\n", + context->apid, context->ctid, context->log_level, usercontext.log_level, context->trace_status, usercontext.trace_status); + dlt_log(LOG_NOTICE, str); + /* log to FIFO */ ret = dlt_user_log_out2(context->user_handle, &(userheader), sizeof(DltUserHeader), @@ -1174,7 +1193,7 @@ int dlt_daemon_user_send_log_state(DltDaemon *daemon, DltDaemonApplication *app, return ((ret == DLT_RETURN_OK) ? DLT_RETURN_OK : DLT_RETURN_ERROR); } -void dlt_daemon_control_reset_to_factory_default(DltDaemon *daemon, const char *filename, const char *filename1, int verbose) +void dlt_daemon_control_reset_to_factory_default(DltDaemon *daemon,const char *filename, const char *filename1, int InitialContextLogLevel, int InitialContextTraceStatus, int InitialEnforceLlTsStatus, int verbose) { FILE *fd; @@ -1211,8 +1230,9 @@ void dlt_daemon_control_reset_to_factory_default(DltDaemon *daemon, const char * unlink(filename1); } - daemon->default_log_level = DLT_DAEMON_INITIAL_LOG_LEVEL ; - daemon->default_trace_status = DLT_DAEMON_INITIAL_TRACE_STATUS ; + daemon->default_log_level = InitialContextLogLevel; + daemon->default_trace_status = InitialContextTraceStatus; + daemon->force_ll_ts = InitialEnforceLlTsStatus; /* Reset all other things (log level, trace status, etc. to default values */ diff --git a/src/daemon/dlt_daemon_common.h b/src/daemon/dlt_daemon_common.h index e93d0d7..71d3dce 100644 --- a/src/daemon/dlt_daemon_common.h +++ b/src/daemon/dlt_daemon_common.h @@ -150,6 +150,7 @@ typedef struct DltDaemonApplication *applications; /**< Pointer to applications */ int8_t default_log_level; /**< Default log level (of daemon) */ int8_t default_trace_status; /**< Default trace status (of daemon) */ + int8_t force_ll_ts; /**< Enforce ll and ts to not exceed default_log_level, default_trace_status */ unsigned int overflow_counter; /**< counts the number of lost messages. */ int runtime_context_cfg_loaded; /**< Set to one, if runtime context configuration has been loaded, zero otherwise */ char ecuid[DLT_ID_SIZE]; /**< ECU ID of daemon */ @@ -174,10 +175,13 @@ typedef struct * @param RingbufferMaxSize ringbuffer size * @param RingbufferStepSize ringbuffer size * @param runtime_directory Directory of persistent configuration + * @param InitialContextLogLevel loglevel to be sent to context when those register with loglevel default, read from dlt.conf + * @param InitialContextTraceStatus tracestatus to be sent to context when those register with tracestatus default, read from dlt.conf + * @param ForceLLTS force default log-level * @param verbose if set to true verbose information is printed out. * @return negative value if there was an error */ -int dlt_daemon_init(DltDaemon *daemon,unsigned long RingbufferMinSize,unsigned long RingbufferMaxSize,unsigned long RingbufferStepSize,const char *runtime_directory,int verbose); +int dlt_daemon_init(DltDaemon *daemon,unsigned long RingbufferMinSize,unsigned long RingbufferMaxSize,unsigned long RingbufferStepSize,const char *runtime_directory,int InitialContextLogLevel, int InitialContextTraceStatus, int ForceLLTS, int verbose); /** * De-Initialise the dlt daemon structure * @param daemon pointer to dlt daemon structure @@ -363,9 +367,12 @@ void dlt_daemon_user_send_all_log_state(DltDaemon *daemon, int verbose); * @param daemon pointer to dlt daemon structure * @param filename name of file containing the runtime defaults for applications * @param filename1 name of file containing the runtime defaults for contexts + * @param InitialContextLogLevel loglevel to be sent to context when those register with loglevel default, read from dlt.conf + * @param InitialContextTraceStatus tracestatus to be sent to context when those register with tracestatus default, read from dlt.conf + * @param ForceLLTS force default log-level * @param verbose if set to true verbose information is printed out. */ -void dlt_daemon_control_reset_to_factory_default(DltDaemon *daemon,const char *filename, const char *filename1, int verbose); +void dlt_daemon_control_reset_to_factory_default(DltDaemon *daemon,const char *filename, const char *filename1, int InitialContextLogLevel, int InitialContextTraceStatus, int InitialEnforceLlTsStatus, int verbose); /** * Change the logging state of dlt daemon diff --git a/src/daemon/dlt_daemon_common_cfg.h b/src/daemon/dlt_daemon_common_cfg.h index d08a20e..5df87fa 100644 --- a/src/daemon/dlt_daemon_common_cfg.h +++ b/src/daemon/dlt_daemon_common_cfg.h @@ -91,11 +91,6 @@ /* Size of text buffer */ #define DLT_DAEMON_COMMON_TEXTBUFSIZE 255 -/* Initial log level */ -#define DLT_DAEMON_INITIAL_LOG_LEVEL DLT_LOG_INFO -/* Initial trace status */ -#define DLT_DAEMON_INITIAL_TRACE_STATUS DLT_TRACE_STATUS_OFF - /* Application ID used when the dlt daemon creates a control message */ #define DLT_DAEMON_CTRL_APID "DA1" /* Context ID used when the dlt daemon creates a control message */ |