From 975ab83c6846ff52a5f23e8207feed364a6e3e03 Mon Sep 17 00:00:00 2001 From: taesub kim Date: Fri, 1 Jun 2018 15:41:04 +0900 Subject: [PATCH] Added dump log for connect fail Change-Id: If027e6a5ddfed1ecbcc9d663ecec2fb1711fc7c8 Signed-off-by: Taesub Kim --- packaging/net-config.spec | 8 +- .../opt/etc/dump.d/module.d/network_dump.sh | 2 +- .../etc/dump.d/module.d/network_log_dump.sh | 19 ++++ src/signal-handler.c | 96 ++++++++++++++++--- 4 files changed, 110 insertions(+), 15 deletions(-) create mode 100755 resources/opt/etc/dump.d/module.d/network_log_dump.sh diff --git a/packaging/net-config.spec b/packaging/net-config.spec index a8b195d..099cd37 100755 --- a/packaging/net-config.spec +++ b/packaging/net-config.spec @@ -155,8 +155,10 @@ cp resources/etc/dbus-1/system.d/net-config.conf %{buildroot}%{_sysconfdir}/dbus #log dump mkdir -p %{buildroot}/opt/etc/dump.d/module.d/ cp resources/opt/etc/dump.d/module.d/network_dump.sh %{buildroot}/opt/etc/dump.d/module.d/network_dump.sh +cp resources/opt/etc/dump.d/module.d/network_log_dump.sh %{buildroot}/opt/etc/dump.d/module.d/network_log_dump.sh mkdir -p %{buildroot}/opt/var/lib/net-config/ cp resources/opt/etc/dump.d/module.d/network_dump.sh %{buildroot}/opt/var/lib/net-config/network_dump.sh +cp resources/opt/etc/dump.d/module.d/network_log_dump.sh %{buildroot}/opt/var/lib/net-config/network_log_dump.sh #softreset scripts mkdir -p %{buildroot}/usr/system/RestoreDir/softreset @@ -208,8 +210,10 @@ ln -sf %{_unitdir}/net-config.service %{_sysconfdir}/systemd/default-extra-depen %attr(644,root,root) %{_unitdir}/multi-user.target.wants/net-config.service %endif %license LICENSE -%attr(500,root,root) /opt/etc/dump.d/module.d/network_dump.sh -%attr(500,network_fw,network_fw) /opt/var/lib/net-config/network_dump.sh +%attr(750,network_fw,network_fw) /opt/etc/dump.d/module.d/network_dump.sh +%attr(750,network_fw,network_fw) /opt/var/lib/net-config/network_dump.sh +%attr(750,network_fw,network_fw) /opt/etc/dump.d/module.d/network_log_dump.sh +%attr(750,network_fw,network_fw) /opt/var/lib/net-config/network_log_dump.sh #### tv profile #### %post profile_tv diff --git a/resources/opt/etc/dump.d/module.d/network_dump.sh b/resources/opt/etc/dump.d/module.d/network_dump.sh index cf46685..07e230a 100755 --- a/resources/opt/etc/dump.d/module.d/network_dump.sh +++ b/resources/opt/etc/dump.d/module.d/network_dump.sh @@ -6,7 +6,7 @@ PATH=/bin:/usr/bin:/sbin:/usr/sbin #-------------------------------------- # not allow to use relative path -if [[ $1 == "/"* ]]; then +if [[ $0 == "/"* ]]; then echo "Absolute path" else echo "Relative path" diff --git a/resources/opt/etc/dump.d/module.d/network_log_dump.sh b/resources/opt/etc/dump.d/module.d/network_log_dump.sh new file mode 100755 index 0000000..2f2e373 --- /dev/null +++ b/resources/opt/etc/dump.d/module.d/network_log_dump.sh @@ -0,0 +1,19 @@ +#!/bin/sh +PATH=/bin:/usr/bin:/sbin:/usr/sbin + +#-------------------------------------- +# network log dump +#-------------------------------------- + +# not allow to use relative path +if [[ $0 == "/"* ]]; then + echo "Absolute path" +else + echo "Relative path" + exit -1 +fi + +export DISPLAY=:0.0 +NETWORK_DATA_DIR=/opt/usr/data/network + +/usr/bin/tar -czf ${NETWORK_DATA_DIR}/network_file_log.tar.gz -C ${NETWORK_DATA_DIR} . diff --git a/src/signal-handler.c b/src/signal-handler.c index 4fe67ad..d81db12 100755 --- a/src/signal-handler.c +++ b/src/signal-handler.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "log.h" #include "util.h" @@ -41,6 +42,8 @@ #include "ip-conflict-detect.h" #if defined TIZEN_DEBUG_ENABLE #include "network-dump.h" +#define NETWORK_LOG_DUMP_SCRIPT "/opt/var/lib/net-config/network_log_dump.sh" +#define MAX_SIZE_ERROR_BUFFER 256 #endif #define DBUS_SERVICE_DBUS "org.freedesktop.DBus" @@ -191,6 +194,71 @@ static void __netconfig_extract_ipv6_signal_data(GVariant *dictionary, } } +#if defined TIZEN_DEBUG_ENABLE +static int __netconfig_handle_execute_file(const char *file_path, + char *const args[], char *const envs[]) +{ + pid_t pid = 0; + int status = 0; + int rv = 0; + errno = 0; + register unsigned int index = 0; + char error_buf[MAX_SIZE_ERROR_BUFFER] = {0, }; + + while (args[index] != NULL) { + DBG("%s", args[index]); + index++; + } + + if (!(pid = fork())) { + DBG("pid(%d), ppid (%d)", getpid(), getppid()); + DBG("Inside child, exec (%s) command", file_path); + + errno = 0; + if (execve(file_path, args, envs) == -1) { + strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER); + DBG("Fail to execute command (%s)", error_buf); + exit(1); + } + } else if (pid > 0) { + if (waitpid(pid, &status, 0) == -1) + DBG("wait pid (%u) status (%d)", pid, status); + + if (WIFEXITED(status)) { + rv = WEXITSTATUS(status); + DBG("exited, status=%d", rv); + } else if (WIFSIGNALED(status)) { + DBG("killed by signal %d", WTERMSIG(status)); + } else if (WIFSTOPPED(status)) { + DBG("stopped by signal %d", WSTOPSIG(status)); + } else if (WIFCONTINUED(status)) { + DBG("continued"); + } + + return rv; + } + + strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER); + DBG("failed to fork(%s)", error_buf); + return -EIO; +} + +static int _start_dump() +{ + int rv = 0; + gchar *path = NETWORK_LOG_DUMP_SCRIPT; + char *const args[] = { NETWORK_LOG_DUMP_SCRIPT, NULL }; + char *const envs[] = { NULL }; + + rv = __netconfig_handle_execute_file(path, args, envs); + if (rv < 0) { + ERR("Fail to execute network log dump shell"); + return -EIO; + } + return 0; +} +#endif + static void _technology_signal_cb(GDBusConnection *conn, const gchar *name, const gchar *path, const gchar *interface, const gchar *sig, GVariant *param, gpointer user_data) @@ -255,20 +323,20 @@ static void _service_signal_cb(GDBusConnection *conn, if (g_strcmp0(sigvalue, "State") == 0) { g_variant_get(variant, "s", &property); - DBG("[%s] %s", property, path); - if (netconfig_is_wifi_profile(path) || netconfig_is_ethernet_profile(path)) { - if (g_strcmp0(property, "ready") == 0) { - for (idx = 0; idx < MAX_SOCKET_OPEN_RETRY; idx++) { - sd = start_ip_conflict_mon(); - if (sd != NULL) - break; + DBG("[%s] %s", property, path); + if (netconfig_is_wifi_profile(path) || netconfig_is_ethernet_profile(path)) { + if (g_strcmp0(property, "ready") == 0) { + for (idx = 0; idx < MAX_SOCKET_OPEN_RETRY; idx++) { + sd = start_ip_conflict_mon(); + if (sd != NULL) + break; + } + } else if (g_strcmp0(property, "online") == 0) { + // do nothing + } else { + stop_ip_conflict_mon(); } - } else if (g_strcmp0(property, "online") == 0) { - // do nothing - } else { - stop_ip_conflict_mon(); } - } if (netconfig_is_wifi_profile(path) == TRUE) { int wifi_state = 0; @@ -453,6 +521,10 @@ static void _service_signal_cb(GDBusConnection *conn, } else if (g_strcmp0(sigvalue, "Error") == 0) { g_variant_get(variant, "s", &property); INFO("[%s] Property : %s", sigvalue, property); +#if defined TIZEN_DEBUG_ENABLE + if (g_strcmp0(property, "connect-failed") == 0 || g_strcmp0(property, "invalid-key") == 0 || g_strcmp0(property, "auth-failed") == 0) + _start_dump(); +#endif g_free(property); } done: -- 2.34.1