mirror of
https://dev.iopsys.eu/system/sysmngr.git
synced 2025-12-10 00:06:19 +01:00
Align with libbbfdm-api-v2 library
This commit is contained in:
parent
3470caa72a
commit
7d5bf8e075
9 changed files with 169 additions and 341 deletions
|
|
@ -4,7 +4,7 @@ OBJS = sysmngr.o deviceinfo.o utils.o
|
|||
|
||||
PROG_CFLAGS = $(CFLAGS) -Wall -Werror -fstrict-aliasing -g
|
||||
|
||||
PROG_LDFLAGS = $(LDFLAGS) -luci -lubus -lubox -lblobmsg_json -ljson-c -lssl -lcrypto -lbbfdm-ubus -lbbfdm-api
|
||||
PROG_LDFLAGS = $(LDFLAGS) -luci -lubus -lubox -lblobmsg_json -ljson-c -lssl -lcrypto -lbbfdm-ubus -lbbfdm-api -lbbfdm-api-v2
|
||||
FPIC := -fPIC
|
||||
|
||||
ifeq ($(SYSMNGR_VENDOR_CONFIG_FILE),y)
|
||||
|
|
|
|||
|
|
@ -132,10 +132,10 @@ static void _exec_reboot(const void *arg1, void *arg2)
|
|||
sleep(3);
|
||||
dmubus_call_set("rpc-sys", "reboot", UBUS_ARGS{0}, 0);
|
||||
sleep(5); // Wait for reboot to happen
|
||||
BBF_ERR("Reboot call failed with rpc-sys, trying again with system");
|
||||
BBFDM_ERR("Reboot call failed with rpc-sys, trying again with system");
|
||||
dmubus_call_set("system", "reboot", UBUS_ARGS{0}, 0);
|
||||
sleep(5); // Wait for reboot
|
||||
BBF_ERR("Reboot call failed!!!");
|
||||
BBFDM_ERR("Reboot call failed!!!");
|
||||
|
||||
// Set last_reboot_cause to empty because there is a problem in the system reboot
|
||||
dmuci_set_value(config_name, "reboots", "last_reboot_cause", "");
|
||||
|
|
|
|||
108
src/fwbank.c
108
src/fwbank.c
|
|
@ -80,7 +80,7 @@ static void _sysmngr_task_finish_callback(struct uloop_process *p, int ret)
|
|||
task = container_of(p, struct sysmngr_task_data, process);
|
||||
|
||||
if (task == NULL) {
|
||||
BBF_ERR("Failed to decode forked task");
|
||||
BBFDM_ERR("Failed to decode forked task");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -137,7 +137,7 @@ static void timeout_callback(struct uloop_timeout *t)
|
|||
sysmngr_task_data_t *task = container_of(t, sysmngr_task_data_t, timeoutcb);
|
||||
|
||||
if (task && task->process.pid > 0) {
|
||||
BBF_ERR("Task timed out. Killing process with PID %d\n", task->process.pid);
|
||||
BBFDM_ERR("Task timed out. Killing process with PID %d\n", task->process.pid);
|
||||
kill(task->process.pid, SIGKILL);
|
||||
}
|
||||
}
|
||||
|
|
@ -153,7 +153,7 @@ static int sysmngr_task_fork(sysmngr_task_callback_t finishcb, const char *comma
|
|||
}
|
||||
|
||||
if (pipe(task->pipe_fds) == -1) {
|
||||
BBF_ERR("pipe failed");
|
||||
BBFDM_ERR("pipe failed");
|
||||
FREE(task);
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -165,7 +165,7 @@ static int sysmngr_task_fork(sysmngr_task_callback_t finishcb, const char *comma
|
|||
|
||||
child = fork();
|
||||
if (child == -1) {
|
||||
BBF_ERR("Failed to fork a child for task");
|
||||
BBFDM_ERR("Failed to fork a child for task");
|
||||
FREE(task);
|
||||
return -1;
|
||||
} else if (child == 0) {
|
||||
|
|
@ -203,7 +203,7 @@ static void fwbank_dump_timer(struct uloop_timeout *timeout)
|
|||
{
|
||||
struct fwbank_dump_data *data = NULL;
|
||||
|
||||
BBF_DEBUG("fwbank_dump_timer triggered");
|
||||
BBFDM_DEBUG("fwbank_dump_timer triggered");
|
||||
|
||||
data = container_of(timeout, struct fwbank_dump_data, tm);
|
||||
if (data == NULL)
|
||||
|
|
@ -215,10 +215,10 @@ static void fwbank_dump_timer(struct uloop_timeout *timeout)
|
|||
static int free_global_fwbank_dump(struct blob_buf *fwbank_dump_bb)
|
||||
{
|
||||
if (fwbank_dump_bb->head && blob_len(fwbank_dump_bb->head)) {
|
||||
BBF_DEBUG("Freeing fwbank dump blob buffer");
|
||||
BBFDM_DEBUG("Freeing fwbank dump blob buffer");
|
||||
blob_buf_free(fwbank_dump_bb);
|
||||
} else {
|
||||
BBF_DEBUG("fwbank dump blob buffer is already empty");
|
||||
BBFDM_DEBUG("fwbank dump blob buffer is already empty");
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -227,20 +227,20 @@ static int free_global_fwbank_dump(struct blob_buf *fwbank_dump_bb)
|
|||
static int validate_global_fwbank_dump(struct blob_buf *fwbank_dump_bb)
|
||||
{
|
||||
if (!fwbank_dump_bb->head || !blob_len(fwbank_dump_bb->head)) {
|
||||
BBF_ERR("fwbank dump output is empty");
|
||||
BBFDM_ERR("fwbank dump output is empty");
|
||||
return -1;
|
||||
}
|
||||
|
||||
BBF_DEBUG("Validating global fwbank dump");
|
||||
BBFDM_DEBUG("Validating global fwbank dump");
|
||||
struct blob_attr *tb[1] = {0};
|
||||
|
||||
if (blobmsg_parse(sysmngr_dump_policy, 1, tb, blobmsg_data(fwbank_dump_bb->head), blobmsg_len(fwbank_dump_bb->head))) {
|
||||
BBF_ERR("Failed to parse fwbank dump blob");
|
||||
BBFDM_ERR("Failed to parse fwbank dump blob");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!tb[0]) { // bank array is not found
|
||||
BBF_ERR("Bank array not found in fwbank dump");
|
||||
BBFDM_ERR("Bank array not found in fwbank dump");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -251,7 +251,7 @@ static int validate_global_fwbank_dump(struct blob_buf *fwbank_dump_bb)
|
|||
struct blob_attr *t[8] = {0};
|
||||
|
||||
if (blobmsg_parse(sysmngr_bank_policy, ARRAY_SIZE(sysmngr_bank_policy), t, blobmsg_data(entry), blobmsg_len(entry))) {
|
||||
BBF_ERR("Failed to parse bank entry");
|
||||
BBFDM_ERR("Failed to parse bank entry");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -262,31 +262,31 @@ static int validate_global_fwbank_dump(struct blob_buf *fwbank_dump_bb)
|
|||
}
|
||||
}
|
||||
|
||||
BBF_DEBUG("Global fwbank dump validation passed");
|
||||
BBFDM_DEBUG("Global fwbank dump validation passed");
|
||||
return valid;
|
||||
}
|
||||
|
||||
static void fwbank_dump_finish_callback(struct ubus_context *ctx, struct ubus_request_data *req, int *pipe_fds, uint32_t bank_id)
|
||||
{
|
||||
BBF_DEBUG("Task finished Line=%d && func=%s", __LINE__, __func__);
|
||||
BBFDM_DEBUG("Task finished Line=%d && func=%s", __LINE__, __func__);
|
||||
|
||||
close(pipe_fds[1]); // Close unused write end
|
||||
|
||||
char buffer[1024] = {0};
|
||||
ssize_t bytes_read;
|
||||
|
||||
BBF_DEBUG("Reading script output...");
|
||||
BBFDM_DEBUG("Reading script output...");
|
||||
|
||||
// Read the output from the script
|
||||
while ((bytes_read = read(pipe_fds[0], buffer, sizeof(buffer) - 1)) > 0) {
|
||||
buffer[bytes_read] = '\0'; // Null-terminate the buffer
|
||||
BBF_DEBUG("Script output: %s", buffer);
|
||||
BBFDM_DEBUG("Script output: %s", buffer);
|
||||
}
|
||||
|
||||
close(pipe_fds[0]); // Close read end
|
||||
|
||||
if (bytes_read < 0 || strlen(buffer) == 0) {
|
||||
BBF_ERR("Failed to read from pipe");
|
||||
BBFDM_ERR("Failed to read from pipe");
|
||||
goto retry;
|
||||
}
|
||||
|
||||
|
|
@ -297,14 +297,14 @@ static void fwbank_dump_finish_callback(struct ubus_context *ctx, struct ubus_re
|
|||
blob_buf_init(&temp_buf, 0);
|
||||
|
||||
if (!blobmsg_add_json_from_string(&temp_buf, buffer)) {
|
||||
BBF_ERR("Invalid JSON format in buffer");
|
||||
BBFDM_ERR("Invalid JSON format in buffer");
|
||||
blob_buf_free(&temp_buf);
|
||||
goto retry;
|
||||
}
|
||||
|
||||
int res = validate_global_fwbank_dump(&temp_buf);
|
||||
if (res) {
|
||||
BBF_ERR("Failed to validate 'fwbank' output");
|
||||
BBFDM_ERR("Failed to validate 'fwbank' output");
|
||||
blob_buf_free(&temp_buf);
|
||||
goto retry;
|
||||
}
|
||||
|
|
@ -328,25 +328,25 @@ retry:
|
|||
g_retry_count++;
|
||||
uloop_timeout_set(&g_fwbank_dump.tm, FWBANK_DUMP_RETRY_DELAY * 1000);
|
||||
|
||||
BBF_ERR("Attempt %d/%d: fwbank dump blob buf is empty. Retrying in %d second(s)...",
|
||||
BBFDM_ERR("Attempt %d/%d: fwbank dump blob buf is empty. Retrying in %d second(s)...",
|
||||
g_retry_count, FWBANK_DUMP_MAX_RETRIES, FWBANK_DUMP_RETRY_DELAY);
|
||||
} else {
|
||||
BBF_ERR("Max retries (%d) reached: The fwbank dump buffer is empty. Unable to register 'fwbank' ubus object",
|
||||
BBFDM_ERR("Max retries (%d) reached: The fwbank dump buffer is empty. Unable to register 'fwbank' ubus object",
|
||||
FWBANK_DUMP_MAX_RETRIES);
|
||||
}
|
||||
}
|
||||
|
||||
static int init_global_fwbank_dump(void)
|
||||
{
|
||||
BBF_DEBUG("Initializing global fwbank dump");
|
||||
BBFDM_DEBUG("Initializing global fwbank dump");
|
||||
|
||||
int res = sysmngr_task_fork(fwbank_dump_finish_callback, FWBANK_DUMP_CMD, 120, NULL, 0);
|
||||
if (res) {
|
||||
BBF_ERR("Failed to start task for fwbank dump command");
|
||||
BBFDM_ERR("Failed to start task for fwbank dump command");
|
||||
return -1;
|
||||
}
|
||||
|
||||
BBF_DEBUG("fwbank dump blob initialized successfully");
|
||||
BBFDM_DEBUG("fwbank dump blob initialized successfully");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -354,7 +354,7 @@ static void fwbank_listen_timeout(struct uloop_timeout *timeout)
|
|||
{
|
||||
struct fwbank_event_data *data = NULL;
|
||||
|
||||
BBF_DEBUG("fwbank listen timeout triggered");
|
||||
BBFDM_DEBUG("fwbank listen timeout triggered");
|
||||
|
||||
data = container_of(timeout, struct fwbank_event_data, tm);
|
||||
if (data == NULL)
|
||||
|
|
@ -372,7 +372,7 @@ static void fwbank_receive_sysupgrade(struct ubus_context *ctx, struct ubus_even
|
|||
int rem;
|
||||
|
||||
if (!msg || !ev) {
|
||||
BBF_ERR("Invalid event data in sysupgrade handler");
|
||||
BBFDM_ERR("Invalid event data in sysupgrade handler");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -381,7 +381,7 @@ static void fwbank_receive_sysupgrade(struct ubus_context *ctx, struct ubus_even
|
|||
return;
|
||||
|
||||
if (data->band_id < 0) { // bank_id should be a valid id
|
||||
BBF_ERR("Invalid bank_id: %d", data->band_id);
|
||||
BBFDM_ERR("Invalid bank_id: %d", data->band_id);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -391,7 +391,7 @@ static void fwbank_receive_sysupgrade(struct ubus_context *ctx, struct ubus_even
|
|||
if (DM_STRCMP("bank_id", blobmsg_name(cur)) == 0) {
|
||||
char *attr_val = (char *)blobmsg_data(cur);
|
||||
if (DM_STRCMP(attr_val, bank_id_str) != 0) {
|
||||
BBF_ERR("Mismatched bank_id (%s != %s)", attr_val, bank_id_str);
|
||||
BBFDM_ERR("Mismatched bank_id (%s != %s)", attr_val, bank_id_str);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -400,12 +400,12 @@ static void fwbank_receive_sysupgrade(struct ubus_context *ctx, struct ubus_even
|
|||
char *attr_val = (char *)blobmsg_data(cur);
|
||||
|
||||
if (DM_STRCMP(attr_val, "Downloading") == 0) {
|
||||
BBF_DEBUG("Sysupgrade status: Downloading");
|
||||
BBFDM_DEBUG("Sysupgrade status: Downloading");
|
||||
return;
|
||||
}
|
||||
|
||||
if (DM_STRCMP(attr_val, "Available") == 0) {
|
||||
BBF_DEBUG("Sysupgrade status: Available. Refreshing fwbank dump.");
|
||||
BBFDM_DEBUG("Sysupgrade status: Available. Refreshing fwbank dump.");
|
||||
init_global_fwbank_dump();
|
||||
break;
|
||||
}
|
||||
|
|
@ -429,7 +429,7 @@ static struct fwbank_event_data g_fwbank_event_data = {
|
|||
|
||||
static void fwbank_wait_for_sysupgrade_event(struct ubus_context *ctx, uint32_t band_id)
|
||||
{
|
||||
BBF_DEBUG("Waiting for sysupgrade event for bank_id: %u", band_id);
|
||||
BBFDM_DEBUG("Waiting for sysupgrade event for bank_id: %u", band_id);
|
||||
|
||||
g_fwbank_event_data.ctx = ctx;
|
||||
g_fwbank_event_data.band_id = band_id;
|
||||
|
|
@ -448,7 +448,7 @@ static bool is_set_bootbank_success(struct blob_buf *output_bb)
|
|||
|
||||
// Parse the blob buffer for the "success" field
|
||||
if (blobmsg_parse(&policy, 1, &tb, blobmsg_data(output_bb->head), blobmsg_len(output_bb->head)) != 0) {
|
||||
BBF_ERR("Failed to parse blobmsg data");
|
||||
BBFDM_ERR("Failed to parse blobmsg data");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -469,7 +469,7 @@ static bool is_upgrade_success(struct blob_buf *output_bb)
|
|||
|
||||
// Parse the blob buffer for the "result" field
|
||||
if (blobmsg_parse(&policy, 1, &tb, blobmsg_data(output_bb->head), blobmsg_len(output_bb->head)) != 0) {
|
||||
BBF_ERR("Failed to parse blobmsg data");
|
||||
BBFDM_ERR("Failed to parse blobmsg data");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -487,25 +487,25 @@ struct blob_buf *sysmngr_fwbank_dump(void)
|
|||
|
||||
static void fwbank_set_bootbank_finish_callback(struct ubus_context *ctx, struct ubus_request_data *req, int *pipe_fds, uint32_t bank_id)
|
||||
{
|
||||
BBF_DEBUG("Task finished Line=%d && func=%s", __LINE__, __func__);
|
||||
BBFDM_DEBUG("Task finished Line=%d && func=%s", __LINE__, __func__);
|
||||
|
||||
close(pipe_fds[1]); // Close unused write end
|
||||
|
||||
char buffer[1024] = {0};
|
||||
ssize_t bytes_read;
|
||||
|
||||
BBF_DEBUG("Reading script output...");
|
||||
BBFDM_DEBUG("Reading script output...");
|
||||
|
||||
// Read the output from the script
|
||||
while ((bytes_read = read(pipe_fds[0], buffer, sizeof(buffer) - 1)) > 0) {
|
||||
buffer[bytes_read] = '\0'; // Null-terminate the buffer
|
||||
BBF_DEBUG("Script output: %s", buffer);
|
||||
BBFDM_DEBUG("Script output: %s", buffer);
|
||||
}
|
||||
|
||||
close(pipe_fds[0]); // Close read end
|
||||
|
||||
if (bytes_read < 0) {
|
||||
BBF_ERR("Failed to read from pipe");
|
||||
BBFDM_ERR("Failed to read from pipe");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -515,7 +515,7 @@ static void fwbank_set_bootbank_finish_callback(struct ubus_context *ctx, struct
|
|||
blob_buf_init(&setbootbank_bb, 0);
|
||||
|
||||
if (!blobmsg_add_json_from_string(&setbootbank_bb, buffer)) {
|
||||
BBF_ERR("Failed to create blob buf");
|
||||
BBFDM_ERR("Failed to create blob buf");
|
||||
blob_buf_free(&setbootbank_bb);
|
||||
return;
|
||||
}
|
||||
|
|
@ -523,7 +523,7 @@ static void fwbank_set_bootbank_finish_callback(struct ubus_context *ctx, struct
|
|||
bool is_success = is_set_bootbank_success(&setbootbank_bb);
|
||||
|
||||
if (ctx && req) {
|
||||
BBF_DEBUG("Send ubus output");
|
||||
BBFDM_DEBUG("Send ubus output");
|
||||
ubus_send_reply(ctx, req, setbootbank_bb.head);
|
||||
}
|
||||
|
||||
|
|
@ -545,7 +545,7 @@ int sysmngr_fwbank_set_bootbank(uint32_t bank_id, struct ubus_request_data *req)
|
|||
|
||||
int res = sysmngr_task_fork(fwbank_set_bootbank_finish_callback, cmd, 10, req, 0);
|
||||
if (res) {
|
||||
BBF_ERR("Failed to start task for fwbank set bootbank command");
|
||||
BBFDM_ERR("Failed to start task for fwbank set bootbank command");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -554,25 +554,25 @@ int sysmngr_fwbank_set_bootbank(uint32_t bank_id, struct ubus_request_data *req)
|
|||
|
||||
static void fwbank_upgrade_finish_callback(struct ubus_context *ctx, struct ubus_request_data *req, int *pipe_fds, uint32_t bank_id)
|
||||
{
|
||||
BBF_DEBUG("Task finished Line=%d && func=%s", __LINE__, __func__);
|
||||
BBFDM_DEBUG("Task finished Line=%d && func=%s", __LINE__, __func__);
|
||||
|
||||
close(pipe_fds[1]); // Close unused write end
|
||||
|
||||
char buffer[1024] = {0};
|
||||
ssize_t bytes_read;
|
||||
|
||||
BBF_DEBUG("Reading script output...");
|
||||
BBFDM_DEBUG("Reading script output...");
|
||||
|
||||
// Read the output from the script
|
||||
while ((bytes_read = read(pipe_fds[0], buffer, sizeof(buffer) - 1)) > 0) {
|
||||
buffer[bytes_read] = '\0'; // Null-terminate the buffer
|
||||
BBF_DEBUG("Script output: %s", buffer);
|
||||
BBFDM_DEBUG("Script output: %s", buffer);
|
||||
}
|
||||
|
||||
close(pipe_fds[0]); // Close read end
|
||||
|
||||
if (bytes_read < 0) {
|
||||
BBF_ERR("Failed to read from pipe");
|
||||
BBFDM_ERR("Failed to read from pipe");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -582,7 +582,7 @@ static void fwbank_upgrade_finish_callback(struct ubus_context *ctx, struct ubus
|
|||
blob_buf_init(&upgrade_bb, 0);
|
||||
|
||||
if (!blobmsg_add_json_from_string(&upgrade_bb, buffer)) {
|
||||
BBF_ERR("Failed to create blob buf");
|
||||
BBFDM_ERR("Failed to create blob buf");
|
||||
blob_buf_free(&upgrade_bb);
|
||||
return;
|
||||
}
|
||||
|
|
@ -590,7 +590,7 @@ static void fwbank_upgrade_finish_callback(struct ubus_context *ctx, struct ubus
|
|||
bool is_success = is_upgrade_success(&upgrade_bb);
|
||||
|
||||
if (ctx && req) {
|
||||
BBF_DEBUG("Send ubus output");
|
||||
BBFDM_DEBUG("Send ubus output");
|
||||
ubus_send_reply(ctx, req, upgrade_bb.head);
|
||||
}
|
||||
|
||||
|
|
@ -614,7 +614,7 @@ int sysmngr_fwbank_upgrade(const char *path, bool auto_activate, uint32_t bank_i
|
|||
|
||||
int res = sysmngr_task_fork(fwbank_upgrade_finish_callback, cmd, 10, req, bank_id);
|
||||
if (res) {
|
||||
BBF_ERR("Failed to start task for fwbank upgrade command");
|
||||
BBFDM_ERR("Failed to start task for fwbank upgrade command");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -647,7 +647,7 @@ static int set_bootbank_handler(struct ubus_context *ctx, struct ubus_object *ob
|
|||
int res = 0;
|
||||
|
||||
if (blobmsg_parse(set_bootbank_policy, __SET_BOOT_MAX, tb, blob_data(msg), blob_len(msg))) {
|
||||
BBF_ERR("Failed to parse the 'set_bootbank' message");
|
||||
BBFDM_ERR("Failed to parse the 'set_bootbank' message");
|
||||
return UBUS_STATUS_UNKNOWN_ERROR;
|
||||
}
|
||||
|
||||
|
|
@ -696,7 +696,7 @@ static int upgrade_handler(struct ubus_context *ctx, struct ubus_object *obj,
|
|||
int res = 0;
|
||||
|
||||
if (blobmsg_parse(upgrade_policy, __UPGRADE_MAX, tb, blob_data(msg), blob_len(msg))) {
|
||||
BBF_ERR("Failed to parse the 'upgrade' message");
|
||||
BBFDM_ERR("Failed to parse the 'upgrade' message");
|
||||
return UBUS_STATUS_UNKNOWN_ERROR;
|
||||
}
|
||||
|
||||
|
|
@ -746,11 +746,11 @@ int sysmngr_register_fwbank(struct ubus_context *ubus_ctx)
|
|||
{
|
||||
int res = ubus_add_object(ubus_ctx, &fwbank_object);
|
||||
if (res) {
|
||||
BBF_ERR("Failed to register 'fwbank' ubus object!!!!!!");
|
||||
BBFDM_ERR("Failed to register 'fwbank' ubus object!!!!!!");
|
||||
return -1;
|
||||
}
|
||||
|
||||
BBF_INFO("'fwbank' ubus object was registered");
|
||||
BBFDM_INFO("'fwbank' ubus object was registered");
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
@ -758,7 +758,7 @@ int sysmngr_unregister_fwbank(struct ubus_context *ubus_ctx)
|
|||
{
|
||||
ubus_remove_object(ubus_ctx, &fwbank_object);
|
||||
|
||||
BBF_INFO("'fwbank' ubus object was unregistered, and resources were freed");
|
||||
BBFDM_INFO("'fwbank' ubus object was unregistered, and resources were freed");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -770,13 +770,13 @@ int sysmngr_init_fwbank_dump(struct ubus_context *ubus_ctx)
|
|||
g_fwbank_dump.tm.cb = fwbank_dump_timer;
|
||||
|
||||
if (!file_exists(FWBANK_FILE_PATH)) {
|
||||
BBF_ERR("The fwbank file (%s) is missing", FWBANK_FILE_PATH);
|
||||
BBFDM_ERR("The fwbank file (%s) is missing", FWBANK_FILE_PATH);
|
||||
return -1;
|
||||
}
|
||||
|
||||
res = init_global_fwbank_dump();
|
||||
if (res) {
|
||||
BBF_ERR("Failed to fetch 'fwbank' output or no data available");
|
||||
BBFDM_ERR("Failed to fetch 'fwbank' output or no data available");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
|
|||
61
src/memory.c
61
src/memory.c
|
|
@ -11,6 +11,8 @@
|
|||
|
||||
#include "utils.h"
|
||||
|
||||
#include <libbbfdm-api/bbfdm_api.h>
|
||||
|
||||
#define DEFAULT_POLLING_INTERVAL "60"
|
||||
#define DEFAULT_CRITICAL_RISE_THRESHOLD "80"
|
||||
#define DEFAULT_CRITICAL_FALL_THRESHOLD "60"
|
||||
|
|
@ -49,7 +51,7 @@ int sysmngr_meminfo(mem_info *info)
|
|||
|
||||
// cppcheck-suppress cert-MSC24-C
|
||||
if ((f = fopen("/proc/meminfo", "r")) == NULL) {
|
||||
BBF_ERR("Failed to open '/proc/meminfo' for reading memory info.");
|
||||
BBFDM_ERR("Failed to open '/proc/meminfo' for reading memory info.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -81,7 +83,7 @@ static unsigned int calculate_memory_utilization(void)
|
|||
mem_info info = {0};
|
||||
|
||||
if (sysmngr_meminfo(&info) != 0) {
|
||||
BBF_ERR("Failed to retrieve memory information for utilization calculation");
|
||||
BBFDM_ERR("Failed to retrieve memory information for utilization calculation");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -112,11 +114,8 @@ static void send_memory_critical_state_event(unsigned int mem_utilization)
|
|||
|
||||
blobmsg_close_array(&bb, arr);
|
||||
|
||||
if (sysmngr_ubus_invoke_sync("bbfdm", "notify_event", bb.head, NULL, NULL)) {
|
||||
BBF_ERR("Failed to send 'MemoryCriticalState!' event");
|
||||
} else {
|
||||
BBF_DEBUG("'MemoryCriticalState!' event sent successfully with utilization at %u%%.", mem_utilization);
|
||||
}
|
||||
BBFDM_UBUS_INVOKE_SYNC("bbfdm", "notify_event", bb.head, 5000, NULL, NULL);
|
||||
BBFDM_DEBUG("'MemoryCriticalState!' event sent successfully with utilization at %u%%.", mem_utilization);
|
||||
|
||||
blob_buf_free(&bb);
|
||||
}
|
||||
|
|
@ -129,12 +128,12 @@ static void run_memory_monitor(void)
|
|||
if ((mem_utilization > g_memory_ctx.critical_rise_threshold) &&
|
||||
(g_memory_ctx.critical_fall_time >= g_memory_ctx.critical_rise_time)) {
|
||||
|
||||
BBF_ERR("Memory utilization reached critical threshold: %u%% !!!!!!!!", mem_utilization);
|
||||
BBFDM_ERR("Memory utilization reached critical threshold: %u%% !!!!!!!!", mem_utilization);
|
||||
|
||||
// Update CriticalRiseTimeStamp to the current time
|
||||
g_memory_ctx.critical_rise_time = time(NULL);
|
||||
snprintf(buf, sizeof(buf), "%ld", (long int)g_memory_ctx.critical_rise_time);
|
||||
sysmngr_uci_set("sysmngr", "memory", "critical_rise_time", buf);
|
||||
BBFDM_UCI_SET("sysmngr", "memory", "critical_rise_time", buf);
|
||||
|
||||
if (g_memory_ctx.enable_critical_log) {
|
||||
// Generate log into the vendor log file referenced by 'VendorLogFileRef' parameter indicating critical condition is reached
|
||||
|
|
@ -148,12 +147,12 @@ static void run_memory_monitor(void)
|
|||
if ((mem_utilization < g_memory_ctx.critical_fall_threshold) &&
|
||||
(g_memory_ctx.critical_rise_time > g_memory_ctx.critical_fall_time)) {
|
||||
|
||||
BBF_ERR("Memory utilization has fallen below critical threshold: %u%% !!!!!!!!", mem_utilization);
|
||||
BBFDM_ERR("Memory utilization has fallen below critical threshold: %u%% !!!!!!!!", mem_utilization);
|
||||
|
||||
// Update CriticalFallTimeStamp to the current time
|
||||
g_memory_ctx.critical_fall_time = time(NULL);
|
||||
snprintf(buf, sizeof(buf), "%ld", (long int)g_memory_ctx.critical_fall_time);
|
||||
sysmngr_uci_set("sysmngr", "memory", "critical_fall_time", buf);
|
||||
BBFDM_UCI_SET("sysmngr", "memory", "critical_fall_time", buf);
|
||||
|
||||
if (g_memory_ctx.enable_critical_log) {
|
||||
// Generate log into the vendor log file referenced by 'VendorLogFileRef' parameter indicating that the critical condition is no longer present
|
||||
|
|
@ -161,7 +160,7 @@ static void run_memory_monitor(void)
|
|||
}
|
||||
}
|
||||
|
||||
BBF_INFO("Next memory monitor check scheduled in %d sec...", g_memory_ctx.polling_interval);
|
||||
BBFDM_INFO("Next memory monitor check scheduled in %d sec...", g_memory_ctx.polling_interval);
|
||||
uloop_timeout_set(&g_memory_ctx.memory_timer, g_memory_ctx.polling_interval * 1000);
|
||||
}
|
||||
|
||||
|
|
@ -178,36 +177,36 @@ static void fill_global_memory_ctx(void)
|
|||
|
||||
g_memory_ctx.memory_timer.cb = memory_timer_callback;
|
||||
|
||||
sysmngr_uci_get("sysmngr", "memory", "enable", "0", buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "memory", "enable", "0", buf, sizeof(buf));
|
||||
g_memory_ctx.enable = ((int)strtol(buf, NULL, 10) != 0);
|
||||
BBF_DEBUG("Memory Monitor Config: |Enable| |%d|", g_memory_ctx.enable);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |Enable| |%d|", g_memory_ctx.enable);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "memory", "enable_critical_log", "0", buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "memory", "enable_critical_log", "0", buf, sizeof(buf));
|
||||
g_memory_ctx.enable_critical_log = ((int)strtol(buf, NULL, 10) != 0);
|
||||
BBF_DEBUG("Memory Monitor Config: |EnableCriticalLog| |%d|", g_memory_ctx.enable_critical_log);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |EnableCriticalLog| |%d|", g_memory_ctx.enable_critical_log);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "memory", "polling_interval", DEFAULT_POLLING_INTERVAL, buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "memory", "polling_interval", DEFAULT_POLLING_INTERVAL, buf, sizeof(buf));
|
||||
g_memory_ctx.polling_interval = strtoul(buf, NULL, 10);
|
||||
BBF_DEBUG("Memory Monitor Config: |PollingInterval| |%lu|", g_memory_ctx.polling_interval);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |PollingInterval| |%lu|", g_memory_ctx.polling_interval);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "memory", "critical_rise_threshold", DEFAULT_CRITICAL_RISE_THRESHOLD, buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "memory", "critical_rise_threshold", DEFAULT_CRITICAL_RISE_THRESHOLD, buf, sizeof(buf));
|
||||
g_memory_ctx.critical_rise_threshold = strtoul(buf, NULL, 10);
|
||||
BBF_DEBUG("Memory Monitor Config: |CriticalRiseThreshold| |%lu|", g_memory_ctx.critical_rise_threshold);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |CriticalRiseThreshold| |%lu|", g_memory_ctx.critical_rise_threshold);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "memory", "critical_fall_threshold", DEFAULT_CRITICAL_FALL_THRESHOLD, buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "memory", "critical_fall_threshold", DEFAULT_CRITICAL_FALL_THRESHOLD, buf, sizeof(buf));
|
||||
g_memory_ctx.critical_fall_threshold = strtoul(buf, NULL, 10);
|
||||
BBF_DEBUG("Memory Monitor Config: |CriticalFallThreshold| |%lu|", g_memory_ctx.critical_fall_threshold);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |CriticalFallThreshold| |%lu|", g_memory_ctx.critical_fall_threshold);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "memory", "critical_rise_time", "0", buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "memory", "critical_rise_time", "0", buf, sizeof(buf));
|
||||
g_memory_ctx.critical_rise_time = strtol(buf, NULL, 10);
|
||||
BBF_DEBUG("Memory Monitor Config: |CriticalRiseTimeStamp| |%lu|", g_memory_ctx.critical_rise_time);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |CriticalRiseTimeStamp| |%lu|", g_memory_ctx.critical_rise_time);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "memory", "critical_fall_time", "0", buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "memory", "critical_fall_time", "0", buf, sizeof(buf));
|
||||
g_memory_ctx.critical_fall_time = strtol(buf, NULL, 10);
|
||||
BBF_DEBUG("Memory Monitor Config: |CriticalFallTimeStamp| |%lu|", g_memory_ctx.critical_fall_time);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |CriticalFallTimeStamp| |%lu|", g_memory_ctx.critical_fall_time);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "memory", "file_path", DEFAULT_CRITICAL_MEMORY_LOG_PATH, g_memory_ctx.log_file, sizeof(g_memory_ctx.log_file));
|
||||
BBF_DEBUG("Memory Monitor Config: |FilePath| |%s|", g_memory_ctx.log_file);
|
||||
BBFDM_UCI_GET("sysmngr", "memory", "file_path", DEFAULT_CRITICAL_MEMORY_LOG_PATH, g_memory_ctx.log_file, sizeof(g_memory_ctx.log_file));
|
||||
BBFDM_DEBUG("Memory Monitor Config: |FilePath| |%s|", g_memory_ctx.log_file);
|
||||
if (!file_exists(g_memory_ctx.log_file)) {
|
||||
// Create empty file if it doesn't exist
|
||||
create_empty_file(g_memory_ctx.log_file);
|
||||
|
|
@ -222,18 +221,18 @@ void sysmngr_memory_init(void)
|
|||
fill_global_memory_ctx();
|
||||
|
||||
if (!g_memory_ctx.enable) {
|
||||
BBF_INFO("Memory monitoring is disabled.");
|
||||
BBFDM_INFO("Memory monitoring is disabled.");
|
||||
return;
|
||||
}
|
||||
|
||||
BBF_INFO("Memory monitoring is enabled");
|
||||
BBFDM_INFO("Memory monitoring is enabled");
|
||||
run_memory_monitor();
|
||||
}
|
||||
|
||||
void sysmngr_memory_clean(void)
|
||||
{
|
||||
uloop_timeout_cancel(&g_memory_ctx.memory_timer);
|
||||
BBF_INFO("Memory monitoring process stopped");
|
||||
BBFDM_INFO("Memory monitoring process stopped");
|
||||
}
|
||||
|
||||
/*************************************************************
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@
|
|||
#include "utils.h"
|
||||
#include "processes.h"
|
||||
|
||||
#include <libbbfdm-api/bbfdm_api.h>
|
||||
|
||||
#define DEFAULT_CPU_NAME "cpu"
|
||||
#define DEFAULT_CPU_POLL_INTERVAL "5"
|
||||
#define DEFAULT_CPU_NUM_SAMPLES "30"
|
||||
|
|
@ -222,7 +224,7 @@ static void broadcast_add_del_event(int diff)
|
|||
|
||||
snprintf(obj_path, sizeof(obj_path), "Device.DeviceInfo.ProcessStatus.Process.%d", (diff > 0) ? g_process_ctx.process_num + i + 1 : g_process_ctx.process_num - i);
|
||||
blobmsg_add_string(&bb, NULL, obj_path);
|
||||
BBF_DEBUG("#%s:: %s #", (diff > 0) ? "Add" : "Del", obj_path);
|
||||
BBFDM_DEBUG("#%s:: %s #", (diff > 0) ? "Add" : "Del", obj_path);
|
||||
}
|
||||
blobmsg_close_array(&bb, a);
|
||||
|
||||
|
|
@ -243,7 +245,7 @@ static void init_process_list(void)
|
|||
if (dir == NULL)
|
||||
return;
|
||||
|
||||
BBF_INFO("Init process list");
|
||||
BBFDM_INFO("Init process list");
|
||||
|
||||
while ((entry = readdir(dir)) != NULL) {
|
||||
struct stat stats = {0};
|
||||
|
|
@ -303,7 +305,7 @@ static void init_process_list(void)
|
|||
|
||||
process_entry *pentry = (process_entry *)calloc(1, sizeof(process_entry));
|
||||
if (!pentry) {
|
||||
BBF_ERR("failed to allocate memory for process entry");
|
||||
BBFDM_ERR("failed to allocate memory for process entry");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -331,7 +333,7 @@ static void free_process_list(void)
|
|||
{
|
||||
process_entry *entry = NULL, *tmp = NULL;
|
||||
|
||||
BBF_INFO("Free process list");
|
||||
BBFDM_INFO("Free process list");
|
||||
|
||||
list_for_each_entry_safe(entry, tmp, &g_process_ctx.list, list) {
|
||||
list_del(&entry->list);
|
||||
|
|
@ -343,7 +345,7 @@ static int get_instance_refresh_interval(void)
|
|||
{
|
||||
char buf[8] = {0};
|
||||
|
||||
sysmngr_uci_get("sysmngr", "process", "instance_refresh_interval", "0", buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "process", "instance_refresh_interval", "0", buf, sizeof(buf));
|
||||
|
||||
return (int)strtol(buf, NULL, 10);
|
||||
}
|
||||
|
|
@ -354,14 +356,14 @@ static void run_refresh_process_list(void)
|
|||
init_process_list();
|
||||
|
||||
if (g_process_ctx.refresh_interval > 0) {
|
||||
BBF_INFO("Scheduling process list update after %d sec...", g_process_ctx.refresh_interval);
|
||||
BBFDM_INFO("Scheduling process list update after %d sec...", g_process_ctx.refresh_interval);
|
||||
uloop_timeout_set(&g_process_ctx.instance_timer, g_process_ctx.refresh_interval * 1000);
|
||||
}
|
||||
}
|
||||
|
||||
static void ubus_call_complete_cb(struct ubus_request *req, int ret)
|
||||
{
|
||||
BBF_DEBUG("'tr069' ubus callback completed");
|
||||
BBFDM_DEBUG("'tr069' ubus callback completed");
|
||||
run_refresh_process_list();
|
||||
FREE(req);
|
||||
}
|
||||
|
|
@ -373,14 +375,14 @@ static void process_refresh_instance_timer(struct uloop_timeout *timeout)
|
|||
memset(&bb, 0, sizeof(struct blob_buf));
|
||||
|
||||
blob_buf_init(&bb, 0);
|
||||
int res = sysmngr_ubus_invoke_async(g_process_ctx.ubus_ctx, "tr069", "status", bb.head, NULL, ubus_call_complete_cb);
|
||||
int res = bbfdm_ubus_invoke_async(g_process_ctx.ubus_ctx, "tr069", "status", bb.head, NULL, ubus_call_complete_cb);
|
||||
blob_buf_free(&bb);
|
||||
|
||||
if (res) {
|
||||
BBF_DEBUG("Update process list: 'tr069' ubus object not found");
|
||||
BBFDM_DEBUG("Update process list: 'tr069' ubus object not found");
|
||||
run_refresh_process_list();
|
||||
} else {
|
||||
BBF_DEBUG("Process list will be updated after 'tr069' ubus session completes");
|
||||
BBFDM_DEBUG("Process list will be updated after 'tr069' ubus session completes");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -412,11 +414,8 @@ static void send_cpu_critical_state_event(unsigned int cpu_utilization)
|
|||
|
||||
blobmsg_close_array(&bb, arr);
|
||||
|
||||
if (sysmngr_ubus_invoke_sync("bbfdm", "notify_event", bb.head, NULL, NULL)) {
|
||||
BBF_ERR("Failed to send 'CPUCriticalState!' event");
|
||||
} else {
|
||||
BBF_DEBUG("'CPUCriticalState!' event sent successfully with utilization at %u%%.", cpu_utilization);
|
||||
}
|
||||
BBFDM_UBUS_INVOKE_SYNC("bbfdm", "notify_event", bb.head, 5000, NULL, NULL);
|
||||
BBFDM_DEBUG("'CPUCriticalState!' event sent successfully with utilization at %u%%.", cpu_utilization);
|
||||
|
||||
blob_buf_free(&bb);
|
||||
}
|
||||
|
|
@ -468,12 +467,12 @@ static void run_cpu_monitor(void)
|
|||
if ((avg_utilization > g_cpu_info.critical_rise_threshold) &&
|
||||
(g_cpu_info.critical_fall_time >= g_cpu_info.critical_rise_time)) {
|
||||
|
||||
BBF_ERR("CPU utilization reached critical threshold: %u%% !!!!!!!!", avg_utilization);
|
||||
BBFDM_ERR("CPU utilization reached critical threshold: %u%% !!!!!!!!", avg_utilization);
|
||||
|
||||
// Update CriticalRiseTimeStamp to the current time
|
||||
g_cpu_info.critical_rise_time = time(NULL);
|
||||
snprintf(buf, sizeof(buf), "%ld", (long int)g_cpu_info.critical_rise_time);
|
||||
sysmngr_uci_set("sysmngr", "cpu", "critical_rise_time", buf);
|
||||
BBFDM_UCI_SET("sysmngr", "cpu", "critical_rise_time", buf);
|
||||
|
||||
if (g_cpu_info.enable_critical_log) {
|
||||
// Generate log into the vendor log file referenced by 'VendorLogFileRef' parameter indicating critical condition is reached
|
||||
|
|
@ -487,12 +486,12 @@ static void run_cpu_monitor(void)
|
|||
if ((avg_utilization < g_cpu_info.critical_fall_threshold) &&
|
||||
(g_cpu_info.critical_rise_time > g_cpu_info.critical_fall_time)) {
|
||||
|
||||
BBF_ERR("CPU utilization has fallen below critical threshold: %u%% !!!!!!!!", avg_utilization);
|
||||
BBFDM_ERR("CPU utilization has fallen below critical threshold: %u%% !!!!!!!!", avg_utilization);
|
||||
|
||||
// Update CriticalFallTimeStamp to the current time
|
||||
g_cpu_info.critical_fall_time = time(NULL);
|
||||
snprintf(buf, sizeof(buf), "%ld", (long int)g_cpu_info.critical_fall_time);
|
||||
sysmngr_uci_set("sysmngr", "cpu", "critical_fall_time", buf);
|
||||
BBFDM_UCI_SET("sysmngr", "cpu", "critical_fall_time", buf);
|
||||
|
||||
if (g_cpu_info.enable_critical_log) {
|
||||
// Generate log into the vendor log file referenced by 'VendorLogFileRef' parameter indicating that the critical condition is no longer present
|
||||
|
|
@ -500,7 +499,7 @@ static void run_cpu_monitor(void)
|
|||
}
|
||||
}
|
||||
|
||||
BBF_INFO("Next memory monitor check scheduled in %d sec...", g_cpu_info.poll_interval);
|
||||
BBFDM_INFO("Next memory monitor check scheduled in %d sec...", g_cpu_info.poll_interval);
|
||||
uloop_timeout_set(&g_cpu_info.cpu_timer, g_cpu_info.poll_interval * 1000);
|
||||
}
|
||||
|
||||
|
|
@ -517,40 +516,40 @@ static int fill_global_cpu_info(void)
|
|||
|
||||
g_cpu_info.cpu_timer.cb = cpu_timer_callback;
|
||||
|
||||
sysmngr_uci_get("sysmngr", "cpu", "enable", "0", buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "cpu", "enable", "0", buf, sizeof(buf));
|
||||
g_cpu_info.enable = ((int)strtol(buf, NULL, 10) != 0);
|
||||
BBF_DEBUG("Memory Monitor Config: |Enable| |%d|", g_cpu_info.enable);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |Enable| |%d|", g_cpu_info.enable);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "cpu", "enable_critical_log", "0", buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "cpu", "enable_critical_log", "0", buf, sizeof(buf));
|
||||
g_cpu_info.enable_critical_log = ((int)strtol(buf, NULL, 10) != 0);
|
||||
BBF_DEBUG("Memory Monitor Config: |EnableCriticalLog| |%d|", g_cpu_info.enable_critical_log);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |EnableCriticalLog| |%d|", g_cpu_info.enable_critical_log);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "cpu", "poll_interval", DEFAULT_CPU_POLL_INTERVAL, buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "cpu", "poll_interval", DEFAULT_CPU_POLL_INTERVAL, buf, sizeof(buf));
|
||||
g_cpu_info.poll_interval = strtoul(buf, NULL, 10);
|
||||
BBF_DEBUG("Memory Monitor Config: |PollInterval| |%lu|", g_cpu_info.poll_interval);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |PollInterval| |%lu|", g_cpu_info.poll_interval);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "cpu", "num_samples", DEFAULT_CPU_NUM_SAMPLES, buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "cpu", "num_samples", DEFAULT_CPU_NUM_SAMPLES, buf, sizeof(buf));
|
||||
g_cpu_info.num_samples = strtoul(buf, NULL, 10);
|
||||
BBF_DEBUG("Memory Monitor Config: |NumSamples| |%lu|", g_cpu_info.num_samples);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |NumSamples| |%lu|", g_cpu_info.num_samples);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "cpu", "critical_rise_threshold", DEFAULT_CPU_CRITICAL_RISE_THRESHOLD, buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "cpu", "critical_rise_threshold", DEFAULT_CPU_CRITICAL_RISE_THRESHOLD, buf, sizeof(buf));
|
||||
g_cpu_info.critical_rise_threshold = strtoul(buf, NULL, 10);
|
||||
BBF_DEBUG("Memory Monitor Config: |CriticalRiseThreshold| |%lu|", g_cpu_info.critical_rise_threshold);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |CriticalRiseThreshold| |%lu|", g_cpu_info.critical_rise_threshold);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "cpu", "critical_fall_threshold", DEFAULT_CPU_CRITICAL_FALL_THRESHOLD, buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "cpu", "critical_fall_threshold", DEFAULT_CPU_CRITICAL_FALL_THRESHOLD, buf, sizeof(buf));
|
||||
g_cpu_info.critical_fall_threshold = strtoul(buf, NULL, 10);
|
||||
BBF_DEBUG("Memory Monitor Config: |CriticalFallThreshold| |%lu|", g_cpu_info.critical_fall_threshold);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |CriticalFallThreshold| |%lu|", g_cpu_info.critical_fall_threshold);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "cpu", "critical_rise_time", "0", buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "cpu", "critical_rise_time", "0", buf, sizeof(buf));
|
||||
g_cpu_info.critical_rise_time = strtol(buf, NULL, 10);
|
||||
BBF_DEBUG("Memory Monitor Config: |CriticalRiseTimeStamp| |%lu|", g_cpu_info.critical_rise_time);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |CriticalRiseTimeStamp| |%lu|", g_cpu_info.critical_rise_time);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "cpu", "critical_fall_time", "0", buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "cpu", "critical_fall_time", "0", buf, sizeof(buf));
|
||||
g_cpu_info.critical_fall_time = strtol(buf, NULL, 10);
|
||||
BBF_DEBUG("Memory Monitor Config: |CriticalFallTimeStamp| |%lu|", g_cpu_info.critical_fall_time);
|
||||
BBFDM_DEBUG("Memory Monitor Config: |CriticalFallTimeStamp| |%lu|", g_cpu_info.critical_fall_time);
|
||||
|
||||
sysmngr_uci_get("sysmngr", "cpu", "file_path", DEFAULT_CPU_CRITICAL_LOG_PATH, g_cpu_info.log_file, sizeof(g_cpu_info.log_file));
|
||||
BBF_DEBUG("Memory Monitor Config: |FilePath| |%s|", g_cpu_info.log_file);
|
||||
BBFDM_UCI_GET("sysmngr", "cpu", "file_path", DEFAULT_CPU_CRITICAL_LOG_PATH, g_cpu_info.log_file, sizeof(g_cpu_info.log_file));
|
||||
BBFDM_DEBUG("Memory Monitor Config: |FilePath| |%s|", g_cpu_info.log_file);
|
||||
if (!file_exists(g_cpu_info.log_file)) {
|
||||
// Create empty file if it doesn't exist
|
||||
create_empty_file(g_cpu_info.log_file);
|
||||
|
|
@ -562,7 +561,7 @@ static int fill_global_cpu_info(void)
|
|||
g_cpu_info.idle_utilization_samples = calloc(g_cpu_info.num_samples, sizeof(unsigned int));
|
||||
if (!g_cpu_info.utilization_samples || !g_cpu_info.user_utilization_samples ||
|
||||
!g_cpu_info.system_utilization_samples || !g_cpu_info.idle_utilization_samples) {
|
||||
BBF_ERR("Failed to allocate memory for mode utilization samples");
|
||||
BBFDM_ERR("Failed to allocate memory for mode utilization samples");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -602,18 +601,18 @@ void sysmngr_cpu_init(void)
|
|||
{
|
||||
int res = fill_global_cpu_info();
|
||||
if (res) {
|
||||
BBF_ERR("Can't start CPU monitoring!!");
|
||||
BBFDM_ERR("Can't start CPU monitoring!!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!g_cpu_info.enable) {
|
||||
BBF_INFO("CPU monitoring is disabled.");
|
||||
BBFDM_INFO("CPU monitoring is disabled.");
|
||||
return;
|
||||
} else {
|
||||
BBF_INFO("CPU monitoring is enabled");
|
||||
BBFDM_INFO("CPU monitoring is enabled");
|
||||
}
|
||||
|
||||
BBF_INFO("Next CPU monitor check scheduled in %d sec...", g_cpu_info.poll_interval);
|
||||
BBFDM_INFO("Next CPU monitor check scheduled in %d sec...", g_cpu_info.poll_interval);
|
||||
uloop_timeout_set(&g_cpu_info.cpu_timer, g_cpu_info.poll_interval * 1000);
|
||||
}
|
||||
|
||||
|
|
@ -621,7 +620,7 @@ void sysmngr_cpu_clean(void)
|
|||
{
|
||||
free_global_cpu_info();
|
||||
uloop_timeout_cancel(&g_cpu_info.cpu_timer);
|
||||
BBF_INFO("CPU monitoring process stopped");
|
||||
BBFDM_INFO("CPU monitoring process stopped");
|
||||
}
|
||||
|
||||
/*************************************************************
|
||||
|
|
@ -635,7 +634,7 @@ static int browseProcessEntriesInst(struct dmctx *dmctx, DMNODE *parent_node, vo
|
|||
int id = 0;
|
||||
|
||||
if (g_process_ctx.refresh_interval <= 0) {
|
||||
BBF_INFO("Scheduling process list update after 2 sec...");
|
||||
BBFDM_INFO("Scheduling process list update after 2 sec...");
|
||||
uloop_timeout_set(&g_process_ctx.instance_timer, 2 * 1000);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@
|
|||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <libbbfdm-api/bbfdm_api.h>
|
||||
|
||||
#define REBOOT_LOCK_FILE "/tmp/bbf_reboot_handler.lock" // Lock file indicating that the boot action has already been executed
|
||||
#define RESET_REASON_PATH "/var/reset_reason" // Path to the file containing the reason for the most recent boot/reset
|
||||
#define REBOOT_MAX_RETRIES 15 // Maximum number of retries for checking if RESET_REASON_PATH has been generated
|
||||
|
|
@ -29,19 +31,19 @@ static int g_retry_count = 0;
|
|||
|
||||
static void reset_option_counter(const char *option_name, const char *option_value)
|
||||
{
|
||||
sysmngr_uci_set("sysmngr", "reboots", option_name, option_value);
|
||||
BBFDM_UCI_SET("sysmngr", "reboots", option_name, option_value);
|
||||
}
|
||||
|
||||
static void increment_option_counter(const char *option_name)
|
||||
{
|
||||
char buf[16] = {0};
|
||||
|
||||
sysmngr_uci_get("sysmngr", "reboots", option_name, "0", buf, sizeof(buf));
|
||||
BBFDM_UCI_GET("sysmngr", "reboots", option_name, "0", buf, sizeof(buf));
|
||||
|
||||
int counter = (int)strtol(buf, NULL, 10) + 1;
|
||||
|
||||
snprintf(buf, sizeof(buf), "%d", counter);
|
||||
sysmngr_uci_set("sysmngr", "reboots", option_name, buf);
|
||||
BBFDM_UCI_SET("sysmngr", "reboots", option_name, buf);
|
||||
}
|
||||
|
||||
static void get_boot_option_value(const char *option_name, char *buffer, size_t buffer_size)
|
||||
|
|
@ -109,50 +111,32 @@ static void calculate_boot_time(char *buffer, size_t buffer_size)
|
|||
|
||||
static void delete_excess_reboot_sections(int max_reboot_entries)
|
||||
{
|
||||
struct uci_ptr ptr = {0};
|
||||
char uci_str[16] = {0};
|
||||
|
||||
struct uci_context *ctx = uci_alloc_context();
|
||||
if (!ctx) {
|
||||
BBF_ERR("Failed to allocate UCI context.");
|
||||
return;
|
||||
}
|
||||
|
||||
snprintf(uci_str, sizeof(uci_str), "%s", "sysmngr");
|
||||
|
||||
if (uci_lookup_ptr(ctx, &ptr, uci_str, true) != UCI_OK) {
|
||||
BBF_ERR("Failed to lookup for sysmngr config");
|
||||
uci_free_context(ctx);
|
||||
return;
|
||||
}
|
||||
|
||||
struct bbfdm_ctx ctx = {0};
|
||||
struct uci_section *s = NULL, *tmp_s = NULL;
|
||||
int total_reboot_sections = 0;
|
||||
struct uci_element *e, *tmp;
|
||||
int removed_count = 0;
|
||||
|
||||
bbfdm_init_ctx(&ctx);
|
||||
|
||||
// First pass to count total reboot sections
|
||||
uci_foreach_element(&ptr.p->sections, e) {
|
||||
struct uci_section *section = uci_to_section(e);
|
||||
if (strcmp(section->type, "reboot") == 0) {
|
||||
total_reboot_sections++;
|
||||
}
|
||||
BBFDM_UCI_FOREACH_SECTION(&ctx, "sysmngr", "reboot", s) {
|
||||
total_reboot_sections++;
|
||||
}
|
||||
|
||||
// Calculate number of sections to remove
|
||||
int sections_to_remove = total_reboot_sections - ((max_reboot_entries > 0) ? max_reboot_entries : REBOOT_MAX_ENTRIES);
|
||||
if (sections_to_remove < 0) { // No need to delete sections
|
||||
uci_free_context(ctx);
|
||||
bbfdm_free_ctx(&ctx);
|
||||
return;
|
||||
}
|
||||
|
||||
int removed_count = 0;
|
||||
// Second pass to remove excess sections
|
||||
uci_foreach_element_safe(&ptr.p->sections, tmp, e) {
|
||||
struct uci_section *section = uci_to_section(e);
|
||||
BBFDM_UCI_FOREACH_SECTION_SAFE(&ctx, "sysmngr", "reboot", tmp_s, s) {
|
||||
|
||||
if (strcmp(section->type, "reboot") == 0 && removed_count <= sections_to_remove) {
|
||||
if (removed_count <= sections_to_remove) {
|
||||
|
||||
if (sysmngr_uci_delete(ctx, "sysmngr", section->e.name)) {
|
||||
uci_free_context(ctx);
|
||||
if (bbfdm_uci_delete(&ctx, "sysmngr", section_name(s), NULL)) {
|
||||
bbfdm_free_ctx(&ctx);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -161,11 +145,11 @@ static void delete_excess_reboot_sections(int max_reboot_entries)
|
|||
}
|
||||
|
||||
// Commit changes to save deletions
|
||||
if (uci_commit(ctx, &ptr.p, false) != UCI_OK) {
|
||||
BBF_ERR("Failed to commit changes");
|
||||
if (bbfdm_uci_commit_package(&ctx, "sysmngr") != 0) {
|
||||
BBFDM_ERR("Failed to commit changes");
|
||||
}
|
||||
|
||||
uci_free_context(ctx);
|
||||
bbfdm_free_ctx(&ctx);
|
||||
}
|
||||
|
||||
static void create_reboot_section(const char *trigger, const char *reason)
|
||||
|
|
@ -179,20 +163,20 @@ static void create_reboot_section(const char *trigger, const char *reason)
|
|||
snprintf(sec_name, sizeof(sec_name), "reboot_%ld", (long int)time(NULL));
|
||||
calculate_boot_time(boot_time, sizeof(boot_time));
|
||||
|
||||
sysmngr_uci_set("sysmngr", sec_name, NULL, "reboot");
|
||||
sysmngr_uci_set("sysmngr", sec_name, "time_stamp", boot_time);
|
||||
sysmngr_uci_set("sysmngr", sec_name, "firmware_updated", strcmp(trigger, "upgrade") == 0 ? "1" : "0");
|
||||
BBFDM_UCI_SET("sysmngr", sec_name, NULL, "reboot");
|
||||
BBFDM_UCI_SET("sysmngr", sec_name, "time_stamp", boot_time);
|
||||
BBFDM_UCI_SET("sysmngr", sec_name, "firmware_updated", strcmp(trigger, "upgrade") == 0 ? "1" : "0");
|
||||
|
||||
if (strcmp(trigger, "defaultreset") == 0) {
|
||||
sysmngr_uci_set("sysmngr", sec_name, "cause", "FactoryReset");
|
||||
BBFDM_UCI_SET("sysmngr", sec_name, "cause", "FactoryReset");
|
||||
} else {
|
||||
char last_reboot_cause[32] = {0};
|
||||
sysmngr_uci_get("sysmngr", "reboots", "last_reboot_cause", "LocalReboot", last_reboot_cause, sizeof(last_reboot_cause));
|
||||
sysmngr_uci_set("sysmngr", sec_name, "cause", last_reboot_cause);
|
||||
sysmngr_uci_set("sysmngr", "reboots", "last_reboot_cause", "");
|
||||
BBFDM_UCI_GET("sysmngr", "reboots", "last_reboot_cause", "LocalReboot", last_reboot_cause, sizeof(last_reboot_cause));
|
||||
BBFDM_UCI_SET("sysmngr", sec_name, "cause", last_reboot_cause);
|
||||
BBFDM_UCI_SET("sysmngr", "reboots", "last_reboot_cause", "");
|
||||
}
|
||||
|
||||
sysmngr_uci_set("sysmngr", sec_name, "reason", boot_reason_message(trigger, reason));
|
||||
BBFDM_UCI_SET("sysmngr", sec_name, "reason", boot_reason_message(trigger, reason));
|
||||
}
|
||||
|
||||
static void sysmngr_register_boot_action(void)
|
||||
|
|
@ -201,14 +185,14 @@ static void sysmngr_register_boot_action(void)
|
|||
|
||||
// Check if boot action was already executed
|
||||
if (file_exists(REBOOT_LOCK_FILE)) {
|
||||
BBF_INFO("Boot action already completed previously. Skipping registration.");
|
||||
BBFDM_INFO("Boot action already completed previously. Skipping registration.");
|
||||
return;
|
||||
}
|
||||
|
||||
get_boot_option_value("triggered", trigger, sizeof(trigger));
|
||||
get_boot_option_value("reason", reason, sizeof(reason));
|
||||
|
||||
BBF_DEBUG("RESET triggered[%s], reason[%s] ...", trigger, reason);
|
||||
BBFDM_DEBUG("RESET triggered[%s], reason[%s] ...", trigger, reason);
|
||||
if (strcmp(trigger, "defaultreset") == 0) {
|
||||
reset_option_counter("boot_count", "1");
|
||||
reset_option_counter("curr_version_boot_count", "0");
|
||||
|
|
@ -227,7 +211,7 @@ static void sysmngr_register_boot_action(void)
|
|||
increment_option_counter("warm_boot_count");
|
||||
}
|
||||
|
||||
sysmngr_uci_get("sysmngr", "reboots", "max_reboot_entries", "3", max_entries, sizeof(max_entries));
|
||||
BBFDM_UCI_GET("sysmngr", "reboots", "max_reboot_entries", "3", max_entries, sizeof(max_entries));
|
||||
int max_reboot_entries = (int)strtol(max_entries, NULL, 10);
|
||||
|
||||
if (max_reboot_entries != 0) {
|
||||
|
|
@ -271,12 +255,12 @@ static struct uloop_timeout reboot_timer = { .cb = reboot_check_timer };
|
|||
void sysmngr_reboots_init(void)
|
||||
{
|
||||
if (file_exists(REBOOT_LOCK_FILE)) {
|
||||
BBF_INFO("Boot action already completed previously. Skipping registration.");
|
||||
BBFDM_INFO("Boot action already completed previously. Skipping registration.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (check_valid_reset_reason_file() == true) {
|
||||
BBF_INFO("Valid reset reason file '%s' found. Proceeding to register boot action", RESET_REASON_PATH);
|
||||
BBFDM_INFO("Valid reset reason file '%s' found. Proceeding to register boot action", RESET_REASON_PATH);
|
||||
sysmngr_register_boot_action();
|
||||
return;
|
||||
}
|
||||
|
|
@ -285,10 +269,10 @@ void sysmngr_reboots_init(void)
|
|||
g_retry_count++;
|
||||
uloop_timeout_set(&reboot_timer, REBOOT_RETRY_DELAY * 1000);
|
||||
|
||||
BBF_WARNING("## Attempt %d/%d: Reset reason file '%s' not found. Retrying in %d second(s)...",
|
||||
BBFDM_WARNING("## Attempt %d/%d: Reset reason file '%s' not found. Retrying in %d second(s)...",
|
||||
g_retry_count, REBOOT_MAX_RETRIES, RESET_REASON_PATH, REBOOT_RETRY_DELAY);
|
||||
} else {
|
||||
BBF_WARNING("Max retries reached (%d). A valid reset reason file '%s' not found. Proceeding with boot action registration",
|
||||
BBFDM_WARNING("Max retries reached (%d). A valid reset reason file '%s' not found. Proceeding with boot action registration",
|
||||
REBOOT_MAX_RETRIES, RESET_REASON_PATH);
|
||||
sysmngr_register_boot_action();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ static void usage(char *prog)
|
|||
static void config_reload_cb(struct ubus_context *ctx, struct ubus_event_handler *ev,
|
||||
const char *type, struct blob_attr *msg)
|
||||
{
|
||||
BBF_INFO("Reloading sysmngr upon 'sysmngr.reload' event");
|
||||
BBFDM_INFO("Reloading sysmngr upon 'sysmngr.reload' event");
|
||||
|
||||
#ifdef SYSMNGR_PROCESS_STATUS
|
||||
sysmngr_cpu_clean();
|
||||
|
|
|
|||
147
src/utils.c
147
src/utils.c
|
|
@ -150,149 +150,6 @@ void send_transfer_complete_event(const char *command, const char *obj_path, con
|
|||
blob_buf_free(&bb);
|
||||
}
|
||||
|
||||
int sysmngr_uci_get(const char *package, const char *section, const char *option, const char *default_value, char *buffer, size_t buffer_size)
|
||||
{
|
||||
struct uci_ptr ptr = {0};
|
||||
char uci_str[128] = {0};
|
||||
|
||||
if (!package || !section || !option || !default_value || !buffer || !buffer_size)
|
||||
return -1;
|
||||
|
||||
struct uci_context *ctx = uci_alloc_context();
|
||||
if (!ctx) {
|
||||
BBF_ERR("UCI context allocation failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
snprintf(uci_str, sizeof(uci_str), "%s.%s.%s", package, section, option);
|
||||
|
||||
if (uci_lookup_ptr(ctx, &ptr, uci_str, true) != UCI_OK || ptr.o == NULL) {
|
||||
snprintf(buffer, buffer_size, "%s", default_value);
|
||||
uci_free_context(ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
snprintf(buffer, buffer_size, "%s", ptr.o->v.string);
|
||||
uci_free_context(ctx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sysmngr_uci_set(const char *package, const char *section, const char *option, const char *value)
|
||||
{
|
||||
struct uci_ptr ptr = {0};
|
||||
char uci_str[128] = {0};
|
||||
|
||||
if (!package || !section || !value)
|
||||
return -1;
|
||||
|
||||
struct uci_context *ctx = uci_alloc_context();
|
||||
if (!ctx) {
|
||||
BBF_ERR("UCI context allocation failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
snprintf(uci_str, sizeof(uci_str), "%s.%s%s%s=%s",
|
||||
package,
|
||||
section,
|
||||
option ? "." : "",
|
||||
option ? option : "",
|
||||
value);
|
||||
|
||||
if (uci_lookup_ptr(ctx, &ptr, uci_str, true) != UCI_OK ||
|
||||
uci_set(ctx, &ptr) != UCI_OK ||
|
||||
uci_save(ctx, ptr.p) != UCI_OK ||
|
||||
uci_commit(ctx, &ptr.p, false) != UCI_OK) {
|
||||
|
||||
uci_free_context(ctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
uci_free_context(ctx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sysmngr_uci_delete(struct uci_context *uci_ctx, const char *package, const char *section)
|
||||
{
|
||||
struct uci_ptr ptr = {0};
|
||||
char uci_str[64] = {0};
|
||||
|
||||
if (!package || !section)
|
||||
return -1;
|
||||
|
||||
snprintf(uci_str, sizeof(uci_str), "%s.%s", package, section);
|
||||
|
||||
if (uci_lookup_ptr(uci_ctx, &ptr, uci_str, true) != UCI_OK ||
|
||||
uci_delete(uci_ctx, &ptr) != UCI_OK ||
|
||||
uci_save(uci_ctx, ptr.p) != UCI_OK) {
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sysmngr_ubus_invoke_sync(const char *obj, const char *method, struct blob_attr *msg, sysmngr_ubus_cb data_callback, void *callback_args)
|
||||
{
|
||||
uint32_t id;
|
||||
int rc = 0;
|
||||
|
||||
struct ubus_context *ubus_ctx = ubus_connect(NULL);
|
||||
if (!ubus_ctx) {
|
||||
BBF_ERR("Failed to connect with ubus, error: '%d'", errno);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!ubus_lookup_id(ubus_ctx, obj, &id)) {
|
||||
rc = ubus_invoke(ubus_ctx, id, method, msg, data_callback, callback_args, 5000);
|
||||
} else {
|
||||
BBF_ERR("Failed to lookup ubus object: '%s'", obj);
|
||||
rc = -1;
|
||||
}
|
||||
|
||||
ubus_free(ubus_ctx);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
int sysmngr_ubus_invoke_async(struct ubus_context *ubus_ctx, const char *obj, const char *method, struct blob_attr *msg,
|
||||
sysmngr_ubus_cb data_callback, sysmngr_ubus_async_cb complete_callback)
|
||||
{
|
||||
struct ubus_request *req = NULL;
|
||||
uint32_t id;
|
||||
|
||||
if (ubus_ctx == NULL) {
|
||||
BBF_ERR("Failed to connect with ubus, error: '%d'", errno);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ubus_lookup_id(ubus_ctx, obj, &id)) {
|
||||
BBF_DEBUG("Failed to lookup ubus object: '%s'", obj);
|
||||
return -1;
|
||||
}
|
||||
|
||||
req = (struct ubus_request *)calloc(1, sizeof(struct ubus_request));
|
||||
if (req == NULL) {
|
||||
BBF_ERR("failed to allocate memory for ubus request");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ubus_invoke_async(ubus_ctx, id, method, msg, req)) {
|
||||
BBF_ERR("ubus async call failed for object: '%s', method: '%s'", obj, method);
|
||||
FREE(req);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (data_callback)
|
||||
req->data_cb = data_callback;
|
||||
|
||||
if (complete_callback)
|
||||
req->complete_cb = complete_callback;
|
||||
|
||||
ubus_complete_request_async(ubus_ctx, req);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sysmngr_get_uptime(void)
|
||||
{
|
||||
// cppcheck-suppress cert-MSC24-C
|
||||
|
|
@ -323,8 +180,8 @@ void sysmngr_generate_critical_log_file(const char *log_path, const char *type,
|
|||
|
||||
int res = run_cmd(cmd, output, sizeof(output));
|
||||
if (!res || strncmp(output, "Success", 7) == 0)
|
||||
BBF_DEBUG("Critical log generation succeeded: result=%d, output='%s'", res, output);
|
||||
BBFDM_DEBUG("Critical log generation succeeded: result=%d, output='%s'", res, output);
|
||||
else
|
||||
BBF_DEBUG("Critical log generation failed: result=%d, output='%s'", res, output);
|
||||
BBFDM_DEBUG("Critical log generation failed: result=%d, output='%s'", res, output);
|
||||
}
|
||||
|
||||
|
|
|
|||
11
src/utils.h
11
src/utils.h
|
|
@ -21,17 +21,6 @@ bool validate_server_response_code(const char *url, int response_code);
|
|||
void send_transfer_complete_event(const char *command, const char *obj_path, const char *transfer_url,
|
||||
char *fault_string, time_t start_t, time_t complete_t, const char *commandKey, const char *transfer_type);
|
||||
|
||||
int sysmngr_uci_get(const char *package, const char *section, const char *option, const char *default_value, char *buffer, size_t buffer_size);
|
||||
int sysmngr_uci_set(const char *package, const char *section, const char *option, const char *value);
|
||||
int sysmngr_uci_delete(struct uci_context *uci_ctx, const char *package, const char *section);
|
||||
|
||||
typedef void (*sysmngr_ubus_cb)(struct ubus_request *req, int type, struct blob_attr *msg);
|
||||
typedef void (*sysmngr_ubus_async_cb)(struct ubus_request *req, int ret);
|
||||
|
||||
int sysmngr_ubus_invoke_sync(const char *obj, const char *method, struct blob_attr *msg, sysmngr_ubus_cb data_callback, void *callback_args);
|
||||
int sysmngr_ubus_invoke_async(struct ubus_context *ubus_ctx, const char *obj, const char *method, struct blob_attr *msg,
|
||||
sysmngr_ubus_cb data_callback, sysmngr_ubus_async_cb complete_callback);
|
||||
|
||||
int sysmngr_get_uptime(void);
|
||||
|
||||
void sysmngr_generate_critical_log_file(const char *log_path, const char *log_name, bool critical_state);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue