Commit Graph

10511 Commits

Author SHA1 Message Date
Mitesh Kanjariya
31310b25f2 bgpd: advertise VNI subnet
In EVPN symmetric routing, not all subnets are presents everywhere.
We have multiple scenarios where a host might not get learned locally.
1. GARP miss
2. SVI down/up
3. Silent host

We need a mechanism to resolve such hosts. In order to achieve this,
we will be advertising a subnet route from a box and that box will help
in resolving the ARP to such hosts.

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2018-01-23 15:58:53 -08: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
a6ad0a4183 bgpd: bgpd crash in update all type2 routes
Ticket: CM-18924
Review: Trivial
Testing: Manual

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2018-01-23 15:58:53 -08:00
Mitesh Kanjariya
3194717445 bgpd: unblock l2vpn evpn for non default vrf
Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2018-01-23 15:58:53 -08:00
Mitesh Kanjariya
e8d26197fa bgpd: vrf/vni mapping command for default instance
Ticket: CM-18906
Review: CCR-6946
Testing: Manual

Signed-off-by: Mitesh Kanjariya <mitesh@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
Quentin Young
a127f33b97
bgpd: fix race condition causing occasional assert
If a BGP message header fails validation we send a BGP NOTIFICATION from
the I/O thread. At this time we clear the output buffer, push a
NOTIFICATION and then call the manual write function for errors. But in
between the push and the write the main thread could have pushed some
other message. Thus we need to hold the lock for the duration of the
function. TOCTTOU.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-01-23 18:51:34 -05:00
Quentin Young
f5fd113cbf
tools: enable stylechecker to handle new files
Since the tool is entirely diff based, it was having some issues diffing
things that didn't exist.

Also made it a bit smarter about ignoring kernel-specific style nits we
don't really care about.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-01-23 17:06:06 -05:00
Olivier Dugeon
139a482cf0 OSPFD: Solve Issue #1652
Issue 1652 was related to OSPF Crash on termination when ospf is
configured to flood self Opaque LSA e.g TE or RI Opaque LSA.

Analysis:
The problem resides in free_opaque_info_per_type() line 576 of
ospf_opaque.c. Once LSA flush, the function removes by calling
listnode_delete() function the opaque_info_per_type data structure.
However, this is also performed at the upper level function
ospf_opaque_type10lsa_term() which call list_delete_and_null() function.
This result into a double free pointer exception.

Solution:
Remove call to listnode_delete() calls in free_opaque_info_per_type()
function as it is done by list_delete_and_null(). Delete lines 592 - 615.
Remove also second call to ospf_opaque_type10lsa_term() in ospfd.c line 848.

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2018-01-23 16:15:58 +01:00
Olivier Dugeon
93f0a26e19 OSPFD: Set Segment Routing patch conform to C99
- Change all u_intXX_t typedef to standard type uintXX_t
 - Correct removal of ZEBRA_OSPF_SR route in ospf_sr.c line 670

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2018-01-23 12:19:50 +01:00
Philippe Guibert
d6fed38109
Merge pull request #1618 from donaldsharp/zebra_startup_ordering
zebra route-leaking for static routes
2018-01-23 08:25:01 +01:00
Chirag Shah
da086a3ba6 ospf6d: spf calculation w/ multiple router lsas
An OSPFv3 enabled Router can originate or receive
multiple Link State-IDs for Router LSAs.
As per RFC 5340 A 4.3, more than one Router LSAs,
from given Vertex is considered (as concatenated)
single large Router LSA.

Created hidden show command to simulate concatenated
large LSA from advertising/self Router LSAs.

Ticket:CM-19329
Reviewed By:
Testing Done:
Simulate 160 subinterfaces between R1 === R2--R3,
This triggers R1 and R2 to generate multiple link state
IDs for Router LSAs. During SPF calculation only aggregated
single router LSA processed and SPF tree formed.

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2018-01-22 17:33:56 -08:00
Donald Sharp
3c19254068 bgpd, lib, pimd: Abstract commands for nexthop tracking
Abstract the code that sends the zapi message into zebra
for the turn on/off of nexthop tracking for a prefix.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-22 19:45:31 -05:00
Donald Sharp
daeda3d7ff pimd: No need to assert on the redist_default
zclient_init sets the redist_default to the appropriate
value, testing it with an assert doesn't really provide
us with much of anything useful.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-22 19:44:52 -05:00
Donald Sharp
09eef679fb lib: Unset bitmap when not using it
The zclient->redist bitmap for vrf's was being set again
for the zclient_send_dereg_requests function.  This should
be a unset on tear down.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-22 19:44:52 -05:00
Donald Sharp
0d9e7f455e lib: Cleanup some zclient clutter.
The zclient code can be cleaned up a tiny bit and hopefully
improve it's indentation some.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-22 19:44:52 -05:00
Quentin Young
5c6580957d
Merge pull request #1655 from LabNConsulting/working/master/consistent_count
bgpd: update last_update whenever obuf sent
2018-01-22 18:53:19 -05:00
Lou Berger
eb2277cf2d bgpd: update last_update whenever obuf sent
(to be consistent with last_write updates)

Signed-off-by: Lou Berger <lberger@labn.net>
2018-01-22 15:19:15 -05:00
Renato Westphal
c1927369d6
Merge pull request #1663 from donaldsharp/mpls
Mpls
2018-01-22 17:43:10 -02:00
Renato Westphal
75869e4ad5
Merge pull request #1656 from ak503/bgp
bgp: small fix for write to 'address-family l2vpn evpn' configuration
2018-01-22 17:03:58 -02:00
Olivier Dugeon
7726c47964 OSPFD: Update Segment Routing following reviews
- Remove OSPD_SR route type
 - Check that Segment Routing is enable only in default VRF
 - Add comment for SRGB in lib/mpls.h
 - Update documentation

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2018-01-22 19:18:10 +01:00
Renato Westphal
f674dfe234 zebra: implement recursive MPLS labels
When a nexthop is resolved via a label based nexthop, copy
the labels into the newly created recursive nexthop.

Please note that this does not fix the case where we
have a label based nexthop that is recursively resolved
through *another* nexthop that is also label based.
In this case we need to create a new label stack
for those routes.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-01-22 11:55:22 -05:00
Donald Sharp
7cf15b2501 zebra: use zclient_create_header
The function zserv_create_header was exactly the same
as zclient_create_header.  Let's just have one in the
system.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-22 11:55:22 -05:00
Donald Sharp
8ecdb26ec0 lib, zebra: Rename and place appropriately the label stack
Fix and rename the label stack to be better named.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-01-22 11:55:22 -05:00
Russ White
8602ad3a4c
Merge pull request #1651 from donaldsharp/redhat_build_fpm
redhat: Build with FPM
2018-01-22 09:16:21 -05:00
Russ White
f8f7e9c634
Merge pull request #1658 from Orange-OpenSource/TE
Doc: Update OSPF-TE and ISIS-TE example
2018-01-22 09:01:39 -05:00
Russ White
4b1e01ba3c
Merge pull request #1587 from pguibert6WIND/issue_385_step23
Netns Support / passing vrf_id_t to 32 bit work
2018-01-22 09:01:01 -05:00
Philippe Guibert
f1abb72c4e zebra: replace 0 value on zebra with NS_DEFAULT
On some places, macro NS_DEFAULT was not used. This commit is replacind
on some identified places where 0 can be replaced with NS_DEFAULT macro.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-01-22 14:58:06 +01:00
Philippe Guibert
90ac32c209 zebra: replace 0 value on zebra with VRF_DEFAULT
On some places of code, the VRF_DEFAULT define was not used. This commit
is ensuring that the macros is well used.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-01-22 14:58:02 +01:00
Philippe Guibert
2fcdb1b2d1 bgpd: bgp_redist_lookup param handles instances, not vrfs
The VRF_DEFAULT parameter is incorrectly used. The 0 value for the bgp
instance is passed instead.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>

fixup bgpd: fix compilation issue with bgpd
2018-01-22 13:52:24 +01:00
Philippe Guibert
87ad28f48c pim: fix compilation issue with pim
The change of vrf_id_t from 16 bit to 32 bit needs some changes in pim
daemon.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-01-22 13:52:24 +01:00
Philippe Guibert
a8bf7d9c9e bgpd: fix compilation issue with bgpd
Changes due to the change of vrf_id_t moved from 16 bits to 32 bits.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-01-22 13:52:24 +01:00
Philippe Guibert
fe3da9e773 ospfd: fix compilation issue with ospfd
the change of vrf_id field from 16 bit to 32 bit leads to some changes
in other daemon.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-01-22 13:52:24 +01:00
Philippe Guibert
3eca551fec lib: ns_id_t changed to 32 bit
Because the VRF_ID is mapped into 32 bit, and because when NETNS will be
the backend of VRF, then the NS identifier must also be encoded as 32
bit.
Also, the NS_UNKNOWN value is changed accordingly to UINT32_MAX.
Also, the NS_UNKNOWN and NS_DEFAULT values are removed from zebra_ns.h
and kept on ns.h header file.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-01-22 13:52:24 +01:00
Philippe Guibert
3bd74754c9 lib: vrf_bitmap_groups increased from 8 to 1024
The number of vrf bitmap groups is increased so as to avoid consuming
too much memory. This fix is related to a fork memory that occured when
running pimd as daemon.
A check on memory consumed shows that the memory consumed goes from
33480ko to 46888ko with that change. This is less compared to if the
value of the bitmap groups is increased to 16 ( 852776ko).

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-01-22 13:52:23 +01:00
Philippe Guibert
a9ff90c41b lib: increase vrf_id from 16 bit to 32 bit identifier
This is a preparatory work for configuring vrf/frr over netns
vrf structure is being changed to 32 bit, and the VRF will have the
possibility to have a backend made up of NETNS.

Let's put some history.
Initially the 32 bit was because one wanted to map on vrf_id both the
VRFLITE and the NSID.
Initially, one would have liked to make zebra configure at the same time
both vrf lite and vrf from netns in a flat way. From the show
running perspective, one would have had both kind of vrfs, thatone
would configure on the same way.
however, it leads to inconsistencies in concepts, because it mixes vrf
vrf with vrf, and vrf is not always mapped with netns.
For instance, logical-router could also be used with netns. In that
case, it would not be possible to map vrf with netns.
There was an other reason why 32 bit is proposed. this is because
some systems handle NSID to 32 bits. As vrf lite exists only on
Linux, there are other systems that would like to use an other vrf
backend than vrf lite. The netns backend for vrf will be used for that
too. for instance, for windows or freebsd, some similar
netns concept exists; so it will be easier to reuse netns
backend for vrf, than reusing vrflite backend for vrf.

This commit is here to extend vrf_id to 32 bits. Following commits in a
second step will help in enable a VRF backend.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-01-22 13:52:17 +01:00
Renato Westphal
c228c75be3
Merge pull request #1661 from donaldsharp/connected
zebra: Install connected routes during VRF change only if interface i…
2018-01-22 09:47:04 -02:00
vivek
4030583f6a zebra: Install connected routes during VRF change only if interface is up
During VRF change handling, the connected route for the interface should be
installed only if the interface is up. Otherwise, we end up with duplicate
connected routes which can lead to other problems.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Don Slice <dslice@cumulusnetworks.com>

Ticket: CM-19364
Reviewed By: CCR-7099
Testing Done: Manual verification
2018-01-21 09:34:15 -05:00
Chirag Shah
2bc7673f11 ospfd: show ip ospf neighbor json output format
Current json output does not differentiate start of
neighbor ip object. Adding "neighbors" keyword at the
beginning of neighbor list. This is useful when
displaying vrf level output along with neighbors
list.

Ticket:CM-19097
Testing Done:
show ip ospf neighbor json
show ip ospf vrf all neighbor json

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2018-01-20 19:30:59 -08:00
Quentin Young
fd8100976e
doc: set 'release' and 'version' again
accidentally removed in older commit

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-01-19 17:24:48 -05:00
Quentin Young
f381786082
doc: move routeserver.rst into bgp.rst
This is an incomplete stub of a chapter and goes under BGP docs anyway.
Also fix an include statement for RPKI.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-01-19 17:09:03 -05:00
Quentin Young
44f2550ef3
doc: clean up overview.rst, installation.rst
Just reading through the docs and fixing bugs as I go.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-01-19 17:05:13 -05:00
Quentin Young
dc1046f726
doc: Frr -> FRR
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-01-19 17:05:13 -05:00
Quentin Young
be46d28847
doc: use RST variable substitutions
In conf.py, extract & construct values for inline variables throughout
the docs. In the docs, use these inline variables in RST syntax.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-01-19 17:05:08 -05:00
Olivier Dugeon
4ff9eb721d
Merge pull request #1647 from chiragshah6/ospf_vrf_dev
ospfd: show ip ospf interface json output format
2018-01-19 17:40:14 +01:00
Olivier Dugeon
ee65c55e2a Doc: Update OSPF-TE and ISIS-TE example
- In ospfd and isisd documentation, Traffic Engineering examples
are referring to old interface syntax. Update both examples to
'link-param' syntax.

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2018-01-19 16:27:26 +01:00
Olivier Dugeon
fd3b19f252 OSPFD: Update Segment Routing implementation
- ospf_ext.c: Correct deferred pointer raised by valgrind
 - ospf_sr.c: Correct deffered pointer raised by valgrind. Modify
Segment Routing shutdown. This is due to the fact that RI LSA
4.0.0.0 is flush prior to 7.0.0.X & 8.0.0.X LSA. This trigger
SR-Node deletion which also remove all Extended Link / Prefix
leaving them unavailable when there are referenced by 7.0.0.X
& 8.0.0.X LSA flushing.
 - doc/OSPF-SR.rst: Correct Restructured Text syntax and add
Configuration example as well as Credit section

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2018-01-19 15:04:41 +01:00
Donald Sharp
00711784cb
Merge pull request #1630 from LabNConsulting/working/master/pr1629-no-json
bgpd: fix reporting of no vpn routes (no json)
2018-01-19 07:59:34 -05:00
dturlupov
7bcc8dac13 bgp: small fix for write to 'address-family l2vpn evpn' configuration 2018-01-19 10:53:32 +03:00
Olivier Dugeon
cf9b9f77f6 OSPFD: Add Experimental Segment Routing support
This is an implementation of draft-ietf-ospf-segment-routing-extensions-24
and RFC7684 for Extended Link & Prefix Opaque LSA.
Look to doc/OSPF_SR.rst for implementation details & known limitations.

New files:

 - ospfd/ospf_sr.h: Segment Routing structure definition (SubTLVs + SRDB)
 - ospfd/ospf_sr.c: Main functions for Segment Routing support
 - ospfd/ospf_ext.h: TLVs and SubTLVs definition for RFC7684
 - ospfd/ospf_ext.c: RFC7684 Extended Link / Prefix implementation
 - doc/OSPF-SRr.rst: Documentation

Modified Files:

 - doc/ospfd.texi: Add new Segment Routing CLI command definition
 - lib/command.h: Add new string command for Segment Routing CLI
 - lib/mpls.h: Add default value for SRGB
 - lib/route_types.txt: Add new OSPF Segment Routing route type
 - ospfd/ospf_dump.[c,h]: Add OSPF SR debug
 - ospfd/ospf_memory.[c,h]: Add new Segment Routing memory type
 - ospfd/ospf_opaque.[c,h]: Add ospf_sr_init() starting function
 - ospfd/ospf_ri.c: Add new functions to Set/Get Segment Routing TLVs
Add new ospf_router_info_lsa_upadte() to send Opaque LSA to ospf_sr.c()
 - ospfd/ospf_ri.h: Add new Router Information SR SubTLVs
 - ospfd/ospf_spf.c: Add new scheduler when running SPF to trigger
update of NHLFE
 - ospfd/ospfd.h: Add new thread for Segment Routing scheduler
 - ospfd/subdir.am: Add new files
 - vtysh/Makefile.am: Add new ospf_sr.c file for vtysh
 - zebra/kernel_netlink.c: Add new OSPF_SR route type
 - zebra/rt_netlink.[c,h]: Add new OSPF_SR route type
 - zebra/zebra_mpls.h: Add new OSPF_SR route type

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2018-01-18 19:11:11 +01:00