#include "bgpd/bgp_updgrp.h"
#include "bgpd/bgp_mplsvpn.h"
#include "bgpd/bgp_ecommunity.h"
+#include "bgpd/bgp_label.h"
+#include "bgpd/bgp_evpn.h"
unsigned long conf_bgp_debug_as4;
unsigned long conf_bgp_debug_neighbor_events;
snprintf (buf + strlen (buf), size - strlen (buf), "(%s)",
inet_ntop (AF_INET6, &attr->extra->mp_nexthop_local,
addrbuf, BUFSIZ));
+
+ if (attr->extra->mp_nexthop_len == BGP_ATTR_NHLEN_IPV4)
+ snprintf (buf, size, "nexthop %s", inet_ntoa (attr->nexthop));
}
if (CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_LOCAL_PREF)))
}
const char *
-bgp_debug_rdpfxpath2str (struct prefix_rd *prd, union prefixconstptr pu,
- int addpath_valid, u_int32_t addpath_id,
- char *str, int size)
+bgp_debug_rdpfxpath2str (afi_t afi, safi_t safi,
+ struct prefix_rd *prd, union prefixconstptr pu,
+ mpls_label_t *label, int addpath_valid,
+ u_int32_t addpath_id, char *str, int size)
{
char rd_buf[RD_ADDRSTRLEN];
char pfx_buf[PREFIX_STRLEN];
+ char tag_buf[30];
/* ' with addpath ID ' 17
* max strlen of uint32 + 10
* +/- (just in case) + 1
if (addpath_valid)
snprintf(pathid_buf, sizeof(pathid_buf), " with addpath ID %u", addpath_id);
+ tag_buf[0] = '\0';
+ if (bgp_labeled_safi (safi) && label)
+ {
+ u_int32_t label_value;
+
+ label_value = decode_label (label);
+ sprintf (tag_buf, " label %u", label_value);
+ }
+
if (prd)
- snprintf (str, size, "RD %s %s%s",
+ snprintf (str, size, "RD %s %s%s%s",
prefix_rd2str(prd, rd_buf, sizeof (rd_buf)),
- prefix2str (pu, pfx_buf, sizeof (pfx_buf)), pathid_buf);
+ prefix2str (pu, pfx_buf, sizeof (pfx_buf)),
+ tag_buf, pathid_buf);
else
- snprintf (str, size, "%s%s",
- prefix2str (pu, pfx_buf, sizeof (pfx_buf)), pathid_buf);
+ snprintf (str, size, "%s%s%s",
+ prefix2str (pu, pfx_buf, sizeof (pfx_buf)),
+ tag_buf, pathid_buf);
return str;
}
bgp = peer->bgp;
rn = bgp_afi_node_get (bgp->rib[afi][safi], afi, safi, p, prd);
- label_buf[0] = '\0';
-
has_valid_label = bgp_is_valid_label(label);
if (has_valid_label)
&& CHECK_FLAG (ri->flags, BGP_INFO_HISTORY))
{
if (bgp_debug_update(peer, p, NULL, 1))
- zlog_debug ("%s rcvd %s %s", peer->host,
- bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
- addpath_id, pfx_buf, sizeof (pfx_buf)), label_buf);
+ {
+ bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+ addpath_id ? 1 : 0, addpath_id,
+ pfx_buf, sizeof (pfx_buf));
+ zlog_debug ("%s rcvd %s", peer->host, pfx_buf);
+ }
if (bgp_damp_update (ri, rn, afi, safi) != BGP_DAMP_SUPPRESSED)
{
peer->rcvd_attr_printed = 1;
}
- zlog_debug ("%s rcvd %s %s...duplicate ignored",
- peer->host,
- bgp_debug_rdpfxpath2str (prd, p, addpath_id ?
- 1 : 0, addpath_id, pfx_buf, sizeof (pfx_buf)), label_buf);
+ bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+ addpath_id ? 1 : 0, addpath_id,
+ pfx_buf, sizeof (pfx_buf));
+ zlog_debug ("%s rcvd %s...duplicate ignored",
+ peer->host, pfx_buf);
}
/* graceful restart STALE flag unset. */
if (CHECK_FLAG(ri->flags, BGP_INFO_REMOVED))
{
if (bgp_debug_update(peer, p, NULL, 1))
- zlog_debug ("%s rcvd %s %s, flapped quicker than processing",
- peer->host,
- bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
- addpath_id, pfx_buf, sizeof (pfx_buf)), label_buf);
+ {
+ bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+ addpath_id ? 1 : 0, addpath_id,
+ pfx_buf, sizeof (pfx_buf));
+ zlog_debug ("%s rcvd %s, flapped quicker than processing",
+ peer->host, pfx_buf);
+ }
+
bgp_info_restore (rn, ri);
}
/* Received Logging. */
if (bgp_debug_update(peer, p, NULL, 1))
- zlog_debug ("%s rcvd %s %s", peer->host,
- bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
- addpath_id, pfx_buf, sizeof (pfx_buf)), label_buf);
+ {
+ bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+ addpath_id ? 1 : 0, addpath_id,
+ pfx_buf, sizeof (pfx_buf));
+ zlog_debug ("%s rcvd %s", peer->host, pfx_buf);
+ }
/* graceful restart STALE flag unset. */
if (CHECK_FLAG (ri->flags, BGP_INFO_STALE))
peer->rcvd_attr_printed = 1;
}
- zlog_debug ("%s rcvd %s %s ", peer->host,
- bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
- addpath_id, pfx_buf, sizeof (pfx_buf)), label_buf);
+ bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+ addpath_id ? 1 : 0, addpath_id,
+ pfx_buf, sizeof (pfx_buf));
+ zlog_debug ("%s rcvd %s", peer->host, pfx_buf);
}
/* Make new BGP info. */
peer->rcvd_attr_printed = 1;
}
- zlog_debug ("%s rcvd UPDATE about %s %s -- DENIED due to: %s",
- peer->host,
- bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
- addpath_id, pfx_buf, sizeof (pfx_buf)), label_buf, reason);
+ bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+ addpath_id ? 1 : 0, addpath_id,
+ pfx_buf, sizeof (pfx_buf));
+ zlog_debug ("%s rcvd UPDATE about %s -- DENIED due to: %s",
+ peer->host, pfx_buf, reason);
}
if (ri)
if (!bgp_adj_in_unset (rn, peer, addpath_id))
{
if (bgp_debug_update (peer, p, NULL, 1))
- zlog_debug ("%s withdrawing route %s not in adj-in",
- peer->host,
- bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
- addpath_id, pfx_buf, sizeof (pfx_buf)));
+ {
+ bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+ addpath_id ? 1 : 0, addpath_id,
+ pfx_buf, sizeof (pfx_buf));
+ zlog_debug ("%s withdrawing route %s not in adj-in",
+ peer->host, pfx_buf);
+ }
bgp_unlock_node (rn);
return 0;
}
/* Logging. */
if (bgp_debug_update(peer, p, NULL, 1))
{
+ bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+ addpath_id ? 1 : 0, addpath_id,
+ pfx_buf, sizeof (pfx_buf));
zlog_debug ("%s rcvd UPDATE about %s -- withdrawn",
- peer->host,
- bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
- addpath_id, pfx_buf, sizeof (pfx_buf)));
+ peer->host, pfx_buf);
}
/* Withdraw specified route from routing table. */
if (ri && ! CHECK_FLAG (ri->flags, BGP_INFO_HISTORY))
bgp_rib_withdraw (rn, ri, peer, afi, safi, prd);
else if (bgp_debug_update(peer, p, NULL, 1))
- zlog_debug ("%s Can't find the route %s",
- peer->host,
- bgp_debug_rdpfxpath2str (prd, p, addpath_id ? 1 : 0,
- addpath_id, pfx_buf, sizeof (pfx_buf)));
+ {
+ bgp_debug_rdpfxpath2str (afi, safi, prd, p, label,
+ addpath_id ? 1 : 0, addpath_id,
+ pfx_buf, sizeof (pfx_buf));
+ zlog_debug ("%s Can't find the route %s",
+ peer->host, pfx_buf);
+ }
/* Unlock bgp_node_get() lock. */
bgp_unlock_node (rn);
int addpath_encode = 0;
u_int32_t addpath_tx_id = 0;
struct prefix_rd *prd = NULL;
- char label_buf[20];
+ mpls_label_t label = MPLS_INVALID_LABEL;
if (!subgrp)
return NULL;
stream_reset (s);
snlri = subgrp->scratch;
stream_reset (snlri);
- label_buf[0] = '\0';
bpacket_attr_vec_arr_reset (&vecarr);
else
{
/* Encode the prefix in MP_REACH_NLRI attribute */
- mpls_label_t label = MPLS_INVALID_LABEL;
-
if (rn->prn)
prd = (struct prefix_rd *) &rn->prn->p;
if (binfo && binfo->extra)
label = binfo->extra->label;
- if (bgp_labeled_safi(safi))
- sprintf (label_buf, "label %u", label_pton(&label));
-
if (stream_empty (snlri))
mpattrlen_pos = bgp_packet_mpattr_start (snlri, peer, afi, safi,
&vecarr, adv->baa->attr);
send_attr_printed = 1;
}
- zlog_debug ("u%" PRIu64 ":s%" PRIu64 " send UPDATE %s %s",
- subgrp->update_group->id, subgrp->id,
- bgp_debug_rdpfxpath2str (prd, &rn->p, addpath_encode,
- addpath_tx_id,
- pfx_buf, sizeof (pfx_buf)),
- label_buf);
+ bgp_debug_rdpfxpath2str (afi, safi, prd, &rn->p, &label,
+ addpath_encode, addpath_tx_id,
+ pfx_buf, sizeof (pfx_buf));
+ zlog_debug ("u%" PRIu64 ":s%" PRIu64 " send UPDATE %s",
+ subgrp->update_group->id, subgrp->id, pfx_buf);
}
/* Synchnorize attribute. */
{
char pfx_buf[BGP_PRD_PATH_STRLEN];
+ bgp_debug_rdpfxpath2str (afi, safi, prd, &rn->p, NULL,
+ addpath_encode, addpath_tx_id,
+ pfx_buf, sizeof (pfx_buf));
zlog_debug ("u%" PRIu64 ":s%" PRIu64 " send UPDATE %s -- unreachable",
- subgrp->update_group->id, subgrp->id,
- bgp_debug_rdpfxpath2str (prd, &rn->p,
- addpath_encode, addpath_tx_id,
- pfx_buf, sizeof (pfx_buf)));
+ subgrp->update_group->id, subgrp->id, pfx_buf);
}
subgrp->scount--;