diff options
Diffstat (limited to 'bgpd/bgpd.h')
| -rw-r--r-- | bgpd/bgpd.h | 1691 | 
1 files changed, 835 insertions, 856 deletions
diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h index 31aa6163b0..67b8289c70 100644 --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h @@ -45,14 +45,14 @@ struct bpacket;  /*   * Allow the neighbor XXXX remote-as to take internal or external - * AS_SPECIFIED is zero to auto-inherit original non-feature/enhancement behavior + * AS_SPECIFIED is zero to auto-inherit original non-feature/enhancement + * behavior   * in the system.   */ -enum { -  AS_UNSPECIFIED = 0, -  AS_SPECIFIED, -  AS_INTERNAL, -  AS_EXTERNAL, +enum { AS_UNSPECIFIED = 0, +       AS_SPECIFIED, +       AS_INTERNAL, +       AS_EXTERNAL,  };  /* Typedef BGP specific types.  */ @@ -60,95 +60,94 @@ typedef u_int32_t as_t;  typedef u_int16_t as16_t; /* we may still encounter 16 Bit asnums */  typedef u_int16_t bgp_size_t; -#define max(a,b)		\ -  ({ __typeof__ (a) _a = (a);	\ -    __typeof__ (b) _b = (b);	\ -    _a > _b ? _a : _b; }) - -enum bgp_af_index -{ -  BGP_AF_START, -  BGP_AF_IPV4_UNICAST = BGP_AF_START, -  BGP_AF_IPV4_MULTICAST, -  BGP_AF_IPV4_VPN, -  BGP_AF_IPV6_UNICAST, -  BGP_AF_IPV6_MULTICAST, -  BGP_AF_IPV6_VPN, -  BGP_AF_IPV4_ENCAP, -  BGP_AF_IPV6_ENCAP, -  BGP_AF_L2VPN_EVPN, -  BGP_AF_IPV4_LBL_UNICAST, -  BGP_AF_IPV6_LBL_UNICAST, -  BGP_AF_MAX +#define max(a, b)                                                              \ +	({                                                                     \ +		__typeof__(a) _a = (a);                                        \ +		__typeof__(b) _b = (b);                                        \ +		_a > _b ? _a : _b;                                             \ +	}) + +enum bgp_af_index { +	BGP_AF_START, +	BGP_AF_IPV4_UNICAST = BGP_AF_START, +	BGP_AF_IPV4_MULTICAST, +	BGP_AF_IPV4_VPN, +	BGP_AF_IPV6_UNICAST, +	BGP_AF_IPV6_MULTICAST, +	BGP_AF_IPV6_VPN, +	BGP_AF_IPV4_ENCAP, +	BGP_AF_IPV6_ENCAP, +	BGP_AF_L2VPN_EVPN, +	BGP_AF_IPV4_LBL_UNICAST, +	BGP_AF_IPV6_LBL_UNICAST, +	BGP_AF_MAX  }; -#define AF_FOREACH(af) \ -  for ((af) = BGP_AF_START; (af) < BGP_AF_MAX; (af)++) +#define AF_FOREACH(af) for ((af) = BGP_AF_START; (af) < BGP_AF_MAX; (af)++) -#define FOREACH_AFI_SAFI(afi, safi)			\ -  for (afi = AFI_IP; afi < AFI_MAX; afi++)		\ -    for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) +#define FOREACH_AFI_SAFI(afi, safi)                                            \ +	for (afi = AFI_IP; afi < AFI_MAX; afi++)                               \ +		for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)  /* BGP master for system wide configurations and variables.  */ -struct bgp_master -{ -  /* BGP instance list.  */ -  struct list *bgp; +struct bgp_master { +	/* BGP instance list.  */ +	struct list *bgp; + +	/* BGP thread master.  */ +	struct thread_master *master; -  /* BGP thread master.  */ -  struct thread_master *master; +	/* work queues */ +	struct work_queue *process_main_queue; -  /* work queues */ -  struct work_queue *process_main_queue; -   -  /* Listening sockets */ -  struct list *listen_sockets; -   -  /* BGP port number.  */ -  u_int16_t port; +	/* Listening sockets */ +	struct list *listen_sockets; -  /* Listener address */ -  char *address; +	/* BGP port number.  */ +	u_int16_t port; -  /* BGP start time.  */ -  time_t start_time; +	/* Listener address */ +	char *address; -  /* Various BGP global configuration.  */ -  u_char options; +	/* BGP start time.  */ +	time_t start_time; + +	/* Various BGP global configuration.  */ +	u_char options;  #define BGP_OPT_NO_FIB                   (1 << 0)  #define BGP_OPT_MULTIPLE_INSTANCE        (1 << 1)  #define BGP_OPT_CONFIG_CISCO             (1 << 2)  #define BGP_OPT_NO_LISTEN                (1 << 3) -  uint64_t updgrp_idspace; -  uint64_t subgrp_idspace; +	uint64_t updgrp_idspace; +	uint64_t subgrp_idspace; -  /* timer to dampen route map changes */ -  struct thread *t_rmap_update;   /* Handle route map updates */ -  u_int32_t rmap_update_timer;	  /* Route map update timer */ +	/* timer to dampen route map changes */ +	struct thread *t_rmap_update; /* Handle route map updates */ +	u_int32_t rmap_update_timer;  /* Route map update timer */ +				      /* $FRR indent$ */ +				      /* clang-format off */  #define RMAP_DEFAULT_UPDATE_TIMER 5 /* disabled by default */ -  QOBJ_FIELDS +	QOBJ_FIELDS  };  DECLARE_QOBJ_TYPE(bgp_master)  /* BGP route-map structure.  */ -struct bgp_rmap -{ -  char *name; -  struct route_map *map; +struct bgp_rmap { +	char *name; +	struct route_map *map;  }; -struct bgp_redist -{ -  u_short instance; +struct bgp_redist { +	u_short instance; -  /* BGP redistribute metric configuration. */ -  u_char redist_metric_flag; -  u_int32_t redist_metric; +	/* BGP redistribute metric configuration. */ +	u_char redist_metric_flag; +	u_int32_t redist_metric; -  /* BGP redistribute route-map.  */ -  struct bgp_rmap rmap; +	/* BGP redistribute route-map.  */ +	struct bgp_rmap rmap;  };  /* @@ -159,122 +158,129 @@ struct bgp_redist   * The "default" instance is treated separately to simplify the code. Note   * that if deployed in a Multi-VRF environment, it may not exist.   */ -enum bgp_instance_type -{ -  BGP_INSTANCE_TYPE_DEFAULT, -  BGP_INSTANCE_TYPE_VRF, -  BGP_INSTANCE_TYPE_VIEW +enum bgp_instance_type { +	BGP_INSTANCE_TYPE_DEFAULT, +	BGP_INSTANCE_TYPE_VRF, +	BGP_INSTANCE_TYPE_VIEW  };  /* BGP instance structure.  */ -struct bgp  -{ -  /* AS number of this BGP instance.  */ -  as_t as; - -  /* Name of this BGP instance.  */ -  char *name; - -  /* Type of instance and VRF id. */ -  enum bgp_instance_type inst_type; -  vrf_id_t vrf_id; -   -  /* Reference count to allow peer_delete to finish after bgp_delete */ -  int lock; - -  /* Self peer.  */ -  struct peer *peer_self; - -  /* BGP peer. */ -  struct list *peer; -  struct hash *peerhash; - -  /* BGP peer group.  */ -  struct list *group; - -  /* The maximum number of BGP dynamic neighbors that can be created */ -  int dynamic_neighbors_limit; - -    /* The current number of BGP dynamic neighbors */ -  int dynamic_neighbors_count; - -  struct hash *update_groups[BGP_AF_MAX]; - -  /* -   * Global statistics for update groups. -   */ -  struct { -    u_int32_t join_events; -    u_int32_t prune_events; -    u_int32_t merge_events; -    u_int32_t split_events; -    u_int32_t updgrp_switch_events; -    u_int32_t peer_refreshes_combined; -    u_int32_t adj_count; -    u_int32_t merge_checks_triggered; - -    u_int32_t updgrps_created; -    u_int32_t updgrps_deleted; -    u_int32_t subgrps_created; -    u_int32_t subgrps_deleted; -  } update_group_stats; - -  /* BGP configuration.  */ -  u_int16_t config; +struct bgp { +	/* AS number of this BGP instance.  */ +	as_t as; + +	/* Name of this BGP instance.  */ +	char *name; + +	/* Type of instance and VRF id. */ +	enum bgp_instance_type inst_type; +	vrf_id_t vrf_id; + +	/* Reference count to allow peer_delete to finish after bgp_delete */ +	int lock; + +	/* Self peer.  */ +	struct peer *peer_self; + +	/* BGP peer. */ +	struct list *peer; +	struct hash *peerhash; + +	/* BGP peer group.  */ +	struct list *group; + +	/* The maximum number of BGP dynamic neighbors that can be created */ +	int dynamic_neighbors_limit; + +	/* The current number of BGP dynamic neighbors */ +	int dynamic_neighbors_count; + +	struct hash *update_groups[BGP_AF_MAX]; + +	/* +	 * Global statistics for update groups. +	 */ +	struct { +		u_int32_t join_events; +		u_int32_t prune_events; +		u_int32_t merge_events; +		u_int32_t split_events; +		u_int32_t updgrp_switch_events; +		u_int32_t peer_refreshes_combined; +		u_int32_t adj_count; +		u_int32_t merge_checks_triggered; + +		u_int32_t updgrps_created; +		u_int32_t updgrps_deleted; +		u_int32_t subgrps_created; +		u_int32_t subgrps_deleted; +	} update_group_stats; + +	/* BGP configuration.  */ +	u_int16_t config;  #define BGP_CONFIG_CLUSTER_ID             (1 << 0)  #define BGP_CONFIG_CONFEDERATION          (1 << 1) -  /* BGP router identifier.  */ -  struct in_addr router_id; -  struct in_addr router_id_static; -  struct in_addr router_id_zebra; +	/* BGP router identifier.  */ +	struct in_addr router_id; +	struct in_addr router_id_static; +	struct in_addr router_id_zebra; -  /* BGP route reflector cluster ID.  */ -  struct in_addr cluster_id; +	/* BGP route reflector cluster ID.  */ +	struct in_addr cluster_id; -  /* BGP confederation information.  */ -  as_t confed_id; -  as_t *confed_peers; -  int confed_peers_cnt; +	/* BGP confederation information.  */ +	as_t confed_id; +	as_t *confed_peers; +	int confed_peers_cnt; -  struct thread *t_startup; /* start-up timer on only once at the beginning */ +	struct thread +		*t_startup; /* start-up timer on only once at the beginning */ -  u_int32_t v_maxmed_onstartup; /* Duration of max-med on start-up */ +	u_int32_t v_maxmed_onstartup;     /* Duration of max-med on start-up */ +					  /* $FRR indent$ */ +					  /* clang-format off */  #define BGP_MAXMED_ONSTARTUP_UNCONFIGURED  0 /* 0 means off, its the default */ -  u_int32_t maxmed_onstartup_value; /* Max-med value when active on start-up */ -  struct thread *t_maxmed_onstartup; /* non-null when max-med onstartup is on */ -  u_char    maxmed_onstartup_over; /* Flag to make it effective only once */ - -  u_char    v_maxmed_admin; /* 1/0 if max-med administrative is on/off */ +	u_int32_t maxmed_onstartup_value; /* Max-med value when active on +					     start-up */ +	struct thread +		*t_maxmed_onstartup; /* non-null when max-med onstartup is on */ +	u_char maxmed_onstartup_over; /* Flag to make it effective only once */ + +	u_char v_maxmed_admin; /* 1/0 if max-med administrative is on/off */ +			       /* $FRR indent$ */ +			       /* clang-format off */  #define BGP_MAXMED_ADMIN_UNCONFIGURED  0 /* Off by default */ -  u_int32_t maxmed_admin_value; /* Max-med value when administrative in on */ +	u_int32_t +		maxmed_admin_value; /* Max-med value when administrative in on +				       */  #define BGP_MAXMED_VALUE_DEFAULT  4294967294 /* Maximum by default */ -  u_char    maxmed_active; /* 1/0 if max-med is active or not */ -  u_int32_t maxmed_value; /* Max-med value when its active */ - -  /* BGP update delay on startup */ -  struct thread *t_update_delay; -  struct thread *t_establish_wait; -  u_char update_delay_over; -  u_char main_zebra_update_hold; -  u_char main_peers_update_hold; -  u_int16_t v_update_delay; -  u_int16_t v_establish_wait; -  char update_delay_begin_time[64]; -  char update_delay_end_time[64]; -  char update_delay_zebra_resume_time[64]; -  char update_delay_peers_resume_time[64]; -  u_int32_t established; -  u_int32_t restarted_peers; -  u_int32_t implicit_eors; -  u_int32_t explicit_eors; +	u_char maxmed_active;   /* 1/0 if max-med is active or not */ +	u_int32_t maxmed_value; /* Max-med value when its active */ + +	/* BGP update delay on startup */ +	struct thread *t_update_delay; +	struct thread *t_establish_wait; +	u_char update_delay_over; +	u_char main_zebra_update_hold; +	u_char main_peers_update_hold; +	u_int16_t v_update_delay; +	u_int16_t v_establish_wait; +	char update_delay_begin_time[64]; +	char update_delay_end_time[64]; +	char update_delay_zebra_resume_time[64]; +	char update_delay_peers_resume_time[64]; +	u_int32_t established; +	u_int32_t restarted_peers; +	u_int32_t implicit_eors; +	u_int32_t explicit_eors;  #define BGP_UPDATE_DELAY_DEF              0  #define BGP_UPDATE_DELAY_MIN              0  #define BGP_UPDATE_DELAY_MAX              3600 -  /* BGP flags. */ -  u_int32_t flags; +	/* BGP flags. */ +	u_int32_t flags;  #define BGP_FLAG_ALWAYS_COMPARE_MED       (1 << 0)  #define BGP_FLAG_DETERMINISTIC_MED        (1 << 1)  #define BGP_FLAG_MED_MISSING_AS_WORST     (1 << 2) @@ -297,137 +303,135 @@ struct bgp  #define BGP_FLAG_SHOW_HOSTNAME            (1 << 19)  #define BGP_FLAG_GR_PRESERVE_FWD          (1 << 20) -  /* BGP Per AF flags */ -  u_int16_t af_flags[AFI_MAX][SAFI_MAX]; +	/* BGP Per AF flags */ +	u_int16_t af_flags[AFI_MAX][SAFI_MAX];  #define BGP_CONFIG_DAMPENING              (1 << 0) -  /* Route table for next-hop lookup cache. */ -  struct bgp_table *nexthop_cache_table[AFI_MAX]; +	/* Route table for next-hop lookup cache. */ +	struct bgp_table *nexthop_cache_table[AFI_MAX]; -  /* Route table for import-check */ -  struct bgp_table *import_check_table[AFI_MAX]; +	/* Route table for import-check */ +	struct bgp_table *import_check_table[AFI_MAX]; -  struct bgp_table *connected_table[AFI_MAX]; +	struct bgp_table *connected_table[AFI_MAX]; -  struct hash *address_hash; +	struct hash *address_hash; -  /* Static route configuration.  */ -  struct bgp_table *route[AFI_MAX][SAFI_MAX]; +	/* Static route configuration.  */ +	struct bgp_table *route[AFI_MAX][SAFI_MAX]; -  /* Aggregate address configuration.  */ -  struct bgp_table *aggregate[AFI_MAX][SAFI_MAX]; +	/* Aggregate address configuration.  */ +	struct bgp_table *aggregate[AFI_MAX][SAFI_MAX]; -  /* BGP routing information base.  */ -  struct bgp_table *rib[AFI_MAX][SAFI_MAX]; +	/* BGP routing information base.  */ +	struct bgp_table *rib[AFI_MAX][SAFI_MAX]; -  /* BGP table route-map.  */ -  struct bgp_rmap table_map[AFI_MAX][SAFI_MAX]; +	/* BGP table route-map.  */ +	struct bgp_rmap table_map[AFI_MAX][SAFI_MAX]; -  /* BGP redistribute configuration. */ -  struct list *redist[AFI_MAX][ZEBRA_ROUTE_MAX]; +	/* BGP redistribute configuration. */ +	struct list *redist[AFI_MAX][ZEBRA_ROUTE_MAX]; -  /* timer to re-evaluate neighbor default-originate route-maps */ -  struct thread *t_rmap_def_originate_eval; +	/* timer to re-evaluate neighbor default-originate route-maps */ +	struct thread *t_rmap_def_originate_eval;  #define RMAP_DEFAULT_ORIGINATE_EVAL_TIMER 5 -  /* BGP distance configuration.  */ -  u_char distance_ebgp[AFI_MAX][SAFI_MAX]; -  u_char distance_ibgp[AFI_MAX][SAFI_MAX]; -  u_char distance_local[AFI_MAX][SAFI_MAX]; -   -  /* BGP default local-preference.  */ -  u_int32_t default_local_pref; - -  /* BGP default subgroup pkt queue max  */ -  u_int32_t default_subgroup_pkt_queue_max; - -  /* BGP default timer.  */ -  u_int32_t default_holdtime; -  u_int32_t default_keepalive; - -  /* BGP graceful restart */ -  u_int32_t restart_time; -  u_int32_t stalepath_time; - -  /* Maximum-paths configuration */ -  struct bgp_maxpaths_cfg { -    u_int16_t maxpaths_ebgp; -    u_int16_t maxpaths_ibgp; -    u_int16_t ibgp_flags; +	/* BGP distance configuration.  */ +	u_char distance_ebgp[AFI_MAX][SAFI_MAX]; +	u_char distance_ibgp[AFI_MAX][SAFI_MAX]; +	u_char distance_local[AFI_MAX][SAFI_MAX]; + +	/* BGP default local-preference.  */ +	u_int32_t default_local_pref; + +	/* BGP default subgroup pkt queue max  */ +	u_int32_t default_subgroup_pkt_queue_max; + +	/* BGP default timer.  */ +	u_int32_t default_holdtime; +	u_int32_t default_keepalive; + +	/* BGP graceful restart */ +	u_int32_t restart_time; +	u_int32_t stalepath_time; + +	/* Maximum-paths configuration */ +	struct bgp_maxpaths_cfg { +		u_int16_t maxpaths_ebgp; +		u_int16_t maxpaths_ibgp; +		u_int16_t ibgp_flags;  #define BGP_FLAG_IBGP_MULTIPATH_SAME_CLUSTERLEN (1 << 0) -  } maxpaths[AFI_MAX][SAFI_MAX]; +	} maxpaths[AFI_MAX][SAFI_MAX]; -  u_int32_t wpkt_quanta;  /* per peer packet quanta to write */ -  u_int32_t coalesce_time; +	u_int32_t wpkt_quanta; /* per peer packet quanta to write */ +	u_int32_t coalesce_time; -  u_int32_t addpath_tx_id; -  int addpath_tx_used[AFI_MAX][SAFI_MAX]; +	u_int32_t addpath_tx_id; +	int addpath_tx_used[AFI_MAX][SAFI_MAX];  #if ENABLE_BGP_VNC -  struct rfapi_cfg *rfapi_cfg; -  struct rfapi *rfapi; +	struct rfapi_cfg *rfapi_cfg; +	struct rfapi *rfapi;  #endif -  /* EVPN related information */ +	/* EVPN related information */ -  /* EVI hash table */ -  struct hash *vnihash; +	/* EVI hash table */ +	struct hash *vnihash; -  /* EVPN enable - advertise local VNIs and their MACs etc. */ -  int advertise_all_vni; +	/* EVPN enable - advertise local VNIs and their MACs etc. */ +	int advertise_all_vni; -  /* Hash table of Import RTs to EVIs */ -  struct hash *import_rt_hash; +	/* Hash table of Import RTs to EVIs */ +	struct hash *import_rt_hash; -  /* Id space for automatic RD derivation for an EVI */ -  bitfield_t rd_idspace; +	/* Id space for automatic RD derivation for an EVI */ +	bitfield_t rd_idspace; -  QOBJ_FIELDS +	QOBJ_FIELDS  };  DECLARE_QOBJ_TYPE(bgp)  #define BGP_ROUTE_ADV_HOLD(bgp) (bgp->main_peers_update_hold) -#define IS_BGP_INST_KNOWN_TO_ZEBRA(bgp) \ -        (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT || \ -         (bgp->inst_type == BGP_INSTANCE_TYPE_VRF && bgp->vrf_id != VRF_UNKNOWN)) +#define IS_BGP_INST_KNOWN_TO_ZEBRA(bgp)                                        \ +	(bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT                           \ +	 || (bgp->inst_type == BGP_INSTANCE_TYPE_VRF                           \ +	     && bgp->vrf_id != VRF_UNKNOWN))  /* BGP peer-group support. */ -struct peer_group -{ -  /* Name of the peer-group. */ -  char *name; +struct peer_group { +	/* Name of the peer-group. */ +	char *name; -  /* Pointer to BGP.  */ -  struct bgp *bgp; -   -  /* Peer-group client list. */ -  struct list *peer; +	/* Pointer to BGP.  */ +	struct bgp *bgp; -  /** Dynamic neighbor listening ranges */ -  struct list *listen_range[AFI_MAX]; +	/* Peer-group client list. */ +	struct list *peer; -  /* Peer-group config */ -  struct peer *conf; +	/** Dynamic neighbor listening ranges */ +	struct list *listen_range[AFI_MAX]; + +	/* Peer-group config */ +	struct peer *conf;  };  /* BGP Notify message format. */ -struct bgp_notify  -{ -  u_char code; -  u_char subcode; -  char *data; -  bgp_size_t length; -  u_char *raw_data; +struct bgp_notify { +	u_char code; +	u_char subcode; +	char *data; +	bgp_size_t length; +	u_char *raw_data;  };  /* Next hop self address. */ -struct bgp_nexthop -{ -  struct interface *ifp; -  struct in_addr v4; -  struct in6_addr v6_global; -  struct in6_addr v6_local; +struct bgp_nexthop { +	struct interface *ifp; +	struct in_addr v4; +	struct in6_addr v6_global; +	struct in6_addr v6_local;  };  /* BGP addpath values */ @@ -440,9 +444,8 @@ struct bgp_nexthop  /* BGP router distinguisher value.  */  #define BGP_RD_SIZE                8 -struct bgp_rd -{ -  u_char val[BGP_RD_SIZE]; +struct bgp_rd { +	u_char val[BGP_RD_SIZE];  };  #define RMAP_IN  0 @@ -452,52 +455,45 @@ struct bgp_rd  #include "filter.h"  /* BGP filter structure. */ -struct bgp_filter -{ -  /* Distribute-list.  */ -  struct  -  { -    char *name; -    struct access_list *alist; -  } dlist[FILTER_MAX]; - -  /* Prefix-list.  */ -  struct -  { -    char *name; -    struct prefix_list *plist; -  } plist[FILTER_MAX]; - -  /* Filter-list.  */ -  struct -  { -    char *name; -    struct as_list *aslist; -  } aslist[FILTER_MAX]; - -  /* Route-map.  */ -  struct -  { -    char *name; -    struct route_map *map; -  } map[RMAP_MAX]; - -  /* Unsuppress-map.  */ -  struct -  { -    char *name; -    struct route_map *map; -  } usmap; +struct bgp_filter { +	/* Distribute-list.  */ +	struct { +		char *name; +		struct access_list *alist; +	} dlist[FILTER_MAX]; + +	/* Prefix-list.  */ +	struct { +		char *name; +		struct prefix_list *plist; +	} plist[FILTER_MAX]; + +	/* Filter-list.  */ +	struct { +		char *name; +		struct as_list *aslist; +	} aslist[FILTER_MAX]; + +	/* Route-map.  */ +	struct { +		char *name; +		struct route_map *map; +	} map[RMAP_MAX]; + +	/* Unsuppress-map.  */ +	struct { +		char *name; +		struct route_map *map; +	} usmap;  };  /* IBGP/EBGP identifier.  We also have a CONFED peer, which is to say,     a peer who's AS is part of our Confederation.  */ -typedef enum -{ -  BGP_PEER_IBGP = 1, -  BGP_PEER_EBGP, -  BGP_PEER_INTERNAL, -  BGP_PEER_CONFED, +typedef enum { +	BGP_PEER_IBGP = 1, +	BGP_PEER_EBGP, +	BGP_PEER_INTERNAL, +	BGP_PEER_CONFED,  } bgp_peer_sort_t;  /* BGP message header and packet size.  */ @@ -512,132 +508,132 @@ typedef enum  #define BGP_ANNOUNCE_ROUTE_SHORT_DELAY_MS  100  #define BGP_ANNOUNCE_ROUTE_DELAY_MS        500 -struct peer_af -{ -  /* back pointer to the peer */ -  struct peer *peer; +struct peer_af { +	/* back pointer to the peer */ +	struct peer *peer; -  /* which subgroup the peer_af belongs to */ -  struct update_subgroup *subgroup; +	/* which subgroup the peer_af belongs to */ +	struct update_subgroup *subgroup; -  /* for being part of an update subgroup's peer list */ -  LIST_ENTRY(peer_af) subgrp_train; +	/* for being part of an update subgroup's peer list */ +	LIST_ENTRY(peer_af) subgrp_train; -  /* for being part of a packet's peer list */ -  LIST_ENTRY(peer_af) pkt_train; +	/* for being part of a packet's peer list */ +	LIST_ENTRY(peer_af) pkt_train; -  struct bpacket *next_pkt_to_send; +	struct bpacket *next_pkt_to_send; -  /* -   * Trigger timer for bgp_announce_route(). -   */ -  struct thread *t_announce_route; +	/* +	 * Trigger timer for bgp_announce_route(). +	 */ +	struct thread *t_announce_route; -  afi_t afi; -  safi_t safi; -  int afid; +	afi_t afi; +	safi_t safi; +	int afid;  };  /* BGP neighbor structure. */ -struct peer -{ -  /* BGP structure.  */ -  struct bgp *bgp; - -  /* reference count, primarily to allow bgp_process'ing of route_node's -   * to be done after a struct peer is deleted. -   * -   * named 'lock' for hysterical reasons within Quagga. -   */ -  int lock; - -  /* BGP peer group.  */ -  struct peer_group *group; -  uint64_t version[AFI_MAX][SAFI_MAX]; - -  /* BGP peer_af structures, per configured AF on this peer */ -  struct peer_af *peer_af_array[BGP_AF_MAX]; - -  /* Peer's remote AS number. */ -  int as_type; -  as_t as; - -  /* Peer's local AS number. */ -  as_t local_as; - -  bgp_peer_sort_t sort; - -  /* Peer's Change local AS number. */ -  as_t change_local_as; - -  /* Remote router ID. */ -  struct in_addr remote_id; - -  /* Local router ID. */ -  struct in_addr local_id; - -  /* Packet receive and send buffer. */ -  struct stream *ibuf; -  struct stream_fifo *obuf; -  struct stream *work; - -  /* We use a separate stream to encode MP_REACH_NLRI for efficient -   * NLRI packing. peer->work stores all the other attributes. The -   * actual packet is then constructed by concatenating the two. -   */ -  struct stream *scratch; - -  /* the doppelganger peer structure, due to dual TCP conn setup */ -  struct peer *doppelganger; - -  /* Status of the peer. */ -  int status; -  int ostatus; - -  /* FSM events, stored for debug purposes. -   * Note: uchar used for reduced memory usage. -   */ -  unsigned char cur_event; -  unsigned char last_event; -  unsigned char last_major_event; - -  /* Peer index, used for dumping TABLE_DUMP_V2 format */ -  uint16_t table_dump_index; - -  /* Peer information */ -  int fd;			/* File descriptor */ -  int ttl;			/* TTL of TCP connection to the peer. */ -  int rtt;			/* Estimated round-trip-time from TCP_INFO */ -  int gtsm_hops;		/* minimum hopcount to peer */ -  char *desc;			/* Description of the peer. */ -  unsigned short port;          /* Destination port for peer */ -  char *host;			/* Printable address of the peer. */ -  union sockunion su;		/* Sockunion address of the peer. */ +struct peer { +	/* BGP structure.  */ +	struct bgp *bgp; + +	/* reference count, primarily to allow bgp_process'ing of route_node's +	 * to be done after a struct peer is deleted. +	 * +	 * named 'lock' for hysterical reasons within Quagga. +	 */ +	int lock; + +	/* BGP peer group.  */ +	struct peer_group *group; +	uint64_t version[AFI_MAX][SAFI_MAX]; + +	/* BGP peer_af structures, per configured AF on this peer */ +	struct peer_af *peer_af_array[BGP_AF_MAX]; + +	/* Peer's remote AS number. */ +	int as_type; +	as_t as; + +	/* Peer's local AS number. */ +	as_t local_as; + +	bgp_peer_sort_t sort; + +	/* Peer's Change local AS number. */ +	as_t change_local_as; + +	/* Remote router ID. */ +	struct in_addr remote_id; + +	/* Local router ID. */ +	struct in_addr local_id; + +	/* Packet receive and send buffer. */ +	struct stream *ibuf; +	struct stream_fifo *obuf; +	struct stream *work; + +	/* We use a separate stream to encode MP_REACH_NLRI for efficient +	 * NLRI packing. peer->work stores all the other attributes. The +	 * actual packet is then constructed by concatenating the two. +	 */ +	struct stream *scratch; + +	/* the doppelganger peer structure, due to dual TCP conn setup */ +	struct peer *doppelganger; + +	/* Status of the peer. */ +	int status; +	int ostatus; + +	/* FSM events, stored for debug purposes. +	 * Note: uchar used for reduced memory usage. +	 */ +	unsigned char cur_event; +	unsigned char last_event; +	unsigned char last_major_event; + +	/* Peer index, used for dumping TABLE_DUMP_V2 format */ +	uint16_t table_dump_index; + +	/* Peer information */ +	int fd;		     /* File descriptor */ +	int ttl;	     /* TTL of TCP connection to the peer. */ +	int rtt;	     /* Estimated round-trip-time from TCP_INFO */ +	int gtsm_hops;       /* minimum hopcount to peer */ +	char *desc;	  /* Description of the peer. */ +	unsigned short port; /* Destination port for peer */ +	char *host;	  /* Printable address of the peer. */ +	union sockunion su;  /* Sockunion address of the peer. */ +			     /* $FRR indent$ */ +			     /* clang-format off */  #define BGP_PEER_SU_UNSPEC(peer) (peer->su.sa.sa_family == AF_UNSPEC) -  time_t uptime;		/* Last Up/Down time */ -  time_t readtime;		/* Last read time */ -  time_t resettime;		/* Last reset time */ -   -  ifindex_t ifindex;		/* ifindex of the BGP connection. */ -  char *conf_if;                /* neighbor interface config name. */ -  struct interface *ifp;        /* corresponding interface */ -  char *ifname;			/* bind interface name. */ -  char *update_if; -  union sockunion *update_source; - -  union sockunion *su_local;	/* Sockunion of local address.  */ -  union sockunion *su_remote;	/* Sockunion of remote address.  */ -  int shared_network;		/* Is this peer shared same network. */ -  struct bgp_nexthop nexthop;	/* Nexthop */ - -  /* Peer address family configuration. */ -  u_char afc[AFI_MAX][SAFI_MAX]; -  u_char afc_nego[AFI_MAX][SAFI_MAX]; -  u_char afc_adv[AFI_MAX][SAFI_MAX]; -  u_char afc_recv[AFI_MAX][SAFI_MAX]; - -  /* Capability flags (reset in bgp_stop) */ -  u_int32_t cap; +	time_t uptime;       /* Last Up/Down time */ +	time_t readtime;     /* Last read time */ +	time_t resettime;    /* Last reset time */ + +	ifindex_t ifindex;     /* ifindex of the BGP connection. */ +	char *conf_if;	 /* neighbor interface config name. */ +	struct interface *ifp; /* corresponding interface */ +	char *ifname;	  /* bind interface name. */ +	char *update_if; +	union sockunion *update_source; + +	union sockunion *su_local;  /* Sockunion of local address.  */ +	union sockunion *su_remote; /* Sockunion of remote address.  */ +	int shared_network;	 /* Is this peer shared same network. */ +	struct bgp_nexthop nexthop; /* Nexthop */ + +	/* Peer address family configuration. */ +	u_char afc[AFI_MAX][SAFI_MAX]; +	u_char afc_nego[AFI_MAX][SAFI_MAX]; +	u_char afc_adv[AFI_MAX][SAFI_MAX]; +	u_char afc_recv[AFI_MAX][SAFI_MAX]; + +	/* Capability flags (reset in bgp_stop) */ +	u_int32_t cap;  #define PEER_CAP_REFRESH_ADV                (1 << 0) /* refresh advertised */  #define PEER_CAP_REFRESH_OLD_RCV            (1 << 1) /* refresh old received */  #define PEER_CAP_REFRESH_NEW_RCV            (1 << 2) /* refresh rfc received */ @@ -656,8 +652,8 @@ struct peer  #define PEER_CAP_HOSTNAME_ADV               (1 << 15) /* hostname advertised */  #define PEER_CAP_HOSTNAME_RCV               (1 << 16) /* hostname received */ -  /* Capability flags (reset in bgp_stop) */ -  u_int32_t af_cap[AFI_MAX][SAFI_MAX]; +	/* Capability flags (reset in bgp_stop) */ +	u_int32_t af_cap[AFI_MAX][SAFI_MAX];  #define PEER_CAP_ORF_PREFIX_SM_ADV          (1 << 0) /* send-mode advertised */  #define PEER_CAP_ORF_PREFIX_RM_ADV          (1 << 1) /* receive-mode advertised */  #define PEER_CAP_ORF_PREFIX_SM_RCV          (1 << 2) /* send-mode received */ @@ -674,8 +670,8 @@ struct peer  #define PEER_CAP_ENHE_AF_RCV                (1 << 13) /* Extended nexthop afi/safi received */  #define PEER_CAP_ENHE_AF_NEGO               (1 << 14) /* Extended nexthop afi/safi negotiated */ -  /* Global configuration flags. */ -  u_int32_t flags; +	/* Global configuration flags. */ +	u_int32_t flags;  #define PEER_FLAG_PASSIVE                   (1 << 0) /* passive mode */  #define PEER_FLAG_SHUTDOWN                  (1 << 1) /* shutdown */  #define PEER_FLAG_DONT_CAPABILITY           (1 << 2) /* dont-capability */ @@ -694,14 +690,14 @@ struct peer  #if ENABLE_BGP_VNC  #define PEER_FLAG_IS_RFAPI_HD		    (1 << 15) /* attached to rfapi HD */  #endif -  /* outgoing message sent in CEASE_ADMIN_SHUTDOWN notify */ -  char *tx_shutdown_message; +	/* outgoing message sent in CEASE_ADMIN_SHUTDOWN notify */ +	char *tx_shutdown_message; -  /* NSF mode (graceful restart) */ -  u_char nsf[AFI_MAX][SAFI_MAX]; +	/* NSF mode (graceful restart) */ +	u_char nsf[AFI_MAX][SAFI_MAX]; -  /* Per AF configuration flags. */ -  u_int32_t af_flags[AFI_MAX][SAFI_MAX]; +	/* Per AF configuration flags. */ +	u_int32_t af_flags[AFI_MAX][SAFI_MAX];  #define PEER_FLAG_SEND_COMMUNITY            (1 << 0) /* send-community */  #define PEER_FLAG_SEND_EXT_COMMUNITY        (1 << 1) /* send-community ext. */  #define PEER_FLAG_NEXTHOP_SELF              (1 << 2) /* next-hop-self */ @@ -730,18 +726,17 @@ struct peer  #define PEER_FLAG_ALLOWAS_IN_ORIGIN         (1 << 25) /* allowas-in origin */  #define PEER_FLAG_SEND_LARGE_COMMUNITY      (1 << 26) /* Send large Communities */ -  /* MD5 password */ -  char *password; +	/* MD5 password */ +	char *password; -  /* default-originate route-map.  */ -  struct -  { -    char *name; -    struct route_map *map; -  } default_rmap[AFI_MAX][SAFI_MAX]; +	/* default-originate route-map.  */ +	struct { +		char *name; +		struct route_map *map; +	} default_rmap[AFI_MAX][SAFI_MAX]; -  /* Peer status flags. */ -  u_int16_t sflags; +	/* Peer status flags. */ +	u_int16_t sflags;  #define PEER_STATUS_ACCEPT_PEER	      (1 << 0) /* accept peer */  #define PEER_STATUS_PREFIX_OVERFLOW   (1 << 1) /* prefix-overflow */  #define PEER_STATUS_CAPABILITY_OPEN   (1 << 2) /* capability open send */ @@ -750,8 +745,8 @@ struct peer  #define PEER_STATUS_NSF_MODE          (1 << 5) /* NSF aware peer */  #define PEER_STATUS_NSF_WAIT          (1 << 6) /* wait comeback peer */ -  /* Peer status af flags (reset in bgp_stop) */ -  u_int16_t af_sflags[AFI_MAX][SAFI_MAX]; +	/* Peer status af flags (reset in bgp_stop) */ +	u_int16_t af_sflags[AFI_MAX][SAFI_MAX];  #define PEER_STATUS_ORF_PREFIX_SEND   (1 << 0) /* prefix-list send peer */  #define PEER_STATUS_ORF_WAIT_REFRESH  (1 << 1) /* wait refresh received peer */  #define PEER_STATUS_PREFIX_THRESHOLD  (1 << 2) /* exceed prefix-threshold */ @@ -759,110 +754,111 @@ struct peer  #define PEER_STATUS_EOR_SEND          (1 << 4) /* end-of-rib send to peer */  #define PEER_STATUS_EOR_RECEIVED      (1 << 5) /* end-of-rib received from peer */ -  /* Default attribute value for the peer. */ -  u_int32_t config; +	/* Default attribute value for the peer. */ +	u_int32_t config;  #define PEER_CONFIG_TIMER             (1 << 0) /* keepalive & holdtime */  #define PEER_CONFIG_CONNECT           (1 << 1) /* connect */  #define PEER_CONFIG_ROUTEADV          (1 << 2) /* route advertise */ -  u_int32_t holdtime; -  u_int32_t keepalive; -  u_int32_t connect; -  u_int32_t routeadv; - -  /* Timer values. */ -  u_int32_t v_start; -  u_int32_t v_connect; -  u_int32_t v_holdtime; -  u_int32_t v_keepalive; -  u_int32_t v_routeadv; -  u_int32_t v_pmax_restart; -  u_int32_t v_gr_restart; - -  /* Threads. */ -  struct thread *t_read; -  struct thread *t_write; -  struct thread *t_start; -  struct thread *t_connect; -  struct thread *t_holdtime; -  struct thread *t_keepalive; -  struct thread *t_routeadv; -  struct thread *t_pmax_restart; -  struct thread *t_gr_restart; -  struct thread *t_gr_stale; -   -  /* workqueues */ -  struct work_queue *clear_node_queue; -   -  /* Statistics field */ -  u_int32_t open_in;		/* Open message input count */ -  u_int32_t open_out;		/* Open message output count */ -  u_int32_t update_in;		/* Update message input count */ -  u_int32_t update_out;		/* Update message ouput count */ -  time_t update_time;		/* Update message received time. */ -  u_int32_t keepalive_in;	/* Keepalive input count */ -  u_int32_t keepalive_out;	/* Keepalive output count */ -  u_int32_t notify_in;		/* Notify input count */ -  u_int32_t notify_out;		/* Notify output count */ -  u_int32_t refresh_in;		/* Route Refresh input count */ -  u_int32_t refresh_out;	/* Route Refresh output count */ -  u_int32_t dynamic_cap_in;	/* Dynamic Capability input count.  */ -  u_int32_t dynamic_cap_out;	/* Dynamic Capability output count.  */ - -  /* BGP state count */ -  u_int32_t established;	/* Established */ -  u_int32_t dropped;		/* Dropped */ - -  /* Update delay related fields */ -  u_char    update_delay_over;  /* When this is set, BGP is no more waiting for EOR */ - -  /* Syncronization list and time.  */ -  struct bgp_synchronize *sync[AFI_MAX][SAFI_MAX]; -  time_t synctime; -  time_t last_write;  /* timestamp when the last msg was written */ -  time_t last_update;  /* timestamp when the last UPDATE msg was written */ - -  /* Send prefix count. */ -  unsigned long scount[AFI_MAX][SAFI_MAX]; - -  /* Announcement attribute hash.  */ -  struct hash *hash[AFI_MAX][SAFI_MAX]; - -  /* Notify data. */ -  struct bgp_notify notify; - -  /* Whole packet size to be read. */ -  unsigned long packet_size; - -  /* Filter structure. */ -  struct bgp_filter filter[AFI_MAX][SAFI_MAX]; - -  /* ORF Prefix-list */ -  struct prefix_list *orf_plist[AFI_MAX][SAFI_MAX]; - -  /* Text description of last attribute rcvd */ -  char rcvd_attr_str[BUFSIZ]; - -  /* Track if we printed the attribute in debugs */ -  int rcvd_attr_printed; - -  /* Prefix count. */ -  unsigned long pcount[AFI_MAX][SAFI_MAX]; - -  /* Max prefix count. */ -  unsigned long pmax[AFI_MAX][SAFI_MAX]; -  u_char pmax_threshold[AFI_MAX][SAFI_MAX]; -  u_int16_t pmax_restart[AFI_MAX][SAFI_MAX]; +	u_int32_t holdtime; +	u_int32_t keepalive; +	u_int32_t connect; +	u_int32_t routeadv; + +	/* Timer values. */ +	u_int32_t v_start; +	u_int32_t v_connect; +	u_int32_t v_holdtime; +	u_int32_t v_keepalive; +	u_int32_t v_routeadv; +	u_int32_t v_pmax_restart; +	u_int32_t v_gr_restart; + +	/* Threads. */ +	struct thread *t_read; +	struct thread *t_write; +	struct thread *t_start; +	struct thread *t_connect; +	struct thread *t_holdtime; +	struct thread *t_keepalive; +	struct thread *t_routeadv; +	struct thread *t_pmax_restart; +	struct thread *t_gr_restart; +	struct thread *t_gr_stale; + +	/* workqueues */ +	struct work_queue *clear_node_queue; + +	/* Statistics field */ +	u_int32_t open_in;	 /* Open message input count */ +	u_int32_t open_out;	/* Open message output count */ +	u_int32_t update_in;       /* Update message input count */ +	u_int32_t update_out;      /* Update message ouput count */ +	time_t update_time;	/* Update message received time. */ +	u_int32_t keepalive_in;    /* Keepalive input count */ +	u_int32_t keepalive_out;   /* Keepalive output count */ +	u_int32_t notify_in;       /* Notify input count */ +	u_int32_t notify_out;      /* Notify output count */ +	u_int32_t refresh_in;      /* Route Refresh input count */ +	u_int32_t refresh_out;     /* Route Refresh output count */ +	u_int32_t dynamic_cap_in;  /* Dynamic Capability input count.  */ +	u_int32_t dynamic_cap_out; /* Dynamic Capability output count.  */ + +	/* BGP state count */ +	u_int32_t established; /* Established */ +	u_int32_t dropped;     /* Dropped */ + +	/* Update delay related fields */ +	u_char update_delay_over; /* When this is set, BGP is no more waiting +				     for EOR */ + +	/* Syncronization list and time.  */ +	struct bgp_synchronize *sync[AFI_MAX][SAFI_MAX]; +	time_t synctime; +	time_t last_write;  /* timestamp when the last msg was written */ +	time_t last_update; /* timestamp when the last UPDATE msg was written */ + +	/* Send prefix count. */ +	unsigned long scount[AFI_MAX][SAFI_MAX]; + +	/* Announcement attribute hash.  */ +	struct hash *hash[AFI_MAX][SAFI_MAX]; + +	/* Notify data. */ +	struct bgp_notify notify; + +	/* Whole packet size to be read. */ +	unsigned long packet_size; + +	/* Filter structure. */ +	struct bgp_filter filter[AFI_MAX][SAFI_MAX]; + +	/* ORF Prefix-list */ +	struct prefix_list *orf_plist[AFI_MAX][SAFI_MAX]; + +	/* Text description of last attribute rcvd */ +	char rcvd_attr_str[BUFSIZ]; + +	/* Track if we printed the attribute in debugs */ +	int rcvd_attr_printed; + +	/* Prefix count. */ +	unsigned long pcount[AFI_MAX][SAFI_MAX]; + +	/* Max prefix count. */ +	unsigned long pmax[AFI_MAX][SAFI_MAX]; +	u_char pmax_threshold[AFI_MAX][SAFI_MAX]; +	u_int16_t pmax_restart[AFI_MAX][SAFI_MAX];  #define MAXIMUM_PREFIX_THRESHOLD_DEFAULT 75 -  /* allowas-in. */ -  char allowas_in[AFI_MAX][SAFI_MAX]; +	/* allowas-in. */ +	char allowas_in[AFI_MAX][SAFI_MAX]; -  /* weight */ -  unsigned long weight[AFI_MAX][SAFI_MAX]; +	/* weight */ +	unsigned long weight[AFI_MAX][SAFI_MAX]; -  /* peer reset cause */ -  char last_reset; +	/* peer reset cause */ +	char last_reset;  #define PEER_DOWN_RID_CHANGE             1 /* bgp router-id command */  #define PEER_DOWN_REMOTE_AS_CHANGE       2 /* neighbor remote-as command */  #define PEER_DOWN_LOCAL_AS_CHANGE        3 /* neighbor local-as command */ @@ -889,11 +885,11 @@ struct peer  #define PEER_DOWN_BFD_DOWN              24 /* BFD down */  #define PEER_DOWN_IF_DOWN               25 /* Interface down */  #define PEER_DOWN_NBR_ADDR_DEL          26 /* Peer address lost */ -unsigned long last_reset_cause_size; -u_char last_reset_cause[BGP_MAX_PACKET_SIZE]; +	unsigned long last_reset_cause_size; +	u_char last_reset_cause[BGP_MAX_PACKET_SIZE]; -  /* The kind of route-map Flags.*/ -  u_char rmap_type; +	/* The kind of route-map Flags.*/ +	u_char rmap_type;  #define PEER_RMAP_TYPE_IN             (1 << 0) /* neighbor route-map in */  #define PEER_RMAP_TYPE_OUT            (1 << 1) /* neighbor route-map out */  #define PEER_RMAP_TYPE_NETWORK        (1 << 2) /* network route-map */ @@ -903,40 +899,39 @@ u_char last_reset_cause[BGP_MAX_PACKET_SIZE];  #define PEER_RMAP_TYPE_IMPORT         (1 << 6) /* neighbor route-map import */  #define PEER_RMAP_TYPE_EXPORT         (1 << 7) /* neighbor route-map export */ -  /* peer specific BFD information */ -  struct bfd_info *bfd_info; +	/* peer specific BFD information */ +	struct bfd_info *bfd_info; -  /* hostname and domainname advertised by host */ -  char *hostname; -  char *domainname; +	/* hostname and domainname advertised by host */ +	char *hostname; +	char *domainname; -  QOBJ_FIELDS +	QOBJ_FIELDS  };  DECLARE_QOBJ_TYPE(peer)  /* Check if suppress start/restart of sessions to peer. */ -#define BGP_PEER_START_SUPPRESSED(P) \ -  (CHECK_FLAG ((P)->flags, PEER_FLAG_SHUTDOWN) \ -   || CHECK_FLAG ((P)->sflags, PEER_STATUS_PREFIX_OVERFLOW)) +#define BGP_PEER_START_SUPPRESSED(P)                                           \ +	(CHECK_FLAG((P)->flags, PEER_FLAG_SHUTDOWN)                            \ +	 || CHECK_FLAG((P)->sflags, PEER_STATUS_PREFIX_OVERFLOW))  #define PEER_PASSWORD_MINLEN	(1)  #define PEER_PASSWORD_MAXLEN	(80)  /* This structure's member directly points incoming packet data     stream. */ -struct bgp_nlri -{ -  /* AFI.  */ -  afi_t afi; +struct bgp_nlri { +	/* AFI.  */ +	afi_t afi; -  /* SAFI.  */ -  safi_t safi; +	/* SAFI.  */ +	safi_t safi; -  /* Pointer to NLRI byte stream.  */ -  u_char *nlri; +	/* Pointer to NLRI byte stream.  */ +	u_char *nlri; -  /* Length of whole NLRI.  */ -  bgp_size_t length; +	/* Length of whole NLRI.  */ +	bgp_size_t length;  };  /* BGP versions.  */ @@ -1115,20 +1110,19 @@ struct bgp_nlri  #define BGP_DYNAMIC_NEIGHBORS_LIMIT_MAX       5000  /* Flag for peer_clear_soft().  */ -enum bgp_clear_type -{ -  BGP_CLEAR_SOFT_NONE, -  BGP_CLEAR_SOFT_OUT, -  BGP_CLEAR_SOFT_IN, -  BGP_CLEAR_SOFT_BOTH, -  BGP_CLEAR_SOFT_IN_ORF_PREFIX +enum bgp_clear_type { +	BGP_CLEAR_SOFT_NONE, +	BGP_CLEAR_SOFT_OUT, +	BGP_CLEAR_SOFT_IN, +	BGP_CLEAR_SOFT_BOTH, +	BGP_CLEAR_SOFT_IN_ORF_PREFIX  };  /* Macros. */  #define BGP_INPUT(P)         ((P)->ibuf)  #define BGP_INPUT_PNT(P)     (STREAM_PNT(BGP_INPUT(P))) -#define BGP_IS_VALID_STATE_FOR_NOTIF(S)\ -        (((S) == OpenSent) || ((S) == OpenConfirm) || ((S) == Established)) +#define BGP_IS_VALID_STATE_FOR_NOTIF(S)                                        \ +	(((S) == OpenSent) || ((S) == OpenConfirm) || ((S) == Established))  /* BGP error codes.  */  #define BGP_SUCCESS                               0 @@ -1171,44 +1165,45 @@ enum bgp_clear_type  /*   * Enumeration of different policy kinds a peer can be configured with.   */ -typedef enum -{ -  BGP_POLICY_ROUTE_MAP, -  BGP_POLICY_FILTER_LIST, -  BGP_POLICY_PREFIX_LIST, -  BGP_POLICY_DISTRIBUTE_LIST, +typedef enum { +	BGP_POLICY_ROUTE_MAP, +	BGP_POLICY_FILTER_LIST, +	BGP_POLICY_PREFIX_LIST, +	BGP_POLICY_DISTRIBUTE_LIST,  } bgp_policy_type_e;  extern struct bgp_master *bm;  extern unsigned int multipath_num;  /* Prototypes. */ -extern void bgp_terminate (void); -extern void bgp_reset (void); -extern time_t bgp_clock (void); -extern void bgp_zclient_reset (void); -extern int bgp_nexthop_set (union sockunion *, union sockunion *,  -		     struct bgp_nexthop *, struct peer *); -extern struct bgp *bgp_get_default (void); -extern struct bgp *bgp_lookup (as_t, const char *); -extern struct bgp *bgp_lookup_by_name (const char *); -extern struct bgp *bgp_lookup_by_vrf_id (vrf_id_t); -extern struct peer *peer_lookup (struct bgp *, union sockunion *); -extern struct peer *peer_lookup_by_conf_if (struct bgp *, const char *); +extern void bgp_terminate(void); +extern void bgp_reset(void); +extern time_t bgp_clock(void); +extern void bgp_zclient_reset(void); +extern int bgp_nexthop_set(union sockunion *, union sockunion *, +			   struct bgp_nexthop *, struct peer *); +extern struct bgp *bgp_get_default(void); +extern struct bgp *bgp_lookup(as_t, const char *); +extern struct bgp *bgp_lookup_by_name(const char *); +extern struct bgp *bgp_lookup_by_vrf_id(vrf_id_t); +extern struct peer *peer_lookup(struct bgp *, union sockunion *); +extern struct peer *peer_lookup_by_conf_if(struct bgp *, const char *);  extern struct peer *peer_lookup_by_hostname(struct bgp *, const char *); -extern void  bgp_peer_conf_if_to_su_update (struct peer *); +extern void bgp_peer_conf_if_to_su_update(struct peer *);  extern int peer_group_listen_range_del(struct peer_group *, struct prefix *); -extern struct peer_group *peer_group_lookup (struct bgp *, const char *); -extern struct peer_group *peer_group_get (struct bgp *, const char *); -extern struct peer *peer_create_bind_dynamic_neighbor (struct bgp *, -                    union sockunion *, struct peer_group *); -extern struct prefix *peer_group_lookup_dynamic_neighbor_range ( -                     struct peer_group *, struct prefix *); -extern struct peer_group *peer_group_lookup_dynamic_neighbor (struct bgp *, -                     struct prefix *, struct prefix **); -extern struct peer *peer_lookup_dynamic_neighbor (struct bgp *, -                     union sockunion *); -extern void peer_drop_dynamic_neighbor (struct peer *); +extern struct peer_group *peer_group_lookup(struct bgp *, const char *); +extern struct peer_group *peer_group_get(struct bgp *, const char *); +extern struct peer *peer_create_bind_dynamic_neighbor(struct bgp *, +						      union sockunion *, +						      struct peer_group *); +extern struct prefix * +peer_group_lookup_dynamic_neighbor_range(struct peer_group *, struct prefix *); +extern struct peer_group *peer_group_lookup_dynamic_neighbor(struct bgp *, +							     struct prefix *, +							     struct prefix **); +extern struct peer *peer_lookup_dynamic_neighbor(struct bgp *, +						 union sockunion *); +extern void peer_drop_dynamic_neighbor(struct peer *);  /*   * Peers are incredibly easy to memory leak @@ -1220,361 +1215,345 @@ extern struct peer *peer_unlock_with_caller(const char *, struct peer *);  #define peer_unlock(A) peer_unlock_with_caller(__FUNCTION__, (A))  #define peer_lock(B) peer_lock_with_caller(__FUNCTION__, (B)) -extern bgp_peer_sort_t peer_sort (struct peer *peer); -extern int peer_active (struct peer *); -extern int peer_active_nego (struct peer *); -extern void bgp_recalculate_all_bestpaths (struct bgp *bgp); +extern bgp_peer_sort_t peer_sort(struct peer *peer); +extern int peer_active(struct peer *); +extern int peer_active_nego(struct peer *); +extern void bgp_recalculate_all_bestpaths(struct bgp *bgp);  extern struct peer *peer_create(union sockunion *, const char *, struct bgp *, -                                as_t, as_t, int, afi_t, safi_t, struct peer_group *); -extern struct peer *peer_create_accept (struct bgp *); -extern void peer_xfer_config (struct peer *dst, struct peer *src); -extern char *peer_uptime (time_t, char *, size_t, u_char, json_object *); +				as_t, as_t, int, afi_t, safi_t, +				struct peer_group *); +extern struct peer *peer_create_accept(struct bgp *); +extern void peer_xfer_config(struct peer *dst, struct peer *src); +extern char *peer_uptime(time_t, char *, size_t, u_char, json_object *); -extern int bgp_config_write (struct vty *); -extern void bgp_config_write_family_header (struct vty *, afi_t, safi_t, int *); +extern int bgp_config_write(struct vty *); +extern void bgp_config_write_family_header(struct vty *, afi_t, safi_t, int *); -extern void bgp_master_init (struct thread_master *master); +extern void bgp_master_init(struct thread_master *master); -extern void bgp_init (void); -extern void bgp_route_map_init (void); -extern void bgp_session_reset (struct peer *); +extern void bgp_init(void); +extern void bgp_route_map_init(void); +extern void bgp_session_reset(struct peer *); -extern int bgp_option_set (int); -extern int bgp_option_unset (int); -extern int bgp_option_check (int); +extern int bgp_option_set(int); +extern int bgp_option_unset(int); +extern int bgp_option_check(int); -extern int bgp_get (struct bgp **, as_t *, const char *, enum bgp_instance_type); -extern void bgp_instance_up (struct bgp *); -extern void bgp_instance_down (struct bgp *); -extern int bgp_delete (struct bgp *); +extern int bgp_get(struct bgp **, as_t *, const char *, enum bgp_instance_type); +extern void bgp_instance_up(struct bgp *); +extern void bgp_instance_down(struct bgp *); +extern int bgp_delete(struct bgp *); -extern int bgp_flag_set (struct bgp *, int); -extern int bgp_flag_unset (struct bgp *, int); -extern int bgp_flag_check (struct bgp *, int); +extern int bgp_flag_set(struct bgp *, int); +extern int bgp_flag_unset(struct bgp *, int); +extern int bgp_flag_check(struct bgp *, int); -extern void bgp_lock (struct bgp *); -extern void bgp_unlock (struct bgp *); +extern void bgp_lock(struct bgp *); +extern void bgp_unlock(struct bgp *); -extern void bgp_router_id_zebra_bump (vrf_id_t, const struct prefix*); -extern int bgp_router_id_static_set (struct bgp *, struct in_addr); +extern void bgp_router_id_zebra_bump(vrf_id_t, const struct prefix *); +extern int bgp_router_id_static_set(struct bgp *, struct in_addr); -extern int bgp_cluster_id_set (struct bgp *, struct in_addr *); -extern int bgp_cluster_id_unset (struct bgp *); +extern int bgp_cluster_id_set(struct bgp *, struct in_addr *); +extern int bgp_cluster_id_unset(struct bgp *); -extern int bgp_confederation_id_set (struct bgp *, as_t); -extern int bgp_confederation_id_unset (struct bgp *); -extern int bgp_confederation_peers_check (struct bgp *, as_t); +extern int bgp_confederation_id_set(struct bgp *, as_t); +extern int bgp_confederation_id_unset(struct bgp *); +extern int bgp_confederation_peers_check(struct bgp *, as_t); -extern int bgp_confederation_peers_add (struct bgp *, as_t); -extern int bgp_confederation_peers_remove (struct bgp *, as_t); +extern int bgp_confederation_peers_add(struct bgp *, as_t); +extern int bgp_confederation_peers_remove(struct bgp *, as_t); -extern int bgp_timers_set (struct bgp *, u_int32_t keepalive, u_int32_t holdtime); -extern int bgp_timers_unset (struct bgp *); +extern int bgp_timers_set(struct bgp *, u_int32_t keepalive, +			  u_int32_t holdtime); +extern int bgp_timers_unset(struct bgp *); -extern int bgp_default_local_preference_set (struct bgp *, u_int32_t); -extern int bgp_default_local_preference_unset (struct bgp *); +extern int bgp_default_local_preference_set(struct bgp *, u_int32_t); +extern int bgp_default_local_preference_unset(struct bgp *); -extern int bgp_default_subgroup_pkt_queue_max_set (struct bgp *bgp, u_int32_t); -extern int bgp_default_subgroup_pkt_queue_max_unset (struct bgp *bgp); +extern int bgp_default_subgroup_pkt_queue_max_set(struct bgp *bgp, u_int32_t); +extern int bgp_default_subgroup_pkt_queue_max_unset(struct bgp *bgp); -extern int bgp_listen_limit_set (struct bgp *, int); -extern int bgp_listen_limit_unset (struct bgp *); +extern int bgp_listen_limit_set(struct bgp *, int); +extern int bgp_listen_limit_unset(struct bgp *); -extern int bgp_update_delay_active (struct bgp *); -extern int bgp_update_delay_configured (struct bgp *); -extern void peer_as_change (struct peer *, as_t, int); -extern int peer_remote_as (struct bgp *, union sockunion *,const char *, as_t *, -                           int, afi_t, safi_t); -extern int peer_group_remote_as (struct bgp *, const char *, as_t *, int); -extern int peer_delete (struct peer *peer); -extern int peer_group_delete (struct peer_group *); -extern int peer_group_remote_as_delete (struct peer_group *); +extern int bgp_update_delay_active(struct bgp *); +extern int bgp_update_delay_configured(struct bgp *); +extern void peer_as_change(struct peer *, as_t, int); +extern int peer_remote_as(struct bgp *, union sockunion *, const char *, as_t *, +			  int, afi_t, safi_t); +extern int peer_group_remote_as(struct bgp *, const char *, as_t *, int); +extern int peer_delete(struct peer *peer); +extern int peer_group_delete(struct peer_group *); +extern int peer_group_remote_as_delete(struct peer_group *);  extern int peer_group_listen_range_add(struct peer_group *, struct prefix *); -extern int peer_activate (struct peer *, afi_t, safi_t); -extern int peer_deactivate (struct peer *, afi_t, safi_t); -extern int peer_afc_set (struct peer *, afi_t, safi_t, int); +extern int peer_activate(struct peer *, afi_t, safi_t); +extern int peer_deactivate(struct peer *, afi_t, safi_t); +extern int peer_afc_set(struct peer *, afi_t, safi_t, int); -extern int peer_group_bind (struct bgp *, union sockunion *, struct peer *, -                            struct peer_group *, as_t *); -extern int peer_group_unbind (struct bgp *, struct peer *, struct peer_group *); +extern int peer_group_bind(struct bgp *, union sockunion *, struct peer *, +			   struct peer_group *, as_t *); +extern int peer_group_unbind(struct bgp *, struct peer *, struct peer_group *); -extern int peer_flag_set (struct peer *, u_int32_t); -extern int peer_flag_unset (struct peer *, u_int32_t); +extern int peer_flag_set(struct peer *, u_int32_t); +extern int peer_flag_unset(struct peer *, u_int32_t); -extern int peer_af_flag_set (struct peer *, afi_t, safi_t, u_int32_t); -extern int peer_af_flag_unset (struct peer *, afi_t, safi_t, u_int32_t); -extern int peer_af_flag_check (struct peer *, afi_t, safi_t, u_int32_t); +extern int peer_af_flag_set(struct peer *, afi_t, safi_t, u_int32_t); +extern int peer_af_flag_unset(struct peer *, afi_t, safi_t, u_int32_t); +extern int peer_af_flag_check(struct peer *, afi_t, safi_t, u_int32_t); -extern int peer_ebgp_multihop_set (struct peer *, int); -extern int peer_ebgp_multihop_unset (struct peer *); -extern int is_ebgp_multihop_configured (struct peer *peer); +extern int peer_ebgp_multihop_set(struct peer *, int); +extern int peer_ebgp_multihop_unset(struct peer *); +extern int is_ebgp_multihop_configured(struct peer *peer); -extern int peer_description_set (struct peer *, const char *); -extern int peer_description_unset (struct peer *); +extern int peer_description_set(struct peer *, const char *); +extern int peer_description_unset(struct peer *); -extern int peer_update_source_if_set (struct peer *, const char *); -extern int peer_update_source_addr_set (struct peer *, const union sockunion *); -extern int peer_update_source_unset (struct peer *); +extern int peer_update_source_if_set(struct peer *, const char *); +extern int peer_update_source_addr_set(struct peer *, const union sockunion *); +extern int peer_update_source_unset(struct peer *); -extern int peer_default_originate_set (struct peer *, afi_t, safi_t, const char *); -extern int peer_default_originate_unset (struct peer *, afi_t, safi_t); +extern int peer_default_originate_set(struct peer *, afi_t, safi_t, +				      const char *); +extern int peer_default_originate_unset(struct peer *, afi_t, safi_t); -extern int peer_port_set (struct peer *, u_int16_t); -extern int peer_port_unset (struct peer *); +extern int peer_port_set(struct peer *, u_int16_t); +extern int peer_port_unset(struct peer *); -extern int peer_weight_set (struct peer *, afi_t, safi_t, u_int16_t); -extern int peer_weight_unset (struct peer *, afi_t, safi_t); +extern int peer_weight_set(struct peer *, afi_t, safi_t, u_int16_t); +extern int peer_weight_unset(struct peer *, afi_t, safi_t); -extern int peer_timers_set (struct peer *, u_int32_t keepalive, u_int32_t holdtime); -extern int peer_timers_unset (struct peer *); +extern int peer_timers_set(struct peer *, u_int32_t keepalive, +			   u_int32_t holdtime); +extern int peer_timers_unset(struct peer *); -extern int peer_timers_connect_set (struct peer *, u_int32_t); -extern int peer_timers_connect_unset (struct peer *); +extern int peer_timers_connect_set(struct peer *, u_int32_t); +extern int peer_timers_connect_unset(struct peer *); -extern int peer_advertise_interval_set (struct peer *, u_int32_t); -extern int peer_advertise_interval_unset (struct peer *); +extern int peer_advertise_interval_set(struct peer *, u_int32_t); +extern int peer_advertise_interval_unset(struct peer *); -extern void peer_interface_set (struct peer *, const char *); -extern void peer_interface_unset (struct peer *); +extern void peer_interface_set(struct peer *, const char *); +extern void peer_interface_unset(struct peer *); -extern int peer_distribute_set (struct peer *, afi_t, safi_t, int, const char *); -extern int peer_distribute_unset (struct peer *, afi_t, safi_t, int); +extern int peer_distribute_set(struct peer *, afi_t, safi_t, int, const char *); +extern int peer_distribute_unset(struct peer *, afi_t, safi_t, int); -extern int peer_allowas_in_set (struct peer *, afi_t, safi_t, int, int); -extern int peer_allowas_in_unset (struct peer *, afi_t, safi_t); +extern int peer_allowas_in_set(struct peer *, afi_t, safi_t, int, int); +extern int peer_allowas_in_unset(struct peer *, afi_t, safi_t); -extern int peer_local_as_set (struct peer *, as_t, int, int); -extern int peer_local_as_unset (struct peer *); +extern int peer_local_as_set(struct peer *, as_t, int, int); +extern int peer_local_as_unset(struct peer *); -extern int peer_prefix_list_set (struct peer *, afi_t, safi_t, int, const char *); -extern int peer_prefix_list_unset (struct peer *, afi_t, safi_t, int); +extern int peer_prefix_list_set(struct peer *, afi_t, safi_t, int, +				const char *); +extern int peer_prefix_list_unset(struct peer *, afi_t, safi_t, int); -extern int peer_aslist_set (struct peer *, afi_t, safi_t, int, const char *); -extern int peer_aslist_unset (struct peer *,afi_t, safi_t, int); +extern int peer_aslist_set(struct peer *, afi_t, safi_t, int, const char *); +extern int peer_aslist_unset(struct peer *, afi_t, safi_t, int); -extern int peer_route_map_set (struct peer *, afi_t, safi_t, int, const char *); -extern int peer_route_map_unset (struct peer *, afi_t, safi_t, int); +extern int peer_route_map_set(struct peer *, afi_t, safi_t, int, const char *); +extern int peer_route_map_unset(struct peer *, afi_t, safi_t, int); -extern int peer_unsuppress_map_set (struct peer *, afi_t, safi_t, const char *); +extern int peer_unsuppress_map_set(struct peer *, afi_t, safi_t, const char *); -extern int peer_password_set (struct peer *, const char *); -extern int peer_password_unset (struct peer *); +extern int peer_password_set(struct peer *, const char *); +extern int peer_password_unset(struct peer *); -extern int peer_unsuppress_map_unset (struct peer *, afi_t, safi_t); +extern int peer_unsuppress_map_unset(struct peer *, afi_t, safi_t); -extern int peer_maximum_prefix_set (struct peer *, afi_t, safi_t, u_int32_t, u_char, int, u_int16_t); -extern int peer_maximum_prefix_unset (struct peer *, afi_t, safi_t); +extern int peer_maximum_prefix_set(struct peer *, afi_t, safi_t, u_int32_t, +				   u_char, int, u_int16_t); +extern int peer_maximum_prefix_unset(struct peer *, afi_t, safi_t); -extern int peer_clear (struct peer *, struct listnode **); -extern int peer_clear_soft (struct peer *, afi_t, safi_t, enum bgp_clear_type); +extern int peer_clear(struct peer *, struct listnode **); +extern int peer_clear_soft(struct peer *, afi_t, safi_t, enum bgp_clear_type); -extern int peer_ttl_security_hops_set (struct peer *, int); -extern int peer_ttl_security_hops_unset (struct peer *); +extern int peer_ttl_security_hops_set(struct peer *, int); +extern int peer_ttl_security_hops_unset(struct peer *); -extern int peer_tx_shutdown_message_set (struct peer *, const char *msg); -extern int peer_tx_shutdown_message_unset (struct peer *); +extern int peer_tx_shutdown_message_set(struct peer *, const char *msg); +extern int peer_tx_shutdown_message_unset(struct peer *); -extern int bgp_route_map_update_timer (struct thread *thread); +extern int bgp_route_map_update_timer(struct thread *thread);  extern void bgp_route_map_terminate(void); -extern int peer_cmp (struct peer *p1, struct peer *p2); +extern int peer_cmp(struct peer *p1, struct peer *p2); -extern int -bgp_map_afi_safi_iana2int (iana_afi_t pkt_afi, safi_t pkt_safi, -                           afi_t *afi, safi_t *safi); -extern int -bgp_map_afi_safi_int2iana (afi_t afi, safi_t safi, -                           iana_afi_t *pkt_afi, safi_t *pkt_safi); +extern int bgp_map_afi_safi_iana2int(iana_afi_t pkt_afi, safi_t pkt_safi, +				     afi_t *afi, safi_t *safi); +extern int bgp_map_afi_safi_int2iana(afi_t afi, safi_t safi, +				     iana_afi_t *pkt_afi, safi_t *pkt_safi); -extern struct peer_af * peer_af_create (struct peer *, afi_t, safi_t); -extern struct peer_af * peer_af_find (struct peer *, afi_t, safi_t); -extern int peer_af_delete (struct peer *, afi_t, safi_t); +extern struct peer_af *peer_af_create(struct peer *, afi_t, safi_t); +extern struct peer_af *peer_af_find(struct peer *, afi_t, safi_t); +extern int peer_af_delete(struct peer *, afi_t, safi_t);  extern void bgp_close(void); -static inline int -afindex (afi_t afi, safi_t safi) +static inline int afindex(afi_t afi, safi_t safi)  { -  switch (afi) -    { -    case AFI_IP: -      switch (safi) -	{ -	case SAFI_UNICAST: -	  return BGP_AF_IPV4_UNICAST; -	  break; -	case SAFI_MULTICAST: -	  return BGP_AF_IPV4_MULTICAST; -	  break; -        case SAFI_LABELED_UNICAST: -          return BGP_AF_IPV4_LBL_UNICAST; -          break; -	case SAFI_MPLS_VPN: -	  return BGP_AF_IPV4_VPN; -	  break; -	case SAFI_ENCAP: -	  return BGP_AF_IPV4_ENCAP; -	  break; +	switch (afi) { +	case AFI_IP: +		switch (safi) { +		case SAFI_UNICAST: +			return BGP_AF_IPV4_UNICAST; +			break; +		case SAFI_MULTICAST: +			return BGP_AF_IPV4_MULTICAST; +			break; +		case SAFI_LABELED_UNICAST: +			return BGP_AF_IPV4_LBL_UNICAST; +			break; +		case SAFI_MPLS_VPN: +			return BGP_AF_IPV4_VPN; +			break; +		case SAFI_ENCAP: +			return BGP_AF_IPV4_ENCAP; +			break; +		default: +			return BGP_AF_MAX; +			break; +		} +		break; +	case AFI_IP6: +		switch (safi) { +		case SAFI_UNICAST: +			return BGP_AF_IPV6_UNICAST; +			break; +		case SAFI_MULTICAST: +			return BGP_AF_IPV6_MULTICAST; +			break; +		case SAFI_LABELED_UNICAST: +			return BGP_AF_IPV6_LBL_UNICAST; +			break; +		case SAFI_MPLS_VPN: +			return BGP_AF_IPV6_VPN; +			break; +		case SAFI_ENCAP: +			return BGP_AF_IPV6_ENCAP; +			break; +		default: +			return BGP_AF_MAX; +			break; +		} +		break; +	case AFI_L2VPN: +		switch (safi) { +		case SAFI_EVPN: +			return BGP_AF_L2VPN_EVPN; +			break; +		default: +			return BGP_AF_MAX; +			break; +		}  	default: -	  return BGP_AF_MAX; -	  break; +		return BGP_AF_MAX; +		break;  	} -      break; -    case AFI_IP6: -      switch (safi) -	{ -	case SAFI_UNICAST: -	  return BGP_AF_IPV6_UNICAST; -	  break; -	case SAFI_MULTICAST: -	  return BGP_AF_IPV6_MULTICAST; -	  break; -        case SAFI_LABELED_UNICAST: -          return BGP_AF_IPV6_LBL_UNICAST; -          break; -        case SAFI_MPLS_VPN: -	  return BGP_AF_IPV6_VPN; -	  break; -	case SAFI_ENCAP: -	  return BGP_AF_IPV6_ENCAP; -	  break; -	default: -	  return BGP_AF_MAX; -	  break; -	} -      break; -    case AFI_L2VPN: -      switch (safi) -        { -        case SAFI_EVPN: -          return BGP_AF_L2VPN_EVPN; -          break; -        default: -          return BGP_AF_MAX; -          break; -        } -    default: -      return BGP_AF_MAX; -      break; -    }  }  /* If the peer is not a peer-group but is bound to a peer-group return 1 */ -static inline int -peer_group_active (struct peer *peer) +static inline int peer_group_active(struct peer *peer)  { -  if (!CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP) && peer->group) -    return 1; -  return 0; +	if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP) && peer->group) +		return 1; +	return 0;  }  /* If peer is negotiated at least one address family return 1. */ -static inline int -peer_afi_active_nego (const struct peer *peer, afi_t afi) +static inline int peer_afi_active_nego(const struct peer *peer, afi_t afi)  { -  if (peer->afc_nego[afi][SAFI_UNICAST] -      || peer->afc_nego[afi][SAFI_MULTICAST] -      || peer->afc_nego[afi][SAFI_LABELED_UNICAST] -      || peer->afc_nego[afi][SAFI_MPLS_VPN] -      || peer->afc_nego[afi][SAFI_ENCAP] -      || peer->afc_nego[afi][SAFI_EVPN]) -    return 1; -  return 0; +	if (peer->afc_nego[afi][SAFI_UNICAST] +	    || peer->afc_nego[afi][SAFI_MULTICAST] +	    || peer->afc_nego[afi][SAFI_LABELED_UNICAST] +	    || peer->afc_nego[afi][SAFI_MPLS_VPN] +	    || peer->afc_nego[afi][SAFI_ENCAP] +	    || peer->afc_nego[afi][SAFI_EVPN]) +		return 1; +	return 0;  }  /* If at least one address family activated for group, return 1. */ -static inline int -peer_group_af_configured (struct peer_group *group) +static inline int peer_group_af_configured(struct peer_group *group)  { -  struct peer *peer = group->conf; - -  if (peer->afc[AFI_IP][SAFI_UNICAST] -      || peer->afc[AFI_IP][SAFI_MULTICAST] -      || peer->afc[AFI_IP][SAFI_LABELED_UNICAST] -      || peer->afc[AFI_IP][SAFI_MPLS_VPN] -      || peer->afc[AFI_IP][SAFI_ENCAP] -      || peer->afc[AFI_IP6][SAFI_UNICAST] -      || peer->afc[AFI_IP6][SAFI_MULTICAST] -      || peer->afc[AFI_IP6][SAFI_LABELED_UNICAST] -      || peer->afc[AFI_IP6][SAFI_MPLS_VPN] -      || peer->afc[AFI_IP6][SAFI_ENCAP] -      || peer->afc[AFI_IP6][SAFI_EVPN]) -    return 1; -  return 0; +	struct peer *peer = group->conf; + +	if (peer->afc[AFI_IP][SAFI_UNICAST] || peer->afc[AFI_IP][SAFI_MULTICAST] +	    || peer->afc[AFI_IP][SAFI_LABELED_UNICAST] +	    || peer->afc[AFI_IP][SAFI_MPLS_VPN] || peer->afc[AFI_IP][SAFI_ENCAP] +	    || peer->afc[AFI_IP6][SAFI_UNICAST] +	    || peer->afc[AFI_IP6][SAFI_MULTICAST] +	    || peer->afc[AFI_IP6][SAFI_LABELED_UNICAST] +	    || peer->afc[AFI_IP6][SAFI_MPLS_VPN] +	    || peer->afc[AFI_IP6][SAFI_ENCAP] || peer->afc[AFI_IP6][SAFI_EVPN]) +		return 1; +	return 0;  } -static inline char * -timestamp_string (time_t ts) +static inline char *timestamp_string(time_t ts)  { -  time_t tbuf; -  tbuf = time(NULL) - (bgp_clock() - ts); -  return ctime(&tbuf); +	time_t tbuf; +	tbuf = time(NULL) - (bgp_clock() - ts); +	return ctime(&tbuf);  } -static inline int -peer_established (struct peer *peer) +static inline int peer_established(struct peer *peer)  { -  if (peer->status == Established) -    return 1; -  return 0; +	if (peer->status == Established) +		return 1; +	return 0;  } -static inline int -peer_dynamic_neighbor (struct peer *peer) +static inline int peer_dynamic_neighbor(struct peer *peer)  { -  return (CHECK_FLAG(peer->flags, PEER_FLAG_DYNAMIC_NEIGHBOR)) ? 1 : 0; +	return (CHECK_FLAG(peer->flags, PEER_FLAG_DYNAMIC_NEIGHBOR)) ? 1 : 0;  } -static inline int -peer_cap_enhe (struct peer *peer, afi_t afi, safi_t safi) +static inline int peer_cap_enhe(struct peer *peer, afi_t afi, safi_t safi)  { -  return (CHECK_FLAG(peer->af_cap[afi][safi], PEER_CAP_ENHE_AF_NEGO)); +	return (CHECK_FLAG(peer->af_cap[afi][safi], PEER_CAP_ENHE_AF_NEGO));  }  /* Lookup VRF for BGP instance based on its type. */ -static inline struct vrf * -bgp_vrf_lookup_by_instance_type (struct bgp *bgp) +static inline struct vrf *bgp_vrf_lookup_by_instance_type(struct bgp *bgp)  { -  struct vrf *vrf; +	struct vrf *vrf; -  if (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT) -    vrf = vrf_lookup_by_id (VRF_DEFAULT); -  else if (bgp->inst_type == BGP_INSTANCE_TYPE_VRF) -    vrf = vrf_lookup_by_name (bgp->name); -  else -    vrf = NULL; +	if (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT) +		vrf = vrf_lookup_by_id(VRF_DEFAULT); +	else if (bgp->inst_type == BGP_INSTANCE_TYPE_VRF) +		vrf = vrf_lookup_by_name(bgp->name); +	else +		vrf = NULL; -  return vrf; +	return vrf;  }  /* Link BGP instance to VRF. */ -static inline void -bgp_vrf_link (struct bgp *bgp, struct vrf *vrf) +static inline void bgp_vrf_link(struct bgp *bgp, struct vrf *vrf)  { -  bgp->vrf_id = vrf->vrf_id; -  if (vrf->info != (void *)bgp) -    { -      bgp_lock (bgp); -      vrf->info = (void *)bgp; -    } +	bgp->vrf_id = vrf->vrf_id; +	if (vrf->info != (void *)bgp) { +		bgp_lock(bgp); +		vrf->info = (void *)bgp; +	}  }  /* Unlink BGP instance from VRF. */ -static inline void -bgp_vrf_unlink (struct bgp *bgp, struct vrf *vrf) +static inline void bgp_vrf_unlink(struct bgp *bgp, struct vrf *vrf)  { -  if (vrf->info == (void *)bgp) -    { -      vrf->info = NULL; -      bgp_unlock (bgp); -    } -  bgp->vrf_id = VRF_UNKNOWN; +	if (vrf->info == (void *)bgp) { +		vrf->info = NULL; +		bgp_unlock(bgp); +	} +	bgp->vrf_id = VRF_UNKNOWN;  } -extern void bgp_update_redist_vrf_bitmaps (struct bgp*, vrf_id_t); +extern void bgp_update_redist_vrf_bitmaps(struct bgp *, vrf_id_t);  /* For benefit of rfapi */ -extern struct peer * peer_new (struct bgp *bgp); +extern struct peer *peer_new(struct bgp *bgp);  #endif /* _QUAGGA_BGPD_H */  | 
