mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-03 13:01:59 +00:00
Merge remote-tracking branch 'origin/cmaster' into cmaster-next
This commit is contained in:
commit
dfee47aa92
@ -73,7 +73,7 @@ bgp_bfd_peer_group2peer_copy(struct peer *conf, struct peer *peer)
|
||||
/*
|
||||
* bgp_bfd_is_peer_multihop - returns whether BFD peer is multi-hop or single hop.
|
||||
*/
|
||||
static int
|
||||
int
|
||||
bgp_bfd_is_peer_multihop(struct peer *peer)
|
||||
{
|
||||
struct bfd_info *bfd_info;
|
||||
|
@ -42,4 +42,7 @@ bgp_bfd_peer_config_write(struct vty *vty, struct peer *peer, char *addr);
|
||||
extern void
|
||||
bgp_bfd_show_info(struct vty *vty, struct peer *peer, u_char use_json, json_object *json_neigh);
|
||||
|
||||
extern int
|
||||
bgp_bfd_is_peer_multihop(struct peer *peer);
|
||||
|
||||
#endif /* _QUAGGA_BGP_BFD_H */
|
||||
|
@ -371,8 +371,8 @@ bgp_parse_nexthop_update (int command, vrf_id_t vrf_id)
|
||||
{
|
||||
char buf[PREFIX2STR_BUFFER];
|
||||
prefix2str(&p, buf, sizeof (buf));
|
||||
zlog_debug("parse nexthop update(%s): metric=%d, #nexthop=%d", buf,
|
||||
metric, nexthop_num);
|
||||
zlog_debug("%d: NH update for %s - metric %d (cur %d) #nhops %d (cur %d)",
|
||||
vrf_id, buf, metric, bnc->metric, nexthop_num, bnc->nexthop_num);
|
||||
}
|
||||
|
||||
if (metric != bnc->metric)
|
||||
@ -419,6 +419,13 @@ bgp_parse_nexthop_update (int command, vrf_id_t vrf_id)
|
||||
break;
|
||||
}
|
||||
|
||||
if (BGP_DEBUG(nht, NHT))
|
||||
{
|
||||
char buf[NEXTHOP_STRLEN];
|
||||
zlog_debug(" nhop via %s",
|
||||
nexthop2str (nexthop, buf, sizeof (buf)));
|
||||
}
|
||||
|
||||
if (nhlist_tail)
|
||||
{
|
||||
nhlist_tail->next = nexthop;
|
||||
@ -641,6 +648,14 @@ evaluate_paths (struct bgp_nexthop_cache *bnc)
|
||||
int afi;
|
||||
struct peer *peer = (struct peer *)bnc->nht_info;
|
||||
|
||||
if (BGP_DEBUG(nht, NHT))
|
||||
{
|
||||
char buf[PREFIX2STR_BUFFER];
|
||||
bnc_str(bnc, buf, PREFIX2STR_BUFFER);
|
||||
zlog_debug("NH update for %s - flags 0x%x chgflags 0x%x - evaluate paths",
|
||||
buf, bnc->flags, bnc->change_flags);
|
||||
}
|
||||
|
||||
LIST_FOREACH(path, &(bnc->paths), nh_thread)
|
||||
{
|
||||
if (!(path->type == ZEBRA_ROUTE_BGP &&
|
||||
|
@ -45,6 +45,7 @@ Boston, MA 02111-1307, USA. */
|
||||
#include "bgpd/bgp_mpath.h"
|
||||
#include "bgpd/bgp_nexthop.h"
|
||||
#include "bgpd/bgp_nht.h"
|
||||
#include "bgpd/bgp_bfd.h"
|
||||
|
||||
/* All information about zebra. */
|
||||
struct zclient *zclient = NULL;
|
||||
@ -359,7 +360,16 @@ bgp_interface_down (int command, struct zclient *zclient, zebra_size_t length,
|
||||
|
||||
for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
|
||||
{
|
||||
#if defined(HAVE_CUMULUS)
|
||||
/* Take down directly connected EBGP peers as well as 1-hop BFD
|
||||
* tracked (directly connected) IBGP peers.
|
||||
*/
|
||||
if ((peer->ttl != 1) && (peer->gtsm_hops != 1) &&
|
||||
(!peer->bfd_info || bgp_bfd_is_peer_multihop(peer)))
|
||||
#else
|
||||
/* Take down directly connected EBGP peers */
|
||||
if ((peer->ttl != 1) && (peer->gtsm_hops != 1))
|
||||
#endif
|
||||
continue;
|
||||
|
||||
if (ifp == peer->nexthop.ifp)
|
||||
|
@ -153,3 +153,36 @@ nexthops_free (struct nexthop *nexthop)
|
||||
nexthop_free (nh);
|
||||
}
|
||||
}
|
||||
|
||||
const char *
|
||||
nexthop2str (struct nexthop *nexthop, char *str, int size)
|
||||
{
|
||||
switch (nexthop->type)
|
||||
{
|
||||
case NEXTHOP_TYPE_IFINDEX:
|
||||
snprintf (str, size, "if %u", nexthop->ifindex);
|
||||
break;
|
||||
case NEXTHOP_TYPE_IPV4:
|
||||
snprintf (str, size, "%s", inet_ntoa (nexthop->gate.ipv4));
|
||||
break;
|
||||
case NEXTHOP_TYPE_IPV4_IFINDEX:
|
||||
snprintf (str, size, "%s if %u",
|
||||
inet_ntoa (nexthop->gate.ipv4), nexthop->ifindex);
|
||||
break;
|
||||
case NEXTHOP_TYPE_IPV6:
|
||||
snprintf (str, size, "%s", inet6_ntoa (nexthop->gate.ipv6));
|
||||
break;
|
||||
case NEXTHOP_TYPE_IPV6_IFINDEX:
|
||||
snprintf (str, size, "%s if %u",
|
||||
inet6_ntoa (nexthop->gate.ipv6), nexthop->ifindex);
|
||||
break;
|
||||
case NEXTHOP_TYPE_BLACKHOLE:
|
||||
snprintf (str, size, "blackhole");
|
||||
break;
|
||||
default:
|
||||
snprintf (str, size, "unknown");
|
||||
break;
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
@ -26,6 +26,9 @@
|
||||
|
||||
#include "prefix.h"
|
||||
|
||||
/* Maximum next hop string length - gateway + ifindex */
|
||||
#define NEXTHOP_STRLEN (INET6_ADDRSTRLEN + 30)
|
||||
|
||||
union g_addr {
|
||||
struct in_addr ipv4;
|
||||
struct in6_addr ipv6;
|
||||
@ -97,4 +100,5 @@ void nexthops_free (struct nexthop *nexthop);
|
||||
extern const char *nexthop_type_to_str (enum nexthop_types_t nh_type);
|
||||
extern int nexthop_same_no_recurse (struct nexthop *next1, struct nexthop *next2);
|
||||
|
||||
extern const char * nexthop2str (struct nexthop *nexthop, char *str, int size);
|
||||
#endif /*_LIB_NEXTHOP_H */
|
||||
|
Loading…
Reference in New Issue
Block a user