summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/dlt/dlt_common.h12
-rw-r--r--src/daemon/dlt-daemon.c121
-rw-r--r--src/daemon/dlt-daemon.h1
-rw-r--r--src/daemon/dlt.conf6
-rw-r--r--src/daemon/dlt_daemon_socket.c92
-rw-r--r--src/daemon/dlt_daemon_socket.h2
6 files changed, 70 insertions, 164 deletions
diff --git a/include/dlt/dlt_common.h b/include/dlt/dlt_common.h
index 06f91bf..94177e3 100644
--- a/include/dlt/dlt_common.h
+++ b/include/dlt/dlt_common.h
@@ -73,7 +73,6 @@
\{
*/
-# include <netinet/in.h>
# include <stdio.h>
# ifdef __linux__
# include <linux/limits.h>
@@ -811,17 +810,6 @@ typedef struct
int size;
} DltBufferBlockHead;
-# ifdef DLT_USE_IPv6
-# define DLT_IP_SIZE (INET6_ADDRSTRLEN)
-# else
-# define DLT_IP_SIZE (INET_ADDRSTRLEN)
-# endif
-typedef struct DltBindAddress
-{
- char ip[DLT_IP_SIZE];
- struct DltBindAddress *next;
-} DltBindAddress_t;
-
# define DLT_MESSAGE_ERROR_OK 0
# define DLT_MESSAGE_ERROR_UNKNOWN -1
# define DLT_MESSAGE_ERROR_SIZE -2
diff --git a/src/daemon/dlt-daemon.c b/src/daemon/dlt-daemon.c
index c305887..3c80434 100644
--- a/src/daemon/dlt-daemon.c
+++ b/src/daemon/dlt-daemon.c
@@ -186,9 +186,8 @@ int option_handling(DltDaemonLocal *daemon_local, int argc, char *argv[])
fprintf (stderr, "Invalid option, this should never occur!\n");
return -1;
}
- }
+ } /* switch() */
- /* switch() */
#ifndef DLT_USE_UNIX_SOCKET_IPC
snprintf(daemon_local->flags.userPipesDir, DLT_PATH_MAX,
@@ -265,7 +264,6 @@ int option_file_parser(DltDaemonLocal *daemon_local)
daemon_local->flags.contextLogLevel = DLT_LOG_INFO;
daemon_local->flags.contextTraceStatus = DLT_TRACE_STATUS_OFF;
daemon_local->flags.enforceContextLLAndTS = 0; /* default is off */
- daemon_local->flags.ipNodes = NULL;
/* open configuration file */
if (daemon_local->flags.cvalue[0])
@@ -573,50 +571,6 @@ int option_file_parser(DltDaemonLocal *daemon_local)
strncpy(daemon_local->flags.daemonFifoGroup, value, NAME_MAX);
daemon_local->flags.daemonFifoGroup[NAME_MAX] = 0;
}
- else if (strcmp(token, "BindAddress") == 0)
- {
- DltBindAddress_t *newNode = NULL;
- DltBindAddress_t *temp = NULL;
-
- char *tok = strtok(value, ",;");
-
- if (tok != NULL) {
- daemon_local->flags.ipNodes = calloc(1, sizeof(DltBindAddress_t));
-
- if (daemon_local->flags.ipNodes == NULL) {
- dlt_vlog(LOG_ERR, "Could not allocate for IP list\n");
- return -1;
- }
- else {
- strncpy(daemon_local->flags.ipNodes->ip,
- tok,
- sizeof(daemon_local->flags.ipNodes->ip) - 1);
- daemon_local->flags.ipNodes->next = NULL;
- temp = daemon_local->flags.ipNodes;
-
- tok = strtok(NULL, ",;");
-
- while (tok != NULL) {
- newNode = calloc(1, sizeof(DltBindAddress_t));
-
- if (newNode == NULL) {
- dlt_vlog(LOG_ERR, "Could not allocate for IP list\n");
- return -1;
- }
- else {
- strncpy(newNode->ip, tok, sizeof(newNode->ip) - 1);
- }
-
- temp->next = newNode;
- temp = temp->next;
- tok = strtok(NULL, ",;");
- }
- }
- }
- else {
- dlt_vlog(LOG_WARNING, "BindAddress option is empty\n");
- }
- }
else {
fprintf(stderr, "Unknown option: %s=%s\n", token, value);
}
@@ -759,7 +713,7 @@ int main(int argc, char *argv[])
/* --- Daemon init phase 2 end --- */
- if (daemon_local.flags.offlineLogstorageDirPath[0])
+ if (daemon_local.flags.offlineLogstorageDirPath[0]) {
if (dlt_daemon_logstorage_setup_internal_storage(
&daemon,
&daemon_local,
@@ -767,6 +721,7 @@ int main(int argc, char *argv[])
daemon_local.flags.vflag) == -1)
dlt_log(LOG_INFO,
"Setting up internal offline log storage failed!\n");
+ }
/* create fd for watchdog */
#ifdef DLT_SYSTEMD_WATCHDOG_ENABLE
@@ -1162,7 +1117,6 @@ int dlt_daemon_local_connection_init(DltDaemon *daemon,
{
int fd = -1;
int mask = 0;
- DltBindAddress_t *head = daemon_local->flags.ipNodes;
PRINT_FUNCTION_VERBOSE(verbose);
@@ -1206,43 +1160,19 @@ int dlt_daemon_local_connection_init(DltDaemon *daemon,
/* create and open socket to receive incoming connections from client */
daemon_local->client_connections = 0;
- if (head == NULL) { /* no IP set in BindAddress option, will use "0.0.0.0" as default */
-
- if (dlt_daemon_socket_open(&fd, daemon_local->flags.port, "0.0.0.0") == DLT_RETURN_OK) {
- if (dlt_connection_create(daemon_local,
- &daemon_local->pEvent,
- fd,
- POLLIN,
- DLT_CONNECTION_CLIENT_CONNECT)) {
- dlt_log(LOG_ERR, "Could not initialize main socket.\n");
- return DLT_RETURN_ERROR;
- }
- }
- else {
+ if (dlt_daemon_socket_open(&fd, daemon_local->flags.port) == DLT_RETURN_OK) {
+ if (dlt_connection_create(daemon_local,
+ &daemon_local->pEvent,
+ fd,
+ POLLIN,
+ DLT_CONNECTION_CLIENT_CONNECT)) {
dlt_log(LOG_ERR, "Could not initialize main socket.\n");
return DLT_RETURN_ERROR;
}
}
else {
- while (head != NULL) { /* open socket for each IP in the bindAddress list */
-
- if (dlt_daemon_socket_open(&fd, daemon_local->flags.port, head->ip) == DLT_RETURN_OK) {
- if (dlt_connection_create(daemon_local,
- &daemon_local->pEvent,
- fd,
- POLLIN,
- DLT_CONNECTION_CLIENT_CONNECT)) {
- dlt_log(LOG_ERR, "Could not initialize main socket.\n");
- return DLT_RETURN_ERROR;
- }
- }
- else {
- dlt_log(LOG_ERR, "Could not initialize main socket.\n");
- return DLT_RETURN_ERROR;
- }
-
- head = head->next;
- }
+ dlt_log(LOG_ERR, "Could not initialize main socket.\n");
+ return DLT_RETURN_ERROR;
}
/* create and open unix socket to receive incoming connections from
@@ -1399,8 +1329,6 @@ void dlt_daemon_local_cleanup(DltDaemon *daemon, DltDaemonLocal *daemon_local, i
unlink(daemon_local->flags.ctrlSockPath);
- /* free IP list */
- free(daemon_local->flags.ipNodes);
}
void dlt_daemon_exit_trigger()
@@ -1588,15 +1516,17 @@ int dlt_daemon_log_internal(DltDaemon *daemon, DltDaemonLocal *daemon_local, cha
}
/* look if TCP connection to client is available */
- if ((daemon->mode == DLT_USER_MODE_EXTERNAL) || (daemon->mode == DLT_USER_MODE_BOTH))
+ if ((daemon->mode == DLT_USER_MODE_EXTERNAL) || (daemon->mode == DLT_USER_MODE_BOTH)) {
if ((ret =
dlt_daemon_client_send(DLT_DAEMON_SEND_TO_ALL, daemon, daemon_local, msg.headerbuffer,
sizeof(DltStorageHeader), msg.headerbuffer + sizeof(DltStorageHeader),
msg.headersize - sizeof(DltStorageHeader),
- msg.databuffer, msg.datasize, verbose)))
+ msg.databuffer, msg.datasize, verbose))) {
if (ret == DLT_DAEMON_ERROR_BUFFER_FULL)
daemon->overflow_counter++;
+ }
+ }
}
free(msg.databuffer);
@@ -2401,8 +2331,9 @@ int dlt_daemon_process_user_message_register_context(DltDaemon *daemon,
}
/* Set log level */
- if (userctxt.log_level == DLT_USER_LOG_LEVEL_NOT_SET)
+ if (userctxt.log_level == DLT_USER_LOG_LEVEL_NOT_SET) {
userctxt.log_level = DLT_LOG_DEFAULT;
+ }
else
/* Plausibility check */
if ((userctxt.log_level < DLT_LOG_DEFAULT) ||
@@ -2410,8 +2341,9 @@ int dlt_daemon_process_user_message_register_context(DltDaemon *daemon,
return -1;
/* Set trace status */
- if (userctxt.trace_status == DLT_USER_TRACE_STATUS_NOT_SET)
+ if (userctxt.trace_status == DLT_USER_TRACE_STATUS_NOT_SET) {
userctxt.trace_status = DLT_TRACE_STATUS_DEFAULT;
+ }
else
/* Plausibility check */
if ((userctxt.trace_status < DLT_TRACE_STATUS_DEFAULT) ||
@@ -2751,8 +2683,7 @@ int dlt_daemon_process_user_message_log(DltDaemon *daemon,
return DLT_DAEMON_ERROR_UNKNOWN;
}
}
- else if (dlt_set_storageheader(daemon_local->msg.storageheader, daemon->ecuid) == DLT_RETURN_ERROR)
- {
+ else if (dlt_set_storageheader(daemon_local->msg.storageheader, daemon->ecuid) == DLT_RETURN_ERROR) {
dlt_log(LOG_WARNING, "Can't set storage header in process user message log\n");
return DLT_DAEMON_ERROR_UNKNOWN;
}
@@ -2791,9 +2722,10 @@ int dlt_daemon_process_user_message_log(DltDaemon *daemon,
sizeof(DltStorageHeader),
daemon_local->msg.headerbuffer + sizeof(DltStorageHeader),
daemon_local->msg.headersize - sizeof(DltStorageHeader),
- daemon_local->msg.databuffer, daemon_local->msg.datasize, verbose)))
+ daemon_local->msg.databuffer, daemon_local->msg.datasize, verbose))) {
if (ret == DLT_DAEMON_ERROR_BUFFER_FULL)
daemon->overflow_counter++;
+ }
}
/* keep not read data in buffer */
@@ -2889,8 +2821,7 @@ int dlt_daemon_process_user_message_log_shm(DltDaemon *daemon,
return -1;
}
}
- else if (dlt_set_storageheader(daemon_local->msg.storageheader, daemon->ecuid) == -1)
- {
+ else if (dlt_set_storageheader(daemon_local->msg.storageheader, daemon->ecuid) == -1) {
dlt_log(LOG_WARNING, "Can't set storage header in process user message log\n");
dlt_shm_remove(&(daemon_local->dlt_shm));
return -1;
@@ -3186,14 +3117,14 @@ int create_timer_fd(DltDaemonLocal *daemon_local,
return -1;
}
- if ((period_sec <= 0) || (starts_in <= 0)) {
+ if (period_sec <= 0 || starts_in <= 0 ) {
/* timer not activated via the service file */
dlt_vlog(LOG_INFO, "<%s> not set: period=0\n", timer_name);
local_fd = -1;
}
-
#ifdef linux
- else {
+ else
+ {
struct itimerspec l_timer_spec;
local_fd = timerfd_create(CLOCK_MONOTONIC, 0);
diff --git a/src/daemon/dlt-daemon.h b/src/daemon/dlt-daemon.h
index 3d35335..39ccb91 100644
--- a/src/daemon/dlt-daemon.h
+++ b/src/daemon/dlt-daemon.h
@@ -132,7 +132,6 @@ typedef struct
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 */
- DltBindAddress_t *ipNodes; /**< (String: BindAddress) The daemon accepts connections only on this list of IP addresses */
} DltDaemonFlags;
/**
* The global parameters of a dlt daemon.
diff --git a/src/daemon/dlt.conf b/src/daemon/dlt.conf
index f9f02a1..5d61ade 100644
--- a/src/daemon/dlt.conf
+++ b/src/daemon/dlt.conf
@@ -183,9 +183,3 @@ ControlSocketPath = /tmp/dlt-ctrl.sock
# Maximal used memory for Logstorage Cache in KB (Default: 30000 KB)
# OfflineLogstorageCacheSize = 30000
-
-# Accept connections only on this list of IP addresses (Default: "0.0.0.0" INADDR_ANY)
-# The IP addresses must be separated with ',' or ';' but not with space character ' '
-# If DLT_USE_IPv6 flag is ON, then only IPv6 addresses are accepted
-# If DLT_USE_IPv6 flag is OFF, then only IPv4 addresses are accepted
-# BindAddress = 160.48.199.97;160.48.199.98
diff --git a/src/daemon/dlt_daemon_socket.c b/src/daemon/dlt_daemon_socket.c
index 2e4f9ea..6dfc264 100644
--- a/src/daemon/dlt_daemon_socket.c
+++ b/src/daemon/dlt_daemon_socket.c
@@ -57,72 +57,66 @@
#include "dlt_daemon_socket.h"
-int dlt_daemon_socket_open(int *sock, unsigned int servPort, char *ip)
+int dlt_daemon_socket_open(int *sock, unsigned int servPort)
{
int yes = 1;
- int ret_inet_pton = 0;
+ char portnumbuffer[33];
+ struct addrinfo hints, *servinfo, *p;
+ int rv;
+ memset(&hints, 0, sizeof hints);
#ifdef DLT_USE_IPv6
+ hints.ai_family = AF_INET6; /* force IPv6 - will still work with IPv4 */
+#else
+ hints.ai_family = AF_INET;
+#endif
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_flags = AI_PASSIVE; /* use my IP address */
- /* create socket */
- if ((*sock = socket(AF_INET6, SOCK_STREAM, 0)) == -1) {
- const int lastErrno = errno;
- dlt_vlog(LOG_WARNING, "dlt_daemon_socket_open: socket() error %d: %s\n", lastErrno, strerror(lastErrno));
+ snprintf(portnumbuffer, 32, "%d", servPort);
+
+ if ((rv = getaddrinfo(NULL, portnumbuffer, &hints, &servinfo)) != 0) {
+ dlt_vlog(LOG_WARNING, "getaddrinfo error %d: %s\n", rv, gai_strerror(rv));
+ return -1;
}
-#else
+ for (p = servinfo; p != NULL; p = p->ai_next) {
+ if ((*sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
+ const int lastErrno = errno;
+ dlt_vlog(LOG_WARNING, "dlt_daemon_socket_open: socket() error %d: %s\n", lastErrno, strerror(lastErrno));
+ continue;
+ }
- if ((*sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
- const int lastErrno = errno;
- dlt_vlog(LOG_WARNING, "dlt_daemon_socket_open: socket() error %d: %s\n", lastErrno, strerror(lastErrno));
- }
+ dlt_vlog(LOG_INFO, "%s: Socket created - socket_family:%i, socket_type:%i, protocol:%i\n",
+ __FUNCTION__, p->ai_family, p->ai_socktype, p->ai_protocol);
-#endif
+ if (setsockopt(*sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) {
+ const int lastErrno = errno;
+ dlt_vlog(LOG_WARNING,
+ "dlt_daemon_socket_open: Setsockopt error %d in dlt_daemon_local_connection_init: %s\n",
+ lastErrno,
+ strerror(lastErrno));
+ continue;
+ }
- dlt_vlog(LOG_INFO, "%s: Socket created\n", __FUNCTION__);
+ if (bind(*sock, p->ai_addr, p->ai_addrlen) == -1) {
+ const int lastErrno = errno; /*close() may set errno too */
+ close(*sock);
+ dlt_vlog(LOG_WARNING, "dlt_daemon_socket_open: bind() error %d: %s\n", lastErrno, strerror(lastErrno));
+ continue;
+ }
- /* setsockpt SO_REUSEADDR */
- if (setsockopt(*sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) {
- const int lastErrno = errno;
- dlt_vlog(LOG_WARNING,
- "dlt_daemon_socket_open: Setsockopt error %d in dlt_daemon_local_connection_init: %s\n",
- lastErrno,
- strerror(lastErrno));
+ break;
}
- /* bind */
-#ifdef DLT_USE_IPv6
- struct sockaddr_in6 forced_addr;
- memset(&forced_addr, 0, sizeof(forced_addr));
- forced_addr.sin6_family = AF_INET6;
- forced_addr.sin6_port = htons(servPort);
- ret_inet_pton = inet_pton(AF_INET6, ip, &forced_addr.sin6_addr);
-#else
- struct sockaddr_in forced_addr;
- memset(&forced_addr, 0, sizeof(forced_addr));
- forced_addr.sin_family = AF_INET;
- forced_addr.sin_port = htons(servPort);
- ret_inet_pton = inet_pton(AF_INET, ip, &forced_addr.sin_addr);
-#endif
-
- /* inet_pton returns 1 on success */
- if (ret_inet_pton != 1) {
- dlt_vlog(LOG_WARNING,
- "dlt_daemon_socket_open: inet_pton() error %d: %s. Cannot convert IP address: %s\n",
- errno,
- strerror(errno),
- ip);
+ if (p == NULL) {
+ dlt_log(LOG_WARNING, "failed to bind socket\n");
return -1;
}
- if (bind(*sock, (struct sockaddr *)&forced_addr, sizeof(forced_addr)) == -1) {
- const int lastErrno = errno; /*close() may set errno too */
- close(*sock);
- dlt_vlog(LOG_WARNING, "dlt_daemon_socket_open: bind() error %d: %s\n", lastErrno, strerror(lastErrno));
- }
+ freeaddrinfo(servinfo);
- /*listen */
- dlt_vlog(LOG_INFO, "%s: Listening on ip %s and port: %u\n", __FUNCTION__, ip, servPort);
+ dlt_vlog(LOG_INFO, "%s: Listening on port: %u\n", __func__, servPort);
/* get socket buffer size */
dlt_vlog(LOG_INFO, "dlt_daemon_socket_open: Socket send queue size: %d\n",
diff --git a/src/daemon/dlt_daemon_socket.h b/src/daemon/dlt_daemon_socket.h
index a180529..cca8306 100644
--- a/src/daemon/dlt_daemon_socket.h
+++ b/src/daemon/dlt_daemon_socket.h
@@ -60,7 +60,7 @@
#include "dlt_common.h"
#include "dlt_user.h"
-int dlt_daemon_socket_open(int *sock, unsigned int servPort, char *ip);
+int dlt_daemon_socket_open(int *sock, unsigned int servPort);
int dlt_daemon_socket_close(int sock);
int dlt_daemon_socket_get_send_qeue_max_size(int sock);