Commit Graph

2056 Commits

Author SHA1 Message Date
Renato Westphal
2ebee1aac1
Merge pull request #1411 from donaldsharp/stream_updates
Stream updates
2017-11-14 13:15:08 -02:00
Marcel Röthke
08f9cfb841 bgpd: add missing newlines to help strings in bgp_rpki.c command definitions
Signed-off-by: Marcel Röthke <marcel.roethke@haw-hamburg.de>
2017-11-14 09:58:09 +01:00
Marcel Röthke
a220aec6ce bgpd: fix prefix count in show rpki prefix-table
Signed-off-by: Marcel Röthke <marcel.roethke@haw-hamburg.de>
2017-11-14 09:58:09 +01:00
Marcel Röthke
b4cba74f74 bgpd: fix race condition in build system regarding bgp_rpki_clippy.c
Signed-off-by: Marcel Röthke <marcel.roethke@haw-hamburg.de>
2017-11-14 09:58:09 +01:00
Donald Sharp
f49e0f01ba bgpd, zebra: Flags should be 0 for unregister
The flags value is not used for unregister events.  Let's purposefully
not send anything and purposefully not accept non 0 for it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-13 19:06:26 -05:00
Donald Sharp
e0b84ba1f6 bgpd, zebra: Ensure that passed flags is 0 for unregister event
The flags passed in should be 0 for an unregister event.  Ensure
that we respect that.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-13 14:30:17 -05:00
Marcel Röthke
acd4a9f410 bgpd: fix build against rtrlib versions without ssh support
Signed-off-by: Marcel Röthke <marcel.roethke@haw-hamburg.de>
2017-11-13 15:50:50 +01:00
Marcel Röthke
dabecd7c63 bgpd: Add RPKI/RTR support
This commit adds support for the RTR protocol to receive ROA
information from a RPKI cache server. That information can than be used
to validate the BGP origin AS of IP prefixes.
Both features are implemented using [rtrlib](http://rtrlib.realmv6.org/).

Signed-off-by: Marcel Röthke <marcel.roethke@haw-hamburg.de>
2017-11-10 14:37:52 +01:00
Donald Sharp
ccd2b0e6ce
Merge pull request #1391 from LabNConsulting/working/master/patch-set/vnc-vrf-export
Support vrf export/import based on vrf-policy
2017-11-09 08:53:24 -05:00
Lou Berger
e1541bf66e bgpd: fun with whitespace conventions
Signed-off-by: Lou Berger <lberger@labn.net>
2017-11-07 12:05:09 -05:00
Lou Berger
714e4cfa06 bgpd: rfapi - fix error output
Signed-off-by: Lou Berger <lberger@labn.net>
2017-11-07 12:04:44 -05:00
Lou Berger
7f88f54a83 bgpd: rfapi - don't do debug related work when debug not
enabled and other minor tweaks

Signed-off-by: Lou Berger <lberger@labn.net>
2017-11-07 11:42:41 -05:00
Lou Berger
9d6a46aa1e bgpd: rfapi - open rfd for vrf groups on export config,
keep open until group deleted

Signed-off-by: Lou Berger <lberger@labn.net>
2017-11-07 11:42:22 -05:00
Quentin Young
dacffad461
bgpd: fix mishandled attribute length
A crafted BGP UPDATE with a malformed path attribute length field causes
bgpd to dump up to 65535 bytes of application memory and send it as the
data field in a BGP NOTIFY message, which is truncated to 4075 bytes
after accounting for protocol headers. After reading a malformed length
field, a NOTIFY is generated that is supposed to contain the problematic
data, but the malformed length field is inadvertently used to compute
how much data we send.

CVE-2017-15865

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-11-06 18:38:05 -05:00
Renato Westphal
965a99f58a
Merge pull request #1406 from donaldsharp/bgpd_ecommunity_crash
bgpd: Fix crash with ecommunity string
2017-11-06 15:08:07 -02:00
Renato Westphal
f498ca82bd
Merge pull request #1370 from dslicenc/cm18408-bgp-timers
bgpd: fix various problems with hold/keepalive timers
2017-11-06 14:06:12 -02:00
Donald Sharp
d2b6417bd6 bgpd: Prevent infinite loop when reading capabilities
If the user has configured the ability to override
the capabilities or if the afi/safi passed as part
of the _MP capability is not understood, then we
can enter into an infinite loop as part of the
capability parsing.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-06 10:38:05 -05:00
Donald Sharp
edf344ebff bgpd: Fix crash with ecommunity string
When we are displaying a extended community ECOMMUNITY_SITE_ORIGIN
the display sprintf is this:

len = sprintf(
	str_buf + str_pnt,
	"EVPN:%02x:%02x:%02x:%02x:%02x:%02x",
	macaddr[0], macaddr[1], macaddr[2],
	macaddr[3], macaddr[4], macaddr[5]);

The problem with this is that macaddr[0] is passed in as a integer
so the sprintf function thinks that the value to display is much
larger than it actually is.  The ECOMMUNITY_STR_DEFAULT_LEN is 27
So the resulting string no-longer fits in memory and we write
off the end of the buffer and can crash.  If we force the
passed in value to be a uint8_t then we get the expected output
since a single byte is displayed as 2 hex characters and the
resulting string fits in str_buf.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-06 10:34:51 -05:00
Don Slice
da9dbc3491 bgpd: default originate issue with intf peers and global intf address
Problem reported that a receiver of a default route issued across bgp
unnumbered peering using default originate would have the route stay
as inactive.  Discovered we were messing up the nexthop value sent to
the peer in this one particular case.  Manual testing good, fix supplied
to the submitter and verified to resolve the problem.  bgp-smoke
completed successfully.

Ticket: CM-18634
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-03 16:58:46 +00:00
Russ White
b8c962aa6e
Merge pull request #1367 from donaldsharp/mp_reach_parse
bgpd: Treat empty reachable NLRI as a EOR
2017-10-31 20:23:32 -04:00
Lou Berger
4053d45064
Merge pull request #1336 from donaldsharp/peer_name
Peer name
2017-10-31 11:40:44 -04:00
Lou Berger
4068233176
Merge pull request #1371 from donaldsharp/bgp_exit
bgpd: exit on socket bind failures
2017-10-31 11:39:25 -04:00
Lou Berger
02a82b47b3 bgpd: allow for vpn->vrf imports
ignore nexthop checks for RFAPI imported routes (as is self)
      note: NHT is still updated

Signed-off-by: Lou Berger <lberger@labn.net>
2017-10-31 11:06:17 -04:00
Lou Berger
d477c01df7 bgpd: rfapi support import based on vrf-policy (precusor to import to vrf instance)
Signed-off-by: Lou Berger <lberger@labn.net>
2017-10-31 11:06:17 -04:00
Lou Berger
05d58af09c bgpd: vrf-policy add prefix lists and route-maps on export
Signed-off-by: Lou Berger <lberger@labn.net>
2017-10-31 11:06:17 -04:00
Lou Berger
e1af3f16b1 bgpd: add afi/safi to debug output
Signed-off-by: Lou Berger <lberger@labn.net>
2017-10-31 11:06:17 -04:00
Lou Berger
b6453163d5 bgpd: set v4 next hop for VPN SAFI for consistency in processing
Signed-off-by: Lou Berger <lberger@labn.net>
2017-10-31 11:06:17 -04:00
Lou Berger
820e1d547b
Merge pull request #1366 from donaldsharp/bgp_non_integrated_zebra_redistribution
Bgp non integrated zebra redistribution
2017-10-31 10:53:59 -04:00
Donald Sharp
66f80d74d6 bgpd: Cleanup some json output in bgp_route.c
Cleanup the displayed json output to be a bit prettier
to look at.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-27 11:32:17 -04:00
Donald Sharp
b3b78f6e62 bgpd: exit on socket bind failures
When we fail to bind to port 179 we are left in a situation
where we have not saved the bgp pointer created and when
the bgp cli mode is exited we leak the memory.

Additionally there is no recovery situation here that
could be easily programmed without fundamentally changing
the code.

So let's exit and output to the log file some useful
information to hopefully clue the user in on what is
going wrong.

Fixes: #1130
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-26 14:11:46 -04:00
Don Slice
d25e4efc52 bgpd: fix various problems with hold/keepalive timers
Problem reported that we weren't adjusting the keepalive timer
correctly when we negotiated a lower hold time learned from a
peer.  While working on this, found we didn't do inheritance
correctly at all.  This fix solves the first problem and also
ensures that the timers are configured correctly based on this
priority order - peer defined > peer-group defined > global config.
This fix also displays the timers as "configured" regardless of
which of the three locations above is used.

Ticket: CM-18408
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: CCR-6807
Testing-performed:  Manual testing successful, fix tested by
submitter, bgp-smoke completed successfully
2017-10-26 11:55:31 -04:00
Donald Sharp
9b9df9892d bgpd: Treat empty reachable NLRI as a EOR
This issue was discovered on a live session with an extremely
old cisco 7206VXR router running 12.2(33)SRE4.  The sending router
is sending us an empty NLRI that is MP_REACH.  From RFC
exploration(thanks Russ!) it appears that this was
considered a 'valid' way to send EOR.

Following discussion decided that we should treat
this situation as a EOR marker instead of bringing
down the session.

Applying this fix on the FRR router seeing this issue
allows it to continue it's peering relationship with
the ASR.  Since this is a point fix I do not see
a high likelihood of further fallout.

Fixes: #1258
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-26 07:31:17 -04:00
Donald Sharp
ea12cf1125 bgpd: When not fully connected to zebra gracefully ignore the issue
When bgp is coming up and is reading a non-integrated config.
The bgp connection to zebra has not fully had a chance to start.
As such when a redistribute line is parsed the attempt is
made to install it but it was erroring out with a warning.
This caused the `redistribute XXX` line to create a error
message to the end user.

Since bgp calls zclient_send_reg_requests which re-registers
the redistribute call once the actual zebra connection is up
and once bgp comes alive this is ok.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-25 22:38:50 -04:00
Donald Sharp
7aacfd1b46 bgpd: Allow 'match peer' for all route-map types
There are multiple places that we use route-maps in bgp
There is no need to limit the route-map 'match peer ...' command
to just import and export route-map types.  I see need for
using this in table-maps as well.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-25 09:24:53 -04:00
Donald Sharp
7d4aea3007 bgpd: Allow route-map match peer... to have auto-complete
The match peer command doees not currently have an auto-complete
ability.  Let's add it in.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-25 09:24:53 -04:00
Donald Sharp
8c3433e490 bgpd: Allow peer interface name to match
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-25 09:24:53 -04:00
Renato Westphal
cbb65f5ef5 *: fix coverity warnings - error handling issues
Ignore the return value of some functions in the places we know they
can't fail, and other small fixes.

Regarding the change in bgpd/rfapi/rfapi_rib.c, asserting that
rfapiRaddr2Qprefix() didn't fail is the common idiom inside the rfapi
code.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-24 19:30:30 -02:00
Renato Westphal
44f12f209f *: fix coverity warnings - resource leaks
These are mostly trivial fixes for leaks in the error path of some functions.

The changes in bgpd/bgp_mpath.c deserves a bit of explanation though. In
the bgp_info_mpath_aggregate_update() function, we were allocating memory
for the lcomm variable but doing nothing with it. Since the code for
communities, extended communities and large communities is pretty much
the same in this function, it's clear that this was a copy and paste
error where most of the ext. community code was copied but not all of
it as it should have been.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-24 19:30:30 -02:00
Renato Westphal
efd7904eab *: add missing \n in some help strings
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-10-24 19:30:30 -02:00
Lou Berger
47473bbbc7 Merge pull request #1346 from donaldsharp/apply_routemap
bgpd: Note routemap information even if peer not activated.
2017-10-24 11:46:32 -04:00
Lou Berger
0f1fe4ff22 Merge pull request #1337 from donaldsharp/debug_nht_bgp
bgpd: Allow turn off of 'debug bgp nht' from 'no debug bgp'
2017-10-24 11:13:12 -04:00
Donald Sharp
afb6d3f5c1 bgpd: Use stored ifindex for zebra_announce
In some situations we already know the ifp and by extension
the ifindex there is no need to look it up for every
route we send to zebra.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-23 18:12:33 -04:00
Donald Sharp
342213eac0 *: Modify zclient_init to require privs data
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-23 18:12:29 -04:00
Rafael Zalamena
48522088d9 bgpd: bump listen() backlog
Handle better stress situations when multiple peers are trying to
connect at the same time by bumping the TCP connection backlog limit.

This reduces the convergence time of BGPerf stress test.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2017-10-20 19:29:07 -02:00
Donald Sharp
b9269f8282 bgpd: Note routemap information even if peer not activated.
If upon bgp startup we have this config:

router bgp 64540
 neighbor 192.168.201.134 remote-as external
 !
 address-family ipv4 unicast
  no neighbor 192.168.201.134 activate
  neighbor 192.168.201.134 route-map NEXTHOP in
 exit-address-family

The route-map map pointer for the incoming(or outgoing)
filter was not being saved due to a pre-mature optimization
of not handling the routemap callback if the peer is not
activated.  The function that handles the peers route-maps
is making sure that the peer is in established state
before attempting to actually apply anything so just
call it to set the map pointer.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-20 09:56:12 -04:00
Renato Westphal
1ee00041a3 Merge pull request #1272 from donaldsharp/peer_group_ordering
bgpd: Fix peer group copying of data for late activation
2017-10-18 23:12:31 -02:00
Donald Sharp
f57514e10e bgpd: Fix 'not initialized' possibly on older compilers
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-18 18:39:04 -04:00
Donald Sharp
12f7047895 bgpd: Fix off by one error introduced by 8c9cc7bbf6
Commit 8c9cc7bbf6 changed the size
of the `struct bgp_attr_encap_subtlv` type to be a zero length
array at the end instead of having a 1 byte.  All memory allocations
for this subsuquently were off by 1 byte since those were not
adjusted either.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-18 18:37:38 -04:00
Donald Sharp
c33b83b359 bgpd: Allow turn off of 'debug bgp nht' from 'no debug bgp'
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-18 14:49:59 -04:00
Donald Sharp
86a55b996a bgpd: Display unsigned ints
We are storing data as an unsigned int and we should not
display it as a signed number.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-10-17 20:57:40 -04:00