summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@qlyoung.net>2021-02-12 01:21:30 +0100
committerQuentin Young <qlyoung@qlyoung.net>2021-02-12 01:55:05 +0100
commite0302d7eab76d7f86a8b8584ef2928c431a932bb (patch)
treeec817ffa480c1f123132cd872ad1ce1ec5a3d9d5
parentbgpd: add PEER_HOSTNAME() macro (diff)
downloadfrr-e0302d7eab76d7f86a8b8584ef2928c431a932bb.tar.xz
frr-e0302d7eab76d7f86a8b8584ef2928c431a932bb.zip
bgpd: add tracepoints for BMP
Adds the following tracepoints: - frr_bgp:bmp_mirror_packet - frr_bgp:bmp_update_saved_open - frr_bgp:bmp_status_changed - frr_bgp:bmp_peer_backward_transition - frr_bgp:bmp_eor - frr_bgp:bmp_process Signed-off-by: Quentin Young <qlyoung@qlyoung.net>
-rw-r--r--bgpd/bgp_bmp.c19
-rw-r--r--bgpd/bgp_trace.h96
2 files changed, 115 insertions, 0 deletions
diff --git a/bgpd/bgp_bmp.c b/bgpd/bgp_bmp.c
index 82e27884c..8deec6542 100644
--- a/bgpd/bgp_bmp.c
+++ b/bgpd/bgp_bmp.c
@@ -49,6 +49,7 @@
#include "bgpd/bgp_fsm.h"
#include "bgpd/bgp_updgrp.h"
#include "bgpd/bgp_vty.h"
+#include "bgpd/bgp_trace.h"
static void bmp_close(struct bmp *bmp);
static struct bmp_bgp *bmp_bgp_find(struct bgp *bgp);
@@ -545,6 +546,8 @@ static int bmp_mirror_packet(struct peer *peer, uint8_t type, bgp_size_t size,
struct bmp_targets *bt;
struct bmp *bmp;
+ frrtrace(3, frr_bgp, bmp_mirror_packet, peer, type, packet);
+
gettimeofday(&tv, NULL);
if (type == BGP_MSG_OPEN) {
@@ -662,6 +665,8 @@ static int bmp_outgoing_packet(struct peer *peer, uint8_t type, bgp_size_t size,
struct stream *packet)
{
if (type == BGP_MSG_OPEN) {
+ frrtrace(2, frr_bgp, bmp_update_saved_open, peer, packet);
+
struct bmp_bgp_peer *bbpeer = bmp_bgp_peer_get(peer);
XFREE(MTYPE_BMP_OPEN, bbpeer->open_tx);
@@ -677,6 +682,8 @@ static int bmp_peer_established(struct peer *peer)
{
struct bmp_bgp *bmpbgp = bmp_bgp_find(peer->bgp);
+ frrtrace(1, frr_bgp, bmp_peer_status_changed, peer);
+
if (!bmpbgp)
return 0;
@@ -712,6 +719,8 @@ static int bmp_peer_backward(struct peer *peer)
struct bmp_bgp *bmpbgp = bmp_bgp_find(peer->bgp);
struct bmp_bgp_peer *bbpeer;
+ frrtrace(1, frr_bgp, bmp_peer_backward_transition, peer);
+
if (!bmpbgp)
return 0;
@@ -735,6 +744,8 @@ static void bmp_eor(struct bmp *bmp, afi_t afi, safi_t safi, uint8_t flags)
iana_afi_t pkt_afi;
iana_safi_t pkt_safi;
+ frrtrace(3, frr_bgp, bmp_eor, afi, safi, flags);
+
s = stream_new(BGP_MAX_PACKET_SIZE);
/* Make BGP update packet. */
@@ -1251,6 +1262,14 @@ static int bmp_process(struct bgp *bgp, afi_t afi, safi_t safi,
struct bmp_targets *bt;
struct bmp *bmp;
+ if (frrtrace_enabled(frr_bgp, bmp_process)) {
+ char pfxprint[PREFIX2STR_BUFFER];
+
+ prefix2str(&bn->p, pfxprint, sizeof(pfxprint));
+ frrtrace(5, frr_bgp, bmp_process, peer, pfxprint, afi, safi,
+ withdraw);
+ }
+
if (!bmpbgp)
return 0;
diff --git a/bgpd/bgp_trace.h b/bgpd/bgp_trace.h
index 9d1a4797a..8bc513009 100644
--- a/bgpd/bgp_trace.h
+++ b/bgpd/bgp_trace.h
@@ -122,6 +122,102 @@ TRACEPOINT_EVENT(
TRACEPOINT_LOGLEVEL(frr_bgp, output_filter, TRACE_INFO)
+/* BMP tracepoints */
+
+/* BMP mirrors a packet to all mirror-enabled targets */
+TRACEPOINT_EVENT(
+ frr_bgp,
+ bmp_mirror_packet,
+ TP_ARGS(struct peer *, peer, uint8_t, type, struct stream *, pkt),
+ TP_FIELDS(
+ ctf_string(peer, PEER_HOSTNAME(peer))
+ ctf_integer(uint8_t, type, type)
+ ctf_sequence_hex(uint8_t, packet, pkt->data, size_t,
+ STREAM_READABLE(pkt))
+ )
+)
+
+TRACEPOINT_LOGLEVEL(frr_bgp, bmp_mirror_packet, TRACE_INFO)
+
+
+/* BMP sends an EOR */
+TRACEPOINT_EVENT(
+ frr_bgp,
+ bmp_eor,
+ TP_ARGS(afi_t, afi, safi_t, safi, uint8_t, flags),
+ TP_FIELDS(
+ ctf_integer(afi_t, afi, afi)
+ ctf_integer(safi_t, safi, safi)
+ ctf_integer(uint8_t, flags, flags)
+ )
+)
+
+TRACEPOINT_LOGLEVEL(frr_bgp, bmp_eor, TRACE_INFO)
+
+
+/* BMP updates its copy of the last OPEN a peer sent */
+TRACEPOINT_EVENT(
+ frr_bgp,
+ bmp_update_saved_open,
+ TP_ARGS(struct peer *, peer, struct stream *, pkt),
+ TP_FIELDS(
+ ctf_string(peer, PEER_HOSTNAME(peer))
+ ctf_sequence_hex(uint8_t, packet, pkt->data, size_t,
+ STREAM_READABLE(pkt))
+ )
+)
+
+TRACEPOINT_LOGLEVEL(frr_bgp, bmp_update_saved_open, TRACE_DEBUG)
+
+
+/* BMP is notified of a peer status change internally */
+TRACEPOINT_EVENT(
+ frr_bgp,
+ bmp_peer_status_changed,
+ TP_ARGS(struct peer *, peer),
+ TP_FIELDS(
+ ctf_string(peer, PEER_HOSTNAME(peer))
+ )
+)
+
+TRACEPOINT_LOGLEVEL(frr_bgp, bmp_peer_status_changed, TRACE_DEBUG)
+
+
+/*
+ * BMP is notified that a peer has transitioned in the opposite direction of
+ * Established internally
+ */
+TRACEPOINT_EVENT(
+ frr_bgp,
+ bmp_peer_backward_transition,
+ TP_ARGS(struct peer *, peer),
+ TP_FIELDS(
+ ctf_string(peer, PEER_HOSTNAME(peer))
+ )
+)
+
+TRACEPOINT_LOGLEVEL(frr_bgp, bmp_peer_backward, TRACE_DEBUG)
+
+
+/*
+ * BMP is hooked for a route process
+ */
+TRACEPOINT_EVENT(
+ frr_bgp,
+ bmp_process,
+ TP_ARGS(struct peer *, peer, char *, pfx, afi_t,
+ afi, safi_t, safi, bool, withdraw),
+ TP_FIELDS(
+ ctf_string(peer, PEER_HOSTNAME(peer))
+ ctf_string(prefix, pfx)
+ ctf_integer(afi_t, afi, afi)
+ ctf_integer(safi_t, safi, safi)
+ ctf_integer(bool, withdraw, withdraw)
+ )
+)
+
+TRACEPOINT_LOGLEVEL(frr_bgp, bmp_process, TRACE_DEBUG)
+
/* clang-format on */
#include <lttng/tracepoint-event.h>