]> git.proxmox.com Git - mirror_frr.git/commitdiff
lib: BGP registration with IGP for BGP ORR rSPF calc
authorMadhuri Kuruganti <maduri111@gmail.com>
Sun, 4 Sep 2022 11:56:11 +0000 (17:26 +0530)
committerMadhuri Kuruganti <maduri111@gmail.com>
Wed, 12 Oct 2022 07:59:24 +0000 (13:29 +0530)
Signed-off-by: Madhuri Kuruganti <maduri111@gmail.com>
lib/command.h
lib/orr_msg.h [new file with mode: 0644]
lib/subdir.am
lib/zclient.h

index ca49efd262a740a7e6af46adea971f28491b9d62..42b4406212e208f7751eb0a2b58478cc6cfb32ed 100644 (file)
@@ -417,6 +417,7 @@ struct cmd_node {
 #define BGP_SOFT_IN_STR "Send route-refresh unless using 'soft-reconfiguration inbound'\n"
 #define BGP_SOFT_OUT_STR "Resend all outbound updates\n"
 #define BGP_SOFT_RSCLIENT_RIB_STR "Soft reconfig for rsclient RIB\n"
+#define BGP_ORR_DEBUG "Enable Optimal Route Reflection Debugging logs\n"
 #define OSPF_STR "OSPF information\n"
 #define NEIGHBOR_STR "Specify neighbor router\n"
 #define DEBUG_STR "Debugging functions\n"
diff --git a/lib/orr_msg.h b/lib/orr_msg.h
new file mode 100644 (file)
index 0000000..03f92ef
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Structures common to BGP, OSPF and ISIS for BGP Optimal Route Reflection
+ * Copyright (C) 2021 Samsung R&D Institute India - Bangalore.
+ *                     Madhurilatha Kuruganti
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef _FRR_ORR_MSG_H
+#define _FRR_ORR_MSG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* REVISIT: Need to check if we can use zero length array */
+#define ORR_MAX_PREFIX 100
+
+struct orr_prefix_metric {
+       struct prefix prefix;
+       uint32_t metric;
+};
+
+/* BGP-IGP Register for IGP metric */
+struct orr_igp_metric_reg {
+       bool reg;
+       uint8_t proto;
+       safi_t safi;
+       struct prefix prefix;
+};
+
+/* IGP-BGP message structures */
+struct orr_igp_metric_info {
+       /* IGP instance data. */
+       uint8_t proto;
+       uint32_t instId;
+
+       safi_t safi;
+
+       /* IGP metric from Active Root. */
+       struct prefix root;
+       uint32_t num_entries;
+       struct orr_prefix_metric nexthop[ORR_MAX_PREFIX];
+};
+
+/* BGP ORR Root node */
+struct orr_root {
+       afi_t afi;
+       safi_t safi;
+
+       /* MPLS_TE prefix and router ID */
+       struct prefix prefix;
+       struct in_addr router_id;
+
+       /* Advertising OSPF Router ID. */
+       struct in_addr adv_router;
+
+       /* BGP-ORR Received LSAs */
+       struct ospf_lsa *router_lsa_rcvd;
+
+       /* Routing tables from root node */
+       struct route_table *old_table; /* Old routing table. */
+       struct route_table *new_table; /* Current routing table. */
+
+       struct route_table *old_rtrs; /* Old ABR/ASBR RT. */
+       struct route_table *new_rtrs; /* New ABR/ASBR RT. */
+};
+
+/* Prototypes. */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FRR_ORR_MSG_H */
index d6defd7149fd1aa43a09fc2850662dbae16bae4a..e04e700eb692bc38061c118aa8691de68c511a73 100644 (file)
@@ -245,6 +245,7 @@ pkginclude_HEADERS += \
        lib/ns.h \
        lib/openbsd-queue.h \
        lib/openbsd-tree.h \
+       lib/orr_msg.h \
        lib/plist.h \
        lib/prefix.h \
        lib/printfrr.h \
index c3ea2a16fffa857e2c9374b96cd9659c0cd300e2..fb5da9aad2a9f293264ca643d98588b9d9d713c2 100644 (file)
@@ -100,6 +100,8 @@ enum zserv_client_capabilities {
 extern struct sockaddr_storage zclient_addr;
 extern socklen_t zclient_addr_len;
 
+#define ZAPI_ORR_FLAG_UNICAST 0x01
+
 /* Zebra message types. */
 typedef enum {
        ZEBRA_INTERFACE_ADD,
@@ -1229,6 +1231,10 @@ enum zapi_opaque_registry {
        LDP_RLFA_UNREGISTER_ALL = 8,
        /* Announce LDP labels associated to a previously registered RLFA */
        LDP_RLFA_LABELS = 9,
+       /* Register for IGP METRIC with OSPF/ISIS */
+       ORR_IGP_METRIC_REGISTER = 10,
+       /* Send SPF data to BGP */
+       ORR_IGP_METRIC_UPDATE = 11
 };
 
 /* Send the hello message.