forked from Mirror/frr
Merge pull request #17814 from donaldsharp/nhg_removal_in_some_situations
This commit is contained in:
commit
76ed8f61d8
|
@ -1762,7 +1762,8 @@ void zebra_nhg_decrement_ref(struct nhg_hash_entry *nhe)
|
|||
nhe->refcnt--;
|
||||
|
||||
if (!zebra_router_in_shutdown() && nhe->refcnt <= 0 &&
|
||||
CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_INSTALLED) &&
|
||||
(CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_INSTALLED) ||
|
||||
CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_QUEUED)) &&
|
||||
!CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_KEEP_AROUND)) {
|
||||
nhe->refcnt = 1;
|
||||
SET_FLAG(nhe->flags, NEXTHOP_GROUP_KEEP_AROUND);
|
||||
|
@ -3382,7 +3383,17 @@ void zebra_nhg_install_kernel(struct nhg_hash_entry *nhe, uint8_t type)
|
|||
|
||||
void zebra_nhg_uninstall_kernel(struct nhg_hash_entry *nhe)
|
||||
{
|
||||
if (CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_INSTALLED)) {
|
||||
/*
|
||||
* Clearly if the nexthop group is installed we should
|
||||
* remove it. Additionally If the nexthop is already
|
||||
* QUEUED for installation, we should also just send
|
||||
* a deletion down as well. We cannot necessarily pluck
|
||||
* the installation out of the queue ( since it may have
|
||||
* already been acted on, but not processed yet in the
|
||||
* main pthread ).
|
||||
*/
|
||||
if (CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_INSTALLED) ||
|
||||
CHECK_FLAG(nhe->flags, NEXTHOP_GROUP_QUEUED)) {
|
||||
int ret = dplane_nexthop_delete(nhe);
|
||||
|
||||
switch (ret) {
|
||||
|
|
Loading…
Reference in a new issue