2019-07-29 10:20:17 +00:00
|
|
|
#include <errno.h>
|
|
|
|
#include <dirent.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
2019-07-26 03:53:33 +00:00
|
|
|
#include "log_console.h"
|
2019-08-02 09:58:02 +00:00
|
|
|
#include "log_types.h"
|
2019-07-26 03:53:33 +00:00
|
|
|
#include "log_common.h"
|
2019-08-12 08:56:52 +00:00
|
|
|
#include "rpc_conn.h"
|
2019-08-15 06:04:17 +00:00
|
|
|
#include "sev_sched.h"
|
2019-07-26 03:53:33 +00:00
|
|
|
|
|
|
|
#define LOG_CONF_COSOLE_FILE_NAME "log-console.conf"
|
|
|
|
|
|
|
|
#define LOG_REDIRECT_CONSOLE "/dev/console"
|
|
|
|
|
2019-07-29 10:20:17 +00:00
|
|
|
static int write_console_content(FILE *fp, const u8 level, const char *filter_mod, void *arg)
|
|
|
|
{
|
|
|
|
DIR *dir;
|
|
|
|
|
|
|
|
if ((dir = opendir(LOG_DEV_DIR)) == NULL) {
|
2019-08-12 08:56:52 +00:00
|
|
|
ULOG_ERR(g_log, "Open dir:[%s] is failure:%d", LOG_DEV_DIR, strerror(errno));
|
2019-08-01 08:44:18 +00:00
|
|
|
return -1;
|
2019-07-29 10:20:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
struct dirent *ptr;
|
|
|
|
char path[MAX_PATH_SZ];
|
|
|
|
while ((ptr = readdir(dir)) != NULL) {
|
|
|
|
if ((strcmp(ptr->d_name, ".") == 0)
|
|
|
|
|| (strcmp(ptr->d_name, "..") == 0)
|
|
|
|
|| (ptr->d_type == DT_DIR)) { ///current dir OR parrent dir
|
2019-08-12 08:56:52 +00:00
|
|
|
ULOG_DEBUG(g_log,"The file:[%s] or directory jump over", ptr->d_name);
|
2019-07-29 10:20:17 +00:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((strstr(ptr->d_name, "ttyS") == NULL)) {
|
2019-08-12 08:56:52 +00:00
|
|
|
ULOG_DEBUG(g_log,"The file:[%s] isn't redirected", ptr->d_name);
|
2019-07-29 10:20:17 +00:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
ULOG_DEBUG(g_log, "ttyS name:%s", ptr->d_name);
|
|
|
|
if (snprintf(path, sizeof(path), "%s%s", LOG_DEV_DIR, ptr->d_name) < 0) {
|
|
|
|
ULOG_ERR(g_log, "Setting %s of log console is failure", ptr->d_name);
|
2019-08-01 08:44:18 +00:00
|
|
|
return -1;
|
2019-07-29 10:20:17 +00:00
|
|
|
}
|
|
|
|
if (write_conf_content_authorizing(fp, level, filter_mod, path) != 0) {
|
|
|
|
ULOG_ERR(g_log, "Writing tty[module:%s] of log is failure", filter_mod);
|
2019-08-01 08:44:18 +00:00
|
|
|
return -1;
|
2019-07-29 10:20:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2019-07-26 03:53:33 +00:00
|
|
|
static int config_log_console(const log_console_t *conf)
|
2019-08-12 08:56:52 +00:00
|
|
|
{
|
2019-08-13 08:25:43 +00:00
|
|
|
int ret = -1;
|
2019-08-12 08:56:52 +00:00
|
|
|
|
|
|
|
switch (conf->on)
|
|
|
|
{
|
2019-08-13 08:25:43 +00:00
|
|
|
case LOG_OFF:
|
2019-08-14 09:17:18 +00:00
|
|
|
ret = log_off_with_file(LOG_CONF_PATH, LOG_CONF_COSOLE_FILE_NAME);
|
2019-08-12 08:56:52 +00:00
|
|
|
break;
|
|
|
|
case LOG_ON:
|
2019-08-12 10:12:53 +00:00
|
|
|
if (log_conf(conf->level, LOG_CONF_PATH, LOG_CONF_COSOLE_FILE_NAME, conf->module,
|
2019-08-12 08:56:52 +00:00
|
|
|
write_console_content, NULL) != 0) {
|
|
|
|
ULOG_ERR(g_log, "Log's console configure which is written is failure");
|
|
|
|
ret = -1;
|
2019-08-13 08:25:43 +00:00
|
|
|
} else {
|
|
|
|
ret = 0;
|
|
|
|
}
|
2019-08-12 08:56:52 +00:00
|
|
|
break;
|
|
|
|
default:
|
2019-08-13 08:25:43 +00:00
|
|
|
ULOG_WARNING(g_log, "Unknown on value:%u", conf->on);
|
2019-08-12 08:56:52 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2019-08-12 10:12:53 +00:00
|
|
|
return ret;
|
2019-07-26 03:53:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void rpc_conf_log_console(rpc_conn *conn, pointer input, int input_len, pointer data)
|
|
|
|
{
|
|
|
|
u32 need_len = sizeof(log_console_t);
|
|
|
|
if (input_len < need_len) {
|
|
|
|
ULOG_WARNING(g_log,
|
|
|
|
"The input paramter of rpc log console is needed length of %u, but the actual length is %u",
|
|
|
|
need_len, input_len);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2019-08-12 08:56:52 +00:00
|
|
|
if (config_log_console((const log_console_t *)input) != 0) {
|
2019-08-13 08:25:43 +00:00
|
|
|
ULOG_ERR(g_log, "Configuring console of log is faiure");
|
2019-08-12 08:56:52 +00:00
|
|
|
rpc_return_error(conn, RET_ERR, "Configuring console of log is faiure");
|
2019-08-13 10:22:20 +00:00
|
|
|
return;
|
2019-08-12 08:56:52 +00:00
|
|
|
}
|
2019-08-15 06:04:17 +00:00
|
|
|
log_sev_restart();
|
2019-08-12 08:56:52 +00:00
|
|
|
rpc_return_null(conn);
|
2019-07-26 03:53:33 +00:00
|
|
|
}
|
|
|
|
|