diff options
| author | lynne <lynne@voltanet.io> | 2020-09-15 16:46:15 -0400 |
|---|---|---|
| committer | lynne <lynne@voltanet.io> | 2021-03-02 10:06:31 -0500 |
| commit | 1ee746d99035155bcd906436cfe957f3a357ef26 (patch) | |
| tree | 7795a82fc730a35c1b74a9b53913c5f21a62385e /isisd/isis_adjacency.c | |
| parent | 9ee2ebdc825ea610270462c3b1d8044bb097fd29 (diff) | |
isisd: support for snmp
Add support for read only mib objects from RFC4444.
Signed-off-by: Lynne Morrison <lynne@voltanet.io>
Signed-off-by: Karen Schoener <karen@voltanet.io>
Diffstat (limited to 'isisd/isis_adjacency.c')
| -rw-r--r-- | isisd/isis_adjacency.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/isisd/isis_adjacency.c b/isisd/isis_adjacency.c index 71d4758163..3c3a68764e 100644 --- a/isisd/isis_adjacency.c +++ b/isisd/isis_adjacency.c @@ -49,13 +49,21 @@ #include "isisd/fabricd.h" #include "isisd/isis_nb.h" -static struct isis_adjacency *adj_alloc(const uint8_t *id) +static struct isis_adjacency *adj_alloc(struct isis_circuit *circuit, + const uint8_t *id) { struct isis_adjacency *adj; adj = XCALLOC(MTYPE_ISIS_ADJACENCY, sizeof(struct isis_adjacency)); memcpy(adj->sysid, id, ISIS_SYS_ID_LEN); + adj->snmp_idx = ++circuit->snmp_adj_idx_gen; + + if (circuit->snmp_adj_list == NULL) + circuit->snmp_adj_list = list_new(); + + adj->snmp_list_node = listnode_add(circuit->snmp_adj_list, adj); + return adj; } @@ -65,7 +73,7 @@ struct isis_adjacency *isis_new_adj(const uint8_t *id, const uint8_t *snpa, struct isis_adjacency *adj; int i; - adj = adj_alloc(id); /* P2P kludge */ + adj = adj_alloc(circuit, id); /* P2P kludge */ if (snpa) { memcpy(adj->snpa, snpa, ETH_ALEN); @@ -146,6 +154,8 @@ void isis_delete_adj(void *arg) if (!adj) return; + /* Remove self from snmp list without walking the list*/ + list_delete_node(adj->circuit->snmp_adj_list, adj->snmp_list_node); thread_cancel(&adj->t_expire); if (adj->adj_state != ISIS_ADJ_DOWN) @@ -292,7 +302,6 @@ void isis_adj_state_change(struct isis_adjacency **padj, if (circuit->area->log_adj_changes) isis_log_adj_change(adj, old_state, new_state, reason); - circuit->adj_state_changes++; #ifndef FABRICD /* send northbound notification */ isis_notif_adj_state_change(adj, new_state, reason); @@ -303,12 +312,14 @@ void isis_adj_state_change(struct isis_adjacency **padj, if ((adj->level & level) == 0) continue; if (new_state == ISIS_ADJ_UP) { + circuit->adj_state_changes++; circuit->upadjcount[level - 1]++; /* update counter & timers for debugging * purposes */ adj->last_flap = time(NULL); adj->flaps++; } else if (old_state == ISIS_ADJ_UP) { + circuit->adj_state_changes++; listnode_delete(circuit->u.bc.adjdb[level - 1], adj); |
