Commit Graph

251 Commits

Author SHA1 Message Date
paco
e8a3a0a030
bgpd: null check (Coverity 23106)
Signed-off-by: F. Aragon <paco@voltanet.io>
2018-06-21 15:58:51 +02:00
Donald Sharp
3b7268448f
Merge pull request #2259 from ppmathis/enhancement/peer-enforce-first-as
bgpd: Move 'enforce-first-as' from global to peer
2018-06-04 09:35:00 -04:00
Philippe Guibert
404c82d569 bgpd: attributes presence checked when mpreach is present
On the case where an mp_unreach attribute is received, while there is no
mp_reach attribute too, it is not necessary to check for missing
attributes.

Fixes: 67495ddb2e ("bgpd: Fixes for recent well-known-attr check patch.")
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-05-25 15:49:38 +02:00
Pascal Mathis
47cbc09b63
bgpd: Move 'enforce-first-as' from global to peer
This commit moves the command 'bgp enforce-first-as' from global BGP
instance configuration to peer/neighbor configuration, which can now be
changed by executing '[no] neighbor <neighbor> enforce-first-as'.

End users can now enforce sane first-AS checking on regular sessions
while e.g. disabling the checks on routeserver sessions, which usually
strip away their own AS number from the path.

To ensure backwards-compatibility, a migration routine was added which
automatically sets the 'enforce-first-as' flag on all configured
neighbors if the old global setting was activated. The old global
command immediately disappears after running the migration routine once.

Signed-off-by: Pascal Mathis <mail@pascalmathis.com>
2018-05-19 14:43:42 +02:00
Donald Sharp
30adbd4e4f bgpd: Handle multiple PREFIX_SID's at a time.
Handle multiple PREFIX_SID's at the same time.  The draft clearly
states that multiple should be handled and we have a actual pcap
file that clearly has multiple PREFIX_SID's at the same time.

Fixes: #2153
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-05-02 18:48:58 -04:00
Donald Sharp
13b7e7f007 bgpd: Prevent vrf 2 vrf route leaking from going offbox.
The vrf 2 vrf route leaking auto-derives RD and RT and
installs the routes into the appropriate vpn table.
These routes when a operator configured ipv[4|6] vpn
neighbors were showing up off box.  The RD and RT
values choosen are localy significant but globaly
useless and may cause confusion.

Put a special bit of code in to notice that we
should not be advertising these routes off box.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-25 12:41:17 -04:00
vivek
77e62f2b5a bgpd: Handle connected routes and IPv6 link-local nexthops for route leaking
Connected routes redistributed into BGP as well as IPv4 routes with IPv6
link-local next hops (RFC 5549) need information about the associated
interface in BGP if they are candidates to be leaked into another VRF. In
the absence of route leaking, this was not necessary. Introduce the
appropriate mechanism and ensure this is used during route install (in
the target VRF).

Ticket: CM-20343, CM-20382
Testing done:
1. Manually verified failed scenarios and some additional ones - logs
in the tickets.
2. Ran bgp-min and evpn-min - results are good.
3. Ran vrf smoke - has some failures, but none which look new

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2018-04-25 12:39:16 -04:00
Donald Sharp
23a2a47eca bgpd: Add some additional attribute information to dump
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-23 19:17:18 -04:00
Philippe Guibert
a83da8e19c bgpd: mp_unreach_nlri fs sent with no nexthop
FS UNREACH message with 0 NLRI inside is sent after each peer
establishment. FS can send NLRI messages with no nexthop.
The commit fixes a message that is triggered by mistake
if FS was about to be sent, then that message is not output.
Also it fixes a typo.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-03-30 14:01:06 +02:00
jaydom
7c40bf391c bgpd: add flowspec feature
This work is derived from a work done by China-Telecom.
That initial work can be found in [0].
As the gap between frr and quagga is important, a reworks has been
done in the meantime.
The initial work consists of bringing the following:
- Bringing the client side of flowspec.
- the enhancement of address-family ipv4/ipv6 flowspec
- partial data path handling at reception has been prepared
- the support for ipv4 flowspec or ipv6 flowspec in BGP open messages,
  and the internals of BGP has been done.
- the memory contexts necessary for flowspec has been provisioned

In addition to this work, the following has been done:
- the complement of adaptation for FS safi in bgp code
- the code checkstyle has been reworked so as to match frr checkstyle
- the processing of IPv6 FS NLRI is prevented
- the processing of FS NLRI is stopped ( temporary)

[0] https://github.com/chinatelecom-sdn-group/quagga_flowspec/

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Signed-off-by: jaydom <chinatelecom-sdn-group@github.com>
2018-03-30 14:00:47 +02:00
Quentin Young
d7c0a89a3a
*: use C99 standard fixed-width integer types
The following types are nonstandard:
- u_char
- u_short
- u_int
- u_long
- u_int8_t
- u_int16_t
- u_int32_t

Replace them with the C99 standard types:
- uint8_t
- unsigned short
- unsigned int
- unsigned long
- uint8_t
- uint16_t
- uint32_t

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-27 15:13:34 -04:00
vivek
7d39cd191c Merge branch 'master' of https://github.com/frrouting/frr into pmsi-parse-display
Conflicts:
	bgpd/bgp_attr.c
2018-03-10 04:14:17 +00:00
Lou Berger
30d85a3090 bgpd: another change to keep indent.py happy
Signed-off-by: Lou Berger <lberger@labn.net>
2018-03-06 14:10:38 -05:00
Lou Berger
996c93142d *: conform with COMMUNITY.md formatting rules, via 'make indent'
Signed-off-by: Lou Berger <lberger@labn.net>
2018-03-06 14:04:32 -05:00
vivek
052ea98b43 bgpd: Fix warnings
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2018-03-04 06:56:19 +00:00
vivek
7fd077aadd bgpd: Parse PMSI Tunnel Attribute and display
Received PMSI tunnel attributes (in EVPN type-3 route) were not recognized.
Parse them and display the tunnel type when looking at routes. Note that
the only tunnel type currently supported is ingress replication (IR). A
warning message will be logged if the received tunnel type is something
else, but the attribute is otherwise ignored.

Updates: a21bd7a (bgpd: add PMSI_TUNNEL_ATTRIBUTE to EVPN IMET routes)
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2018-03-04 03:28:50 +00:00
Mitesh Kanjariya
b57ba6d2a8 bgpd: carry two MPLS labels in EVPN NLRIs
When doing symmetric routing,
EVPN type-2 (MACIP) routes need to be advertised with two labels (VNIs)
the first being the L2 VNI (identifying the VLAN) and
the second being the L3 VNI (identifying the VRF).
The receive processing needs to handle one or two labels too.

Ticket: CM-18489
Review: CCR-6949
Testing: manual and bgp/evpn/mpls smoke

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2018-01-23 15:58:53 -08:00
Mitesh Kanjariya
ead40654de bgpd/zebra/lib: Add Default Gateway extended community
1. Added default gw extended community
2. code modification to handle sticky-mac/default-gw-mac as they go together
3. show command support for newly added extended community
4. State in zebra to reflect if a mac/neigh is default gateway
5. show command enhancement to refelect the same in zebra commands

Ticket: CM-17428
Review: CCR-6580
Testing: Manual

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2018-01-23 15:58:53 -08:00
Mitesh Kanjariya
9bb77a5b3d
Merge branch 'master' into evpn-symmetric-routing 2018-01-11 09:00:23 -08:00
Dario Wiesner
a21bd7a3b9 bgpd: add PMSI_TUNNEL_ATTRIBUTE to EVPN IMET routes
Signed-off-by: Dario Wiesner <dario.wiesner@gmail.com>
2018-01-04 13:51:15 +01:00
Mitesh Kanjariya
bc59a6720c bgpd: rmac ext comm
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-12-14 10:57:05 -08:00
Lou Berger
0d0268a6ba bgpd: minor performance enhancement
Signed-off-by: Lou Berger <lberger@labn.net>
2017-12-14 08:32:50 -05:00
Martin Winter
176b305080 bgpd: bgp_attr.c GCC 7.0 with --werror needs explicit fall-thru comment
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
2017-12-05 00:30:13 -08:00
Quentin Young
2d34fb80b8
*: don't use deprecated stream.h macros
Some of the deprecated stream.h macros see such little use that we may
as well just remove them and use the non-deprecated macros.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-12-01 13:51:06 -05:00
Quentin Young
424ab01d0f
bgpd: implement buffered reads
* Move and modify all network input related code to bgp_io.c
* Add a real input buffer to `struct peer`
* Move connection initialization to its own thread.c task instead of
  piggybacking off of bgp_read()
* Tons of little fixups

Primary changes are in bgp_packet.[ch], bgp_io.[ch], bgp_fsm.[ch].
Changes made elsewhere are almost exclusively refactoring peer->ibuf to
peer->curr since peer->ibuf is now the true FIFO packet input buffer
while peer->curr represents the packet currently being processed by the
main pthread.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-11-30 16:17:59 -05:00
Donald Sharp
f46d8e1ed0 bgpd: Free up changes to attr that the speculative route-map applied
So we have the ability to apply speculative route-maps to
neighbor display to see what the changes would look like
via some show commands.  When we do this we make a
shallow copy of the attr data structure and then pass
it around for applying the routemap.  After we've applied
this route-map and displayed it we really need to clean
up memory that the route-map application applied.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-11-27 08:21:56 -05: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
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
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
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
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
Vincent JARDIN
e4002056b8 bgpd: fix clang warning
stlv_last is initialized with the loops. No need to reset it.
Its scope is local to the use with the loops.

Signed-off-by: Vincent Jardin <vincent.jardin@6wind.com>
2017-10-09 01:22:02 +02:00
David Lamparter
dbbac180c1 bgpd: add comment on bgp_attr_intern
This is confusing enough to warrant a comment.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-09-07 15:29:32 +02:00
David Lamparter
821127e041 bgpd: remove transit_dup() & cluster_dup()
These are now unused.  route-maps can't modify these attributes, so
there is no need for _dup functions.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-09-07 15:29:32 +02:00
David Lamparter
b4cb15c667 bgpd: rip out bgp_attr_deep_dup(), fix table-map
bgp_attr_deep_dup is based on a misunderstanding of how route-maps work.
They never change actual data, just pointers & fields in "struct attr".
The correct thing to do is copy struct attr and call bgp_attr_flush()
afterwards.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-09-07 15:19:06 +02:00
David Lamparter
7c87afac92 bgpd: kill bgp_attr_refcount()
This attempt at optimization has cost us more than a week's worth of
time on several people hunting down the subtle bug that it was missing
an increment on attr->lcommunity.

This is absolutely not worth the maintenance cost.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-09-07 14:56:08 +02:00
Donald Sharp
3f65c5b1f7 bgpd: Add various hash optimizations
1) Add hash names to all hash_create calls

2) Fix community_hash, ecommunity_hash and lcommunity_hash key
creation

3) Fix output of community and lcommunity iterators( why would
we want to see the memory location of the backet? ).

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-09-05 14:33:06 -04:00
Renato Westphal
5ba345ccb2 Merge pull request #1047 from dwalton76/bgpd-draft-ietf-grow-bgp-gshut-10
bgpd: implement draft-ietf-grow-bgp-gshut-10
2017-09-05 10:20:49 -03:00
Nigel Kukard
79dab4b7f4 bgpd: Cleaned up the lcom->size * LCOMMUNITY_SIZE with lcom_length()
Signed-off-by: Nigel Kukard <nkukard@lbsd.net>
2017-08-31 23:39:53 +00:00
Nigel Kukard
8ea01902d2 bgpd: The large community size is easier to read if its using the constant
Signed-off-by: Nigel Kukard <nkukard@lbsd.net>
2017-08-31 23:39:53 +00:00
Daniel Walton
7f32323620 bgpd: implement draft-ietf-grow-bgp-gshut-10
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2017-08-25 18:27:49 +00:00
vivek
ce78a6fbbe bgpd: Fix nexthop for labeled-unicast
A prior change broke the nexthop setting for labeled-unicast
address-family in a RFC-5549 scenario (IPv4 prefixes exchanged
with IPv6 next hops). This commit fixes the issue.

Fixes: "bgpd: Fix next hop setting for EVPN"
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2017-08-08 10:09:36 -04:00
Jorge Boncompte
5ddb31a1ff bgpd: remove bogus change in attrhash_key_make()
Commit c8e7b895 ("bgpd: use Jenkins hash for BGP transit, cluster and
attr hashes") changed attrhash_key_make() to use Jenkins hash, commit
c8f3fe30 ("bgpd: Remove AS Path limit/TTL functionality") introduced
a bogus change with a snippet of code that was deleted in the first
one.

Signed-off-by: Jorge Boncompte <jbonor@gmail.com>
2017-08-04 19:33:15 +02:00
Renato Westphal
5c5255381e lib/bgpd: introduce the iana_safi_t enum
We had afi_t/iana_afi_t for AFIs but only safi_t for SAFIs. Fix this
inconsistency.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-07-31 23:44:42 -03:00
Lou Berger
2f5078856e bgpd rfapi: fix breakage introduced in refactoring
Signed-off-by: Lou Berger <lberger@labn.net>
2017-07-27 13:15:47 -04:00
David Lamparter
9d303b37d7 Revert "*: reindent pt. 2"
This reverts commit c14777c6bf.

clang 5 is not widely available enough for people to indent with.  This
is particularly problematic when rebasing/adjusting branches.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-22 14:52:33 +02:00
whitespace / reindent
c14777c6bf
*: reindent pt. 2
w/ clang 5

* reflow comments
* struct members go 1 per line
* binpack algo was adjusted
2017-07-17 15:26:02 -04:00
whitespace / reindent
d62a17aede *: reindent
indent.py `git ls-files | pcregrep '\.[ch]$' | pcregrep -v '^(ldpd|babeld|nhrpd)/'`

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-17 14:04:07 +02:00
Donald Sharp
1ea6b3f237 Merge remote-tracking branch 'origin/master' into evpn_plus_struct_attr 2017-07-14 08:24:46 -04:00