aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaria Matejka <mq@ucw.cz>2021-03-30 15:09:53 +0200
committerMaria Matejka <mq@ucw.cz>2021-03-30 21:56:08 +0200
commit4635314cefd55aaa2a0146b6722df55e7efba4b8 (patch)
tree9e9263eff6f5f06e9be58e86f8e41240514a66a9
parent7a74ad5a61c82ab0062a62dbc9ea6ab91d480485 (diff)
downloadbird-4635314cefd55aaa2a0146b6722df55e7efba4b8.tar.gz
Routing tables list iteration should use explicit node struct position
-rw-r--r--nest/rt-table.c3
-rw-r--r--proto/mrt/mrt.c9
2 files changed, 8 insertions, 4 deletions
diff --git a/nest/rt-table.c b/nest/rt-table.c
index 626c2fb8..7b81e141 100644
--- a/nest/rt-table.c
+++ b/nest/rt-table.c
@@ -1741,8 +1741,9 @@ void
rt_dump_all(void)
{
rtable *t;
+ node *n;
- WALK_LIST(t, routing_tables)
+ WALK_LIST2(t, n, routing_tables, n)
rt_dump(t);
}
diff --git a/proto/mrt/mrt.c b/proto/mrt/mrt.c
index 838360c2..8d97c860 100644
--- a/proto/mrt/mrt.c
+++ b/proto/mrt/mrt.c
@@ -224,12 +224,15 @@ mrt_next_table_(rtable *tab, rtable *tab_ptr, const char *pattern)
return !tab ? tab_ptr : NULL;
/* Walk routing_tables list, starting after tab (if non-NULL) */
- for (tab = !tab ? HEAD(routing_tables) : NODE_NEXT(tab);
- NODE_VALID(tab);
- tab = NODE_NEXT(tab))
+ for (node *tn = tab ? tab->n.next : HEAD(routing_tables);
+ NODE_VALID(tn);
+ tn = tn->next)
+ {
+ tab = SKIP_BACK(struct rtable, n, tn);
if (patmatch(pattern, tab->name) &&
((tab->addr_type == NET_IP4) || (tab->addr_type == NET_IP6)))
return tab;
+ }
return NULL;
}