mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 22:29:23 +00:00
ospf6d: rewrite ospf6_lsdb_lookup_next()
Again, replace open-coded table searches with API usage. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
parent
954306f70c
commit
98f65ee0b1
@ -221,9 +221,7 @@ ospf6_lsdb_lookup_next (u_int16_t type, u_int32_t id, u_int32_t adv_router,
|
|||||||
struct ospf6_lsdb *lsdb)
|
struct ospf6_lsdb *lsdb)
|
||||||
{
|
{
|
||||||
struct route_node *node;
|
struct route_node *node;
|
||||||
struct route_node *matched = NULL;
|
|
||||||
struct prefix_ipv6 key;
|
struct prefix_ipv6 key;
|
||||||
struct prefix *p;
|
|
||||||
|
|
||||||
if (lsdb == NULL)
|
if (lsdb == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -232,31 +230,14 @@ ospf6_lsdb_lookup_next (u_int16_t type, u_int32_t id, u_int32_t adv_router,
|
|||||||
ospf6_lsdb_set_key (&key, &type, sizeof (type));
|
ospf6_lsdb_set_key (&key, &type, sizeof (type));
|
||||||
ospf6_lsdb_set_key (&key, &adv_router, sizeof (adv_router));
|
ospf6_lsdb_set_key (&key, &adv_router, sizeof (adv_router));
|
||||||
ospf6_lsdb_set_key (&key, &id, sizeof (id));
|
ospf6_lsdb_set_key (&key, &id, sizeof (id));
|
||||||
p = (struct prefix *) &key;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
char buf[PREFIX2STR_BUFFER];
|
char buf[PREFIX2STR_BUFFER];
|
||||||
prefix2str (p, buf, sizeof (buf));
|
prefix2str (&key, buf, sizeof (buf));
|
||||||
zlog_debug ("lsdb_lookup_next: key: %s", buf);
|
zlog_debug ("lsdb_lookup_next: key: %s", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: need to find a better way here to work without sticking our
|
node = route_table_get_next (lsdb->table, &key);
|
||||||
* hands in node->link, e.g. route_node_match_maynull() */
|
|
||||||
|
|
||||||
node = lsdb->table->top;
|
|
||||||
/* walk down tree. */
|
|
||||||
while (node && node->p.prefixlen <= p->prefixlen &&
|
|
||||||
prefix_match (&node->p, p))
|
|
||||||
{
|
|
||||||
matched = node;
|
|
||||||
node = node->link[prefix_bit(&p->u.prefix, node->p.prefixlen)];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (matched)
|
|
||||||
node = matched;
|
|
||||||
else
|
|
||||||
node = lsdb->table->top;
|
|
||||||
route_lock_node (node);
|
|
||||||
|
|
||||||
/* skip to real existing entry */
|
/* skip to real existing entry */
|
||||||
while (node && node->info == NULL)
|
while (node && node->info == NULL)
|
||||||
@ -265,17 +246,10 @@ ospf6_lsdb_lookup_next (u_int16_t type, u_int32_t id, u_int32_t adv_router,
|
|||||||
if (! node)
|
if (! node)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (prefix_same (&node->p, p))
|
route_unlock_node (node);
|
||||||
{
|
if (! node->info)
|
||||||
node = route_next (node);
|
|
||||||
while (node && node->info == NULL)
|
|
||||||
node = route_next (node);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! node)
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
route_unlock_node (node);
|
|
||||||
return (struct ospf6_lsa *) node->info;
|
return (struct ospf6_lsa *) node->info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user