summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDinh Cong Toan <toan.dinhcong@vn.bosch.com>2021-03-19 14:42:09 +0700
committerSaya Sugiura <39760799+ssugiura@users.noreply.github.com>2021-06-30 10:54:59 +0900
commit12b9aefc50a9c6a04c6f64dbb31e2294df9b56ba (patch)
treef6df64410dcbe25f296fac8498696b69dc485e51
parent57d981f9d765286a85e682f7bee0769d7349e7aa (diff)
downloadDLT-daemon-12b9aefc50a9c6a04c6f64dbb31e2294df9b56ba.tar.gz
Update dlt-system-syslog with IPv6
Currently, when config IPv6 interface for dlt component, using syslog in dlt-system can not get data from socket. By changing struct type and interface configuration correctly, dlt-syslog can receive log from syslog properly. Signed-off-by: Dinh Cong Toan <toan.dinhcong@vn.bosch.com>
-rw-r--r--src/system/dlt-system-syslog.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/system/dlt-system-syslog.c b/src/system/dlt-system-syslog.c
index 0e2e2c4..7808613 100644
--- a/src/system/dlt-system-syslog.c
+++ b/src/system/dlt-system-syslog.c
@@ -66,11 +66,14 @@ int init_socket(SyslogOptions opts)
DLT_INT(opts.Port));
int sock = -1;
- struct sockaddr_in syslog_addr;
#ifdef DLT_USE_IPv6
+ /* declare struct for IPv6 socket address*/
+ struct sockaddr_in6 syslog_addr;
sock = socket(AF_INET6, SOCK_DGRAM, 0);
#else
+ /* declare struct for IPv4 socket address*/
+ struct sockaddr_in syslog_addr;
sock = socket(AF_INET, SOCK_DGRAM, 0);
#endif
@@ -80,19 +83,25 @@ int init_socket(SyslogOptions opts)
return -1;
}
+ /* initialize struct syslog_addr */
+ memset(&syslog_addr, 0, sizeof(syslog_addr));
#ifdef DLT_USE_IPv6
- syslog_addr.sin_family = AF_INET6;
+ syslog_addr.sin6_family = AF_INET6;
+ syslog_addr.sin6_addr = in6addr_any;
+ syslog_addr.sin6_port = htons(opts.Port);
#else
syslog_addr.sin_family = AF_INET;
-#endif
- syslog_addr.sin_port = htons(opts.Port);
syslog_addr.sin_addr.s_addr = INADDR_ANY;
+ syslog_addr.sin_port = htons(opts.Port);
memset(&(syslog_addr.sin_zero), 0, 8);
+#endif
+ /* bind the socket address to local interface */
if (bind(sock, (struct sockaddr *)&syslog_addr,
- sizeof(struct sockaddr)) == -1) {
+ sizeof(syslog_addr)) == -1) {
DLT_LOG(syslogContext, DLT_LOG_FATAL,
- DLT_STRING("Unable to bind socket for SYSLOG."));
+ DLT_STRING("Unable to bind socket for SYSLOG, error description: "),
+ DLT_STRING(strerror(errno)));
close(sock);
return -1;
}