#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
+#define BGP_ATTR_BUFFER_SIZE 2048 /* Default buffer size for encoded bgp attributes */
+ 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;
static void
mrt_dump_bgp_packet(struct bgp_conn *conn, byte *pkt, unsigned len)
{
- byte buf[BGP_MAX_PACKET_LENGTH + 128];
+ byte *buf = alloca(128+len); /* 128 is enough for MRT headers */
- byte *bp = buf + MRTDUMP_HDR_LENGTH;
+ byte *bp = buf + MRT_HDR_LENGTH;
++
int as4 = conn->bgp->as4_session;
bp = mrt_put_bgp4_hdr(bp, conn, as4);