mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-29 18:15:27 +00:00
Merge branch 'stable/2.0'
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
commit
098c0eb8f4
@ -2058,7 +2058,7 @@ bgp_process (struct bgp *bgp, struct bgp_node *rn, afi_t afi, safi_t safi)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (bm->process_main_queue == NULL)
|
if (bm->process_main_queue == NULL)
|
||||||
bgp_process_queue_init ();
|
return;
|
||||||
|
|
||||||
pqnode = XCALLOC (MTYPE_BGP_PROCESS_QUEUE,
|
pqnode = XCALLOC (MTYPE_BGP_PROCESS_QUEUE,
|
||||||
sizeof (struct bgp_process_queue));
|
sizeof (struct bgp_process_queue));
|
||||||
@ -2083,7 +2083,7 @@ bgp_add_eoiu_mark (struct bgp *bgp)
|
|||||||
struct bgp_process_queue *pqnode;
|
struct bgp_process_queue *pqnode;
|
||||||
|
|
||||||
if (bm->process_main_queue == NULL)
|
if (bm->process_main_queue == NULL)
|
||||||
bgp_process_queue_init ();
|
return;
|
||||||
|
|
||||||
pqnode = XCALLOC (MTYPE_BGP_PROCESS_QUEUE,
|
pqnode = XCALLOC (MTYPE_BGP_PROCESS_QUEUE,
|
||||||
sizeof (struct bgp_process_queue));
|
sizeof (struct bgp_process_queue));
|
||||||
|
@ -2533,14 +2533,14 @@ peer_group_delete (struct peer_group *group)
|
|||||||
XFREE(MTYPE_PEER_GROUP_HOST, group->name);
|
XFREE(MTYPE_PEER_GROUP_HOST, group->name);
|
||||||
group->name = NULL;
|
group->name = NULL;
|
||||||
|
|
||||||
|
bfd_info_free(&(group->conf->bfd_info));
|
||||||
|
|
||||||
group->conf->group = NULL;
|
group->conf->group = NULL;
|
||||||
peer_delete (group->conf);
|
peer_delete (group->conf);
|
||||||
|
|
||||||
/* Delete from all peer_group list. */
|
/* Delete from all peer_group list. */
|
||||||
listnode_delete (bgp->group, group);
|
listnode_delete (bgp->group, group);
|
||||||
|
|
||||||
bfd_info_free(&(group->conf->bfd_info));
|
|
||||||
|
|
||||||
peer_group_free (group);
|
peer_group_free (group);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -3121,6 +3121,8 @@ vty_terminate (void)
|
|||||||
vty_reset ();
|
vty_reset ();
|
||||||
vector_free (vtyvec);
|
vector_free (vtyvec);
|
||||||
vector_free (Vvty_serv_thread);
|
vector_free (Vvty_serv_thread);
|
||||||
|
vtyvec = NULL;
|
||||||
|
Vvty_serv_thread = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -629,9 +629,6 @@ zebra_rnh_eval_nexthop_entry (vrf_id_t vrfid, int family, int force,
|
|||||||
*/
|
*/
|
||||||
if (!prefix_same(&rnh->resolved_route, &prn->p))
|
if (!prefix_same(&rnh->resolved_route, &prn->p))
|
||||||
{
|
{
|
||||||
if (rib)
|
|
||||||
UNSET_FLAG(rib->status, RIB_ENTRY_NEXTHOPS_CHANGED);
|
|
||||||
|
|
||||||
if (prn)
|
if (prn)
|
||||||
prefix_copy(&rnh->resolved_route, &prn->p);
|
prefix_copy(&rnh->resolved_route, &prn->p);
|
||||||
else
|
else
|
||||||
@ -642,9 +639,6 @@ zebra_rnh_eval_nexthop_entry (vrf_id_t vrfid, int family, int force,
|
|||||||
}
|
}
|
||||||
else if (compare_state(rib, rnh->state))
|
else if (compare_state(rib, rnh->state))
|
||||||
{
|
{
|
||||||
if (rib)
|
|
||||||
UNSET_FLAG(rib->status, RIB_ENTRY_NEXTHOPS_CHANGED);
|
|
||||||
|
|
||||||
copy_state(rnh, rib, nrn);
|
copy_state(rnh, rib, nrn);
|
||||||
state_changed = 1;
|
state_changed = 1;
|
||||||
}
|
}
|
||||||
@ -701,6 +695,30 @@ zebra_rnh_evaluate_entry (vrf_id_t vrfid, int family, int force, rnh_type_t type
|
|||||||
nrn, rnh, prn, rib);
|
nrn, rnh, prn, rib);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clear the RIB_ENTRY_NEXTHOPS_CHANGED flag
|
||||||
|
* from the rib entries.
|
||||||
|
*
|
||||||
|
* Please note we are doing this *after* we have
|
||||||
|
* notified the world about each nexthop as that
|
||||||
|
* we can have a situation where one rib entry
|
||||||
|
* covers multiple nexthops we are interested in.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
zebra_rnh_clear_nhc_flag (vrf_id_t vrfid, int family, rnh_type_t type,
|
||||||
|
struct route_node *nrn)
|
||||||
|
{
|
||||||
|
struct rnh *rnh;
|
||||||
|
struct rib *rib;
|
||||||
|
struct route_node *prn;
|
||||||
|
|
||||||
|
rnh = nrn->info;
|
||||||
|
|
||||||
|
rib = zebra_rnh_resolve_entry (vrfid, family, type, nrn, rnh, &prn);
|
||||||
|
|
||||||
|
if (rib)
|
||||||
|
UNSET_FLAG (rib->status, RIB_ENTRY_NEXTHOPS_CHANGED);
|
||||||
|
}
|
||||||
|
|
||||||
/* Evaluate all tracked entries (nexthops or routes for import into BGP)
|
/* Evaluate all tracked entries (nexthops or routes for import into BGP)
|
||||||
* of a particular VRF and address-family or a specific prefix.
|
* of a particular VRF and address-family or a specific prefix.
|
||||||
@ -722,6 +740,7 @@ zebra_evaluate_rnh (vrf_id_t vrfid, int family, int force, rnh_type_t type,
|
|||||||
nrn = route_node_lookup (rnh_table, p);
|
nrn = route_node_lookup (rnh_table, p);
|
||||||
if (nrn && nrn->info)
|
if (nrn && nrn->info)
|
||||||
zebra_rnh_evaluate_entry (vrfid, family, force, type, nrn);
|
zebra_rnh_evaluate_entry (vrfid, family, force, type, nrn);
|
||||||
|
|
||||||
if (nrn)
|
if (nrn)
|
||||||
route_unlock_node (nrn);
|
route_unlock_node (nrn);
|
||||||
}
|
}
|
||||||
@ -735,6 +754,13 @@ zebra_evaluate_rnh (vrf_id_t vrfid, int family, int force, rnh_type_t type,
|
|||||||
zebra_rnh_evaluate_entry (vrfid, family, force, type, nrn);
|
zebra_rnh_evaluate_entry (vrfid, family, force, type, nrn);
|
||||||
nrn = route_next(nrn); /* this will also unlock nrn */
|
nrn = route_next(nrn); /* this will also unlock nrn */
|
||||||
}
|
}
|
||||||
|
nrn = route_top (rnh_table);
|
||||||
|
while (nrn)
|
||||||
|
{
|
||||||
|
if (nrn->info)
|
||||||
|
zebra_rnh_clear_nhc_flag (vrfid, family, type, nrn);
|
||||||
|
nrn = route_next(nrn); /* this will also unlock nrn */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user