diff options
author | Dinh Cong Toan <toan.dinhcong@vn.bosch.com> | 2021-03-19 14:42:09 +0700 |
---|---|---|
committer | Saya Sugiura <39760799+ssugiura@users.noreply.github.com> | 2021-06-30 10:54:59 +0900 |
commit | 12b9aefc50a9c6a04c6f64dbb31e2294df9b56ba (patch) | |
tree | f6df64410dcbe25f296fac8498696b69dc485e51 /src/system | |
parent | 57d981f9d765286a85e682f7bee0769d7349e7aa (diff) | |
download | DLT-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>
Diffstat (limited to 'src/system')
-rw-r--r-- | src/system/dlt-system-syslog.c | 21 |
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; } |