static void path_nh_map(struct bgp_info *path, struct bgp_nexthop_cache *bnc,
int keep);
+static int
+bgp_isvalid_nexthop (struct bgp_nexthop_cache *bnc)
+{
+ return (bgp_zebra_num_connects() == 0 ||
+ (bnc && CHECK_FLAG(bnc->flags, BGP_NEXTHOP_VALID)));
+}
+
int
bgp_find_nexthop (struct bgp_info *path, int connected)
{
if (connected && !(CHECK_FLAG(bnc->flags, BGP_NEXTHOP_CONNECTED)))
return 0;
- return (CHECK_FLAG(bnc->flags, BGP_NEXTHOP_VALID));
+ return (bgp_isvalid_nexthop(bnc));
}
void
else if (peer)
bnc->nht_info = (void *)peer;
- return (bgp_zebra_num_connects() == 0 ||
- CHECK_FLAG(bnc->flags, BGP_NEXTHOP_VALID));
+ return (bgp_isvalid_nexthop(bnc));
}
void
* reachable/unreachable.
*/
if ((CHECK_FLAG(path->flags, BGP_INFO_VALID) ? 1 : 0) !=
- (CHECK_FLAG(bnc->flags, BGP_NEXTHOP_VALID) ? 1 : 0))
+ (bgp_isvalid_nexthop(bnc) ? 1 : 0))
{
if (CHECK_FLAG (path->flags, BGP_INFO_VALID))
{
}
/* Copy the metric to the path. Will be used for bestpath computation */
- if (CHECK_FLAG(bnc->flags, BGP_NEXTHOP_VALID) && bnc->metric)
+ if (bgp_isvalid_nexthop(bnc) && bnc->metric)
(bgp_info_extra_get(path))->igpmetric = bnc->metric;
else if (path->extra)
path->extra->igpmetric = 0;
{
if (BGP_DEBUG(nht, NHT))
zlog_debug("%s: Updating peer (%s) status with NHT", __FUNCTION__, peer->host);
- bgp_fsm_nht_update(peer, CHECK_FLAG(bnc->flags, BGP_NEXTHOP_VALID));
+ bgp_fsm_nht_update(peer, bgp_isvalid_nexthop(bnc));
SET_FLAG(bnc->flags, BGP_NEXTHOP_PEER_NOTIFIED);
}