diff options
Diffstat (limited to 'bgpd/bgp_route.h')
| -rw-r--r-- | bgpd/bgp_route.h | 571 | 
1 files changed, 286 insertions, 285 deletions
diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h index 9076903818..1a1817bad3 100644 --- a/bgpd/bgp_route.h +++ b/bgpd/bgp_route.h @@ -27,119 +27,125 @@  struct bgp_nexthop_cache;  struct bgp_route_evpn; -enum bgp_show_type -{ -  bgp_show_type_normal, -  bgp_show_type_regexp, -  bgp_show_type_prefix_list, -  bgp_show_type_filter_list, -  bgp_show_type_route_map, -  bgp_show_type_neighbor, -  bgp_show_type_cidr_only, -  bgp_show_type_prefix_longer, -  bgp_show_type_community_all, -  bgp_show_type_community, -  bgp_show_type_community_exact, -  bgp_show_type_community_list, -  bgp_show_type_community_list_exact, -  bgp_show_type_lcommunity_all, -  bgp_show_type_lcommunity, -  bgp_show_type_lcommunity_list, -  bgp_show_type_flap_statistics, -  bgp_show_type_flap_neighbor, -  bgp_show_type_dampend_paths, -  bgp_show_type_damp_neighbor +enum bgp_show_type { +	bgp_show_type_normal, +	bgp_show_type_regexp, +	bgp_show_type_prefix_list, +	bgp_show_type_filter_list, +	bgp_show_type_route_map, +	bgp_show_type_neighbor, +	bgp_show_type_cidr_only, +	bgp_show_type_prefix_longer, +	bgp_show_type_community_all, +	bgp_show_type_community, +	bgp_show_type_community_exact, +	bgp_show_type_community_list, +	bgp_show_type_community_list_exact, +	bgp_show_type_lcommunity_all, +	bgp_show_type_lcommunity, +	bgp_show_type_lcommunity_list, +	bgp_show_type_flap_statistics, +	bgp_show_type_flap_neighbor, +	bgp_show_type_dampend_paths, +	bgp_show_type_damp_neighbor  }; -#define BGP_SHOW_SCODE_HEADER "Status codes: s suppressed, d damped, "\ -                              "h history, * valid, > best, = multipath,\n"\ -                "              i internal, r RIB-failure, S Stale, R Removed\n" +#define BGP_SHOW_SCODE_HEADER                                                  \ +	"Status codes: s suppressed, d damped, "                               \ +	"h history, * valid, > best, = multipath,\n"                           \ +	"              i internal, r RIB-failure, S Stale, R Removed\n"  #define BGP_SHOW_OCODE_HEADER "Origin codes: i - IGP, e - EGP, ? - incomplete\n\n"  #define BGP_SHOW_HEADER "   Network          Next Hop            Metric LocPrf Weight Path\n" -/* Ancillary information to struct bgp_info,  +/* Ancillary information to struct bgp_info,   * used for uncommonly used data (aggregation, MPLS, etc.)   * and lazily allocated to save memory.   */ -struct bgp_info_extra -{ -  /* Pointer to dampening structure.  */ -  struct bgp_damp_info *damp_info; +struct bgp_info_extra { +	/* Pointer to dampening structure.  */ +	struct bgp_damp_info *damp_info; -  /* This route is suppressed with aggregation.  */ -  int suppress; +	/* This route is suppressed with aggregation.  */ +	int suppress; -  /* Nexthop reachability check.  */ -  u_int32_t igpmetric; +	/* Nexthop reachability check.  */ +	u_int32_t igpmetric; -  /* MPLS label.  */ -  mpls_label_t label; +	/* MPLS label.  */ +	mpls_label_t label;  #if ENABLE_BGP_VNC -  union { - -      struct { -	  void *rfapi_handle;	/* export: NVE advertising this route */ -	  struct list	*local_nexthops; /* optional, for static routes */ -      } export; - -      struct { -	  struct thread *timer; -	  void *hme;		/* encap monitor, if this is a VPN route */ -	  struct prefix_rd rd;	/* import: route's route-distinguisher */ -	  u_char un_family;	/* family of cached un address, 0 if unset */ -	  union { -	    struct in_addr addr4; -	    struct in6_addr addr6; -	  } un;			/* cached un address */ -	  time_t create_time; -	  struct prefix aux_prefix; /* AFI_L2VPN: the IP addr, if family set */ -      } import; - -  } vnc; +	union { + +		struct { +			void *rfapi_handle; /* export: NVE advertising this +					       route */ +			struct list *local_nexthops; /* optional, for static +							routes */ +		} export; + +		struct { +			struct thread *timer; +			void *hme; /* encap monitor, if this is a VPN route */ +			struct prefix_rd +				rd; /* import: route's route-distinguisher */ +			u_char un_family; /* family of cached un address, 0 if +					     unset */ +			union { +				struct in_addr addr4; +				struct in6_addr addr6; +			} un; /* cached un address */ +			time_t create_time; +			struct +				prefix +					aux_prefix; /* AFI_L2VPN: the IP addr, +						       if family set */ +		} import; + +	} vnc;  #endif -  /* For imported routes into a VNI (or VRF), this points to the parent. */ -  void *parent; +	/* For imported routes into a VNI (or VRF), this points to the parent. +	 */ +	void *parent;  }; -struct bgp_info -{ -  /* For linked list. */ -  struct bgp_info *next; -  struct bgp_info *prev; +struct bgp_info { +	/* For linked list. */ +	struct bgp_info *next; +	struct bgp_info *prev; + +	/* For nexthop linked list */ +	LIST_ENTRY(bgp_info) nh_thread; + +	/* Back pointer to the prefix node */ +	struct bgp_node *net; + +	/* Back pointer to the nexthop structure */ +	struct bgp_nexthop_cache *nexthop; -  /* For nexthop linked list */ -  LIST_ENTRY(bgp_info) nh_thread; +	/* Peer structure.  */ +	struct peer *peer; -  /* Back pointer to the prefix node */ -  struct bgp_node *net; +	/* Attribute structure.  */ +	struct attr *attr; -  /* Back pointer to the nexthop structure */ -  struct bgp_nexthop_cache *nexthop; +	/* Extra information */ +	struct bgp_info_extra *extra; -  /* Peer structure.  */ -  struct peer *peer; -  /* Attribute structure.  */ -  struct attr *attr; -   -  /* Extra information */ -  struct bgp_info_extra *extra; -   +	/* Multipath information */ +	struct bgp_info_mpath *mpath; -  /* Multipath information */ -  struct bgp_info_mpath *mpath; +	/* Uptime.  */ +	time_t uptime; -  /* Uptime.  */ -  time_t uptime; +	/* reference count */ +	int lock; -  /* reference count */ -  int lock; -   -  /* BGP information status.  */ -  u_int16_t flags; +	/* BGP information status.  */ +	u_int16_t flags;  #define BGP_INFO_IGP_CHANGED    (1 << 0)  #define BGP_INFO_DAMPED         (1 << 1)  #define BGP_INFO_HISTORY        (1 << 2) @@ -155,12 +161,12 @@ struct bgp_info  #define BGP_INFO_MULTIPATH_CHG  (1 << 12)  #define BGP_INFO_RIB_ATTR_CHG   (1 << 13) -  /* BGP route type.  This can be static, RIP, OSPF, BGP etc.  */ -  u_char type; +	/* BGP route type.  This can be static, RIP, OSPF, BGP etc.  */ +	u_char type; -  /* When above type is BGP.  This sub type specify BGP sub type -     information.  */ -  u_char sub_type; +	/* When above type is BGP.  This sub type specify BGP sub type +	   information.  */ +	u_char sub_type;  #define BGP_ROUTE_NORMAL       0  #define BGP_ROUTE_STATIC       1  #define BGP_ROUTE_AGGREGATE    2 @@ -169,85 +175,81 @@ struct bgp_info  # define BGP_ROUTE_RFP          4   #endif -  u_short instance; - -  /* Addpath identifiers */ -  u_int32_t addpath_rx_id; -  u_int32_t addpath_tx_id; +	u_short instance; +	/* Addpath identifiers */ +	u_int32_t addpath_rx_id; +	u_int32_t addpath_tx_id;  };  /* Structure used in BGP path selection */ -struct bgp_info_pair -{ -  struct bgp_info *old; -  struct bgp_info *new; +struct bgp_info_pair { +	struct bgp_info *old; +	struct bgp_info *new;  };  /* BGP static route configuration. */ -struct bgp_static -{ -  /* Backdoor configuration.  */ -  int backdoor; +struct bgp_static { +	/* Backdoor configuration.  */ +	int backdoor; -  /* Label index configuration; applies to LU prefixes. */ -  u_int32_t label_index; +	/* Label index configuration; applies to LU prefixes. */ +	u_int32_t label_index;  #define BGP_INVALID_LABEL_INDEX   0xFFFFFFFF -  /* Import check status.  */ -  u_char valid; +	/* Import check status.  */ +	u_char valid; -  /* IGP metric. */ -  u_int32_t igpmetric; +	/* IGP metric. */ +	u_int32_t igpmetric; -  /* IGP nexthop. */ -  struct in_addr igpnexthop; +	/* IGP nexthop. */ +	struct in_addr igpnexthop; -  /* Atomic set reference count (ie cause of pathlimit) */ -  u_int32_t atomic; -   -  /* BGP redistribute route-map.  */ -  struct -  { -    char *name; -    struct route_map *map; -  } rmap; +	/* Atomic set reference count (ie cause of pathlimit) */ +	u_int32_t atomic; -  /* Route Distinguisher */ -  struct prefix_rd     prd; +	/* BGP redistribute route-map.  */ +	struct { +		char *name; +		struct route_map *map; +	} rmap; -  /* MPLS label.  */ -  mpls_label_t label; +	/* Route Distinguisher */ +	struct prefix_rd prd; -  /* EVPN */ -  struct eth_segment_id *eth_s_id; -  struct ethaddr *router_mac; -  uint16_t   encap_tunneltype; -  struct prefix gatewayIp; +	/* MPLS label.  */ +	mpls_label_t label; + +	/* EVPN */ +	struct eth_segment_id *eth_s_id; +	struct ethaddr *router_mac; +	uint16_t encap_tunneltype; +	struct prefix gatewayIp;  }; -#define BGP_NEXTHOP_AFI_FROM_NHLEN(nhlen) \ -  ((nhlen) < IPV4_MAX_BYTELEN  ? 0 : \ -   ((nhlen) < IPV6_MAX_BYTELEN ? AFI_IP : AFI_IP6)) +#define BGP_NEXTHOP_AFI_FROM_NHLEN(nhlen)                                      \ +	((nhlen) < IPV4_MAX_BYTELEN                                            \ +		 ? 0                                                           \ +		 : ((nhlen) < IPV6_MAX_BYTELEN ? AFI_IP : AFI_IP6)) -#define BGP_ATTR_NEXTHOP_AFI_IP6(attr) \ -  (! CHECK_FLAG (attr->flag, ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP)) && \ -    ((attr)->mp_nexthop_len == 16 || \ -    (attr)->mp_nexthop_len == 32)) -#define BGP_INFO_COUNTABLE(BI) \ -  (! CHECK_FLAG ((BI)->flags, BGP_INFO_HISTORY) \ -   && ! CHECK_FLAG ((BI)->flags, BGP_INFO_REMOVED)) +#define BGP_ATTR_NEXTHOP_AFI_IP6(attr)                                         \ +	(!CHECK_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_NEXT_HOP))             \ +	 && ((attr)->mp_nexthop_len == 16 || (attr)->mp_nexthop_len == 32)) +#define BGP_INFO_COUNTABLE(BI)                                                 \ +	(!CHECK_FLAG((BI)->flags, BGP_INFO_HISTORY)                            \ +	 && !CHECK_FLAG((BI)->flags, BGP_INFO_REMOVED))  /* Flags which indicate a route is unuseable in some form */ -#define BGP_INFO_UNUSEABLE \ -  (BGP_INFO_HISTORY|BGP_INFO_DAMPED|BGP_INFO_REMOVED) +#define BGP_INFO_UNUSEABLE                                                     \ +	(BGP_INFO_HISTORY | BGP_INFO_DAMPED | BGP_INFO_REMOVED)  /* Macro to check BGP information is alive or not.  Sadly,   * not equivalent to just checking previous, because of the   * sense of the additional VALID flag.   */ -#define BGP_INFO_HOLDDOWN(BI) \ -  (! CHECK_FLAG ((BI)->flags, BGP_INFO_VALID) \ -   || CHECK_FLAG ((BI)->flags, BGP_INFO_UNUSEABLE)) +#define BGP_INFO_HOLDDOWN(BI)                                                  \ +	(!CHECK_FLAG((BI)->flags, BGP_INFO_VALID)                              \ +	 || CHECK_FLAG((BI)->flags, BGP_INFO_UNUSEABLE))  #define DISTRIBUTE_IN_NAME(F)   ((F)->dlist[FILTER_IN].name)  #define DISTRIBUTE_IN(F)        ((F)->dlist[FILTER_IN].alist) @@ -275,168 +277,167 @@ struct bgp_static  /* path PREFIX (addpath rxid NUMBER) */  #define PATH_ADDPATH_STR_BUFFER PREFIX2STR_BUFFER + 32 -enum bgp_path_type -{ -  BGP_PATH_ALL, -  BGP_PATH_BESTPATH, -  BGP_PATH_MULTIPATH -}; +enum bgp_path_type { BGP_PATH_ALL, BGP_PATH_BESTPATH, BGP_PATH_MULTIPATH }; -static inline void -bgp_bump_version (struct bgp_node *node) +static inline void bgp_bump_version(struct bgp_node *node)  { -  node->version = bgp_table_next_version(bgp_node_table(node)); +	node->version = bgp_table_next_version(bgp_node_table(node));  } -static inline int -bgp_fibupd_safi (safi_t safi) +static inline int bgp_fibupd_safi(safi_t safi)  { -  if (safi == SAFI_UNICAST || -      safi == SAFI_MULTICAST || -      safi == SAFI_LABELED_UNICAST) -    return 1; -  return 0; +	if (safi == SAFI_UNICAST || safi == SAFI_MULTICAST +	    || safi == SAFI_LABELED_UNICAST) +		return 1; +	return 0;  }  /* Prototypes. */ -extern void bgp_process_queue_init (void); -extern void bgp_route_init (void); -extern void bgp_route_finish (void); -extern void bgp_cleanup_routes (struct bgp *); -extern void bgp_announce_route (struct peer *, afi_t, safi_t); +extern void bgp_process_queue_init(void); +extern void bgp_route_init(void); +extern void bgp_route_finish(void); +extern void bgp_cleanup_routes(struct bgp *); +extern void bgp_announce_route(struct peer *, afi_t, safi_t);  extern void bgp_stop_announce_route_timer(struct peer_af *paf); -extern void bgp_announce_route_all (struct peer *); -extern void bgp_default_originate (struct peer *, afi_t, safi_t, int); -extern void bgp_soft_reconfig_in (struct peer *, afi_t, safi_t); -extern void bgp_clear_route (struct peer *, afi_t, safi_t); -extern void bgp_clear_route_all (struct peer *); -extern void bgp_clear_adj_in (struct peer *, afi_t, safi_t); -extern void bgp_clear_stale_route (struct peer *, afi_t, safi_t); - -extern struct bgp_node *bgp_afi_node_get (struct bgp_table *table, afi_t afi, -                                          safi_t safi, struct prefix *p, -                                          struct prefix_rd *prd); -extern struct bgp_info *bgp_info_lock (struct bgp_info *); -extern struct bgp_info *bgp_info_unlock (struct bgp_info *); -extern void bgp_info_add (struct bgp_node *rn, struct bgp_info *ri); -extern void bgp_info_reap (struct bgp_node *rn, struct bgp_info *ri); -extern void bgp_info_delete (struct bgp_node *rn, struct bgp_info *ri); -extern struct bgp_info_extra *bgp_info_extra_get (struct bgp_info *); -extern void bgp_info_set_flag (struct bgp_node *, struct bgp_info *, u_int32_t); -extern void bgp_info_unset_flag (struct bgp_node *, struct bgp_info *, u_int32_t); -extern void bgp_info_path_with_addpath_rx_str (struct bgp_info *ri, char *buf); - -extern int bgp_nlri_parse_ip (struct peer *, struct attr *, struct bgp_nlri *); - -extern int bgp_maximum_prefix_overflow (struct peer *, afi_t, safi_t, int); - -extern void bgp_redistribute_add (struct bgp *, struct prefix *, const struct in_addr *, -				  const struct in6_addr *, unsigned int ifindex, -				  u_int32_t, u_char, u_short, route_tag_t); -extern void bgp_redistribute_delete (struct bgp *, struct prefix *, u_char, u_short); -extern void bgp_redistribute_withdraw (struct bgp *, afi_t, int, u_short); - -extern void bgp_static_add (struct bgp *); -extern void bgp_static_delete (struct bgp *); -extern void bgp_static_redo_import_check (struct bgp *); -extern void bgp_purge_static_redist_routes (struct bgp *bgp); -extern void bgp_static_update (struct bgp *, struct prefix *, struct bgp_static *, -			afi_t, safi_t); -extern void bgp_static_withdraw (struct bgp *, struct prefix *, afi_t, safi_t); -                      -extern int bgp_static_set_safi (afi_t afi, safi_t safi, struct vty *vty, const char *, -                                const char *, const char *, const char *, -                                int, const char *, const char *, const char *, const char *); - -extern int bgp_static_unset_safi (afi_t afi, safi_t safi, struct vty *, const char *, -                                  const char *, const char *, -                                  int, const char *, const char *, const char *); +extern void bgp_announce_route_all(struct peer *); +extern void bgp_default_originate(struct peer *, afi_t, safi_t, int); +extern void bgp_soft_reconfig_in(struct peer *, afi_t, safi_t); +extern void bgp_clear_route(struct peer *, afi_t, safi_t); +extern void bgp_clear_route_all(struct peer *); +extern void bgp_clear_adj_in(struct peer *, afi_t, safi_t); +extern void bgp_clear_stale_route(struct peer *, afi_t, safi_t); + +extern struct bgp_node *bgp_afi_node_get(struct bgp_table *table, afi_t afi, +					 safi_t safi, struct prefix *p, +					 struct prefix_rd *prd); +extern struct bgp_info *bgp_info_lock(struct bgp_info *); +extern struct bgp_info *bgp_info_unlock(struct bgp_info *); +extern void bgp_info_add(struct bgp_node *rn, struct bgp_info *ri); +extern void bgp_info_reap(struct bgp_node *rn, struct bgp_info *ri); +extern void bgp_info_delete(struct bgp_node *rn, struct bgp_info *ri); +extern struct bgp_info_extra *bgp_info_extra_get(struct bgp_info *); +extern void bgp_info_set_flag(struct bgp_node *, struct bgp_info *, u_int32_t); +extern void bgp_info_unset_flag(struct bgp_node *, struct bgp_info *, +				u_int32_t); +extern void bgp_info_path_with_addpath_rx_str(struct bgp_info *ri, char *buf); + +extern int bgp_nlri_parse_ip(struct peer *, struct attr *, struct bgp_nlri *); + +extern int bgp_maximum_prefix_overflow(struct peer *, afi_t, safi_t, int); + +extern void bgp_redistribute_add(struct bgp *, struct prefix *, +				 const struct in_addr *, +				 const struct in6_addr *, unsigned int ifindex, +				 u_int32_t, u_char, u_short, route_tag_t); +extern void bgp_redistribute_delete(struct bgp *, struct prefix *, u_char, +				    u_short); +extern void bgp_redistribute_withdraw(struct bgp *, afi_t, int, u_short); + +extern void bgp_static_add(struct bgp *); +extern void bgp_static_delete(struct bgp *); +extern void bgp_static_redo_import_check(struct bgp *); +extern void bgp_purge_static_redist_routes(struct bgp *bgp); +extern void bgp_static_update(struct bgp *, struct prefix *, +			      struct bgp_static *, afi_t, safi_t); +extern void bgp_static_withdraw(struct bgp *, struct prefix *, afi_t, safi_t); + +extern int bgp_static_set_safi(afi_t afi, safi_t safi, struct vty *vty, +			       const char *, const char *, const char *, +			       const char *, int, const char *, const char *, +			       const char *, const char *); + +extern int bgp_static_unset_safi(afi_t afi, safi_t safi, struct vty *, +				 const char *, const char *, const char *, int, +				 const char *, const char *, const char *);  /* this is primarily for MPLS-VPN */ -extern int bgp_update (struct peer *, struct prefix *, u_int32_t, struct attr *, -		       afi_t, safi_t, int, int, struct prefix_rd *, -		       mpls_label_t *, int, struct bgp_route_evpn *); -extern int bgp_withdraw (struct peer *, struct prefix *, u_int32_t, struct attr *, -			 afi_t, safi_t, int, int, struct prefix_rd *, mpls_label_t *, -                         struct bgp_route_evpn *); +extern int bgp_update(struct peer *, struct prefix *, u_int32_t, struct attr *, +		      afi_t, safi_t, int, int, struct prefix_rd *, +		      mpls_label_t *, int, struct bgp_route_evpn *); +extern int bgp_withdraw(struct peer *, struct prefix *, u_int32_t, +			struct attr *, afi_t, safi_t, int, int, +			struct prefix_rd *, mpls_label_t *, +			struct bgp_route_evpn *);  /* for bgp_nexthop and bgp_damp */ -extern void bgp_process (struct bgp *, struct bgp_node *, afi_t, safi_t); +extern void bgp_process(struct bgp *, struct bgp_node *, afi_t, safi_t);  /*   * Add an end-of-initial-update marker to the process queue. This is just a   * queue element with NULL bgp node.   */ -extern void bgp_add_eoiu_mark (struct bgp *); -extern int bgp_config_write_table_map (struct vty *, struct bgp *, afi_t, safi_t, -                                       int *); -extern int bgp_config_write_network (struct vty *, struct bgp *, afi_t, safi_t, int *); -extern int bgp_config_write_distance (struct vty *, struct bgp *, afi_t, safi_t, int *); - -extern void bgp_aggregate_increment (struct bgp *, struct prefix *, struct bgp_info *, -			      afi_t, safi_t); -extern void bgp_aggregate_decrement (struct bgp *, struct prefix *, struct bgp_info *, -			      afi_t, safi_t); - -extern u_char bgp_distance_apply (struct prefix *, struct bgp_info *, afi_t, safi_t, struct bgp *); - -extern afi_t bgp_node_afi (struct vty *); -extern safi_t bgp_node_safi (struct vty *); - -extern struct bgp_info * -info_make (int type, int sub_type, u_short instance, struct peer *peer, -           struct attr *attr, struct bgp_node *rn); - -extern void route_vty_out (struct vty *, struct prefix *, struct bgp_info *, int, safi_t, json_object *); -extern void route_vty_out_tag (struct vty *, struct prefix *, struct bgp_info *, int, safi_t, json_object *); -extern void route_vty_out_tmp (struct vty *, struct prefix *, struct attr *, safi_t, u_char, json_object *); -extern void -route_vty_out_overlay (struct vty *vty, struct prefix *p, -                       struct bgp_info *binfo, int display, json_object *json); - -extern int -subgroup_process_announce_selected (struct update_subgroup *subgrp, -				    struct bgp_info *selected, -                                    struct bgp_node *rn, -                                    u_int32_t addpath_tx_id); +extern void bgp_add_eoiu_mark(struct bgp *); +extern int bgp_config_write_table_map(struct vty *, struct bgp *, afi_t, safi_t, +				      int *); +extern int bgp_config_write_network(struct vty *, struct bgp *, afi_t, safi_t, +				    int *); +extern int bgp_config_write_distance(struct vty *, struct bgp *, afi_t, safi_t, +				     int *); + +extern void bgp_aggregate_increment(struct bgp *, struct prefix *, +				    struct bgp_info *, afi_t, safi_t); +extern void bgp_aggregate_decrement(struct bgp *, struct prefix *, +				    struct bgp_info *, afi_t, safi_t); + +extern u_char bgp_distance_apply(struct prefix *, struct bgp_info *, afi_t, +				 safi_t, struct bgp *); + +extern afi_t bgp_node_afi(struct vty *); +extern safi_t bgp_node_safi(struct vty *); + +extern struct bgp_info *info_make(int type, int sub_type, u_short instance, +				  struct peer *peer, struct attr *attr, +				  struct bgp_node *rn); + +extern void route_vty_out(struct vty *, struct prefix *, struct bgp_info *, int, +			  safi_t, json_object *); +extern void route_vty_out_tag(struct vty *, struct prefix *, struct bgp_info *, +			      int, safi_t, json_object *); +extern void route_vty_out_tmp(struct vty *, struct prefix *, struct attr *, +			      safi_t, u_char, json_object *); +extern void route_vty_out_overlay(struct vty *vty, struct prefix *p, +				  struct bgp_info *binfo, int display, +				  json_object *json); + +extern int subgroup_process_announce_selected(struct update_subgroup *subgrp, +					      struct bgp_info *selected, +					      struct bgp_node *rn, +					      u_int32_t addpath_tx_id);  extern int subgroup_announce_check(struct bgp_node *rn, struct bgp_info *ri,  				   struct update_subgroup *subgrp,  				   struct prefix *p, struct attr *attr); -extern void bgp_peer_clear_node_queue_drain_immediate (struct peer *peer); -extern void bgp_process_queues_drain_immediate (void); +extern void bgp_peer_clear_node_queue_drain_immediate(struct peer *peer); +extern void bgp_process_queues_drain_immediate(void);  /* for encap/vpn */ -extern struct bgp_node * -bgp_afi_node_get (struct bgp_table *, afi_t , safi_t , struct prefix *, - 		  struct prefix_rd *); -extern struct bgp_node * -bgp_afi_node_lookup (struct bgp_table *table, afi_t afi, safi_t safi, -                     struct prefix *p, struct prefix_rd *prd); -extern struct bgp_info *bgp_info_new (void); -extern void bgp_info_restore (struct bgp_node *, struct bgp_info *); - -extern int -bgp_info_cmp_compatible (struct bgp *, struct bgp_info *, struct bgp_info *, -                         char *pfx_buf, afi_t afi, safi_t safi); - -extern void -bgp_best_selection (struct bgp *bgp, struct bgp_node *rn, -		    struct bgp_maxpaths_cfg *mpath_cfg, -		    struct bgp_info_pair *result, -                    afi_t afi, safi_t safi); -extern void bgp_zebra_clear_route_change_flags (struct bgp_node *rn); -extern int -bgp_zebra_has_route_changed (struct bgp_node *rn, struct bgp_info *selected); - -extern void -route_vty_out_detail_header (struct vty *vty, struct bgp *bgp, -			     struct bgp_node *rn, -                             struct prefix_rd *prd, afi_t afi, safi_t safi, -                             json_object *json); -extern void -route_vty_out_detail (struct vty *vty, struct bgp *bgp, struct prefix *p,  -		      struct bgp_info *binfo, afi_t afi, safi_t safi, -                      json_object *json_paths); +extern struct bgp_node *bgp_afi_node_get(struct bgp_table *, afi_t, safi_t, +					 struct prefix *, struct prefix_rd *); +extern struct bgp_node *bgp_afi_node_lookup(struct bgp_table *table, afi_t afi, +					    safi_t safi, struct prefix *p, +					    struct prefix_rd *prd); +extern struct bgp_info *bgp_info_new(void); +extern void bgp_info_restore(struct bgp_node *, struct bgp_info *); + +extern int bgp_info_cmp_compatible(struct bgp *, struct bgp_info *, +				   struct bgp_info *, char *pfx_buf, afi_t afi, +				   safi_t safi); + +extern void bgp_best_selection(struct bgp *bgp, struct bgp_node *rn, +			       struct bgp_maxpaths_cfg *mpath_cfg, +			       struct bgp_info_pair *result, afi_t afi, +			       safi_t safi); +extern void bgp_zebra_clear_route_change_flags(struct bgp_node *rn); +extern int bgp_zebra_has_route_changed(struct bgp_node *rn, +				       struct bgp_info *selected); + +extern void route_vty_out_detail_header(struct vty *vty, struct bgp *bgp, +					struct bgp_node *rn, +					struct prefix_rd *prd, afi_t afi, +					safi_t safi, json_object *json); +extern void route_vty_out_detail(struct vty *vty, struct bgp *bgp, +				 struct prefix *p, struct bgp_info *binfo, +				 afi_t afi, safi_t safi, +				 json_object *json_paths);  #endif /* _QUAGGA_BGP_ROUTE_H */  | 
