Skip to content
11 changes: 4 additions & 7 deletions isisd/fabricd.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,10 +158,9 @@ static int fabricd_handle_adj_state_change(struct isis_adjacency *arg)
while (!skiplist_empty(f->neighbors))
skiplist_delete_first(f->neighbors);

struct listnode *node;
struct isis_circuit *circuit;

for (ALL_LIST_ELEMENTS_RO(f->area->circuit_list, node, circuit)) {
frr_each (isis_circuit_list, &f->area->circuit_list, circuit) {
if (circuit->state != C_STATE_UP)
continue;

Expand Down Expand Up @@ -705,10 +704,9 @@ void fabricd_trigger_csnp(struct isis_area *area, bool circuit_scoped)
if (!circuit_scoped && !f->always_send_csnp)
return;

struct listnode *node;
struct isis_circuit *circuit;

for (ALL_LIST_ELEMENTS_RO(area->circuit_list, node, circuit)) {
frr_each (isis_circuit_list, &area->circuit_list, circuit) {
if (!circuit->t_send_csnp[1])
continue;

Expand All @@ -724,13 +722,12 @@ struct list *fabricd_ip_addrs(struct isis_circuit *circuit)
if (listcount(circuit->ip_addrs))
return circuit->ip_addrs;

if (!fabricd || !circuit->area || !circuit->area->circuit_list)
if (!fabricd || !circuit->area)
return NULL;

struct listnode *node;
struct isis_circuit *c;

for (ALL_LIST_ELEMENTS_RO(circuit->area->circuit_list, node, c)) {
frr_each (isis_circuit_list, &circuit->area->circuit_list, c) {
if (c->circ_type != CIRCUIT_T_LOOPBACK)
continue;

Expand Down
13 changes: 6 additions & 7 deletions isisd/isis_adjacency.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ struct isis_adjacency *isis_new_adj(const uint8_t *id, const uint8_t *snpa,
}
adj->adj_sids = list_new();
adj->srv6_endx_sids = list_new();
listnode_add(circuit->area->adjacency_list, adj);
isis_area_adj_list_add_tail(&circuit->area->adjacency_list, adj);

return adj;
}
Expand Down Expand Up @@ -122,13 +122,12 @@ struct isis_adjacency *isis_adj_lookup_snpa(const uint8_t *ssnpa,
return NULL;
}

struct isis_adjacency *isis_adj_find(const struct isis_area *area, int level,
const uint8_t *sysid)
const struct isis_adjacency *isis_adj_find(const struct isis_area *area,
int level, const uint8_t *sysid)
{
struct isis_adjacency *adj;
struct listnode *node;
const struct isis_adjacency *adj;

for (ALL_LIST_ELEMENTS_RO(area->adjacency_list, node, adj)) {
frr_each (isis_area_adj_list_const, &area->adjacency_list, adj) {
if (!(adj->level & level))
continue;

Expand Down Expand Up @@ -164,7 +163,7 @@ void isis_delete_adj(void *arg)
list_delete(&adj->adj_sids);
list_delete(&adj->srv6_endx_sids);

listnode_delete(adj->circuit->area->adjacency_list, adj);
isis_area_adj_list_del(&adj->circuit->area->adjacency_list, adj);
XFREE(MTYPE_ISIS_ADJACENCY, adj);
return;
}
Expand Down
12 changes: 10 additions & 2 deletions isisd/isis_adjacency.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@
#ifndef _ZEBRA_ISIS_ADJACENCY_H
#define _ZEBRA_ISIS_ADJACENCY_H

#include "typesafe.h"
#include "isisd/isis_tlvs.h"
#include "isisd/isisd.h"

DECLARE_MTYPE(ISIS_ADJACENCY_INFO);

Expand Down Expand Up @@ -98,16 +100,22 @@ struct isis_adjacency {
struct listnode *snmp_list_node;

struct list *srv6_endx_sids; /* SRv6 End.X SIDs. */

/* Typesafe list membership for area->adjacency_list */
struct isis_area_adj_list_item area_adj_list_item;
};

/* Typesafe list definition for adjacency_list */
DECLARE_DLIST(isis_area_adj_list, struct isis_adjacency, area_adj_list_item);

struct isis_threeway_adj;

struct isis_adjacency *isis_adj_lookup(const uint8_t *sysid,
struct list *adjdb);
struct isis_adjacency *isis_adj_lookup_snpa(const uint8_t *ssnpa,
struct list *adjdb);
struct isis_adjacency *isis_adj_find(const struct isis_area *area, int level,
const uint8_t *sysid);
const struct isis_adjacency *isis_adj_find(const struct isis_area *area,
int level, const uint8_t *sysid);
struct isis_adjacency *isis_new_adj(const uint8_t *id, const uint8_t *snpa,
int level, struct isis_circuit *circuit);
void isis_delete_adj(void *adj);
Expand Down
4 changes: 2 additions & 2 deletions isisd/isis_affinitymap.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ static void isis_affinity_map_update(const char *affmap_name, uint16_t old_pos,
uint16_t new_pos)
{
struct isis *isis = isis_lookup_by_vrfid(VRF_DEFAULT);
struct listnode *area_node, *fa_node;
struct listnode *fa_node;
struct isis_area *area;
struct flex_algo *fa;
bool changed;

if (!isis)
return;

for (ALL_LIST_ELEMENTS_RO(isis->area_list, area_node, area)) {
frr_each (isis_area_list, &isis->area_list, area) {
changed = false;
for (ALL_LIST_ELEMENTS_RO(area->flex_algos->flex_algos, fa_node,
fa)) {
Expand Down
3 changes: 1 addition & 2 deletions isisd/isis_bfd.c
Original file line number Diff line number Diff line change
Expand Up @@ -191,12 +191,11 @@ static int bfd_handle_adj_ip_enabled(struct isis_adjacency *adj, int family,
static int bfd_handle_circuit_add_addr(struct isis_circuit *circuit)
{
struct isis_adjacency *adj;
struct listnode *node;

if (circuit->area == NULL)
return 0;

for (ALL_LIST_ELEMENTS_RO(circuit->area->adjacency_list, node, adj)) {
frr_each (isis_area_adj_list, &circuit->area->adjacency_list, adj) {
if (adj->bfd_session)
continue;

Expand Down
6 changes: 3 additions & 3 deletions isisd/isis_circuit.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ void isis_circuit_configure(struct isis_circuit *circuit,
/*
* Add the circuit into area
*/
listnode_add(area->circuit_list, circuit);
isis_circuit_list_add_tail(&area->circuit_list, circuit);

circuit->idx = flags_get_index(&area->flags);

Expand All @@ -263,7 +263,7 @@ void isis_circuit_deconfigure(struct isis_circuit *circuit,

/* Remove circuit from area */
assert(circuit->area == area);
listnode_delete(area->circuit_list, circuit);
isis_circuit_list_del(&area->circuit_list, circuit);
circuit->area = NULL;
circuit->isis = NULL;

Expand Down Expand Up @@ -630,7 +630,7 @@ void isis_circuit_prepare(struct isis_circuit *circuit)
&circuit->t_read);
#else
event_add_timer_msec(master, isis_receive, circuit,
listcount(circuit->area->circuit_list) * 100,
isis_circuit_list_count(&circuit->area->circuit_list) * 100,
&circuit->t_read);
#endif
}
Expand Down
Loading
Loading