Added dump log for connect fail 89/180689/2
authortaesub kim <taesub.kim@samsung.com>
Fri, 1 Jun 2018 06:41:04 +0000 (15:41 +0900)
committertaesub kim <taesub.kim@samsung.com>
Fri, 1 Jun 2018 06:59:52 +0000 (15:59 +0900)
Change-Id: If027e6a5ddfed1ecbcc9d663ecec2fb1711fc7c8
Signed-off-by: Taesub Kim <taesub.kim@samsung.com>
packaging/net-config.spec
resources/opt/etc/dump.d/module.d/network_dump.sh
resources/opt/etc/dump.d/module.d/network_log_dump.sh [new file with mode: 0755]
src/signal-handler.c

index a8b195d..099cd37 100755 (executable)
@@ -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
index cf46685..07e230a 100755 (executable)
@@ -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 (executable)
index 0000000..2f2e373
--- /dev/null
@@ -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} .
index 4fe67ad..d81db12 100755 (executable)
@@ -22,6 +22,7 @@
 #include <string.h>
 #include <vconf.h>
 #include <vconf-keys.h>
+#include <sys/wait.h>
 
 #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: