Hi Alexis, Thanks for doing this. I find this tool quite useful and so am glad you got around to updating it (it was on my long todo list and I'm grateful to strike that off now).
I support bringing OSPF into the MRT fold as well, if you can. Dinesh On Mon, Oct 12, 2015 at 1:15 PM, Alexis Fasquel <[email protected]> wrote: > Hello everyone! > > So I’ve been working on a small patch to add support for Extended MRT > Header for BGP messages (MRT dumps) corresponding to MRT type *BGP4MP_ET * > (RFC6396)*. *I’ve also developed the same patch for the parsing library > bgpdump and the pull request is currently under review and should be merged > in the upcoming week. > > You will find at then end of this email the diff with the changes I’ve > made (not much, this is not a big patch). I wanted to add support for the > MRT types *ISIS_ET *and *OSPFv3_ET* however I could not find easily the > corresponding dump processes. > > Also, I wanted to get my extra brownie point by updating the ChangeLog but > it says: > > ChangeLog information for Quagga is now recorded in our source-code > management system. Please see: > > http://www.quagga.net/devel.php > > > Am I missing something or the “devel” page is not up to date? > In anyway, I’ve summed up the changes here: > > - Adding ./configure parameter --enable-et-header that will enable > support for Extended MRT Header. > - Adding MSG_PROTOCOL_BGP4MP_ET (value 17) as a MRT type > - Changing the size of MRT Header to 16 if Extended MRT Header enabled > - Changing type of MRT dump to MSG_PROTOCOL_BGP4MP_ET and dumping > microseconds field when Extended MRT Header enabled. > > I hope that this patch will match your expectations and let me know if you > there is anything that I can improve. > > Regards, > > Alexis Fasquel > Software Engineer @ PCH <http://www.pch.net> > +1-415-694-0585 > > > > diff --git a/bgpd/bgp_dump.c b/bgpd/bgp_dump.c > index a3c9526..34c00b9 100644 > --- a/bgpd/bgp_dump.c > +++ b/bgpd/bgp_dump.c > @@ -173,17 +173,25 @@ bgp_dump_interval_add (struct bgp_dump *bgp_dump, > int interval) > static void > bgp_dump_header (struct stream *obuf, int type, int subtype) > { > - time_t now; > + struct timeval clock; > + long msecs; > + time_t secs; > > - /* Set header. */ > - time (&now); > + gettimeofday(&clock, NULL); > + > + secs = clock.tv_sec; > + msecs = clock.tv_usec; > > /* Put dump packet header. */ > - stream_putl (obuf, now); > + stream_putl (obuf, secs); > stream_putw (obuf, type); > stream_putw (obuf, subtype); > - > stream_putl (obuf, 0); /* len */ > + > +#ifdef HAVE_MRT_ET > + /* Adding microseconds for the MRT Extended Header */ > + stream_putl (obuf, msecs); > +#endif > } > > static void > @@ -474,7 +482,11 @@ bgp_dump_state (struct peer *peer, int status_old, > int status_new) > obuf = bgp_dump_obuf; > stream_reset (obuf); > > +#ifdef HAVE_MRT_ET > + bgp_dump_header (obuf, MSG_PROTOCOL_BGP4MP_ET, BGP4MP_STATE_CHANGE_AS4); > +#else > bgp_dump_header (obuf, MSG_PROTOCOL_BGP4MP, BGP4MP_STATE_CHANGE_AS4); > +#endif > bgp_dump_common (obuf, peer, 1);/* force this in as4speak*/ > > stream_putw (obuf, status_old); > @@ -505,11 +517,19 @@ bgp_dump_packet_func (struct bgp_dump *bgp_dump, > struct peer *peer, > /* Dump header and common part. */ > if (CHECK_FLAG (peer->cap, PEER_CAP_AS4_RCV) ) > { > +#ifdef HAVE_MRT_ET > + bgp_dump_header (obuf, MSG_PROTOCOL_BGP4MP_ET, BGP4MP_MESSAGE_AS4); > +#else > bgp_dump_header (obuf, MSG_PROTOCOL_BGP4MP, BGP4MP_MESSAGE_AS4); > +#endif > } > else > { > +#ifdef HAVE_MRT_ET > + bgp_dump_header (obuf, MSG_PROTOCOL_BGP4MP_ET, BGP4MP_MESSAGE); > +#else > bgp_dump_header (obuf, MSG_PROTOCOL_BGP4MP, BGP4MP_MESSAGE); > +#endif > } > bgp_dump_common (obuf, peer, 0); > > diff --git a/bgpd/bgp_dump.h b/bgpd/bgp_dump.h > index e097c78..96a8b26 100644 > --- a/bgpd/bgp_dump.h > +++ b/bgpd/bgp_dump.h > @@ -24,6 +24,8 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, > Boston, MA > /* MRT compatible packet dump values. */ > /* type value */ > #define MSG_PROTOCOL_BGP4MP 16 > +#define MSG_PROTOCOL_BGP4MP_ET 17 > + > /* subtype value */ > #define BGP4MP_STATE_CHANGE 0 > #define BGP4MP_MESSAGE 1 > @@ -32,7 +34,11 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, > Boston, MA > #define BGP4MP_MESSAGE_AS4 4 > #define BGP4MP_STATE_CHANGE_AS4 5 > > +#ifdef HAVE_MRT_ET // Extended Timestamp MRT Header enabled > +#define BGP_DUMP_HEADER_SIZE 16 > +#else > #define BGP_DUMP_HEADER_SIZE 12 > +#endif > #define BGP_DUMP_MSG_HEADER 40 > > #define TABLE_DUMP_V2_PEER_INDEX_TABLE 1 > diff --git a/configure.ac b/configure.ac > index 747a0c6..3923ef4 100755 > --- a/configure.ac > +++ b/configure.ac > @@ -248,6 +248,8 @@ AC_ARG_ENABLE(pimd, > AS_HELP_STRING([--disable-pimd], [do not build pimd])) > AC_ARG_ENABLE(bgp-announce, > AS_HELP_STRING([--disable-bgp-announce,], [turn off BGP route > announcement])) > +AC_ARG_ENABLE(mrt-et-header, > + AS_HELP_STRING([--enable-et-header], [turn on MRT Extended Header])) > AC_ARG_ENABLE(snmp, > AS_HELP_STRING([--enable-snmp=ARG], [enable SNMP support (smux or > agentx)])) > AC_ARG_WITH(libpam, > @@ -317,6 +319,10 @@ if test x"${enable_time_check}" != x"no" ; then > fi > fi > > +if test "${enable_et_header}" = "yes"; then > + AC_DEFINE(HAVE_MRT_ET,,MRT Extended Header support) > +fi > + > if test "${enable_fpm}" = "yes"; then > AC_DEFINE(HAVE_FPM,,Forwarding Plane Manager support) > fi > > > > _______________________________________________ > Quagga-dev mailing list > [email protected] > https://lists.quagga.net/mailman/listinfo/quagga-dev >
_______________________________________________ Quagga-dev mailing list [email protected] https://lists.quagga.net/mailman/listinfo/quagga-dev
