[OpenWrt-Devel] [PATCH 2/2] [ubox] logd: add ubus reload method
Dan Bugnar
danutbug at gmail.com
Wed Apr 27 10:04:53 EDT 2016
From: Dan Bugnar <danutbug at gmail.com>
Add logd link to uci library, to read the system config file and get the buffer size.
Remove the -S option support and use just the option from the config file.
Signed-off-by: Dan Bugnar <danutbug at gmail.com>
---
CMakeLists.txt | 2 +-
log/logd.c | 58 ++++++++++++++++++++++++++++++++++++++++++++--------------
log/syslog.c | 8 +-------
log/syslog.h | 2 +-
4 files changed, 47 insertions(+), 23 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 834b5b6..b635c4a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,7 +42,7 @@ INSTALL(TARGETS validate_data
)
ADD_EXECUTABLE(logd log/logd.c log/syslog.c)
-TARGET_LINK_LIBRARIES(logd ubox ubus)
+TARGET_LINK_LIBRARIES(logd ubox ubus uci)
INSTALL(TARGETS logd
RUNTIME DESTINATION sbin
)
diff --git a/log/logd.c b/log/logd.c
index 27d3cac..5b7659e 100644
--- a/log/logd.c
+++ b/log/logd.c
@@ -23,9 +23,14 @@
#include <libubox/list.h>
#include <libubox/ustream.h>
#include <libubus.h>
+#include <uci.h>
#include "syslog.h"
+#define SYSTEM_CONFIG_PATH "/etc/config"
+#define SYSTEM_CONFIG "system"
+#define LOG_DEFAULT_SIZE 16
+
int debug = 0;
static struct blob_buf b;
static struct ubus_auto_conn conn;
@@ -124,9 +129,46 @@ write_log(struct ubus_context *ctx, struct ubus_object *obj,
return 0;
}
+static void
+config_reload()
+{
+ struct uci_context *ctx;
+ struct uci_package *p;
+ struct uci_element *e;
+ int size = LOG_DEFAULT_SIZE;
+
+ ctx = uci_alloc_context();
+ if (!ctx) {
+ fprintf(stderr, "Could not allocate memory for config\n");
+ exit(-1);
+ }
+ ctx->flags &= ~UCI_FLAG_STRICT;
+ uci_set_confdir(ctx, SYSTEM_CONFIG_PATH);
+ if (uci_load(ctx, SYSTEM_CONFIG, &p) == 0){
+ uci_foreach_element(&p->sections, e){
+ struct uci_section *s = uci_to_section(e);
+ if (strcmp(s->type, "system") == 0){
+ size = atoi(uci_lookup_option_string(ctx, s, "log_buffer_size"));
+ break;
+ }
+ }
+ }
+ uci_free_context(ctx);
+ log_buffer_reinit(size * 1024);
+}
+
+static int
+reload_log(struct ubus_context *ctx, struct ubus_object *obj,
+ struct ubus_request_data *req, const char *method,
+ struct blob_attr *msg)
+{
+ config_reload();
+ return 0;
+}
static const struct ubus_method log_methods[] = {
{ .name = "read", .handler = read_log, .policy = &read_policy, .n_policy = 1 },
{ .name = "write", .handler = write_log, .policy = &write_policy, .n_policy = 1 },
+ { .name = "reload", .handler = reload_log },
};
static struct ubus_object_type log_object_type =
@@ -176,22 +218,10 @@ ubus_connect_handler(struct ubus_context *ctx)
int
main(int argc, char **argv)
{
- int ch, log_size = 16;
-
signal(SIGPIPE, SIG_IGN);
- while ((ch = getopt(argc, argv, "S:")) != -1) {
- switch (ch) {
- case 'S':
- log_size = atoi(optarg);
- if (log_size < 1)
- log_size = 16;
- break;
- }
- }
- log_size *= 1024;
-
uloop_init();
- log_init(log_size);
+ config_reload();
+ log_init();
conn.cb = ubus_connect_handler;
ubus_auto_connect(&conn);
uloop_run();
diff --git a/log/syslog.c b/log/syslog.c
index d6cb868..683eeb8 100644
--- a/log/syslog.c
+++ b/log/syslog.c
@@ -270,16 +270,10 @@ log_buffer_reinit(int size)
}
void
-log_init(int _log_size)
+log_init()
{
regcomp(&pat_prio, "^<([0-9]*)>(.*)", REG_EXTENDED);
regcomp(&pat_tstamp, "^\[[ 0]*([0-9]*).([0-9]*)] (.*)", REG_EXTENDED);
-
- if (log_buffer_reinit(_log_size)) {
- fprintf(stderr, "Failed to allocate log memory\n");
- exit(-1);
- }
-
syslog_open();
klog_open();
openlog("sysinit", LOG_CONS, LOG_DAEMON);
diff --git a/log/syslog.h b/log/syslog.h
index ed5a41b..fe815b9 100644
--- a/log/syslog.h
+++ b/log/syslog.h
@@ -30,7 +30,7 @@ struct log_head {
char data[];
};
-void log_init(int log_size);
+void log_init();
void log_shutdown(void);
typedef void (*log_list_cb)(struct log_head *h);
--
2.7.1
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list