]> git.proxmox.com Git - mirror_frr.git/log
mirror_frr.git
6 years agovtysh: change logical router node name
Philippe Guibert [Mon, 5 Feb 2018 15:36:13 +0000 (16:36 +0100)]
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>
6 years agozebra: adapt the vrf and logical router initialisation
Philippe Guibert [Mon, 5 Feb 2018 15:30:21 +0000 (16:30 +0100)]
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>
6 years agolib: split logicalrouter and vrf netns feature
Philippe Guibert [Mon, 5 Feb 2018 15:23:42 +0000 (16:23 +0100)]
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>
6 years agodoc: add vrfwnetns keyword for zebra in doc
Philippe Guibert [Thu, 1 Feb 2018 17:47:21 +0000 (18:47 +0100)]
doc: add vrfwnetns keyword for zebra in doc

The option to enable VRF backend is documented.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: handle some ioctl operations for VRF
Philippe Guibert [Thu, 22 Feb 2018 18:10:32 +0000 (19:10 +0100)]
zebra: handle some ioctl operations for VRF

A new API is available for interface ioctl operations on Linux:
vrf_if_ioctl. This is the unified API that permits doing ioctl
operations on a per interface basis.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: speed ioctl read() with interfaces from various NETNS
Philippe Guibert [Mon, 29 Jan 2018 15:14:46 +0000 (16:14 +0100)]
zebra: speed ioctl read() with interfaces from various NETNS

When interfaces are located on different NETNS ( different VRF), then a
switch from netns context is necessary when calling setns(). The VRF
apis to switch and switch back are called, so that the ioctl will work
accordingly.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agobgpd: do not start BGP VRF peer connection, if VRF not unknown
Philippe Guibert [Tue, 30 Jan 2018 14:30:10 +0000 (15:30 +0100)]
bgpd: do not start BGP VRF peer connection, if VRF not unknown

Upon starting a BGP VRF instance, the server socket is not created,
because the VRF ID is not known, and then underlying VRF backend is not
ready yet. Because of that, the peer connection attempt will not be
started before.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agobgpd: server socket is created for all enabled VRF
Philippe Guibert [Fri, 26 Jan 2018 11:25:34 +0000 (12:25 +0100)]
bgpd: server socket is created for all enabled VRF

Upon creation of BGP instances, server socket may or may not be created.
In the case of VRF instances, if the VRF backend relies on NETNS, then
a new server socket will be created for each BGP VRF instance. If the
VRF backend relies on VRF LITE, then only one server socket will be
enough. Moreover, At startup, with BGP VRF configuration, a server
socket may not be created if VRF is not the default one or VRF is not
recognized yet.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agobgpd: bgp support for netns
Philippe Guibert [Wed, 20 Dec 2017 11:37:18 +0000 (12:37 +0100)]
bgpd: bgp support for netns

The change contained in this commit does the following:
- discovery of vrf id from zebra daemon, and adaptation of bgp contexts
  with BGP.
  The list of network addresses contain a reference to the bgp context
  supporting the vrf.
  The bgp context contains a vrf pointer that gives information about
  the netns path in case the vrf is a netns path.

Only some contexts are impacted, namely socket creation, and retrieval
of local IP settings. ( this requires vrf identifier).

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agolib: add two APIs to handle socket operations with VRF NETNS
Philippe Guibert [Fri, 26 Jan 2018 11:28:27 +0000 (12:28 +0100)]
lib: add two APIs to handle socket operations with VRF NETNS

The vrf_sockunion_socket() wraps sockunion_socket() with vrf_id as
additional parameter. The creation of socket forces the user to
transparently move to new NETNS for doing the operation.
The vrf_getaddr_info() wraps getaddr_info() with vrf_id as additional
parameter. That API relies on the underlying system. Then there may be
need to switch to an other netns in that case too.
Also, the vrf_socket() implementation is simplified.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: fix assert mpls when terminating zebra
Philippe Guibert [Wed, 24 Jan 2018 18:06:06 +0000 (19:06 +0100)]
zebra: fix assert mpls when terminating zebra

The assert appears in zebra_mpls.c when checking default zebra_vrf.
It appears that when the mpls entries are flushed, it gets the default
vrf which is already flushed by vrf_terminate() function. In order to
avoid that assert to trigger a crash, the mpls flush is called before
vrf termination.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agoospfd: fix static analysis with variable initialised never read
Philippe Guibert [Mon, 22 Jan 2018 15:06:58 +0000 (16:06 +0100)]
ospfd: fix static analysis with variable initialised never read

the vrf identifier in the ospf_vrf_enable routine is never read, then
does not need to be initialised.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agolib: create interface even if name is the same
Philippe Guibert [Tue, 19 Dec 2017 11:44:44 +0000 (12:44 +0100)]
lib: create interface even if name is the same

For supporting vrf based on namespaces, it is possible that an interface
with the same index is present. This is the case for loopback
interfaces. For that, for each query, if the interface is not found
, matching the vrf identifier, then a new interface is created, when the
backens for VRF is NETNS.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: fix initialised vrf_id value never read
Philippe Guibert [Mon, 22 Jan 2018 12:46:20 +0000 (13:46 +0100)]
zebra: fix initialised vrf_id value never read

this is a static analysis performed by c-lang scan-build tool that
demonstrated this issue. This commit is handling the fix.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: upon startup, a NSID is assigned to default netns
Philippe Guibert [Tue, 16 Jan 2018 12:59:58 +0000 (13:59 +0100)]
zebra: upon startup, a NSID is assigned to default netns

when the netns backend is selected for VRF, the default VRF is being
assigned a NSID. This avoids the need to handle the case where if the
incoming NSID was 0 for a non default VRF, then a specific handling had
to be done to keep 0 value for default VRF.
In most cases, as the first NETNS to get a NSID will be the default VRF,
most probably the default VRF will be assigned to 0, while the other
ones will have their value incremented. On some cases, where the NSID is
already assigned for NETNS, including default VRF, then the default VRF
value will be the one derived from the NSID of default VRF, thus keeping
consistency between VRF IDs and NETNS IDs.
Default NS is attempted to be created. Actually, some VMs may have the
netns feature, but the NS initialisation fails because that folder is
not present.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: collect and get netnamespaces information
Philippe Guibert [Wed, 13 Dec 2017 10:04:31 +0000 (11:04 +0100)]
zebra: collect and get netnamespaces information

upon zebra initialisation, and upon further netnamespace creation, the
the netnamespaces are created and a vrf associated to the netnamespace
is created. By convention, the name of the netns will be the same as the
VRF.
Add a stub routine that returns a fake ns identifier, in case netlink (
linux machines) is not available.
Also, upon each newly discovered NETNS, a NSID id being generated,
either by relying on kernel NSID feature, or by generating locally the
NSID ( see previous commit for more information).

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: upon NS creation, collect the NSID via netlink
Philippe Guibert [Thu, 7 Dec 2017 17:13:54 +0000 (18:13 +0100)]
zebra: upon NS creation, collect the NSID via netlink

A NS identifier is collected by netlink. This identifier is a 32 bit
identifier that is either generated by the kernel (if not set) or
manually set by a set netlink command. The commit here is getting the
NSID from the newly created NS. If the linux option to create or get a
new NSID from the kernel does not exist, then the NSID is locally
genrated.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agolib: provide an API to switch from one netns to an other
Philippe Guibert [Wed, 20 Dec 2017 11:29:21 +0000 (12:29 +0100)]
lib: provide an API to switch from one netns to an other

Two apis are provided so that the switch from one netns to an other one
is taken care.
Also an other API to know if the VRF has a NETNS backend or a VRF Lite
backend.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agolib: add namespace name structure in zebra message
Philippe Guibert [Fri, 22 Dec 2017 15:02:51 +0000 (16:02 +0100)]
lib: add namespace name structure in zebra message

The addition of the name of the netns in the vrf message introduces also
a limitation when the size of the netns is bigger than 15 bytes. Then
the netns are ignored by the library.
In addition to this, some sanity checks have been introduced. some
functions to create the netns from a call not coming from the vty is
being added with traces.
Also, the ns vty function is reentrant, if the context is already
created.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
6 years agozebra: enhance show vrf for netns and fixing
Philippe Guibert [Thu, 7 Dec 2017 14:58:48 +0000 (15:58 +0100)]
zebra: enhance show vrf for netns and fixing

Show vrf command displays information on the vrf, if it is related to
vrf kernel or if it is related to netns.
When a vrf from kernel is detected, before creating a new vrf, a check
is done against an already present vrf, and if that vrf is not a vrf
mapped with a netns. If that is that case, then the creation is
rejected.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: handle the zns init/destroy
Philippe Guibert [Fri, 8 Dec 2017 13:32:38 +0000 (14:32 +0100)]
zebra: handle the zns init/destroy

The zebra netnamespace contexts are initialised, based on the callback
coming from the NS. Reversely, the list of ns is parsed to disable the
ns contexts.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: add the registration mechanism for netns
Philippe Guibert [Thu, 7 Dec 2017 17:27:31 +0000 (18:27 +0100)]
zebra: add the registration mechanism for netns

If vrf backend is netns, then the zebra will create its own
zebra_ns context for each new netns discovered. As consequence,
a routing table, and other contexts will be created for each
new namespace discovered. When it is enabled, a populate process
will be done, consisting in learning new interfaces and routes, and
addresses from other NETNS.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agolib: externalise vrf and ns creation
Philippe Guibert [Wed, 13 Dec 2017 10:04:31 +0000 (11:04 +0100)]
lib: externalise vrf and ns creation

In addition to have the possibility to create from vty vrf based on a
netns backend, the API will be made accessible from external, especially
for zebra that will handle the netns discovery part. This commit is
externalising following functions:
- netns_pathname
- ns_handler_create
- vrf_handler_create

Also, the VRF initialisation case when under NETNS backend is changed,
since the NS identifier may not be known at the configuration time,but
may be known later, under discovery process.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: zns context is filled in when vrf is enabled
Philippe Guibert [Fri, 22 Dec 2017 15:21:09 +0000 (16:21 +0100)]
zebra: zns context is filled in when vrf is enabled

This commit is also a fix that avoids a VRF to be attached to the wrong
namespace context, at creation time. Because the VRF, at creation time
does not know yet the namespace where it will get its information.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: fix static analysis issue with zvrf_id
Philippe Guibert [Mon, 22 Jan 2018 10:30:05 +0000 (11:30 +0100)]
zebra: fix static analysis issue with zvrf_id

Using c-lang scan-build tool, fix a dereference of a null pointer.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: ipv6 operations stick to namespace
Philippe Guibert [Tue, 19 Dec 2017 11:23:32 +0000 (12:23 +0100)]
zebra: ipv6 operations stick to namespace

All ipv6 operations stick to namespace.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: route configuration fix for vrf when applied to namespaces
Philippe Guibert [Mon, 11 Dec 2017 14:19:15 +0000 (15:19 +0100)]
zebra: route configuration fix for vrf when applied to namespaces

For each route to be added or deleted, instead of applying directly to
default namespaces, when a vrf is mapped to a namespace, then the
correct zns must be found out.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: socket operations stick to namespace if necessary
Philippe Guibert [Fri, 8 Dec 2017 18:06:34 +0000 (19:06 +0100)]
zebra: socket operations stick to namespace if necessary

Upon following calls: interface poll, address poll, route poll, and
ICMPv6 handling, each new Namespace is being parsed. For that, the
socket operations need to switch from one NS to one other, to get the
necessary information.

As of now, there is a crash when dumping interfaces, through show
running-config.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agolib: netns vty command not available when vrf backend is vrf lite
Philippe Guibert [Wed, 10 Jan 2018 09:04:59 +0000 (10:04 +0100)]
lib: netns vty command not available when vrf backend is vrf lite

Using the vrf backend kind, the vty command that configured netns
under vty will not be installed if the vrf backend is vrf lite

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: copy logical-router-command under vrf subnode
Philippe Guibert [Wed, 6 Dec 2017 11:03:59 +0000 (12:03 +0100)]
zebra: copy logical-router-command under vrf subnode

a vty command is added:
in addition to this command ( kept for future usage):
- [no] logical-router-id <ID> netns <NETNSNAME>
a new command is being placed under vrf subnode
- vrf <NAME>
   [no] netns <NETNSNAME>
  exit

This command permits to map a VRF with a Netnamespace.
The commit only handles the relationship between vrf and ns structures.
It adds 2 attributes to vrf structure:
- one defines the kind of vrf ( mapped under netns or vrf from kernel)
- the other is the opaque pointer to ns
The show running-config is handled by zebra daemon.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: add a runtime flag to enable vrf with netns
Philippe Guibert [Mon, 22 Jan 2018 08:42:53 +0000 (09:42 +0100)]
zebra: add a runtime flag to enable vrf with netns

The netns backend is chosen by VRF if a runtime flag named vrfwnetns is
selected when running zebra.
In the case the NETNS backend is chosen, in some case the VRFID value is
being assigned the value of the NSID. Within the perimeter of that work,
this is why the vrf_lookup_by_table function is extended with a new
parameter.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agoMerge pull request #1736 from mkanjari/type5-with-asymm
Philippe Guibert [Tue, 27 Feb 2018 09:36:57 +0000 (10:36 +0100)]
Merge pull request #1736 from mkanjari/type5-with-asymm

zebra, bgp: Support type-5 routes with asymmetric routing

6 years agoMerge pull request #1750 from donaldsharp/zebra_other_tables
Renato Westphal [Tue, 27 Feb 2018 00:29:57 +0000 (21:29 -0300)]
Merge pull request #1750 from donaldsharp/zebra_other_tables

Zebra other tables

6 years agoMerge pull request #1795 from qlyoung/vtysh-history-q2f
Renato Westphal [Tue, 27 Feb 2018 00:16:13 +0000 (21:16 -0300)]
Merge pull request #1795 from qlyoung/vtysh-history-q2f

vtysh: .history_quagga --> .history_frr

6 years agoMerge pull request #1793 from qlyoung/stylechecker
Philippe Guibert [Sat, 24 Feb 2018 06:24:06 +0000 (07:24 +0100)]
Merge pull request #1793 from qlyoung/stylechecker

Miscellaneous checkpatch fixes & improvements

6 years agoMerge pull request #1796 from donaldsharp/32_silliness
Martin Winter [Fri, 23 Feb 2018 21:52:42 +0000 (13:52 -0800)]
Merge pull request #1796 from donaldsharp/32_silliness

pimd: Fix some compiler issues

6 years agovtysh: .history_quagga --> .history_frr
Quentin Young [Fri, 23 Feb 2018 17:40:57 +0000 (12:40 -0500)]
vtysh: .history_quagga --> .history_frr

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
6 years agoMerge branch 'master' into stylechecker
Quentin Young [Fri, 23 Feb 2018 16:21:42 +0000 (11:21 -0500)]
Merge branch 'master' into stylechecker

6 years agotools: finer-grained error codes for checkpatch
Quentin Young [Fri, 23 Feb 2018 15:58:17 +0000 (10:58 -0500)]
tools: finer-grained error codes for checkpatch

* 2 for errors
* 1 for warnings
* 0 for clean
* Suppress all report text for a clean result
* Remove check for const structs from perl script
* Remove grep suppression for that check from shell script

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
6 years agotools: ignore FSF warning, fn macros in checkpatch
Quentin Young [Fri, 23 Feb 2018 15:11:19 +0000 (10:11 -0500)]
tools: ignore FSF warning, fn macros in checkpatch

* Unlike Linux we do require the GPL file header
* When checking for spaces between function names and parentheses,
  ignore all-uppercase function names as these are likely to be macros,
  and function-like macros may have that space

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
6 years agoMerge pull request #1792 from pguibert6WIND/issue_1786
Quentin Young [Fri, 23 Feb 2018 15:04:07 +0000 (10:04 -0500)]
Merge pull request #1792 from pguibert6WIND/issue_1786

tools: fix that filters issues on resulting file only

6 years agotools: fix that filters issues on resulting file only
Philippe Guibert [Fri, 23 Feb 2018 15:16:30 +0000 (16:16 +0100)]
tools: fix that filters issues on resulting file only

Because checkpatch result is applied to original and new file, the
analysis also parses what may be wrong with the original file.
Whereas the script should limit to analyse only what is wrong on new
file.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agozebra: Fix up some code formatting issues.
Donald Sharp [Fri, 23 Feb 2018 12:50:23 +0000 (07:50 -0500)]
zebra: Fix up some code formatting issues.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agozebra: Fix warning found in CI system
Donald Sharp [Sun, 18 Feb 2018 22:23:50 +0000 (17:23 -0500)]
zebra: Fix warning found in CI system

The Clang SA system found a new issue:

Dead store: Dead assignment.

This fixes that issue

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years ago*: Make assignment from RB_ROOT in while loop work better
Donald Sharp [Sun, 18 Feb 2018 00:02:55 +0000 (19:02 -0500)]
*: Make assignment from RB_ROOT in while loop work better

Fix up the assignment of the variable = RB_ROOT inside of
while loop patter we were using.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agozebra: On shutdown don't count removals
Donald Sharp [Fri, 16 Feb 2018 02:33:22 +0000 (21:33 -0500)]
zebra: On shutdown don't count removals

Some of the tables are no longer stored in the zvrf
and in the zns now.  On shutdown zns is cleaned up
after vrf( and rightly so!) As such we should not
attempt to count the information if we don't have
a zvrf.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agozebra: Add code to display interesting tables
Donald Sharp [Wed, 14 Feb 2018 03:38:47 +0000 (22:38 -0500)]
zebra: Add code to display interesting tables

With the ability of zebra to handle random tables,
add code to display those tables via the
show <ip|ipv6> route table (1-...) [json] command.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agozebra: Allow table creation for tables greater than 252
Donald Sharp [Wed, 14 Feb 2018 01:29:38 +0000 (20:29 -0500)]
zebra: Allow table creation for tables greater than 252

The linux kernel allows a vast expanse of tables to be used.
It would be useful for zebra to track these tables if they
are being used.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agozebra: Move zvrf->other_tables into zns
Donald Sharp [Wed, 14 Feb 2018 01:25:11 +0000 (20:25 -0500)]
zebra: Move zvrf->other_tables into zns

The other_tables data structure does not belong to a vrf.
It belongs to the zns.  This is because each vrf does not
need to have copies of each of other_tables.

Additionally move the array into a RB_TREE.  This will allow
us to sort quickly and easily expand the number of tables
we can support to beyond the ZEBRA_KERNEL_TABLE_MAX define.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agopimd: Fix some compiler issues
Donald Sharp [Fri, 23 Feb 2018 07:07:47 +0000 (02:07 -0500)]
pimd: Fix some compiler issues

Fix some compiler issues that were not picked up.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agoMerge pull request #1723 from chiragshah6/ospf_vrf_dev
Rafael Zalamena [Thu, 22 Feb 2018 20:24:35 +0000 (17:24 -0300)]
Merge pull request #1723 from chiragshah6/ospf_vrf_dev

ospfd: fix ospf interface and neighbor json

6 years agoMerge pull request #1756 from qlyoung/stylechecker
Philippe Guibert [Thu, 22 Feb 2018 17:55:48 +0000 (18:55 +0100)]
Merge pull request #1756 from qlyoung/stylechecker

tools: improve checkpatch.sh

6 years agotools: improve checkpatch.sh
Quentin Young [Thu, 15 Feb 2018 18:37:03 +0000 (13:37 -0500)]
tools: improve checkpatch.sh

* Send reports to stderr; this allows you to get just the end result by
  redirecting stderr
* Don't attempt to copy nonexistent files

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
6 years agoMerge pull request #1749 from msablic/pim_mtrace_cc
Donald Sharp [Thu, 22 Feb 2018 13:15:38 +0000 (08:15 -0500)]
Merge pull request #1749 from msablic/pim_mtrace_cc

pimd: Multicast traceroute client and router

6 years agoMerge pull request #1730 from Orange-OpenSource/master
Russ White [Tue, 20 Feb 2018 12:11:58 +0000 (07:11 -0500)]
Merge pull request #1730 from Orange-OpenSource/master

ospfd: Fix ospfd crash

6 years agoMerge pull request #1757 from dwalton76/bgpd-remove-peer-in-peergroup
Russ White [Tue, 20 Feb 2018 12:01:17 +0000 (07:01 -0500)]
Merge pull request #1757 from dwalton76/bgpd-remove-peer-in-peergroup

bgpd: "no neighbor 10.13.0.12 peer-group ibgp" does not remove peer

6 years agoMerge pull request #1766 from donaldsharp/label_label_label
Russ White [Tue, 20 Feb 2018 11:58:01 +0000 (06:58 -0500)]
Merge pull request #1766 from donaldsharp/label_label_label

zebra: implement recursive MPLS labels

6 years agoMerge pull request #1732 from ak503/set_metric
Russ White [Tue, 20 Feb 2018 11:49:15 +0000 (06:49 -0500)]
Merge pull request #1732 from ak503/set_metric

ospfd: OSPF support the +/- in set metric <+/-metric>

6 years agopimd: Multicast traceroute client and router
Mladen Sablic [Mon, 12 Feb 2018 22:41:33 +0000 (23:41 +0100)]
pimd: Multicast traceroute client and router

This commit is the implementation of weak multicast traceroute.
It consists of IGMP module dealing with mtrace type IGMP messages
and client program mtrace/mtracebis for initiating mtrace queries.

Signed-off-by: Mladen Sablic <mladen.sablic@gmail.com>
6 years agoMerge pull request #1765 from donaldsharp/sa_stuff
Rafael Zalamena [Mon, 19 Feb 2018 20:23:49 +0000 (17:23 -0300)]
Merge pull request #1765 from donaldsharp/sa_stuff

Sa stuff

6 years agozebra: implement recursive MPLS labels
Renato Westphal [Wed, 20 Sep 2017 03:05:25 +0000 (00:05 -0300)]
zebra: implement recursive MPLS labels

When a BGP-labeled route is resolved into an LDP-labeled IGP route,
zebra would install it with no labels in the kernel. This patch implements
recursive MPLS labels, i.e. make zebra install all labels from the route's
nexthop chain (the labels from the top-level nexthop being installed in
the top of the MPLS label stack). Multiple recursion levels are supported.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
6 years agobgpd: Fix value set but never used
Donald Sharp [Sat, 17 Feb 2018 19:59:32 +0000 (14:59 -0500)]
bgpd: Fix value set but never used

The value 'pnt' was being set but never used.  If we need
this in the future it will be a simple thing to add back
in.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agoisisd: Remove impossible check
Donald Sharp [Sat, 17 Feb 2018 19:52:44 +0000 (14:52 -0500)]
isisd: Remove impossible check

The circuit->area value is always true in every code path
to isis_circuit_af_set( isis_vty.c ).  Therefore was_enabled
will always be true.

If was_enabled ever became false then the area->ip_circuits
and area->ipv6_circuits lines would segfault.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agoMerge pull request #1745 from mkanjari/type5-route-policy
Russ White [Fri, 16 Feb 2018 22:23:25 +0000 (17:23 -0500)]
Merge pull request #1745 from mkanjari/type5-route-policy

bgpd: Policy to control which RIB routes are injected into EVPN

6 years agoMerge pull request #1761 from pguibert6WIND/issue_1760
Lou Berger [Fri, 16 Feb 2018 18:58:32 +0000 (12:58 -0600)]
Merge pull request #1761 from pguibert6WIND/issue_1760

bgpd: prevent from configuring vrf-policy when in BGP VRF instance

6 years agoMerge pull request #1753 from donaldsharp/afi_vrf_label
Lou Berger [Fri, 16 Feb 2018 18:36:08 +0000 (12:36 -0600)]
Merge pull request #1753 from donaldsharp/afi_vrf_label

lib, sharpd, zebra: Update the zapi_vrf_label call to add afi

6 years agobgpd: prevent from configuring vrf-policy when in BGP VRF instance
Philippe Guibert [Fri, 16 Feb 2018 10:00:01 +0000 (11:00 +0100)]
bgpd: prevent from configuring vrf-policy when in BGP VRF instance

Under a BGP VRF instance, prevent from entering in vrf-policy mode. This
mode is reserved for non VRF instances that want to handle several VRF
at the same time.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
6 years agobgpd: "no neighbor 10.13.0.12 peer-group ibgp" does not remove peer
Daniel Walton [Thu, 15 Feb 2018 20:55:43 +0000 (20:55 +0000)]
bgpd: "no neighbor 10.13.0.12 peer-group ibgp" does not remove peer

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
This worked for unnumbered peers but not for numbered peers. This is
before the fix:

router bgp 100
 coalesce-time 1000
 neighbor FOO peer-group
 neighbor FOO remote-as external
 neighbor swp1 interface peer-group FOO
 neighbor 1.1.1.1 peer-group FOO
!
line vty
 exec-timeout 0 0
!
end
cel-redxp-10# wr
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Integrated configuration saved to /etc/frr/frr.conf
[OK]
cel-redxp-10# conf t
cel-redxp-10(config)# router bgp
cel-redxp-10(config-router)# no neighbor swp1 interface peer-group FOO
cel-redxp-10(config-router)# no neighbor 1.1.1.1 peer-group FOO
cel-redxp-10(config-router)# do show run
Building configuration...

Current configuration:
!
frr version 4.1-dev
frr defaults datacenter
hostname cel-redxp-10
!
service integrated-vtysh-config
!
password cn321
!
log syslog
!
router bgp 100
 coalesce-time 1000
 neighbor FOO peer-group
 neighbor FOO remote-as external
 neighbor 1.1.1.1 remote-as external
 !
 address-family ipv4 unicast
  no neighbor 1.1.1.1 activate
 exit-address-family
!
line vty
 exec-timeout 0 0
!
end
cel-redxp-10(config-router)#

After the fix "no neighbor 1.1.1.1 peer-group FOO" removes the 1.1.1.1
neighbor.

6 years agoMerge pull request #1755 from donaldsharp/install_it_tar
Jafar Al-Gharaibeh [Thu, 15 Feb 2018 20:42:48 +0000 (14:42 -0600)]
Merge pull request #1755 from donaldsharp/install_it_tar

sharpd: Add ability to build from tarball

6 years agoMerge pull request #1754 from chiragshah6/ospfv3_dev
Jafar Al-Gharaibeh [Thu, 15 Feb 2018 20:39:09 +0000 (14:39 -0600)]
Merge pull request #1754 from chiragshah6/ospfv3_dev

ospf6d: Router-ID change notify to restart ospf6d

6 years agoMerge pull request #1752 from donaldsharp/coverity_1
Jafar Al-Gharaibeh [Thu, 15 Feb 2018 20:38:18 +0000 (14:38 -0600)]
Merge pull request #1752 from donaldsharp/coverity_1

Coverity 1

6 years agoMerge pull request #1742 from chiragshah6/mdev
Jafar Al-Gharaibeh [Thu, 15 Feb 2018 20:30:06 +0000 (14:30 -0600)]
Merge pull request #1742 from chiragshah6/mdev

ospf(6)d: Fix distance option command

6 years agosharpd: Add ability to build from tarball
Donald Sharp [Thu, 15 Feb 2018 18:35:10 +0000 (13:35 -0500)]
sharpd: Add ability to build from tarball

Since sharpd is only typically built with a development build
this was not noticed.  Add the necessary headers to build
this thingie(tm).

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agozebra: Ensure unconfiguration works properly for vrf labels
Donald Sharp [Thu, 15 Feb 2018 18:52:57 +0000 (13:52 -0500)]
zebra: Ensure unconfiguration works properly for vrf labels

If you were to configure a v4 and v6 vrf pop and forward label
that both happened to be the same, unconfiguring one would
remove them both.

This fixes that issue by noticing if we should remove it or
not based upon v4 or v6 having the same label or not.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agoospf6d: router-id change notify to restart ospf6d
Chirag Shah [Mon, 12 Feb 2018 21:22:04 +0000 (13:22 -0800)]
ospf6d: router-id change notify to restart ospf6d

Notify user to store config and restart ospf6d
as part of router-id change cli if any of
the area active.
Store zebra router-id under ospf6, when static
router-id removed restore zebra router-id, ask
to restart ospf6d.

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
6 years agoMerge pull request #1738 from chiragshah6/ospfv3_dev
Olivier Dugeon [Thu, 15 Feb 2018 16:17:38 +0000 (17:17 +0100)]
Merge pull request #1738 from chiragshah6/ospfv3_dev

ospf6d: Handle Premature Aging of LSAs

6 years agoospf6d: Handle Premature Aging of LSAs
Chirag Shah [Fri, 26 Jan 2018 22:53:43 +0000 (14:53 -0800)]
ospf6d: Handle Premature Aging of LSAs

RFC 2328 (14.1) Premature aging of LSAs from
routing domain :
When ospf6d is going away (router going down),
send MAXAGEd self originated LSAs to all
neighbors in routing domain to trigger
Premature aging to remove from resepective LSDBs.

Neighbor Router Reboot:
Upon receiving Self-originate MAXAGEd LSA, simply
discard, Current copy could be non maxaged latest.

For neighbor advertised LSA's (current copy in LSDB)
is set to MAXAGE but received new LSA with Non-MAXAGE
(with current age), discard the current MAXAGE LSA,
Send latest copy of LSA to neighbors and update the
LSDB with new LSA.

When a neighbor transition to FULL, trigger AS-External
LSAs update from external LSDB to new neighbor.

Testing:
R1 ---- DUT --- R5
| \
R2 R3
|
R4

Area 1: R5 and DUT
Area 0: DUT, R1, R2, R3
Area 2: R2 R4

Add IPv6 static routes at R5
Redistribute kernel routes at R5,
Validate routes at R4, redistributed via backbone
to area 2.
Stop n start frr.service at R5 and validated
MAXAGE LSAs then recent age LSAs in Database at DUT-R4.
Validated external routes installed DUT to R4.

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
6 years agoisisd: Free up some memory allocated.
Donald Sharp [Sat, 10 Feb 2018 19:03:09 +0000 (14:03 -0500)]
isisd: Free up some memory allocated.

The v4 and v6 prefixes were created but not deleted on
shutdown properly.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit 25b1001dc9c46bbfcb9e1af8231e0fa63a7d3bd3)
Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
6 years agolib, sharpd, zebra: Update the zapi_vrf_label call to add afi
Donald Sharp [Wed, 14 Feb 2018 06:11:09 +0000 (01:11 -0500)]
lib, sharpd, zebra: Update the zapi_vrf_label call to add afi

Add the ability to pass in an afi to zebra.  zebra_vrf keeps
track of the afi/label tuple and then does the right thing
before we call down.  AF_MPLS does not care about v4 or v6
it just knows label and what device to use for lookup.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agozebra: Clean up some SA issues found by new code
Donald Sharp [Wed, 14 Feb 2018 04:39:09 +0000 (23:39 -0500)]
zebra: Clean up some SA issues found by new code

1) Add asserts in a couple of spots to show we
never expect prefix to be bad.
2) Fix some bfd code where out_ctxt will
always be NULL.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agoospfd: Fix some new SA issues found by coverity
Donald Sharp [Wed, 14 Feb 2018 04:37:08 +0000 (23:37 -0500)]
ospfd: Fix some new SA issues found by coverity

Fix a || && mixup.
Add an assert for area to show we expect it to be non-null
going forward.
When memory is allocated if it fails we abort then
no need to check for null.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agoospf6d: Fix a possible deref by null found in SA
Donald Sharp [Wed, 14 Feb 2018 04:34:52 +0000 (23:34 -0500)]
ospf6d: Fix a possible deref by null found in SA

There exists a possibility that rtr_lsa may be null.
Add an assert that shows we actually expect it to
be non-null at this point in time going forward.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
6 years agoMerge pull request #1701 from donaldsharp/zapi_vrf_label
Martin Winter [Wed, 14 Feb 2018 03:05:42 +0000 (19:05 -0800)]
Merge pull request #1701 from donaldsharp/zapi_vrf_label

Zapi vrf label

6 years agoMerge pull request #1734 from donaldsharp/control_me
Martin Winter [Tue, 13 Feb 2018 16:49:55 +0000 (08:49 -0800)]
Merge pull request #1734 from donaldsharp/control_me

debianpkg: Update build dependencies to say we don't co-exist with qu…

6 years agoMerge pull request #1683 from donaldsharp/doc_debian
Martin Winter [Tue, 13 Feb 2018 16:39:39 +0000 (08:39 -0800)]
Merge pull request #1683 from donaldsharp/doc_debian

doc: Fix Debian 9 build instructions

6 years agobgpd: Policy to control which RIB routes are injected into EVPN
Mitesh Kanjariya [Fri, 9 Feb 2018 09:09:20 +0000 (01:09 -0800)]
bgpd: Policy to control which RIB routes are injected into EVPN

FRR/CL provides the means for injecting regular (IPv4) routes
from the BGP RIB into EVPN as type-5 routes.
This needs to be enhanced to allow selective injection.
This can be achieved by adding a route-map option
for the "advertise ipv4/ipv6 unicast" command.

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
6 years agoMerge branch 'master' into type5-with-asymm
Mitesh Kanjariya [Mon, 12 Feb 2018 10:05:00 +0000 (02:05 -0800)]
Merge branch 'master' into type5-with-asymm

6 years agoospfd: Fix distance command
Chirag Shah [Mon, 12 Feb 2018 04:27:43 +0000 (20:27 -0800)]
ospfd: Fix distance command

Reset prevoiusly configured distance command options
if user enters new (different) parameters.

Ticket:CM-19635
Testing Done:

R1(config-router)# distance ospf intra-area 45 external 45
R1# show running-config ospfd
router ospf
 distance ospf intra-area 45 external 45

R1(config-router)# distance ospf inter-area 45
R1# show running-config ospfd
router ospf
 distance ospf inter-area 45

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
6 years agoospf6d: Fix distance command
Chirag Shah [Mon, 12 Feb 2018 04:17:11 +0000 (20:17 -0800)]
ospf6d: Fix distance command

Reset prevoiusly configured distance command options
if user enters new (different) parameters.

Ticket:CM-19635
Reviewed By:
Testing Done:

R1(config-ospf6)# distance ospf6 intra-area 55 external 55
R1#show running-config ospf6d
router ospf6
 distance ospf6 intra-area 55 external 55

R1(config-ospf6)# distance ospf6 inter-area 55
R1#show running-config ospf6d
router ospf6
 distance ospf6 inter-area 55

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
6 years agoMerge pull request #1735 from LabNConsulting/working/master/pre-vpn-vrf-leak-indenting
Donald Sharp [Sat, 10 Feb 2018 14:24:40 +0000 (09:24 -0500)]
Merge pull request #1735 from LabNConsulting/working/master/pre-vpn-vrf-leak-indenting

Working/master/pre vpn vrf leak indenting

6 years agozebra, bgp: Support type-5 routes with asymmetric routing
Mitesh Kanjariya [Tue, 6 Feb 2018 22:28:22 +0000 (14:28 -0800)]
zebra, bgp: Support type-5 routes with asymmetric routing

Asymmetric routing is an ideal choice when all VLANs are cfged on all leafs.
It simplifies the routing configuration and
eliminates potential need for advertising subnet routes.
However, we need to reach the Internet or global destinations
or to do subnet-based routing between PODs or DCs.
This requires EVPN type-5 routes but those routes require L3 VNI configuration.

This task is to support EVPN type-5 routes for prefix-based routing in
conjunction with asymmetric routing within the POD/DC.
It is done by providing an option to use the L3 VNI only for prefix routes,
so that type-2 routes (host routes) will only use the L2 VNI.

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
6 years agoMerge pull request #1737 from mkanjari/build-failure
Donald Sharp [Sat, 10 Feb 2018 01:53:03 +0000 (20:53 -0500)]
Merge pull request #1737 from mkanjari/build-failure

zebra: fix build breakage

6 years agozebra: fix build breakage
mitesh [Sat, 10 Feb 2018 00:57:37 +0000 (16:57 -0800)]
zebra: fix build breakage

is_vni_l3 was removed as a part of PR1700. However, it seems to be used in master.
Causing the breakage. Made the changes to not use the API anymore.

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
6 years agoMerge pull request #1719 from donaldsharp/rip_split_fuckery
Renato Westphal [Sat, 10 Feb 2018 00:07:02 +0000 (22:07 -0200)]
Merge pull request #1719 from donaldsharp/rip_split_fuckery

ripd: Fix crash when ip rip split-horizon poisoned-reverse is configed

6 years agoMerge pull request #1731 from donaldsharp/zebra_stuff
Renato Westphal [Sat, 10 Feb 2018 00:01:12 +0000 (22:01 -0200)]
Merge pull request #1731 from donaldsharp/zebra_stuff

zebra: sharp protocol needs a default admin distance.

6 years agoMerge pull request #1700 from mkanjari/evpn-symm-routing-enhancements-2.0
Renato Westphal [Fri, 9 Feb 2018 23:20:27 +0000 (21:20 -0200)]
Merge pull request #1700 from mkanjari/evpn-symm-routing-enhancements-2.0

EVPN Symmetric routing enhancements 2.0

6 years agoMerge pull request #1722 from donaldsharp/vrf_mc_vrf
Renato Westphal [Fri, 9 Feb 2018 22:54:17 +0000 (20:54 -0200)]
Merge pull request #1722 from donaldsharp/vrf_mc_vrf

zebra: Fix vrf routes from assuming their nh's were in the default

6 years agowhitespace/comment fixes per qlyoung
G. Paul Ziemba [Fri, 9 Feb 2018 21:14:22 +0000 (13:14 -0800)]
whitespace/comment fixes per qlyoung

Signed-off-by: G. Paul Ziemba <paulz@labn.net>
6 years agobgpd: ran indent.py on some files prior to bgp vpn-vrf leaking changes
G. Paul Ziemba [Fri, 9 Feb 2018 18:22:50 +0000 (10:22 -0800)]
bgpd: ran indent.py on some files prior to bgp vpn-vrf leaking changes

Signed-off-by: G. Paul Ziemba <paulz@labn.net>
6 years agoalso protect ALIAS from indenting
G. Paul Ziemba [Fri, 9 Feb 2018 18:18:35 +0000 (10:18 -0800)]
also protect ALIAS from indenting

Signed-off-by: G. Paul Ziemba <paulz@labn.net>