diff options
| author | Christian Franke <chris@opensourcerouting.org> | 2018-11-16 16:05:54 +0100 |
|---|---|---|
| committer | Rodny Molina <rmolina@linkedin.com> | 2018-12-07 19:45:14 +0000 |
| commit | 161fa356fbff795fe5945f353af486cf0a628428 (patch) | |
| tree | 911bf015e7ca658ee8a963401949f706a3a032fe /isisd/isis_tx_queue.c | |
| parent | ac92680d8ddba0ab3ddf3099b22b75cc81e50ffa (diff) | |
isisd: Add debug output for tx-queues
To allow easier debugging of LSP transmission scheduling, add a debug
mode where all tx-queue insertions/deletions are logged.
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Diffstat (limited to 'isisd/isis_tx_queue.c')
| -rw-r--r-- | isisd/isis_tx_queue.c | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/isisd/isis_tx_queue.c b/isisd/isis_tx_queue.c index fe67a3f4d1..46d1595f06 100644 --- a/isisd/isis_tx_queue.c +++ b/isisd/isis_tx_queue.c @@ -30,14 +30,16 @@ #include "dict.h" #include "isisd/isis_circuit.h" #include "isisd/isis_lsp.h" +#include "isisd/isis_misc.h" #include "isisd/isis_tx_queue.h" DEFINE_MTYPE_STATIC(ISISD, TX_QUEUE, "ISIS TX Queue") DEFINE_MTYPE_STATIC(ISISD, TX_QUEUE_ENTRY, "ISIS TX Queue Entry") struct isis_tx_queue { - void *arg; - void (*send_event)(void *arg, struct isis_lsp *, enum isis_tx_type); + struct isis_circuit *circuit; + void (*send_event)(struct isis_circuit *circuit, + struct isis_lsp *, enum isis_tx_type); struct hash *hash; }; @@ -72,14 +74,15 @@ static bool tx_queue_hash_cmp(const void *a, const void *b) return true; } -struct isis_tx_queue *isis_tx_queue_new(void *arg, - void(*send_event)(void *arg, - struct isis_lsp *, - enum isis_tx_type)) +struct isis_tx_queue *isis_tx_queue_new( + struct isis_circuit *circuit, + void(*send_event)(struct isis_circuit *circuit, + struct isis_lsp *, + enum isis_tx_type)) { struct isis_tx_queue *rv = XCALLOC(MTYPE_TX_QUEUE, sizeof(*rv)); - rv->arg = arg; + rv->circuit = circuit; rv->send_event = send_event; rv->hash = hash_create(tx_queue_hash_key, tx_queue_hash_cmp, NULL); @@ -121,19 +124,30 @@ static int tx_queue_send_event(struct thread *thread) e->retry = NULL; thread_add_timer(master, tx_queue_send_event, e, 5, &e->retry); - queue->send_event(queue->arg, e->lsp, e->type); + queue->send_event(queue->circuit, e->lsp, e->type); /* Don't access e here anymore, send_event might have destroyed it */ return 0; } -void isis_tx_queue_add(struct isis_tx_queue *queue, - struct isis_lsp *lsp, - enum isis_tx_type type) +void _isis_tx_queue_add(struct isis_tx_queue *queue, + struct isis_lsp *lsp, + enum isis_tx_type type, + const char *func, const char *file, + int line) { if (!queue) return; + if (isis->debugs & DEBUG_TX_QUEUE) { + zlog_debug("Add LSP %s to %s queue as %s LSP. (From %s %s:%d)", + rawlspid_print(lsp->hdr.lsp_id), + queue->circuit->interface->name, + (type == TX_LSP_CIRCUIT_SCOPED) ? + "circuit scoped" : "regular", + func, file, line); + } + struct isis_tx_queue_entry *e = tx_queue_find(queue, lsp); if (!e) { e = XCALLOC(MTYPE_TX_QUEUE_ENTRY, sizeof(*e)); @@ -152,7 +166,8 @@ void isis_tx_queue_add(struct isis_tx_queue *queue, thread_add_event(master, tx_queue_send_event, e, 0, &e->retry); } -void isis_tx_queue_del(struct isis_tx_queue *queue, struct isis_lsp *lsp) +void _isis_tx_queue_del(struct isis_tx_queue *queue, struct isis_lsp *lsp, + const char *func, const char *file, int line) { if (!queue) return; @@ -161,6 +176,13 @@ void isis_tx_queue_del(struct isis_tx_queue *queue, struct isis_lsp *lsp) if (!e) return; + if (isis->debugs & DEBUG_TX_QUEUE) { + zlog_debug("Remove LSP %s from %s queue. (From %s %s:%d)", + rawlspid_print(lsp->hdr.lsp_id), + queue->circuit->interface->name, + func, file, line); + } + if (e->retry) thread_cancel(e->retry); |
