summaryrefslogtreecommitdiff
path: root/proto/bgp/bgp.h
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2015-07-18 13:38:21 +0200
committerOndrej Zajicek <santiago@crfreenet.org>2015-07-18 13:38:21 +0200
commit06e0d1b692d8a190c3f1d073c5c557d8efe78b17 (patch)
treed1cceb163bb653bfe2b53cc642aee4d77af74f87 /proto/bgp/bgp.h
parentab4da3423d89fb6c60a4137f19c189a8716ecab6 (diff)
BGP: Extended messages support
Implements draft-ietf-idr-bgp-extended-messages-10, for now undocumented and with temporary private capability number.
Diffstat (limited to 'proto/bgp/bgp.h')
-rw-r--r--proto/bgp/bgp.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/proto/bgp/bgp.h b/proto/bgp/bgp.h
index b6e80fe5..274794f1 100644
--- a/proto/bgp/bgp.h
+++ b/proto/bgp/bgp.h
@@ -40,6 +40,7 @@ struct bgp_config {
int capabilities; /* Enable capability handshake [RFC3392] */
int enable_refresh; /* Enable local support for route refresh [RFC2918] */
int enable_as4; /* Enable local support for 4B AS numbers [RFC4893] */
+ int enable_extended_messages; /* Enable local support for extended messages [draft] */
u32 rr_cluster_id; /* Route reflector cluster ID, if different from local ID */
int rr_client; /* Whether neighbor is RR client of me */
int rs_client; /* Whether neighbor is RS client of me */
@@ -109,6 +110,7 @@ struct bgp_conn {
u16 peer_gr_time;
u8 peer_gr_flags;
u8 peer_gr_aflags;
+ u8 peer_ext_messages_support; /* Peer supports extended message length [draft] */
unsigned hold_time, keepalive_time; /* Times calculated from my and neighbor's requirements */
};
@@ -121,6 +123,7 @@ struct bgp_proto {
u8 as4_session; /* Session uses 4B AS numbers in AS_PATH (both sides support it) */
u8 add_path_rx; /* Session expects receive of ADD-PATH extended NLRI */
u8 add_path_tx; /* Session expects transmit of ADD-PATH extended NLRI */
+ u8 ext_messages; /* Session allows to use extended messages (both sides support it) */
u32 local_id; /* BGP identifier of this router */
u32 remote_id; /* BGP identifier of the neighbor */
u32 rr_cluster_id; /* Route reflector cluster ID */
@@ -180,9 +183,15 @@ struct bgp_bucket {
#define BGP_PORT 179
#define BGP_VERSION 4
#define BGP_HEADER_LENGTH 19
-#define BGP_MAX_PACKET_LENGTH 4096
+#define BGP_MAX_MESSAGE_LENGTH 4096
+#define BGP_MAX_EXT_MSG_LENGTH 65535
#define BGP_RX_BUFFER_SIZE 4096
-#define BGP_TX_BUFFER_SIZE BGP_MAX_PACKET_LENGTH
+#define BGP_TX_BUFFER_SIZE 4096
+#define BGP_RX_BUFFER_EXT_SIZE 65535
+#define BGP_TX_BUFFER_EXT_SIZE 65535
+
+static inline int bgp_max_packet_length(struct bgp_proto *p)
+{ return p->ext_messages ? BGP_MAX_EXT_MSG_LENGTH : BGP_MAX_MESSAGE_LENGTH; }
extern struct linpool *bgp_linpool;