diff options
Diffstat (limited to 'proto/bgp/bgp.h')
-rw-r--r-- | proto/bgp/bgp.h | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/proto/bgp/bgp.h b/proto/bgp/bgp.h index 1ba3de5e..7127bc88 100644 --- a/proto/bgp/bgp.h +++ b/proto/bgp/bgp.h @@ -117,6 +117,8 @@ struct bgp_config { int setkey; /* Set MD5 password to system SA/SP database */ u8 local_role; /* Set peering role with neighbor [RFC 9234] */ int require_roles; /* Require configured roles on both sides */ + int send_hold_time; + int disable_rx; /* Stop reading messages after handshake (for simulating error) */ /* Times below are in seconds */ unsigned gr_time; /* Graceful restart timeout */ unsigned llgr_time; /* Long-lived graceful restart stale time */ @@ -138,6 +140,13 @@ struct bgp_config { const char *dynamic_name; /* Name pattern for dynamic BGP */ int dynamic_name_digits; /* Minimum number of digits for dynamic names */ int check_link; /* Use iface link state for liveness detection */ + int require_refresh; /* Require remote support for route refresh [RFC 2918] */ + int require_enhanced_refresh; /* Require remote support for enhanced route refresh [RFC 7313] */ + int require_as4; /* Require remote support for 4B AS numbers [RFC 6793] */ + int require_extended_messages; /* Require remote support for extended messages [RFC 8654] */ + int require_hostname; /* Require remote support for hostname [draft] */ + int require_gr; /* Require remote support for graceful restart [RFC 4724] */ + int require_llgr; /* Require remote support for long-lived graceful restart [draft] */ struct bfd_options *bfd; /* Use BFD for liveness detection */ }; @@ -159,7 +168,9 @@ struct bgp_channel_config { u8 llgr_able; /* Allow full long-lived GR for the channel */ uint llgr_time; /* Long-lived graceful restart stale time */ u8 ext_next_hop; /* Allow both IPv4 and IPv6 next hops */ + u8 require_ext_next_hop; /* Require remote support of IPv4 NLRI with IPv6 next hops [RFC 8950] */ u8 add_path; /* Use ADD-PATH extension [RFC 7911] */ + u8 require_add_path; /* Require remote support of ADD-PATH extension [RFC 7911] */ u8 aigp; /* AIGP is allowed on this session */ u8 aigp_originate; /* AIGP is originated automatically */ u32 cost; /* IGP cost for direct next hops */ @@ -298,6 +309,7 @@ struct bgp_conn { timer *connect_timer; timer *hold_timer; timer *keepalive_timer; + timer *send_hold_timer; event *tx_ev; u32 packets_to_send; /* Bitmap of packet types to be sent */ u32 channels_to_send; /* Bitmap of channels with packets to be sent */ @@ -306,7 +318,7 @@ struct bgp_conn { int notify_code, notify_subcode, notify_size; byte *notify_data; - uint hold_time, keepalive_time; /* Times calculated from my and neighbor's requirements */ + uint hold_time, keepalive_time, send_hold_time; /* Times calculated from my and neighbor's requirements */ }; struct bgp_proto { @@ -549,6 +561,7 @@ void bgp_conn_enter_openconfirm_state(struct bgp_conn *conn); void bgp_conn_enter_established_state(struct bgp_conn *conn); void bgp_conn_enter_close_state(struct bgp_conn *conn); void bgp_conn_enter_idle_state(struct bgp_conn *conn); +void broke_bgp_listening(struct channel *C); void bgp_handle_graceful_restart(struct bgp_proto *p); void bgp_graceful_restart_done(struct bgp_channel *c); void bgp_refresh_begin(struct bgp_channel *c); @@ -611,6 +624,7 @@ bgp_unset_attr(ea_list **to, struct linpool *pool, uint code) int bgp_encode_mp_reach_mrt(struct bgp_write_state *s, eattr *a, byte *buf, uint size); +const char * bgp_attr_name(uint code); int bgp_encode_attrs(struct bgp_write_state *s, ea_list *attrs, byte *buf, byte *end); ea_list * bgp_decode_attrs(struct bgp_parse_state *s, byte *data, uint len); void bgp_finish_attrs(struct bgp_parse_state *s, rta *a); @@ -656,6 +670,7 @@ bgp_total_aigp_metric(rte *r) void bgp_dump_state_change(struct bgp_conn *conn, uint old, uint new); void bgp_prepare_capabilities(struct bgp_conn *conn); +int bgp_check_capabilities(struct bgp_conn *conn); const struct bgp_af_desc *bgp_get_af_desc(u32 afi); const struct bgp_af_caps *bgp_find_af_caps(struct bgp_caps *caps, u32 afi); void bgp_schedule_packet(struct bgp_conn *conn, struct bgp_channel *c, int type); |