summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_debug.c2
-rw-r--r--bgpd/bgp_debug.h3
-rw-r--r--bgpd/bgp_linkstate_tlv.c6
-rw-r--r--bgpd/bgp_linkstate_vty.c53
-rw-r--r--bgpd/bgp_linkstate_vty.h11
-rw-r--r--bgpd/bgpd.c2
-rw-r--r--bgpd/subdir.am3
7 files changed, 80 insertions, 0 deletions
diff --git a/bgpd/bgp_debug.c b/bgpd/bgp_debug.c
index 782245e512..0ff8bdcbbe 100644
--- a/bgpd/bgp_debug.c
+++ b/bgpd/bgp_debug.c
@@ -51,6 +51,7 @@ unsigned long conf_bgp_debug_nht;
unsigned long conf_bgp_debug_update_groups;
unsigned long conf_bgp_debug_vpn;
unsigned long conf_bgp_debug_flowspec;
+unsigned long conf_bgp_debug_linkstate;
unsigned long conf_bgp_debug_labelpool;
unsigned long conf_bgp_debug_pbr;
unsigned long conf_bgp_debug_graceful_restart;
@@ -72,6 +73,7 @@ unsigned long term_bgp_debug_nht;
unsigned long term_bgp_debug_update_groups;
unsigned long term_bgp_debug_vpn;
unsigned long term_bgp_debug_flowspec;
+unsigned long term_bgp_debug_linkstate;
unsigned long term_bgp_debug_labelpool;
unsigned long term_bgp_debug_pbr;
unsigned long term_bgp_debug_graceful_restart;
diff --git a/bgpd/bgp_debug.h b/bgpd/bgp_debug.h
index 118325e0a3..38beebf872 100644
--- a/bgpd/bgp_debug.h
+++ b/bgpd/bgp_debug.h
@@ -60,6 +60,7 @@ extern unsigned long conf_bgp_debug_nht;
extern unsigned long conf_bgp_debug_update_groups;
extern unsigned long conf_bgp_debug_vpn;
extern unsigned long conf_bgp_debug_flowspec;
+extern unsigned long conf_bgp_debug_linkstate;
extern unsigned long conf_bgp_debug_labelpool;
extern unsigned long conf_bgp_debug_pbr;
extern unsigned long conf_bgp_debug_graceful_restart;
@@ -79,6 +80,7 @@ extern unsigned long term_bgp_debug_nht;
extern unsigned long term_bgp_debug_update_groups;
extern unsigned long term_bgp_debug_vpn;
extern unsigned long term_bgp_debug_flowspec;
+extern unsigned long term_bgp_debug_linkstate;
extern unsigned long term_bgp_debug_labelpool;
extern unsigned long term_bgp_debug_pbr;
extern unsigned long term_bgp_debug_graceful_restart;
@@ -118,6 +120,7 @@ struct bgp_debug_filter {
#define BGP_DEBUG_VPN_LEAK_RMAP_EVENT 0x04
#define BGP_DEBUG_VPN_LEAK_LABEL 0x08
#define BGP_DEBUG_FLOWSPEC 0x01
+#define BGP_DEBUG_LINKSTATE 0x01
#define BGP_DEBUG_LABELPOOL 0x01
#define BGP_DEBUG_PBR 0x01
#define BGP_DEBUG_PBR_ERROR 0x02
diff --git a/bgpd/bgp_linkstate_tlv.c b/bgpd/bgp_linkstate_tlv.c
index d3fbb7871a..5c324382f9 100644
--- a/bgpd/bgp_linkstate_tlv.c
+++ b/bgpd/bgp_linkstate_tlv.c
@@ -165,6 +165,12 @@ int bgp_nlri_parse_linkstate(struct peer *peer, struct attr *attr,
p.u.prefix_linkstate.ptr = (uintptr_t)pnt;
p.prefixlen = length;
+ if (BGP_DEBUG(linkstate, LINKSTATE)) {
+ zlog_debug("LS Rx %s %s %pFX",
+ withdraw ? "Withdraw" : "Update",
+ afi2str(afi), &p);
+ }
+
/* Process the route. */
if (withdraw)
bgp_withdraw(peer, &p, 0, afi, safi, ZEBRA_ROUTE_BGP,
diff --git a/bgpd/bgp_linkstate_vty.c b/bgpd/bgp_linkstate_vty.c
new file mode 100644
index 0000000000..3962da9c69
--- /dev/null
+++ b/bgpd/bgp_linkstate_vty.c
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/* BGP Link-State VTY
+ * Copyright 2023 6WIND S.A.
+ */
+
+#include <zebra.h>
+#include "command.h"
+#include "prefix.h"
+#include "lib/json.h"
+#include "lib/printfrr.h"
+#include "stream.h"
+
+#include "bgpd/bgpd.h"
+#include "bgpd/bgp_linkstate_vty.h"
+#include "bgpd/bgp_linkstate.h"
+#include "bgpd/bgp_zebra.h"
+#include "bgpd/bgp_vty.h"
+#include "bgpd/bgp_debug.h"
+
+#include "bgpd/bgp_linkstate_vty_clippy.c"
+
+
+DEFPY (debug_bgp_linkstate,
+ debug_bgp_linkstate_cmd,
+ "[no] debug bgp linkstate",
+ NO_STR
+ DEBUG_STR
+ BGP_STR
+ "BGP allow linkstate debugging entries\n")
+{
+ if (vty->node == CONFIG_NODE) {
+ if (no)
+ DEBUG_OFF(linkstate, LINKSTATE);
+ else
+ DEBUG_ON(linkstate, LINKSTATE);
+ } else {
+ if (no)
+ TERM_DEBUG_OFF(linkstate, LINKSTATE);
+ else
+ TERM_DEBUG_ON(linkstate, LINKSTATE);
+ vty_out(vty, "BGP linkstate debugging is %s\n",
+ no ? "off" : "on");
+ }
+
+ return CMD_SUCCESS;
+}
+
+
+void bgp_linkstate_vty_init(void)
+{
+ install_element(ENABLE_NODE, &debug_bgp_linkstate_cmd);
+ install_element(CONFIG_NODE, &debug_bgp_linkstate_cmd);
+}
diff --git a/bgpd/bgp_linkstate_vty.h b/bgpd/bgp_linkstate_vty.h
new file mode 100644
index 0000000000..5ba96b58b4
--- /dev/null
+++ b/bgpd/bgp_linkstate_vty.h
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/* BGP Link-State VTY header
+ * Copyright 2023 6WIND S.A.
+ */
+
+#ifndef _FRR_BGP_LINKSTATE_VTY_H
+#define _FRR_BGP_LINKSTATE_VTY_H
+
+void bgp_linkstate_vty_init(void);
+
+#endif /* _FRR_BGP_LINKSTATE_VTY_H */
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index 39125f5d80..b7bb42b2d6 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -72,6 +72,7 @@
#include "bgpd/bgp_ecommunity.h"
#include "bgpd/bgp_flowspec.h"
#include "bgpd/bgp_linkstate.h"
+#include "bgpd/bgp_linkstate_vty.h"
#include "bgpd/bgp_labelpool.h"
#include "bgpd/bgp_pbr.h"
#include "bgpd/bgp_addpath.h"
@@ -8392,6 +8393,7 @@ void bgp_init(unsigned short instance)
bgp_ethernetvpn_init();
bgp_flowspec_vty_init();
bgp_linkstate_init();
+ bgp_linkstate_vty_init();
/* Access list initialize. */
access_list_init();
diff --git a/bgpd/subdir.am b/bgpd/subdir.am
index ca987ccb53..8b6b5ae743 100644
--- a/bgpd/subdir.am
+++ b/bgpd/subdir.am
@@ -53,6 +53,7 @@ bgpd_libbgp_a_SOURCES = \
bgpd/bgp_lcommunity.c \
bgpd/bgp_linkstate.c \
bgpd/bgp_linkstate_tlv.c \
+ bgpd/bgp_linkstate_vty.c \
bgpd/bgp_mac.c \
bgpd/bgp_memory.c \
bgpd/bgp_mpath.c \
@@ -137,6 +138,7 @@ noinst_HEADERS += \
bgpd/bgp_lcommunity.h \
bgpd/bgp_linkstate.h \
bgpd/bgp_linkstate_tlv.h \
+ bgpd/bgp_linkstate_vty.h \
bgpd/bgp_mac.h \
bgpd/bgp_memory.h \
bgpd/bgp_mpath.h \
@@ -213,6 +215,7 @@ clippy_scan += \
bgpd/bgp_debug.c \
bgpd/bgp_evpn_vty.c \
bgpd/bgp_labelpool.c \
+ bgpd/bgp_linkstate_vty.c \
bgpd/bgp_route.c \
bgpd/bgp_routemap.c \
bgpd/bgp_rpki.c \