bssgp: introduce flush queue functions

To reset the state of BSSGP allow to flush the BSSGP queues.
When testing (with TTCN3) the test object should be resetted between
each test.

Introduce the functions:
bssgp_fc_flush_queue() - flushs a single flow control object
bssgp_flush_all_queues() - flushs queues of all BSSGP connections

Change-Id: I29b6ad6742ddf9b0b58b4af37d9a1cf18e019325
This commit is contained in:
Alexander Couzens 2018-08-07 11:22:28 +02:00 committed by Harald Welte
parent d14eccd1a7
commit acc0a070c7
3 changed files with 33 additions and 0 deletions

View File

@ -207,6 +207,9 @@ int bssgp_fc_in(struct bssgp_flow_control *fc, struct msgb *msg,
int bssgp_fc_ms_init(struct bssgp_flow_control *fc_ms, uint16_t bvci,
uint16_t nsei, uint32_t max_queue_depth);
void bssgp_flush_all_queues();
void bssgp_fc_flush_queue(struct bssgp_flow_control *fc);
/* gprs_bssgp_vty.c */
int bssgp_vty_init(void);
void bssgp_set_log_ss(int ss);

View File

@ -1263,3 +1263,31 @@ void bssgp_set_log_ss(int ss)
{
DBSSGP = ss;
}
/*!
* \brief Flush the queue of the bssgp_flow_control
* \param[in] The flow control object which holds the queue.
*/
void bssgp_fc_flush_queue(struct bssgp_flow_control *fc)
{
struct bssgp_fc_queue_element *element, *tmp;
llist_for_each_entry_safe(element, tmp, &fc->queue, list) {
msgb_free(element->msg);
llist_del(&element->list);
talloc_free(element);
}
}
/*!
* \brief Flush the queues of all BSSGP contexts.
*/
void bssgp_flush_all_queues()
{
struct bssgp_bvc_ctx *bctx;
llist_for_each_entry(bctx, &bssgp_bvc_ctxts, list) {
if (bctx->fc)
bssgp_fc_flush_queue(bctx->fc);
}
}

View File

@ -6,6 +6,8 @@ bssgp_pdu_str;
bssgp_fc_in;
bssgp_fc_init;
bssgp_fc_ms_init;
bssgp_fc_flush_queue;
bssgp_flush_all_queues;
bssgp_msgb_alloc;
bssgp_msgb_copy;
bssgp_msgb_tlli_put;