[][openwrt][mt7988][tops][refactor tops-tool and add logger suuport]
[Description]
Refactor tops-tool and add logger support
add menu config for tops-tool
move common code into common part
save log cmd will open log relayfs and save
its data(log) as file in the filesystem
log relayfs path :
/sys/kernel/debug/tops/log-mgmt0
/sys/kernel/debug/tops/log-offload0
log file path :
<LOG_DIR>/log-mgmt-<time>
<LOG_DIR>/log-offload-<time>
[Release-log]
N/A
Change-Id: I1c563efbb584540eeb1b78c2a438c0173c4cdbba
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/7988095
diff --git a/feed/app/tops-tool/src/dump.c b/feed/app/tops-tool/src/dump.c
index e037eff..4169f5a 100644
--- a/feed/app/tops-tool/src/dump.c
+++ b/feed/app/tops-tool/src/dump.c
@@ -19,24 +19,9 @@
#include <sys/types.h>
#include <sys/stat.h>
+#include "common.h"
#include "dump.h"
-static int time_to_str(time_t *time_sec, char *time_str, unsigned int time_str_size)
-{
- struct tm *ptm;
- int ret;
-
- ptm = gmtime(time_sec);
- if (!ptm)
- return -1;
-
- ret = strftime(time_str, time_str_size, "%Y%m%d%H%M%S", ptm);
- if (!ret)
- return -2;
-
- return 0;
-}
-
static int save_dump_data(char *dump_root_dir,
struct dump_data_header *dd_hdr,
char *dd)
@@ -54,7 +39,7 @@
dump_time_str, sizeof(dump_time_str));
if (ret < 0) {
fprintf(stderr,
- DUMP_LOG_FMT("time_to_str(%lu) fail(%d)\n"),
+ LOG_FMT("time_to_str(%lu) fail(%d)\n"),
dd_hdr->info.dump_time_sec, ret);
return ret;
}
@@ -72,7 +57,7 @@
ret = mkdir(dump_dir, 0775);
if (ret && errno != EEXIST) {
fprintf(stderr,
- DUMP_LOG_FMT("mkdir(%s) fail(%s)\n"),
+ LOG_FMT("mkdir(%s) fail(%s)\n"),
dump_dir, strerror(errno));
goto free_dump_dir;
}
@@ -94,7 +79,7 @@
fd = open(dump_file, O_WRONLY | O_CREAT, 0664);
if (fd < 0) {
fprintf(stderr,
- DUMP_LOG_FMT("open(%s) fail(%s)\n"),
+ LOG_FMT("open(%s) fail(%s)\n"),
dump_file, strerror(errno));
ret = fd;
goto free_dump_file;
@@ -104,7 +89,7 @@
ret = lseek(fd, 0, SEEK_SET);
if (ret < 0) {
fprintf(stderr,
- DUMP_LOG_FMT("lseek fail(%s)\n"),
+ LOG_FMT("lseek fail(%s)\n"),
strerror(errno));
goto close_dump_file;
}
@@ -115,7 +100,7 @@
ret = lseek(fd, dd_hdr->data_offset, SEEK_CUR);
if (ret < 0) {
fprintf(stderr,
- DUMP_LOG_FMT("lseek fail(%s)\n"),
+ LOG_FMT("lseek fail(%s)\n"),
strerror(errno));
goto close_dump_file;
}
@@ -126,14 +111,14 @@
ret = stat(dump_file, &st);
if (ret < 0) {
fprintf(stderr,
- DUMP_LOG_FMT("stat(%s) fail(%s)\n"),
+ LOG_FMT("stat(%s) fail(%s)\n"),
dump_file, strerror(errno));
goto close_dump_file;
}
if ((size_t)st.st_size != dump_file_size) {
fprintf(stderr,
- DUMP_LOG_FMT("file(%s) size %zu != %zu\n"),
+ LOG_FMT("file(%s) size %zu != %zu\n"),
dump_file, st.st_size, dump_file_size);
ret = -EINVAL;
goto close_dump_file;
@@ -179,77 +164,9 @@
return out_len;
}
-static int mkdir_p(char *path, mode_t mode)
+int tops_tool_save_dump_data(int argc, char *argv[])
{
- size_t path_len;
- char *cpy_path;
- char *cur_path;
- char *tmp_path;
- char *dir;
- int ret;
-
- path_len = strlen(path) + 1;
- if (path_len == 0)
- return -EINVAL;
-
- cpy_path = malloc(path_len);
- if (!cpy_path)
- return -ENOMEM;
- strncpy(cpy_path, path, path_len);
-
- cur_path = calloc(1, path_len);
- if (!cur_path) {
- ret = -ENOMEM;
- goto free_cpy_path;
- }
-
- tmp_path = malloc(path_len);
- if (!tmp_path) {
- ret = -ENOMEM;
- goto free_cur_path;
- }
-
- for (dir = strtok(cpy_path, "/");
- dir != NULL;
- dir = strtok(NULL, "/")) {
- /* keep current path */
- strncpy(tmp_path, cur_path, path_len);
-
- /* append directory in current path */
- ret = snprintf(cur_path, path_len, "%s/%s", tmp_path, dir);
- if (ret < 0) {
- fprintf(stderr,
- DUMP_LOG_FMT("append dir(%s) in cur_path(%s) fail(%d)\n"),
- dir, cur_path, ret);
- goto free_tmp_path;
- }
-
- ret = mkdir(cur_path, mode);
- if (ret && errno != EEXIST) {
- fprintf(stderr,
- DUMP_LOG_FMT("mkdir(%s) fail(%s)\n"),
- cur_path, strerror(errno));
- goto free_tmp_path;
- }
- }
-
- ret = 0;
-
-free_tmp_path:
- free(tmp_path);
-
-free_cur_path:
- free(cur_path);
-
-free_cpy_path:
- free(cpy_path);
-
- return ret;
-}
-
-int tops_save_dump_data(char *dump_root_dir)
-{
- struct stat st = { 0 };
+ char *dump_root_dir = argv[2];
int ret = 0;
int fd;
@@ -259,7 +176,7 @@
/* reserve 256 bytes for saving name of dump directory and dump file */
if (strlen(dump_root_dir) > (PATH_MAX - 256)) {
fprintf(stderr,
- DUMP_LOG_FMT("dump_root_dir(%s) length %zu > %u\n"),
+ LOG_FMT("dump_root_dir(%s) length %zu > %u\n"),
dump_root_dir, strlen(dump_root_dir), PATH_MAX - 256);
return -EINVAL;
}
@@ -267,7 +184,7 @@
ret = mkdir_p(dump_root_dir, 0775);
if (ret < 0) {
fprintf(stderr,
- DUMP_LOG_FMT("mkdir_p(%s) fail(%d)\n"),
+ LOG_FMT("mkdir_p(%s) fail(%d)\n"),
dump_root_dir, ret);
return ret;
}
@@ -275,7 +192,7 @@
fd = open(DUMP_DATA_PATH, O_RDONLY);
if (fd < 0) {
fprintf(stderr,
- DUMP_LOG_FMT("open(%s) fail(%s)\n"),
+ LOG_FMT("open(%s) fail(%s)\n"),
DUMP_DATA_PATH, strerror(errno));
return fd;
}
@@ -291,7 +208,7 @@
ret = poll(&pfd, 1, -1);
if (ret < 0) {
fprintf(stderr,
- DUMP_LOG_FMT("poll fail(%s)\n"),
+ LOG_FMT("poll fail(%s)\n"),
strerror(errno));
break;
}
@@ -299,7 +216,7 @@
ret = read_retry(fd, &dd_hdr, sizeof(struct dump_data_header));
if (ret < 0) {
fprintf(stderr,
- DUMP_LOG_FMT("read dd_hdr fail(%d)\n"), ret);
+ LOG_FMT("read dd_hdr fail(%d)\n"), ret);
break;
}
@@ -308,13 +225,13 @@
if (dd_hdr.data_len == 0) {
fprintf(stderr,
- DUMP_LOG_FMT("read empty data\n"));
+ LOG_FMT("read empty data\n"));
continue;
}
if (dd_hdr.data_len > sizeof(dd)) {
fprintf(stderr,
- DUMP_LOG_FMT("data length %u > %lu\n"),
+ LOG_FMT("data length %u > %lu\n"),
dd_hdr.data_len, sizeof(dd));
ret = -ENOMEM;
break;
@@ -323,13 +240,13 @@
ret = read_retry(fd, dd, dd_hdr.data_len);
if (ret < 0) {
fprintf(stderr,
- DUMP_LOG_FMT("read dd fail(%d)\n"), ret);
+ LOG_FMT("read dd fail(%d)\n"), ret);
break;
}
if ((uint32_t)ret != dd_hdr.data_len) {
fprintf(stderr,
- DUMP_LOG_FMT("read dd length %u != %u\n"),
+ LOG_FMT("read dd length %u != %u\n"),
(uint32_t)ret, dd_hdr.data_len);
ret = -EAGAIN;
break;
@@ -338,7 +255,7 @@
ret = save_dump_data(dump_root_dir, &dd_hdr, dd);
if (ret) {
fprintf(stderr,
- DUMP_LOG_FMT("save_dump_data(%s) fail(%d)\n"),
+ LOG_FMT("save_dump_data(%s) fail(%d)\n"),
dump_root_dir, ret);
break;
}