mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-04 20:18:54 +00:00
zebra: Add nhg refcnt connected helper functions
Add some helper functions for ref incrementing and decrementing the depends of a nexthop group hash entry. This just abstracts the RB tree manipulation a bit more. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
This commit is contained in:
parent
44d809a90b
commit
32e29e7910
@ -135,6 +135,25 @@ void nhg_connected_head_add(struct nhg_connected_head *head,
|
|||||||
RB_INSERT(nhg_connected_head, head, new);
|
RB_INSERT(nhg_connected_head, head, new);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void nhg_connected_head_decrement_ref(struct nhg_connected_head *head)
|
||||||
|
{
|
||||||
|
struct nhg_connected *rb_node_dep = NULL;
|
||||||
|
struct nhg_connected *tmp = NULL;
|
||||||
|
|
||||||
|
RB_FOREACH_SAFE (rb_node_dep, nhg_connected_head, head, tmp) {
|
||||||
|
zebra_nhg_decrement_ref(rb_node_dep->nhe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void nhg_connected_head_increment_ref(struct nhg_connected_head *head)
|
||||||
|
{
|
||||||
|
struct nhg_connected *rb_node_dep = NULL;
|
||||||
|
|
||||||
|
RB_FOREACH (rb_node_dep, nhg_connected_head, head) {
|
||||||
|
zebra_nhg_increment_ref(rb_node_dep->nhe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct nhg_hash_entry *zebra_nhg_resolve(struct nhg_hash_entry *nhe)
|
struct nhg_hash_entry *zebra_nhg_resolve(struct nhg_hash_entry *nhe)
|
||||||
{
|
{
|
||||||
if (CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_RECURSIVE)
|
if (CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_RECURSIVE)
|
||||||
@ -768,15 +787,8 @@ void zebra_nhg_decrement_ref(struct nhg_hash_entry *nhe)
|
|||||||
{
|
{
|
||||||
nhe->refcnt--;
|
nhe->refcnt--;
|
||||||
|
|
||||||
if (!zebra_nhg_depends_is_empty(nhe)) {
|
if (!zebra_nhg_depends_is_empty(nhe))
|
||||||
struct nhg_connected *rb_node_dep = NULL;
|
nhg_connected_head_decrement_ref(&nhe->nhg_depends);
|
||||||
struct nhg_connected *tmp = NULL;
|
|
||||||
|
|
||||||
RB_FOREACH_SAFE (rb_node_dep, nhg_connected_head,
|
|
||||||
&nhe->nhg_depends, tmp) {
|
|
||||||
zebra_nhg_decrement_ref(rb_node_dep->nhe);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!nhe->is_kernel_nh && nhe->refcnt <= 0)
|
if (!nhe->is_kernel_nh && nhe->refcnt <= 0)
|
||||||
zebra_nhg_uninstall_kernel(nhe);
|
zebra_nhg_uninstall_kernel(nhe);
|
||||||
@ -786,14 +798,8 @@ void zebra_nhg_increment_ref(struct nhg_hash_entry *nhe)
|
|||||||
{
|
{
|
||||||
nhe->refcnt++;
|
nhe->refcnt++;
|
||||||
|
|
||||||
if (!zebra_nhg_depends_is_empty(nhe)) {
|
if (!zebra_nhg_depends_is_empty(nhe))
|
||||||
struct nhg_connected *rb_node_dep = NULL;
|
nhg_connected_head_increment_ref(&nhe->nhg_depends);
|
||||||
|
|
||||||
RB_FOREACH (rb_node_dep, nhg_connected_head,
|
|
||||||
&nhe->nhg_depends) {
|
|
||||||
zebra_nhg_increment_ref(rb_node_dep->nhe);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void zebra_nhg_set_invalid(struct nhg_hash_entry *nhe)
|
void zebra_nhg_set_invalid(struct nhg_hash_entry *nhe)
|
||||||
|
Loading…
Reference in New Issue
Block a user