Commit Graph

10695 Commits

Author SHA1 Message Date
Chirag Shah
78c6ba61db ospf6d: assign zebra router-id to ospf6 instance
Store zebra router-id in global structure.
Before router ospf6 instance created,
zebra router-id callback called.

During ospf6 main execution zebra init happens,
but default instance does not execute until
cli replay 'router ospf6'.
Call ospf6_router_id_change during 'router ospf6'
to assign zebra router id to ospf6 instance.

Ticket:CM-19937
Testing Done:
Assign Loopback /32 (6.6.6.6/32) address,
restart frr with (router ospf6 in frr.conf).
ospf6 default instance assigned 6.6.6.6 router-id.

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2018-03-01 14:19:15 -08:00
Quentin Young
aea03ad6e8
lib: add mt-safe debugging facilities
The current strategy for fine-grained debugging across FRR is to use
static long int bitfields, in combination with helper macros that are
copy-pasted between daemons, to hold state on what debugging information
should be collected at any given time. This has a couple of problems:

* These bitfields are generally extern'd and accessed everywhere, so
  they are not MT-safe or easy to make MT-safe
* Lots of code duplication from copy-pasting the DEBUG_* macros...
* Code duplication because of the "term" vs "conf" debugging concept

This patch aims to remedy that by providing some infrastructure to work
with debugs. The core concept of using bitfields has been retained, but
the number of these for each debug has been reduced to 1. This allows
easy use of lock-free methods for synchronizing access to debugging
info.

The helper macros have also been retained but they are now collected in
one place and perform exclusively atomic operations.

Finally there is a bit of code that allows daemons to register
callbacks, which I used to implement a command that will toggle all
debugging for any daemons that use these facilities.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-01 15:01:25 -05:00
vivek
558283638b lib, zebra: Fix warnings
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2018-03-01 19:50:46 +00:00
Quentin Young
dc64bdec91
bgpd: fix update-group show commands
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-01 13:46:40 -05:00
Quentin Young
0f2ac0c5ba
doc: s/environment/make
Error message for missing sphinx-build wasn't clear enough when
explaining how to change the path to the sphinx-build binary as it said
'environment variable' instead of 'make variable'

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-01 11:53:16 -05:00
Quentin Young
6caf40e7b2
debianpkg: include mtracebis.8
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-01 11:38:34 -05:00
Quentin Young
a975744835
Merge branch 'master' into docuser
* New manpage: mtracebis.rst
* Makefile.am includes mtracebis.rst
* configure.ac lines removed
* Debian packaging files updated
* Fixed up manpage |seealso-programs| in the process
* Centos7 build package list updated to include systemd-devel
* New paragraph on netns vrf support in zebra manpage

Conflicts:
	configure.ac
	debianpkg/backports/ubuntu14.04/debian/frr.install
	debianpkg/frr.install
	doc/Makefile.am
	doc/developer/Building_FRR_on_CentOS7.rst
	doc/zebra.8.in

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-01 11:10:01 -05:00
Chirag Shah
07b37f93a7 ospf6d: ECMP for external routes
The route being added check its origin matches,
with any of the existing path (list of paths).
Remove the existing path, add if its cost is
eqaual or less than any of the existing path.

For a given route and of existing path cost is lower
(better) than one being added, discard new route update.

The existing path cost is higher (lower) than one being
added, ospf6_route_add replaces existing with new route
info.

Compare cost between delete request and with existing
route.

Ticket:CM-16139

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2018-03-01 07:47:17 -08:00
Quentin Young
351c56649b
debianpkg: disable pdf build by default
Causes build issues on a certain 7 year old platform with a severely out
of date sphinx package, requires a full texinfo distribution to build a
package and nobody reads book-style manuals in 2018 anyway, its all
about the web docs...

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-03-01 10:20:36 -05:00
Martin Winter
3b7c7293ee
doc: Create infodir before writing to it and prefix with DESTDIR
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
2018-03-01 10:09:52 -05:00
Donald Sharp
05dd5aaf02 lib, zebra: Add type and instance to nexthop update message
Add the originating routes type and instance to the nexthop
update message.  This is necessary because there exist
scenarios where BGP needs to make a decision about the
originating route type and instance to know if it is
going to be doing a route replace to a route that would
resolve to itself.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-28 19:22:47 -05:00
Martin Winter
c98f4d81aa
Merge pull request #1784 from donaldsharp/documentation
FRR: Update Community.md to reflect release process
2018-02-28 16:22:27 -08:00
Donald Sharp
f56ee10fc7 ospfd: Add vrf to nhlfe route add
So when a ospf SR is sending down routes to the kernel
ensure that the nexthop vrf_id is set appropriately.
Yes SR is in the default VRF.  But for people who
run across this code in the future, they will know
to do the right thing from it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-28 19:16:51 -05:00
Donald Sharp
1374aec98f bgpd: Cleanup api_nh in bgpd a bit
The api_nh was being figured 2 times, also refactor
the vrf_id placement as well.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>:
2018-02-28 19:10:02 -05:00
Donald Sharp
c7bacffe46 zebra: Use the passed in nexthops vrf
When decoding and creating the appropriate data structures
for a nexthop, use the passed in vrf.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-28 18:55:10 -05:00
Donald Sharp
4ca997a8f8 lib: Use STREAM_GET
The addition of some rmac code snuck in the usage of a
stream_get instead of a STREAM_GET()

We need to be using STREAM_GET()

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-02-28 18:53:44 -05:00
Quentin Young
f765d422d1
lib: add atomic bitwise OR, AND
* Add support for C11 bitwise OR & AND operations
* Add atomic versions of bitfield macros

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-02-28 16:50:49 -05:00
vivek
1ec31309bb *: EVPN symmetric routing for IPv6 tenant routes
Implement support for EVPN symmetric routing for IPv6 routes. The next hop
for EVPN routes is the IP address of the remote VTEP which is only an IPv4
address. This means that for IPv6 symmetric routing, there will be IPv6
destinations with IPv4 next hops. To make this work, the IPv4 next hops are
converted into IPv4-mapped IPv6 addresses.

As part of support, ensure that "L3" route-targets are not announced with
IPv6 link-local addresses so that they won't be installed in the routing
table.

Signed-off-by: Vivek Venkatraman vivek@cumulusnetworks.com
Reviewed-by: Mitesh Kanjariya mitesh@cumulusnetworks.com
Reviewed-by: Donald Sharp sharpd@cumulusnetworks.com
2018-02-28 02:07:23 +00:00
Russ White
85121506e7
Merge pull request #1805 from donaldsharp/recursion
Recursion
2018-02-27 18:04:57 -05:00
Mitesh Kanjariya
58f9e4d3f2
Merge branch 'master' into type5-default-originate 2018-02-27 12:52:24 -08:00
Olivier Dugeon
7666589034 ospfd: Add json output for Segment Routing
- To ease checking the Segment Routing conformity in topotest,
add json output to 'show ip ospf database segment-routing' CLI.
 - Update ospfd user guide accordingly
 - Update OSPF-SR documentation with supported features and interoperability

Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
2018-02-27 18:00:02 +01:00
Russ White
f894c3b2ea
Merge pull request #1788 from mkanjari/evpn-bugs
Evpn bugs
2018-02-27 11:40:24 -05:00
Donald Sharp
02fe0f3caf
Merge pull request #1801 from opensourcerouting/vtysh-isis-fixes
dev/4.0 merge with IS-IS vtysh fixes
2018-02-27 10:42:09 -05:00
Christian Franke
546067dfb1 vtysh: Fix missing \n at end of desc string 2018-02-27 15:34:23 +01:00
Christian Franke
1753f727b7 vtysh: pass route-map & prefix-list commands to isisd and sharpd
Use VTYSH_RMAP in extract.pl instead of having two lists,
and add isisd and sharpd to VTYSH_RMAP.
2018-02-27 15:34:21 +01:00
Russ White
3eef1b20ea
Merge pull request #1764 from Orange-OpenSource/SR-dev
OSPFD: Fix Segment Routing Lan Adjacency TLVs
2018-02-27 08:56:33 -05:00
Russ White
b92aee6e7c
Merge pull request #1770 from qlyoung/random-tools
*: move random tools into tools/
2018-02-27 08:55:38 -05:00
Russ White
3c5aa3781a
Merge pull request #1772 from qlyoung/fix-keepalive-sentinel
bgpd: fix incorrect keepalive timer evaluation
2018-02-27 08:54:58 -05:00
Russ White
5cfb017a67
Merge pull request #1776 from dslicenc/static-inactive-cm19675
zebra: fix rnh deleting nht entry
2018-02-27 08:51:33 -05:00
Russ White
aa1a7fc18a
Merge pull request #1798 from donaldsharp/centos_systemd
doc: Update centos7 build to include systemd
2018-02-27 08:33:29 -05:00
Russ White
8bc92a3ec7
Merge pull request #1799 from donaldsharp/route_notify_owner
Route notify owner
2018-02-27 08:32:42 -05:00
Russ White
7a684566d4
Merge pull request #1802 from dwalton76/bgpd-multipath-same-link-local
bgpd: use peer->ifp->ifindex instead of peer->ifindex
2018-02-27 08:31:06 -05:00
Renato Westphal
7bcf94689d
Merge pull request #1711 from pguibert6WIND/issue_385_step5
Netns Support / VRF/NS/ogical router rework, along with BGP & OSPF support for multiple VRF with NETNS backend
2018-02-27 10:20:53 -03:00
Donald Sharp
f9159fbc10
Merge pull request #1804 from msablic/pim_mtrace_doc
pimd: added mtrace caveat
2018-02-27 08:10:43 -05:00
Mladen Sablic
11d3c0c3f6 pimd: added mtrace caveat
Added mtrace caveat to CAVEATS.

Signed-off-by: Mladen Sablic <mladen.sablic@gmail.com>
2018-02-27 14:03:39 +01:00
Mitesh Kanjariya
00cbfad6de
Merge branch 'master' into evpn-bug-fixes 2018-02-27 02:47:36 -08:00
mitesh
2c29b18a1b bgpd: reassign the flags in struct bgp af_flags to avoid conflict
We have af_flags in struct bgp which holds address family related flags.
Seems like we had a conflict between two flags.

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2018-02-27 02:19:57 -08:00
Philippe Guibert
b7b816df6b zebra: prevent from discovering a NS with same NSID as previous one
This limitation ignores the creation of a new NS context, when an
already present NS is available with the same NSID. This limitation
removes confusion, so that only the first NS will be used for
configuration.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
009f8ad5f3 zebra: retrieve zns context from zvrf when netlink discovery
So as to get the correct NETNS where some discovery must be done and
populated, the zns pointer is directly retrieved from zvrf, instead of
checking that the VRF is a backend NETNS or not.
In the case where the interfaces are discovered before the VRF is enabled
( VRF-lite populate), then the default NS is retrieved.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
281da0a94d lib: do not use ENOSYS errno when returning from ns
ENOSYS should not be used for other goals.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
c485b14bdc lib: netns checkstyle fix
A space is appended between RB_FOREACH and ' ', to comply with style
practiced in frr.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
a2c999f21f lib: add debug guard for ns informational traces
Informational traces are being added.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
3c0eb8faa2 ospfd: basic support for VRF NETNS backend
The change consists in taking into account of the VRF identifier upon
which the ospf socket is created. Moreover, if the VRF is a netns
backend, then it is not necessary to perform the bind operations to vrf
device.
Also, when a VRF instance is enabled, it informs ospf VRF, and automatically
OSPF VRF benefits from it. Reversely, when VRF instance is disabled,
then OSPF VRF will be disabled too.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
97896a91c2 bgpd: make bgpd rely on vrf_bind() API usage
Instead of relying on local usage of vrf bind operation, the vrf API for
that usage is done.

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

fixup bgp
2018-02-27 11:11:24 +01:00
Philippe Guibert
0f4977c668 lib: add vrf-lite bind capability to vrf APIs
Because socket creation is tightly linked with socket binding for vrf
lite, the proposal is made to extend socket creation APIs and to create
a new API called vrf_bind that applies to vrf lite. The passed interface
name is the interface that will be bound to the socket passed.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
516d7591d6 lib: add vrf_ioctl API
That API can be used to wrap the ioctl call with various vrf instances.
This permits transparently doing the ioctl() call without taking into
consideration the vrf backend kind.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
9dab51ac71 bgpd: no need to initialise netns directly
NETNS is initialised from the VRF, instead of being directly called,
because this is not up to BGP daemon to initialise the various VRF
backend.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
f5d20fdb4e vtysh: change logical router node name
The logical router node goes from NS_NODE to LOGICALROUTER_NODE.
Vty commands are renamed accordingly.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
736d41ad74 zebra: adapt the vrf and logical router initialisation
The zebra daemon introduces the logical router initialisation.
Because right now, the usage of logical router and vrf NETNS is
exclusive, then the logical router and VRF are initialised accordingly.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00
Philippe Guibert
e26aedbe0b lib: split logicalrouter and vrf netns feature
This split is introducing logicalrouter.[ch] as the file that contains
the vty commands to configure logical router feature. The split has as
consequence that the backend of logical router is linux_netns.c formerly
called ns.c. The same relationship exists between VRF and its backend
which may be linux_netns.c file.
The split is adapting ns and vrf fiels so as to :
- clarify header
- ensure that the daemon persepctive, the feature VRF or logical router
  is called instead of calling directly ns.
- this implies that VRF will call NS apis, as logical router does.

Also, like it is done for default NS and default VRF, the associated VRF
is enabled first, before NETNS is enabled, so that zvrf->zns pointer is
valid when NETNS discovery applies.

Also, other_netns.c file is a stub handler that will be used for non
linux systems. As NETNS feature is only used by Linux, some BSD systems
may want to use the same backend API to benefit from NETNS. This is what
that file has been done.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-02-27 11:11:24 +01:00