]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
MRT Dump: Support for draft-petrie-grow-mrt-add-paths
authorPavel Tvrdík <pawel.tvrdik@gmail.com>
Tue, 5 Jan 2016 16:53:58 +0000 (17:53 +0100)
committerPavel Tvrdík <pawel.tvrdik@gmail.com>
Wed, 6 Jan 2016 13:41:42 +0000 (14:41 +0100)
Thanks to Colin Petrie for patch.

nest/mrtdump.h
proto/bgp/packets.c

index d3b134932b0878c45658a124cb6273e57f08a025..0e23a7d30137798eaa301cc40978727cbfe60b7a 100644 (file)
@@ -41,7 +41,9 @@
 /* MRT BGP4MP Subtypes */
 #define MRT_BGP4MP_MESSAGE     1
 #define MRT_BGP4MP_MESSAGE_AS4 4
-#define MRT_BGP4MP_STATE_CHANGE_AS4 5
+#define MRT_BGP4MP_STATE_CHANGE_AS4    5
+#define MRT_BGP4MP_MESSAGE_ADDPATH     8       /* Experimental draft-petrie-grow-mrt-add-paths */
+#define MRT_BGP4MP_MESSAGE_AS4_ADDPATH         9       /* Experimental draft-petrie-grow-mrt-add-paths */
 
 struct mrt_buffer
 {
index 5caa356fe8ccc5a4c23d73bd573e9a5c9989e196..430b94110ffac616b004cdc087131d1f3eff2f16 100644 (file)
@@ -87,11 +87,19 @@ mrt_dump_bgp_packet(struct bgp_conn *conn, byte *pkt, unsigned len)
   byte *buf = alloca(128+len); /* 128 is enough for MRT headers */
   byte *bp = buf + MRT_HDR_LENGTH;
   int as4 = conn->bgp->as4_session;
+  int addpath = conn->bgp->add_path_rx;
+
+  u16 subtype;
+  if (addpath)
+    subtype = as4 ? MRT_BGP4MP_MESSAGE_AS4_ADDPATH : MRT_BGP4MP_MESSAGE_ADDPATH;
+  else
+    subtype = as4 ? MRT_BGP4MP_MESSAGE_AS4 : MRT_BGP4MP_MESSAGE;
 
   bp = mrt_put_bgp4_hdr(bp, conn, as4);
   memcpy(bp, pkt, len);
   bp += len;
-  mrt_dump_message_proto(&conn->bgp->p, MRT_BGP4MP, as4 ? MRT_BGP4MP_MESSAGE_AS4 : MRT_BGP4MP_MESSAGE, buf, bp-buf);
+
+  mrt_dump_message_proto(&conn->bgp->p, MRT_BGP4MP, subtype, buf, bp-buf);
 }
 
 static inline u16