On 06/28/2012 05:24 PM, Daniel Howell wrote:
> Hello, my name is Daniel Howell and I'm interning over the summer at the
> Lawrence Livermore National Laboratory working on network simulations
> under Peter Barnes.
>
> My project is implementing BGP in ns-3 simulations with the goal being
> to run large-scale simulations of 10k+ nodes. I've looked into the
> recent DCE implementation of Quagga, but from what I saw, it installs
> individual Quagga processes on each node that runs BGP on it. For a
> large scale simulation, this would run too slowly. We also want to be
> able to run our code on any machine ns-3 can normally run on without
> having to worry about DCE compatibility between computers.
>
> I found this page while researching the problem -
>
http://www.nsnam.org/wiki/index.php/Real_World_Application_Integration#Quagga_porting.
> Unfortunately, the repository linked on the wiki no longer exists. Does
> anyone have the files anymore or any additional notes about it?
>
> I'm currently looking into extending Ipv4RoutingProtocol to implement
> BGP at the moment, using the OLSRRoutingProtocol that is built-in as an
> example. This BGPRoutingProtocol class would call upon the Quagga source
> code for BGP to run. A few spots of challenge would be making sure the C
> code compiles in the C++ compiler, running ns-3's simulation time
> instead of real time on Quagga, and having the sockets communicate
> between ns-3 and Quagga.
>
> I started learning ns-3 just recently for this internship, so I'm not
> well-versed on the ns-3 data structures. Does this approach make sense
> or am I misunderstanding/overlooking something? If anyone has the older
> Quagga Porting code, knows of a similar resource, or can offer any
> advice or an opinion on this, that'd be very helpful!
>
> Thanks!
> - Daniel Howell
Hi Daniel, I'm sure that this type of addition would be welcome by many
ns-3 users.
I worked on a similar project to support quagga OSPFv3 in GTNeTS several
years ago (link is posted on the wiki page that you cited above). It
ended up being not too hard because there weren't too many global data
structures in OSPFv3 (the current quagga BGP might have more of these
issues to deal with than OSPFv3; I'm not sure). However, it was
intrusive to plumb in the compatibility layer, which made it very
difficult to maintain with new quagga releases). A nicer technique
might be to study whether techniques used in Sam Jansen's network
simulation cradle could be adapted to perform this conversion in a
mostly automated way, so that different variants of quagga could be
supported.
Please also look at the quagga BGP work that Ga. Tech did in this regard
many years ago (also linked in the above page).
I think that your suggested approach would fit the ns-3 architecture.
- Tom