]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_route.h
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / bgpd / bgp_route.h
index 3fa58c0dfb6904bebbfc4c17cdd2b504b1f7bee3..d0cf7e5d7731da3347fc6f6fc26f485bd8f83da5 100644 (file)
@@ -1,21 +1,6 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
 /* BGP routing information base
  * Copyright (C) 1996, 97, 98, 2000 Kunihiro Ishiguro
- *
- * This file is part of GNU Zebra.
- *
- * GNU Zebra 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, or (at your option) any
- * later version.
- *
- * GNU Zebra 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 _QUAGGA_BGP_ROUTE_H
@@ -61,6 +46,7 @@ enum bgp_show_type {
        bgp_show_type_detail,
        bgp_show_type_rpki,
        bgp_show_type_prefix_version,
+       bgp_show_type_self_originated,
 };
 
 enum bgp_show_adj_route_type {
@@ -370,6 +356,7 @@ struct bgp_static {
 
        /* Route Distinguisher */
        struct prefix_rd prd;
+       char *prd_pretty;
 
        /* MPLS label.  */
        mpls_label_t label;
@@ -663,8 +650,9 @@ DECLARE_HOOK(bgp_process,
 #define BGP_SHOW_OPT_AFI_IP6 (1 << 4)
 #define BGP_SHOW_OPT_ESTABLISHED (1 << 5)
 #define BGP_SHOW_OPT_FAILED (1 << 6)
-#define BGP_SHOW_OPT_DETAIL (1 << 7)
+#define BGP_SHOW_OPT_JSON_DETAIL (1 << 7)
 #define BGP_SHOW_OPT_TERSE (1 << 8)
+#define BGP_SHOW_OPT_ROUTES_DETAIL (1 << 9)
 
 /* Prototypes. */
 extern void bgp_rib_remove(struct bgp_dest *dest, struct bgp_path_info *pi,
@@ -749,17 +737,17 @@ extern int bgp_static_unset_safi(afi_t afi, safi_t safi, struct vty *,
                                 const char *, const char *, const char *);
 
 /* this is primarily for MPLS-VPN */
-extern int bgp_update(struct peer *peer, const struct prefix *p,
-                     uint32_t addpath_id, struct attr *attr,
-                     afi_t afi, safi_t safi, int type, int sub_type,
-                     struct prefix_rd *prd, mpls_label_t *label,
-                     uint32_t num_labels, int soft_reconfig,
-                     struct bgp_route_evpn *evpn);
-extern int bgp_withdraw(struct peer *peer, const struct prefix *p,
-                       uint32_t addpath_id, struct attr *attr, afi_t afi,
-                       safi_t safi, int type, int sub_type,
-                       struct prefix_rd *prd, mpls_label_t *label,
-                       uint32_t num_labels, struct bgp_route_evpn *evpn);
+extern void bgp_update(struct peer *peer, const struct prefix *p,
+                      uint32_t addpath_id, struct attr *attr, afi_t afi,
+                      safi_t safi, int type, int sub_type,
+                      struct prefix_rd *prd, mpls_label_t *label,
+                      uint32_t num_labels, int soft_reconfig,
+                      struct bgp_route_evpn *evpn);
+extern void bgp_withdraw(struct peer *peer, const struct prefix *p,
+                        uint32_t addpath_id, afi_t afi, safi_t safi, int type,
+                        int sub_type, struct prefix_rd *prd,
+                        mpls_label_t *label, uint32_t num_labels,
+                        struct bgp_route_evpn *evpn);
 
 /* for bgp_nexthop and bgp_damp */
 extern void bgp_process(struct bgp *, struct bgp_dest *, afi_t, safi_t);
@@ -856,7 +844,8 @@ extern void route_vty_out_detail_header(struct vty *vty, struct bgp *bgp,
                                        struct bgp_dest *dest,
                                        const struct prefix *p,
                                        const struct prefix_rd *prd, afi_t afi,
-                                       safi_t safi, json_object *json);
+                                       safi_t safi, json_object *json,
+                                       bool incremental_print);
 extern void route_vty_out_detail(struct vty *vty, struct bgp *bgp,
                                 struct bgp_dest *bn, const struct prefix *p,
                                 struct bgp_path_info *path, afi_t afi,
@@ -865,7 +854,7 @@ extern void route_vty_out_detail(struct vty *vty, struct bgp *bgp,
 extern int bgp_show_table_rd(struct vty *vty, struct bgp *bgp, safi_t safi,
                             struct bgp_table *table, struct prefix_rd *prd,
                             enum bgp_show_type type, void *output_arg,
-                            bool use_json);
+                            uint16_t show_flags);
 extern void bgp_best_path_select_defer(struct bgp *bgp, afi_t afi, safi_t safi);
 extern bool bgp_update_martian_nexthop(struct bgp *bgp, afi_t afi, safi_t safi,
                                       uint8_t type, uint8_t stype,
@@ -882,4 +871,12 @@ bgp_path_selection_reason2str(enum bgp_path_selection_reason reason);
 extern bool bgp_addpath_encode_rx(struct peer *peer, afi_t afi, safi_t safi);
 extern const struct prefix_rd *bgp_rd_from_dest(const struct bgp_dest *dest,
                                                safi_t safi);
+extern void bgp_path_info_free_with_caller(const char *caller,
+                                          struct bgp_path_info *path);
+extern void bgp_path_info_add_with_caller(const char *caller,
+                                         struct bgp_dest *dest,
+                                         struct bgp_path_info *pi);
+#define bgp_path_info_add(A, B)                                                \
+       bgp_path_info_add_with_caller(__func__, (A), (B))
+#define bgp_path_info_free(B) bgp_path_info_free_with_caller(__func__, (B))
 #endif /* _QUAGGA_BGP_ROUTE_H */