Align with libbbfdm-api-v2 library

This commit is contained in:
Amin Ben Romdhane 2025-01-28 08:49:49 +00:00 committed by IOPSYS Dev
parent 3470caa72a
commit 7d5bf8e075
No known key found for this signature in database
9 changed files with 169 additions and 341 deletions

View file

@ -4,7 +4,7 @@ OBJS = sysmngr.o deviceinfo.o utils.o
PROG_CFLAGS = $(CFLAGS) -Wall -Werror -fstrict-aliasing -g 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 FPIC := -fPIC
ifeq ($(SYSMNGR_VENDOR_CONFIG_FILE),y) ifeq ($(SYSMNGR_VENDOR_CONFIG_FILE),y)

View file

@ -132,10 +132,10 @@ static void _exec_reboot(const void *arg1, void *arg2)
sleep(3); sleep(3);
dmubus_call_set("rpc-sys", "reboot", UBUS_ARGS{0}, 0); dmubus_call_set("rpc-sys", "reboot", UBUS_ARGS{0}, 0);
sleep(5); // Wait for reboot to happen 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); dmubus_call_set("system", "reboot", UBUS_ARGS{0}, 0);
sleep(5); // Wait for reboot 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 // Set last_reboot_cause to empty because there is a problem in the system reboot
dmuci_set_value(config_name, "reboots", "last_reboot_cause", ""); dmuci_set_value(config_name, "reboots", "last_reboot_cause", "");

View file

@ -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); task = container_of(p, struct sysmngr_task_data, process);
if (task == NULL) { if (task == NULL) {
BBF_ERR("Failed to decode forked task"); BBFDM_ERR("Failed to decode forked task");
return; 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); sysmngr_task_data_t *task = container_of(t, sysmngr_task_data_t, timeoutcb);
if (task && task->process.pid > 0) { 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); 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) { if (pipe(task->pipe_fds) == -1) {
BBF_ERR("pipe failed"); BBFDM_ERR("pipe failed");
FREE(task); FREE(task);
return -1; return -1;
} }
@ -165,7 +165,7 @@ static int sysmngr_task_fork(sysmngr_task_callback_t finishcb, const char *comma
child = fork(); child = fork();
if (child == -1) { if (child == -1) {
BBF_ERR("Failed to fork a child for task"); BBFDM_ERR("Failed to fork a child for task");
FREE(task); FREE(task);
return -1; return -1;
} else if (child == 0) { } else if (child == 0) {
@ -203,7 +203,7 @@ static void fwbank_dump_timer(struct uloop_timeout *timeout)
{ {
struct fwbank_dump_data *data = NULL; 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); data = container_of(timeout, struct fwbank_dump_data, tm);
if (data == NULL) 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) static int free_global_fwbank_dump(struct blob_buf *fwbank_dump_bb)
{ {
if (fwbank_dump_bb->head && blob_len(fwbank_dump_bb->head)) { 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); blob_buf_free(fwbank_dump_bb);
} else { } else {
BBF_DEBUG("fwbank dump blob buffer is already empty"); BBFDM_DEBUG("fwbank dump blob buffer is already empty");
} }
return 0; 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) static int validate_global_fwbank_dump(struct blob_buf *fwbank_dump_bb)
{ {
if (!fwbank_dump_bb->head || !blob_len(fwbank_dump_bb->head)) { 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; return -1;
} }
BBF_DEBUG("Validating global fwbank dump"); BBFDM_DEBUG("Validating global fwbank dump");
struct blob_attr *tb[1] = {0}; 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))) { 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; return -1;
} }
if (!tb[0]) { // bank array is not found 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; return -1;
} }
@ -251,7 +251,7 @@ static int validate_global_fwbank_dump(struct blob_buf *fwbank_dump_bb)
struct blob_attr *t[8] = {0}; struct blob_attr *t[8] = {0};
if (blobmsg_parse(sysmngr_bank_policy, ARRAY_SIZE(sysmngr_bank_policy), t, blobmsg_data(entry), blobmsg_len(entry))) { 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; 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; return valid;
} }
static void fwbank_dump_finish_callback(struct ubus_context *ctx, struct ubus_request_data *req, int *pipe_fds, uint32_t bank_id) 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 close(pipe_fds[1]); // Close unused write end
char buffer[1024] = {0}; char buffer[1024] = {0};
ssize_t bytes_read; ssize_t bytes_read;
BBF_DEBUG("Reading script output..."); BBFDM_DEBUG("Reading script output...");
// Read the output from the script // Read the output from the script
while ((bytes_read = read(pipe_fds[0], buffer, sizeof(buffer) - 1)) > 0) { while ((bytes_read = read(pipe_fds[0], buffer, sizeof(buffer) - 1)) > 0) {
buffer[bytes_read] = '\0'; // Null-terminate the buffer 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 close(pipe_fds[0]); // Close read end
if (bytes_read < 0 || strlen(buffer) == 0) { if (bytes_read < 0 || strlen(buffer) == 0) {
BBF_ERR("Failed to read from pipe"); BBFDM_ERR("Failed to read from pipe");
goto retry; 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); blob_buf_init(&temp_buf, 0);
if (!blobmsg_add_json_from_string(&temp_buf, buffer)) { 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); blob_buf_free(&temp_buf);
goto retry; goto retry;
} }
int res = validate_global_fwbank_dump(&temp_buf); int res = validate_global_fwbank_dump(&temp_buf);
if (res) { if (res) {
BBF_ERR("Failed to validate 'fwbank' output"); BBFDM_ERR("Failed to validate 'fwbank' output");
blob_buf_free(&temp_buf); blob_buf_free(&temp_buf);
goto retry; goto retry;
} }
@ -328,25 +328,25 @@ retry:
g_retry_count++; g_retry_count++;
uloop_timeout_set(&g_fwbank_dump.tm, FWBANK_DUMP_RETRY_DELAY * 1000); 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); g_retry_count, FWBANK_DUMP_MAX_RETRIES, FWBANK_DUMP_RETRY_DELAY);
} else { } 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); FWBANK_DUMP_MAX_RETRIES);
} }
} }
static int init_global_fwbank_dump(void) 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); int res = sysmngr_task_fork(fwbank_dump_finish_callback, FWBANK_DUMP_CMD, 120, NULL, 0);
if (res) { if (res) {
BBF_ERR("Failed to start task for fwbank dump command"); BBFDM_ERR("Failed to start task for fwbank dump command");
return -1; return -1;
} }
BBF_DEBUG("fwbank dump blob initialized successfully"); BBFDM_DEBUG("fwbank dump blob initialized successfully");
return 0; return 0;
} }
@ -354,7 +354,7 @@ static void fwbank_listen_timeout(struct uloop_timeout *timeout)
{ {
struct fwbank_event_data *data = NULL; 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); data = container_of(timeout, struct fwbank_event_data, tm);
if (data == NULL) if (data == NULL)
@ -372,7 +372,7 @@ static void fwbank_receive_sysupgrade(struct ubus_context *ctx, struct ubus_even
int rem; int rem;
if (!msg || !ev) { if (!msg || !ev) {
BBF_ERR("Invalid event data in sysupgrade handler"); BBFDM_ERR("Invalid event data in sysupgrade handler");
return; return;
} }
@ -381,7 +381,7 @@ static void fwbank_receive_sysupgrade(struct ubus_context *ctx, struct ubus_even
return; return;
if (data->band_id < 0) { // bank_id should be a valid id 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; 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) { if (DM_STRCMP("bank_id", blobmsg_name(cur)) == 0) {
char *attr_val = (char *)blobmsg_data(cur); char *attr_val = (char *)blobmsg_data(cur);
if (DM_STRCMP(attr_val, bank_id_str) != 0) { 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; return;
} }
} }
@ -400,12 +400,12 @@ static void fwbank_receive_sysupgrade(struct ubus_context *ctx, struct ubus_even
char *attr_val = (char *)blobmsg_data(cur); char *attr_val = (char *)blobmsg_data(cur);
if (DM_STRCMP(attr_val, "Downloading") == 0) { if (DM_STRCMP(attr_val, "Downloading") == 0) {
BBF_DEBUG("Sysupgrade status: Downloading"); BBFDM_DEBUG("Sysupgrade status: Downloading");
return; return;
} }
if (DM_STRCMP(attr_val, "Available") == 0) { 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(); init_global_fwbank_dump();
break; 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) 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.ctx = ctx;
g_fwbank_event_data.band_id = band_id; 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 // 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) { 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; return false;
} }
@ -469,7 +469,7 @@ static bool is_upgrade_success(struct blob_buf *output_bb)
// Parse the blob buffer for the "result" field // 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) { 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; 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) 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 close(pipe_fds[1]); // Close unused write end
char buffer[1024] = {0}; char buffer[1024] = {0};
ssize_t bytes_read; ssize_t bytes_read;
BBF_DEBUG("Reading script output..."); BBFDM_DEBUG("Reading script output...");
// Read the output from the script // Read the output from the script
while ((bytes_read = read(pipe_fds[0], buffer, sizeof(buffer) - 1)) > 0) { while ((bytes_read = read(pipe_fds[0], buffer, sizeof(buffer) - 1)) > 0) {
buffer[bytes_read] = '\0'; // Null-terminate the buffer 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 close(pipe_fds[0]); // Close read end
if (bytes_read < 0) { if (bytes_read < 0) {
BBF_ERR("Failed to read from pipe"); BBFDM_ERR("Failed to read from pipe");
return; return;
} }
@ -515,7 +515,7 @@ static void fwbank_set_bootbank_finish_callback(struct ubus_context *ctx, struct
blob_buf_init(&setbootbank_bb, 0); blob_buf_init(&setbootbank_bb, 0);
if (!blobmsg_add_json_from_string(&setbootbank_bb, buffer)) { 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); blob_buf_free(&setbootbank_bb);
return; 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); bool is_success = is_set_bootbank_success(&setbootbank_bb);
if (ctx && req) { if (ctx && req) {
BBF_DEBUG("Send ubus output"); BBFDM_DEBUG("Send ubus output");
ubus_send_reply(ctx, req, setbootbank_bb.head); 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); int res = sysmngr_task_fork(fwbank_set_bootbank_finish_callback, cmd, 10, req, 0);
if (res) { 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; 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) 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 close(pipe_fds[1]); // Close unused write end
char buffer[1024] = {0}; char buffer[1024] = {0};
ssize_t bytes_read; ssize_t bytes_read;
BBF_DEBUG("Reading script output..."); BBFDM_DEBUG("Reading script output...");
// Read the output from the script // Read the output from the script
while ((bytes_read = read(pipe_fds[0], buffer, sizeof(buffer) - 1)) > 0) { while ((bytes_read = read(pipe_fds[0], buffer, sizeof(buffer) - 1)) > 0) {
buffer[bytes_read] = '\0'; // Null-terminate the buffer 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 close(pipe_fds[0]); // Close read end
if (bytes_read < 0) { if (bytes_read < 0) {
BBF_ERR("Failed to read from pipe"); BBFDM_ERR("Failed to read from pipe");
return; return;
} }
@ -582,7 +582,7 @@ static void fwbank_upgrade_finish_callback(struct ubus_context *ctx, struct ubus
blob_buf_init(&upgrade_bb, 0); blob_buf_init(&upgrade_bb, 0);
if (!blobmsg_add_json_from_string(&upgrade_bb, buffer)) { 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); blob_buf_free(&upgrade_bb);
return; 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); bool is_success = is_upgrade_success(&upgrade_bb);
if (ctx && req) { if (ctx && req) {
BBF_DEBUG("Send ubus output"); BBFDM_DEBUG("Send ubus output");
ubus_send_reply(ctx, req, upgrade_bb.head); 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); int res = sysmngr_task_fork(fwbank_upgrade_finish_callback, cmd, 10, req, bank_id);
if (res) { if (res) {
BBF_ERR("Failed to start task for fwbank upgrade command"); BBFDM_ERR("Failed to start task for fwbank upgrade command");
return -1; return -1;
} }
@ -647,7 +647,7 @@ static int set_bootbank_handler(struct ubus_context *ctx, struct ubus_object *ob
int res = 0; int res = 0;
if (blobmsg_parse(set_bootbank_policy, __SET_BOOT_MAX, tb, blob_data(msg), blob_len(msg))) { 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; return UBUS_STATUS_UNKNOWN_ERROR;
} }
@ -696,7 +696,7 @@ static int upgrade_handler(struct ubus_context *ctx, struct ubus_object *obj,
int res = 0; int res = 0;
if (blobmsg_parse(upgrade_policy, __UPGRADE_MAX, tb, blob_data(msg), blob_len(msg))) { 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; 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); int res = ubus_add_object(ubus_ctx, &fwbank_object);
if (res) { if (res) {
BBF_ERR("Failed to register 'fwbank' ubus object!!!!!!"); BBFDM_ERR("Failed to register 'fwbank' ubus object!!!!!!");
return -1; return -1;
} }
BBF_INFO("'fwbank' ubus object was registered"); BBFDM_INFO("'fwbank' ubus object was registered");
return res; return res;
} }
@ -758,7 +758,7 @@ int sysmngr_unregister_fwbank(struct ubus_context *ubus_ctx)
{ {
ubus_remove_object(ubus_ctx, &fwbank_object); 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; return 0;
} }
@ -770,13 +770,13 @@ int sysmngr_init_fwbank_dump(struct ubus_context *ubus_ctx)
g_fwbank_dump.tm.cb = fwbank_dump_timer; g_fwbank_dump.tm.cb = fwbank_dump_timer;
if (!file_exists(FWBANK_FILE_PATH)) { 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; return -1;
} }
res = init_global_fwbank_dump(); res = init_global_fwbank_dump();
if (res) { 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; return -1;
} }

View file

@ -11,6 +11,8 @@
#include "utils.h" #include "utils.h"
#include <libbbfdm-api/bbfdm_api.h>
#define DEFAULT_POLLING_INTERVAL "60" #define DEFAULT_POLLING_INTERVAL "60"
#define DEFAULT_CRITICAL_RISE_THRESHOLD "80" #define DEFAULT_CRITICAL_RISE_THRESHOLD "80"
#define DEFAULT_CRITICAL_FALL_THRESHOLD "60" #define DEFAULT_CRITICAL_FALL_THRESHOLD "60"
@ -49,7 +51,7 @@ int sysmngr_meminfo(mem_info *info)
// cppcheck-suppress cert-MSC24-C // cppcheck-suppress cert-MSC24-C
if ((f = fopen("/proc/meminfo", "r")) == NULL) { 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; return -1;
} }
@ -81,7 +83,7 @@ static unsigned int calculate_memory_utilization(void)
mem_info info = {0}; mem_info info = {0};
if (sysmngr_meminfo(&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; return 0;
} }
@ -112,11 +114,8 @@ static void send_memory_critical_state_event(unsigned int mem_utilization)
blobmsg_close_array(&bb, arr); blobmsg_close_array(&bb, arr);
if (sysmngr_ubus_invoke_sync("bbfdm", "notify_event", bb.head, NULL, NULL)) { BBFDM_UBUS_INVOKE_SYNC("bbfdm", "notify_event", bb.head, 5000, NULL, NULL);
BBF_ERR("Failed to send 'MemoryCriticalState!' event"); BBFDM_DEBUG("'MemoryCriticalState!' event sent successfully with utilization at %u%%.", mem_utilization);
} else {
BBF_DEBUG("'MemoryCriticalState!' event sent successfully with utilization at %u%%.", mem_utilization);
}
blob_buf_free(&bb); blob_buf_free(&bb);
} }
@ -129,12 +128,12 @@ static void run_memory_monitor(void)
if ((mem_utilization > g_memory_ctx.critical_rise_threshold) && if ((mem_utilization > g_memory_ctx.critical_rise_threshold) &&
(g_memory_ctx.critical_fall_time >= g_memory_ctx.critical_rise_time)) { (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 // Update CriticalRiseTimeStamp to the current time
g_memory_ctx.critical_rise_time = time(NULL); g_memory_ctx.critical_rise_time = time(NULL);
snprintf(buf, sizeof(buf), "%ld", (long int)g_memory_ctx.critical_rise_time); 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) { if (g_memory_ctx.enable_critical_log) {
// Generate log into the vendor log file referenced by 'VendorLogFileRef' parameter indicating critical condition is reached // 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) && if ((mem_utilization < g_memory_ctx.critical_fall_threshold) &&
(g_memory_ctx.critical_rise_time > g_memory_ctx.critical_fall_time)) { (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 // Update CriticalFallTimeStamp to the current time
g_memory_ctx.critical_fall_time = time(NULL); g_memory_ctx.critical_fall_time = time(NULL);
snprintf(buf, sizeof(buf), "%ld", (long int)g_memory_ctx.critical_fall_time); 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) { 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 // 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); 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; 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); 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); 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); 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); 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); 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); 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); 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)); BBFDM_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_DEBUG("Memory Monitor Config: |FilePath| |%s|", g_memory_ctx.log_file);
if (!file_exists(g_memory_ctx.log_file)) { if (!file_exists(g_memory_ctx.log_file)) {
// Create empty file if it doesn't exist // Create empty file if it doesn't exist
create_empty_file(g_memory_ctx.log_file); create_empty_file(g_memory_ctx.log_file);
@ -222,18 +221,18 @@ void sysmngr_memory_init(void)
fill_global_memory_ctx(); fill_global_memory_ctx();
if (!g_memory_ctx.enable) { if (!g_memory_ctx.enable) {
BBF_INFO("Memory monitoring is disabled."); BBFDM_INFO("Memory monitoring is disabled.");
return; return;
} }
BBF_INFO("Memory monitoring is enabled"); BBFDM_INFO("Memory monitoring is enabled");
run_memory_monitor(); run_memory_monitor();
} }
void sysmngr_memory_clean(void) void sysmngr_memory_clean(void)
{ {
uloop_timeout_cancel(&g_memory_ctx.memory_timer); uloop_timeout_cancel(&g_memory_ctx.memory_timer);
BBF_INFO("Memory monitoring process stopped"); BBFDM_INFO("Memory monitoring process stopped");
} }
/************************************************************* /*************************************************************

View file

@ -12,6 +12,8 @@
#include "utils.h" #include "utils.h"
#include "processes.h" #include "processes.h"
#include <libbbfdm-api/bbfdm_api.h>
#define DEFAULT_CPU_NAME "cpu" #define DEFAULT_CPU_NAME "cpu"
#define DEFAULT_CPU_POLL_INTERVAL "5" #define DEFAULT_CPU_POLL_INTERVAL "5"
#define DEFAULT_CPU_NUM_SAMPLES "30" #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); 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); 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); blobmsg_close_array(&bb, a);
@ -243,7 +245,7 @@ static void init_process_list(void)
if (dir == NULL) if (dir == NULL)
return; return;
BBF_INFO("Init process list"); BBFDM_INFO("Init process list");
while ((entry = readdir(dir)) != NULL) { while ((entry = readdir(dir)) != NULL) {
struct stat stats = {0}; struct stat stats = {0};
@ -303,7 +305,7 @@ static void init_process_list(void)
process_entry *pentry = (process_entry *)calloc(1, sizeof(process_entry)); process_entry *pentry = (process_entry *)calloc(1, sizeof(process_entry));
if (!pentry) { if (!pentry) {
BBF_ERR("failed to allocate memory for process entry"); BBFDM_ERR("failed to allocate memory for process entry");
return; return;
} }
@ -331,7 +333,7 @@ static void free_process_list(void)
{ {
process_entry *entry = NULL, *tmp = NULL; 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_for_each_entry_safe(entry, tmp, &g_process_ctx.list, list) {
list_del(&entry->list); list_del(&entry->list);
@ -343,7 +345,7 @@ static int get_instance_refresh_interval(void)
{ {
char buf[8] = {0}; 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); return (int)strtol(buf, NULL, 10);
} }
@ -354,14 +356,14 @@ static void run_refresh_process_list(void)
init_process_list(); init_process_list();
if (g_process_ctx.refresh_interval > 0) { 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); 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) 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(); run_refresh_process_list();
FREE(req); FREE(req);
} }
@ -373,14 +375,14 @@ static void process_refresh_instance_timer(struct uloop_timeout *timeout)
memset(&bb, 0, sizeof(struct blob_buf)); memset(&bb, 0, sizeof(struct blob_buf));
blob_buf_init(&bb, 0); 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); blob_buf_free(&bb);
if (res) { 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(); run_refresh_process_list();
} else { } 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); blobmsg_close_array(&bb, arr);
if (sysmngr_ubus_invoke_sync("bbfdm", "notify_event", bb.head, NULL, NULL)) { BBFDM_UBUS_INVOKE_SYNC("bbfdm", "notify_event", bb.head, 5000, NULL, NULL);
BBF_ERR("Failed to send 'CPUCriticalState!' event"); BBFDM_DEBUG("'CPUCriticalState!' event sent successfully with utilization at %u%%.", cpu_utilization);
} else {
BBF_DEBUG("'CPUCriticalState!' event sent successfully with utilization at %u%%.", cpu_utilization);
}
blob_buf_free(&bb); blob_buf_free(&bb);
} }
@ -468,12 +467,12 @@ static void run_cpu_monitor(void)
if ((avg_utilization > g_cpu_info.critical_rise_threshold) && if ((avg_utilization > g_cpu_info.critical_rise_threshold) &&
(g_cpu_info.critical_fall_time >= g_cpu_info.critical_rise_time)) { (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 // Update CriticalRiseTimeStamp to the current time
g_cpu_info.critical_rise_time = time(NULL); g_cpu_info.critical_rise_time = time(NULL);
snprintf(buf, sizeof(buf), "%ld", (long int)g_cpu_info.critical_rise_time); 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) { if (g_cpu_info.enable_critical_log) {
// Generate log into the vendor log file referenced by 'VendorLogFileRef' parameter indicating critical condition is reached // 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) && if ((avg_utilization < g_cpu_info.critical_fall_threshold) &&
(g_cpu_info.critical_rise_time > g_cpu_info.critical_fall_time)) { (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 // Update CriticalFallTimeStamp to the current time
g_cpu_info.critical_fall_time = time(NULL); g_cpu_info.critical_fall_time = time(NULL);
snprintf(buf, sizeof(buf), "%ld", (long int)g_cpu_info.critical_fall_time); 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) { 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 // 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); 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; 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); 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); 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); 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); 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); 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); 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); 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); 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)); BBFDM_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_DEBUG("Memory Monitor Config: |FilePath| |%s|", g_cpu_info.log_file);
if (!file_exists(g_cpu_info.log_file)) { if (!file_exists(g_cpu_info.log_file)) {
// Create empty file if it doesn't exist // Create empty file if it doesn't exist
create_empty_file(g_cpu_info.log_file); 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)); 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 || if (!g_cpu_info.utilization_samples || !g_cpu_info.user_utilization_samples ||
!g_cpu_info.system_utilization_samples || !g_cpu_info.idle_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; return -1;
} }
@ -602,18 +601,18 @@ void sysmngr_cpu_init(void)
{ {
int res = fill_global_cpu_info(); int res = fill_global_cpu_info();
if (res) { if (res) {
BBF_ERR("Can't start CPU monitoring!!"); BBFDM_ERR("Can't start CPU monitoring!!");
return; return;
} }
if (!g_cpu_info.enable) { if (!g_cpu_info.enable) {
BBF_INFO("CPU monitoring is disabled."); BBFDM_INFO("CPU monitoring is disabled.");
return; return;
} else { } 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); 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(); free_global_cpu_info();
uloop_timeout_cancel(&g_cpu_info.cpu_timer); 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; int id = 0;
if (g_process_ctx.refresh_interval <= 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); uloop_timeout_set(&g_process_ctx.instance_timer, 2 * 1000);
} }

View file

@ -19,6 +19,8 @@
#include <time.h> #include <time.h>
#include <unistd.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 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 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 #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) 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) static void increment_option_counter(const char *option_name)
{ {
char buf[16] = {0}; 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; int counter = (int)strtol(buf, NULL, 10) + 1;
snprintf(buf, sizeof(buf), "%d", counter); 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) 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) static void delete_excess_reboot_sections(int max_reboot_entries)
{ {
struct uci_ptr ptr = {0}; struct bbfdm_ctx ctx = {0};
char uci_str[16] = {0}; struct uci_section *s = NULL, *tmp_s = NULL;
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;
}
int total_reboot_sections = 0; 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 // First pass to count total reboot sections
uci_foreach_element(&ptr.p->sections, e) { BBFDM_UCI_FOREACH_SECTION(&ctx, "sysmngr", "reboot", s) {
struct uci_section *section = uci_to_section(e); total_reboot_sections++;
if (strcmp(section->type, "reboot") == 0) {
total_reboot_sections++;
}
} }
// Calculate number of sections to remove // Calculate number of sections to remove
int sections_to_remove = total_reboot_sections - ((max_reboot_entries > 0) ? max_reboot_entries : REBOOT_MAX_ENTRIES); 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 if (sections_to_remove < 0) { // No need to delete sections
uci_free_context(ctx); bbfdm_free_ctx(&ctx);
return; return;
} }
int removed_count = 0;
// Second pass to remove excess sections // Second pass to remove excess sections
uci_foreach_element_safe(&ptr.p->sections, tmp, e) { BBFDM_UCI_FOREACH_SECTION_SAFE(&ctx, "sysmngr", "reboot", tmp_s, s) {
struct uci_section *section = uci_to_section(e);
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)) { if (bbfdm_uci_delete(&ctx, "sysmngr", section_name(s), NULL)) {
uci_free_context(ctx); bbfdm_free_ctx(&ctx);
return; return;
} }
@ -161,11 +145,11 @@ static void delete_excess_reboot_sections(int max_reboot_entries)
} }
// Commit changes to save deletions // Commit changes to save deletions
if (uci_commit(ctx, &ptr.p, false) != UCI_OK) { if (bbfdm_uci_commit_package(&ctx, "sysmngr") != 0) {
BBF_ERR("Failed to commit changes"); 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) 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)); snprintf(sec_name, sizeof(sec_name), "reboot_%ld", (long int)time(NULL));
calculate_boot_time(boot_time, sizeof(boot_time)); calculate_boot_time(boot_time, sizeof(boot_time));
sysmngr_uci_set("sysmngr", sec_name, NULL, "reboot"); BBFDM_UCI_SET("sysmngr", sec_name, NULL, "reboot");
sysmngr_uci_set("sysmngr", sec_name, "time_stamp", boot_time); BBFDM_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, "firmware_updated", strcmp(trigger, "upgrade") == 0 ? "1" : "0");
if (strcmp(trigger, "defaultreset") == 0) { if (strcmp(trigger, "defaultreset") == 0) {
sysmngr_uci_set("sysmngr", sec_name, "cause", "FactoryReset"); BBFDM_UCI_SET("sysmngr", sec_name, "cause", "FactoryReset");
} else { } else {
char last_reboot_cause[32] = {0}; char last_reboot_cause[32] = {0};
sysmngr_uci_get("sysmngr", "reboots", "last_reboot_cause", "LocalReboot", last_reboot_cause, sizeof(last_reboot_cause)); BBFDM_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); BBFDM_UCI_SET("sysmngr", sec_name, "cause", last_reboot_cause);
sysmngr_uci_set("sysmngr", "reboots", "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) 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 // Check if boot action was already executed
if (file_exists(REBOOT_LOCK_FILE)) { 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; return;
} }
get_boot_option_value("triggered", trigger, sizeof(trigger)); get_boot_option_value("triggered", trigger, sizeof(trigger));
get_boot_option_value("reason", reason, sizeof(reason)); 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) { if (strcmp(trigger, "defaultreset") == 0) {
reset_option_counter("boot_count", "1"); reset_option_counter("boot_count", "1");
reset_option_counter("curr_version_boot_count", "0"); 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"); 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); int max_reboot_entries = (int)strtol(max_entries, NULL, 10);
if (max_reboot_entries != 0) { if (max_reboot_entries != 0) {
@ -271,12 +255,12 @@ static struct uloop_timeout reboot_timer = { .cb = reboot_check_timer };
void sysmngr_reboots_init(void) void sysmngr_reboots_init(void)
{ {
if (file_exists(REBOOT_LOCK_FILE)) { 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; return;
} }
if (check_valid_reset_reason_file() == true) { 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(); sysmngr_register_boot_action();
return; return;
} }
@ -285,10 +269,10 @@ void sysmngr_reboots_init(void)
g_retry_count++; g_retry_count++;
uloop_timeout_set(&reboot_timer, REBOOT_RETRY_DELAY * 1000); 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); g_retry_count, REBOOT_MAX_RETRIES, RESET_REASON_PATH, REBOOT_RETRY_DELAY);
} else { } 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); REBOOT_MAX_RETRIES, RESET_REASON_PATH);
sysmngr_register_boot_action(); sysmngr_register_boot_action();
} }

View file

@ -49,7 +49,7 @@ static void usage(char *prog)
static void config_reload_cb(struct ubus_context *ctx, struct ubus_event_handler *ev, static void config_reload_cb(struct ubus_context *ctx, struct ubus_event_handler *ev,
const char *type, struct blob_attr *msg) 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 #ifdef SYSMNGR_PROCESS_STATUS
sysmngr_cpu_clean(); sysmngr_cpu_clean();

View file

@ -150,149 +150,6 @@ void send_transfer_complete_event(const char *command, const char *obj_path, con
blob_buf_free(&bb); 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) int sysmngr_get_uptime(void)
{ {
// cppcheck-suppress cert-MSC24-C // 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)); int res = run_cmd(cmd, output, sizeof(output));
if (!res || strncmp(output, "Success", 7) == 0) 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 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);
} }

View file

@ -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, 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); 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); int sysmngr_get_uptime(void);
void sysmngr_generate_critical_log_file(const char *log_path, const char *log_name, bool critical_state); void sysmngr_generate_critical_log_file(const char *log_path, const char *log_name, bool critical_state);