laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-cbc/+/28786 )
Change subject: vty: Add command to delete expired messages ......................................................................
vty: Add command to delete expired messages
Otherwise there's no way to remove expired messages, which keep filling the expired list forever.
Change-Id: Ie7ed2d9ec8fc23cdc4cb007dce4150458085a6a3 --- M include/osmocom/cbc/cbc_message.h M src/cbc_vty.c M src/smscb_message_fsm.c 3 files changed, 28 insertions(+), 0 deletions(-)
Approvals: Jenkins Builder: Verified fixeria: Looks good to me, but someone else must approve laforge: Looks good to me, approved
diff --git a/include/osmocom/cbc/cbc_message.h b/include/osmocom/cbc/cbc_message.h index 9d3b5b8..b42d0f2 100644 --- a/include/osmocom/cbc/cbc_message.h +++ b/include/osmocom/cbc/cbc_message.h @@ -99,6 +99,7 @@ };
struct cbc_message *cbc_message_alloc(void *ctx, const struct cbc_message *cbcmsg); +void cbc_message_free(struct cbc_message *cbcmsg); int cbc_message_new(const struct cbc_message *cbcmsg, struct rest_it_op *op); void cbc_message_delete(struct cbc_message *cbcmsg, struct rest_it_op *op); struct cbc_message *cbc_message_by_id(uint16_t message_id); diff --git a/src/cbc_vty.c b/src/cbc_vty.c index 99363fb..72ac315 100644 --- a/src/cbc_vty.c +++ b/src/cbc_vty.c @@ -138,6 +138,27 @@ return CMD_SUCCESS; }
+DEFUN(delete_message_expired, delete_message_expired_cmd, + "delete message expired id <0-65535>", + "Delete message from the local expired list\n" + "Delete message from the local expired list\n" + "Delete message from the local expired list\n" + "Message ID\n" "Message ID\n") +{ + struct cbc_message *cbc_msg; + uint16_t msgid = atoi(argv[0]); + cbc_msg = cbc_message_expired_by_id(msgid); + if (!cbc_msg) { + if (cbc_message_by_id(msgid)) + vty_out(vty, "Message ID %s has not yet expired!%s", argv[0], VTY_NEWLINE); + else + vty_out(vty, "Unknown expired Message ID %s%s", argv[0], VTY_NEWLINE); + return CMD_WARNING; + } + cbc_message_free(cbc_msg); + return CMD_SUCCESS; +} + static const char *cbc_cell_id2str(const struct cbc_cell_id *cid) { static char buf[256]; @@ -720,6 +741,7 @@ install_element_ve(&show_message_cbs_cmd); install_element_ve(&show_messages_cbs_cmd); install_element_ve(&show_messages_etws_cmd); + install_element_ve(&delete_message_expired_cmd);
install_element(CONFIG_NODE, &cfg_cbc_cmd); install_node(&cbc_node, config_write_cbc); diff --git a/src/smscb_message_fsm.c b/src/smscb_message_fsm.c index 0796587..ba17910 100644 --- a/src/smscb_message_fsm.c +++ b/src/smscb_message_fsm.c @@ -384,6 +384,11 @@ return smscb; }
+void cbc_message_free(struct cbc_message *cbcmsg) +{ + osmo_fsm_inst_term(cbcmsg->fi, OSMO_FSM_TERM_REGULAR, NULL); +} + __attribute__((constructor)) void smscb_fsm_constructor(void) { OSMO_ASSERT(osmo_fsm_register(&smscb_fsm) == 0);