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
This commit is contained in:
Pau Espin 2022-07-25 13:11:52 +02:00
parent 93a588ba60
commit 5ae411980b
3 changed files with 28 additions and 0 deletions

View File

@ -99,6 +99,7 @@ struct cbc_message {
};
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);

View File

@ -138,6 +138,27 @@ DEFUN(show_messages_cbs, show_messages_cbs_cmd,
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 @@ void cbc_vty_init(void)
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);

View File

@ -384,6 +384,11 @@ struct cbc_message *cbc_message_alloc(void *ctx, const struct cbc_message *orig_
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);