summaryrefslogtreecommitdiff
path: root/usr.sbin/bgpd/rde.c
AgeCommit message (Collapse)Author
2009-06-29Unfuck mrt table dumps and plug a memory leak while there.Claudio Jeker
2009-06-22Log a warning when "enforce remote-as" is triggered. ok claudio@Stuart Henderson
2009-06-07Change the way fds passed over a socket are retreived on the receiving side.Eric Faurot
Currently the receiver fetches an imsg via imsg_get() and if he expects an fd, he then calls imsg_get_fd() to fetch the next fd queued on the imsgbuf from which the imsg came. This changes hides the fd queueing mechanism to the API user. When closing an imsg with an fd, the message is flagged so that the receiving end knows it must dequeue the fd in imsg_get() and return it with the imsg structure. This way there is no (less) possible screw up from imsg_get_fd() not being called directly after imsg_get() by the user. The retreived imsg is self-contained. ok pyr@, "I like that" henning@
2009-06-07First attempt at reload support for RIBs. There is some magic that I doClaudio Jeker
not fully understand but at least no flames are comming out of my test box anymore.
2009-06-06Fix bgpctl show rib prefix/len command. Problem reported by Insan Praja.Claudio Jeker
2009-06-06sync bgpd/bgpctl with the common imsg code, making it lib ready as well.Eric Faurot
ok claudio@ pyr@
2009-06-06Make it possible to select the RIB that a show command should show.Claudio Jeker
2009-06-06Some preliminary filter magic to support multiple RIBs on the filters.Claudio Jeker
It is ugly but does the trick for now. Filters will be rewritten anyway. The rib specifier only makes sense on from rules. e.g. deny rib OMG from any
2009-06-06Only generate updates for peers that are member of the RIB that update isClaudio Jeker
comming from.
2009-06-06Minor cleanup.Claudio Jeker
2009-06-05Make it possible to bind peers to a specified RIB. Now only filters andClaudio Jeker
bgpctl are missing to have full support of multiple RIBs.
2009-06-05Change the way we do mrt dumps in the rde (from the retarded only one dumpClaudio Jeker
possible to as many as you like). The mrt dumps are now done with the same tree walking code as the control messages. Makes the RDE respond a bit faster and use less memory while dumping.
2009-06-04Make mrt understand alternate RIB plus remove some other static rib references.Claudio Jeker
There is still a problem with the mrt dumps because we only allow one in the RDE. This needs some additional work.
2009-06-04Export networks to be redistributed into all ribs for now.Claudio Jeker
2009-06-04Add "rde rib <name>" to the config and allow the rde to use these other RIBs.Claudio Jeker
Still a bit hackish, reload is missing and printconf as well. Looks good h@
2009-06-02Make show rib as and show rib community use the same dump code as the otherClaudio Jeker
show rib commands. This makes the output sorted by prefix and not some rather randomly output.
2009-06-02Move the rest of the rib dump functions into rde_rib.c where it belongs.Claudio Jeker
2009-06-01Use only one list to queue the dump contextes on. Use the list in structClaudio Jeker
rib_context instead of the ctl specific rde_dump_ctx to make it more general.
2009-05-27Move update and withdraw code into own functions to simplify the necessaryClaudio Jeker
changes to make multiple RIB functional. Also change the way we account the prefixes per peer (for maxprefix check). Every prefix that was added to any RIB is counted. OK henning@
2009-05-17F_LOCAL and F_ORIGINAL are gone. The Adj-Rib-In is now a distinct tree.Claudio Jeker
Fix pf table code by checking if the aspath has a pftableid set or not instead of doing the F_LOCAL dance. This works because the in the Adj-Rib-In it is impossible to set pftableid.
2009-05-17Simplify the IMSG_CTL_SHOW_NETWORK case and make it actually work by sendingClaudio Jeker
the imsgs back to the right pid and not some more or less random address.
2009-05-17Rework most of the RDE to allow multiple RIBs. This is mostly preparationClaudio Jeker
work by changing the way the RDE DB is built. struct prefix and struct pt_entry are simplified and extended with a rib_entry where the decision tree is run on. From now on a prefix can only reside on one particular RIB which simplifies the code a bit. Currently there are two fixed ribs (adj-rib-in and the local-rib) which needs to be made more dynamic in upcomming commits. This is work in progress, the RDE seems to work for me and sthen@ (no flames comming out of our testrouters but there is still a lot missing) Move into the tree to simplify developement -- henning@
2009-05-11Make bgpctl show network print both AF_INET and AF_INET6 as mentioned in theClaudio Jeker
man page. Problem found by Rod Whitworth. OK sthen@
2009-04-23Rework the way we handle announced networks. Instead of two freak rde_peersClaudio Jeker
use one that is less freaky. Merge bgpctl and config networks into one tree. First step of a larger change in the RDE and this goes now in to allow to move forward.
2009-03-18Correctly check for MRT_TABLE_DUMP_MP and don't send the config to the SE.Claudio Jeker
Make mrt table-mp dumps actually work. Found on the plane from NRT to ZRH. OK henning@
2009-03-13No need for a line break, makes code a bit more compact.Claudio Jeker
2009-03-13Next step in mrt cleanup. Switch buf_write to a smarter version of itself.Claudio Jeker
Doing more the stuff msgbuf_write does and switch the only user -- mrt -- over to use this simpler way of writing out stuff.
2009-03-13Move mrt code over to use the msgbuf way of queuing buffers instead of rollingClaudio Jeker
an own version. More cleanup to come.
2009-03-13More paranoia when parsing empty updates. Make sure they are really empty andClaudio Jeker
don't come with some additional stuff attached to them. OK henning@
2009-01-13Replace NEW_ASPATH/NEW_AGGREGATOR with the naming from RFC4893,Stuart Henderson
AS4_PATH/AS4_AGGREGATOR. No binary change. ok claudio
2008-12-28Add a ugly workaround for the problem where an invalid AS4_PATH is passedClaudio Jeker
over mulitple hops and causes bgpd to close the connection. This is what the RFC requires us to do but the result is a DoS against all OpenBGPD routers when somebody injects such a bad optional transitive attribute because the intermediate routers don't give a damn about it. As a result we now ignore such bad prefixes and don't allow them in the decision process. The handling of optional transitive attributes needs to be rethinked because all of them can be abused in such a way. Idea OK by a few + henning@, tested myself against my crappy regress test suite that needs way more work.
2008-12-12Follow RFC 4271 more closely by sending the correct error back for optionalClaudio Jeker
attributes and use the correct lenght in some other error cases. OK sthen@
2008-06-15Paranoia check. Make sure that the 2 len bytes are actually available.Claudio Jeker
Another easy M hiding in my bgp source forest.
2008-05-02Fix logic when setting the F_RIB_ELIGIBLE flag. A path with a NULL nexthopClaudio Jeker
is localy originated and so is eligible by definition. Noticed and fix tested by Christian, bsd (at) cleondra (dot) ch
2008-02-26Ignore and drop path attributes with a type code of 0 instead of sending anClaudio Jeker
error back. This increases robustness without causing any issues. The RFC does not forbid the use of 0 in the type code but it is not explicitly allowed and the type code list at IANA does not mention 0 at all. OK henning@
2007-11-27Prefixes or actually pathes that would cause a rooting loops should not beClaudio Jeker
dropped when parsed but instead be added to the RIB marked as not eligible. So the decision process does not pick them up as a valid route. Tested and some ideas by Tony Sarendal (tony (at) polarcap (dot) org)
2007-09-16log_fmt_peer() does not use a static buffer so it is necessary to free theClaudio Jeker
string that it returned later. rde_update_log() did not do that. Memory leak found and diff provided by Mike Belopuhov.
2007-06-19Ignore SIGHUP in bgpd's children to allow the use of pkill -1 bgpd forPierre-Yves Ritschard
reloading. ``yeah that is good'' henning@
2007-05-11Various spelling fixes from Stuart Henderson.Claudio Jeker
2007-04-23Make bgpd 4-byte AS compatible. All internal representations of AS numbersClaudio Jeker
are now 4-byte instead of the old 2-byte numbers. The only exception are communities because they can not be switched. The RDE will inflate and deflate the ASPATH and AGGREGATOR attributes on demand and create the NEW_ASPATH and NEW_AGGREGATOR field whenever needed. Both old and new stile sessions are supported and can be mixed. Currently new stile sessions with the 4-byte AS number capability turned on are only enabled if one of the AS numbers involved is a 4-byte one. This is based on an initial diff by Geoff Huston gih (at) apnic (dot) net Cleanup, testing and bug-fixes by myself (via AS 3.10). Currently mrt table dumps are producing incompatible output this will be fixed afterwards -- this diff is already big enough. "get it in if you think it is ready" henning@
2007-04-06Count the updates and withdraws for additional statisic gathering.Claudio Jeker
Discussed with henning@
2007-03-28add IMSG_CTL_SHOW_RIB_COMMUNITY, rib by given communityHenning Brauer
mostly from rivo nurges <rix@estpak.ee>, ok claudio
2007-03-16A few more s/2858/4760/ and use RFC <number> everywhere.Claudio Jeker
2007-03-16Update multiprotocol extension code to RFC 4760. This actually removesClaudio Jeker
a few things we actually never realy cared about. OK henning@
2007-03-12When running show commands that are restarted make sure that we eitherClaudio Jeker
have pending imsgs to send or that we reduce the poll timout to 0. This fixes hanging and extrem slow performing bgpctl show rib commands. Found by Jon Morby additional testing by Stuart Henderson. OK henning@
2007-02-22KNFHenning Brauer
2007-01-26Massiv rework of the control imsg flow. Main changes:Claudio Jeker
- dedicated pipe between the SE and the RDE for control messages - restartable RB tree dumps in the RDE - queuing limits both in the SE and RDE The result is a dramatic decrease of memory consumption on operations like bgpctl show rib. Previously all messages where first stored in the RDE then passed to the SE where they got queued in case bgpctl was not fast enough. Now only a small number of messages is generated and passed to the SE and the SE has an additional limit instead of acting like an infinite buffer. Without this the bgpd on bgpd.networx.ch would not survive a single minute. looks good henning@
2007-01-24Lock the nexthop while parsing an update by increasing the reference count.Claudio Jeker
This is needed because the nexthop is not yet linked to the aspath attributes and so a withdraw in the same update imsg could remove this nexthop which in turn causes a use after free error when the prefix is added later on. The order of parsing (attributes, withdraws, prefixes instead of withdraws, attributes, prefixes) was reversed for multiprotocol support. This should fix all strange nexthop crashes seen by various people. Tested and OK henning@
2007-01-04Do not run rde_shutdown() unless bgpd is started with -d.Claudio Jeker
On some of my systems rde_shutdown() takes more than 3min doing nothing more than calling free(3) over and over again.
2006-12-12Kill peer_remove(). This function is only used once so inline it there.Claudio Jeker
OK henning@