Commit Graph

13432 Commits

Author SHA1 Message Date
Lou Berger
62565dc96b configure.ac: add --with-yangmodelsdir=DIR and
--with-libyang-pluginsdir=DIR config options

Signed-off-by: Lou Berger <lberger@labn.net>
2018-10-30 17:48:04 -04:00
Mark Stapp
e07e954966 zebra: temporary workaround for a clang issue with atomics
Current clang has an issue with the pointer/target argument
to at least one atomic/intrinsic. A variable with '_Atomic'
generates a compile-time error. Use a cast as a workaround
here to allow use of clang for now.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2018-10-30 15:31:47 -04:00
Donald Sharp
cac967ca3b
Merge pull request #3261 from mjstapp/fix_rib_close
zebra: only uninstall once, when closing rib table
2018-10-30 12:12:10 -04:00
David Lamparter
8603f6a686
Merge pull request #3257 from kooky/patch-1
Link-detect documentation
2018-10-30 15:54:32 +01:00
Mark Stapp
258c07e4e2 zebra: only uninstall once, when closing rib table
When the rib code is informed that a table is closing/
going away, only try once to uninstall associated routes from
the fib/dataplane. The close path can be called multiple times
in some cases - zebra shutdown, e.g.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
2018-10-30 09:41:55 -04:00
Tim Bray
30980e0adc
Link-detect documentation
As a quagga user, I didn't realise link-detect is on by default.
2018-10-29 21:12:14 +00:00
Don Slice
2961101952 zebra: remove space from json string for show evpn mac vni <num> mac <mac>
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2018-10-29 17:16:14 +00:00
Don Slice
24cdbd0d8b zebra: add json support to show evpn mac vni <num> mac <mac>
Added the json output capability in order to improve troubleshooting
capabilities.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2018-10-29 13:09:31 +00:00
Donald Sharp
69c19e1def
Merge pull request #2946 from mjstapp/dplane_2
Zebra: async dataplane, phase 1
2018-10-28 16:10:45 -04:00
Donald Sharp
221aa3d115
Merge pull request #3252 from opensourcerouting/buildfoo-20181028
build: SNMP license, rfptest & ospfclient as noinst, redhat spec w/o CONFDATE
2018-10-28 16:07:50 -04:00
David Lamparter
7ba0150738 redhat: remove @CONFDATE@ from spec
CONFDATE should not be used like this.  Also, the extraversion is now
burned into tarballs anyway so this is no longer neccessary.

Signed-off-by: David Lamparter <equinox@diac24.net>
2018-10-28 19:49:32 +01:00
David Lamparter
58596d3444 build: make rfptest and ospfclient "noinst"
Both of these are testing/demo-style tools that don't make sense as part
of a normal installation.  So don't install them.

NB: this is only the executables, libospfclient and the RFP code are not
affected.

Signed-off-by: David Lamparter <equinox@diac24.net>
2018-10-28 19:48:55 +01:00
Quentin Young
cc4345d438 doc: use correct specifier for code block
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 16:19:36 +00:00
David Lamparter
e5563f8778 build: crop excessive net-snmp library list
This fixes the longstanding GPL vs. OpenSSL licensing issue in our SNMP
code (and cuts down on its other dependencies a wee bit.)

In a way, net-snmp is really buggy here in what it says that we should
link against, but I don't know their application scenarios well enough
to say it should be changed at their end.

Signed-off-by: David Lamparter <equinox@diac24.net>
2018-10-28 16:05:00 +01:00
Quentin Young
2b6aabe067 zebra: force neighbor entry reinstallation
Even if the neighbor entry we want already exists, force its
reinstallation to ensure that it's valid. This will now take place when
we request an update of the neighbor entry.

Ticket: CM-22604
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 11:22:23 +00:00
Quentin Young
99b2c423a9 zebra: fix zebra router memleaks
* Correctly set safi to prevent duplicate allocations
* Free previously allocated table->info before overwriting it

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 10:54:52 +00:00
Quentin Young
610b34e191 doc: update zebra protocol documentation
* Add full version history with header diagrams
* Update field descriptions
* Update overview section
* Update list of protocol commands

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 09:35:35 +00:00
Quentin Young
740449aba0 doc: remove mention of 'secondary' ip[v6] commands
These haven't existed for 14 years

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 07:24:36 +00:00
Quentin Young
b1bd101570 zebra: cleanup some leftovers from removed cmds
* Remove vestigial 'secondary' option for v6 address installation
  functions
* Update comments mentioning it

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 07:19:59 +00:00
Quentin Young
5fedee185f lib: remove agentx already enabled warning
This duplicates itself N times since it's not wrappered in a vtysh
command. In lieu of doing that, just remove the message, it's not really
necessary.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 02:50:47 +00:00
Quentin Young
e0180b66cf frr: ignore libtool.orig
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 02:25:42 +00:00
Quentin Young
d972a961b6 .github: remove style reminder from PR template
Tired of deleting this thing, doubt people read it, and we have
checkpatch anyway

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 02:14:40 +00:00
Quentin Young
a904708eb5 doc: include maintainer release procedure in docs
Gotta include it in a toctree for it to show up

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 02:12:53 +00:00
Quentin Young
009ca8cd28 doc: fix code-block syntax errors
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 02:07:09 +00:00
Quentin Young
9b6a13adc4 doc: ignore libyang-building.rst in sources
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 02:06:30 +00:00
Quentin Young
eebfb2335b doc: add missing docs for ipv6 isis router cmd
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 01:31:08 +00:00
Quentin Young
4c97fd1a87 doc: strip trailing whitespace
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-10-28 01:07:06 +00:00
Renato Westphal
12d35cedf5 tools: update checkpatch to allow indented labels
clang-format always indent labels by default and that can't be changed
with any configuration option. Also, indented labels tend to improve
code readability, especially in long functions.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Martin Winter
90fe75b275 debianpkg: fix lintian warn: No need to keep .la libs for packages
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Emanuele Di Pascale
4206757572 lib: fix fetching enum values for derived types
Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
2018-10-27 16:16:12 -02:00
Renato Westphal
fc5a4adc5d doc: add build instructions for libyang
These instructions are intended to be temporary until we have libyang
packages available for all supported platforms.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Martin Winter
4e700123dd debianpkg: Add yang files to packages
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Martin Winter
7cad61cb02 redhat: Added libyang dependencies to package
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
6598679946 yang: add a module translator for ietf-rip.yang
As it can be seen below, this translator covers only ~13% of the
ietf-rip YANG module. Work must be done to increase that number.

ripd> en
ripd# conf t
ripd(config)# yang module-translator load /tmp/frr-ietf-translator.json
% Module translator "ietf" loaded successfully.

ripd(config)# do show yang module-translator
 Family  Module           Deviations                      Coverage (%)
 -----------------------------------------------------------------------
 ietf    ietf-interfaces  frr-deviations-ietf-interfaces  3.92
 ietf    ietf-routing     frr-deviations-ietf-routing     1.56
 ietf    ietf-rip         frr-deviations-ietf-rip         13.60

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
fe339c9560 ripd: implement two YANG notifications
Implement the 'authentication-failure' and 'authentication-type-failure'
notifications defined in the frr-ripd YANG module.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
1137aef48f ripd: implement the 'clear-rip-route' YANG RPC
This command deletes all received routes from the RIP routing table.
It should be used with caution as it can create black holes in the
network until RIP reconverges. Very useful to make automated testing
(e.g. ANVL) more predictable, since the internal state of ripd can be
cleared after each test.

Implement the command using a YANG RPC so that it can be executed by
other northbound clients in addition to the CLI.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
6270ce38ad ripd: implement northbound callbacks to fetch route information
Support for fetching operational data is experimental at this point.
Locks must be introduced to ensure the rip->table routing table won't
be modified while we're iterating asynchronously over it (or iterating
from a separate pthread).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
5c1a84977b ripd: implement northbound callbacks to fetch neighbor information
Support for fetching operational data is experimental at this point.
Locks must be introduced to ensure the peer_list global variable won't
be modified while we're iterating asynchronously over it (or iterating
from a separate pthread).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
2e37ad7fd2 ripd: reduce excessive indentation in a few places
Make the code a bit easier to read. No binary changes.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
1dde2fbf78 ripd: remove vty configuration lock
The vty configuration lock is used to prevent inconsistencies when
multiple users are editing the configuration at the same time. The
pointer stored in vty->index might become invalid if the associated
configuration object is removed by another user in another CLI session.

Commands converted to the new northbound model don't use vty->index,
but vty->xpath_index and the vty->xpath array. The nb_cli_cfg_change()
function uses the VTY_CHECK_XPATH macro to check if the configuration
object being edited still exists and returns an error if it doesn't.

Now that all ripd commands were converted to the new northbound model,
remove the ripd vty lock because it's not necessary anymore.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
bc1bdde2f6 ripd: fix SIGHUP handling
We can now leverage the new northbound API to perform a full configuration
reload in ripd without the need for external help (i.e. frr-reload.py).

When vty_read_config() is called with the 'config' parameter set to
NULL, it performs a new configuration transaction where the running
configuration is *replaced* by the provided configuration file. With that
said, we don't need to do anything other than calling this function in
the SIGHUP handler of all FRR daemons. If a daemon hasn't been converted
to the new northbound model, vty_read_config() will simply *merge*
the configuration file into the running configuration.

The calls to rip_clean() and rip_reset() in the SIGUP handler were
changing configuration variables directly, bypassing the northbound
layer. Configuration variables should be changed only by the northbound
callbacks, and failure to respect that inevitably leads to inconsistencies
and crashes. Fix this.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
72010aca15 ripd: fix memory leaks when interfaces are deleted
This memleak has been present for at least 16 years. Fix it.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
94b117b2fb ripd: retrofit all RIP interface commands to the new northbound model
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
c1b7e58eda ripd: no need to use qobj anymore to keep track of "router rip"
Now that "router rip" and all underlying commands were converted to the
new northbound model, there's no need to use the qobj infrastructure to
keep track of the 'rip' global variable anymore.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
90eff9dafe ripd: retrofit the 'version' command to the new northbound model
Trivial conversion.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
b745780b5f ripd: retrofit the 'timer basic' command to the new northbound model
Trivial conversion. Use the northbound 'apply_finish()' callback so
we'll call rip_event() only once even if we change the three RIP timers
at the same time.

Convert the timers to uint32_t to match their representation in the
YANG model.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
4068787842 ripd: retrofit the 'route' command to the new northbound model
Trivial conversion. Remove the rip->route routing table and associated
code because this variable was used only to show the running
configuration.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
908f002092 ripd: retrofit the 'redistribute' commands to the new northbound model
Trivial conversion. As usual, combine multiple DEFUNs into a single
DEFPY for simplicity.

As a bonus of the northbound conversion, this commit fixes the
redistribution of certain protocols into ripd. The 'redist_type' array
used by the "redistribute" commands was terribly outdated, which was
preventing the CLI to parse correctly certain protocols like isis
and babel.

Remove the route_map hooks installed by rip_route_map_init() since they
were redundant (rip_init() already takes care of that).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
44f2f852a1 ripd: retrofit the 'passive-interface' command to the new northbound model
In ripd, the "passive-interface default" command has the following
behavior:
* All interfaces are converted to the passive mode;
* The "passive-interface IFNAME" command becomes a no-operation and
  "passive-interface IFNAME" statements are removed from the running
  configuration.
* The "no passive-interface IFNAME" can be used to remove interfaces
  from the passive mode.

This command was modeled using the following YANG data nodes in the
frr-ripd module:

  leaf passive-default {
    type boolean;
    default "false";
    description
      "Control whether interfaces are in the passive mode
       by default or not.";
  }
  leaf-list passive-interface {
    when "../passive-default = 'false'";
    type string {
      length "1..16";
    }
    description
      "A list of interfaces where the sending of RIP packets
       is disabled.";
  }
  leaf-list non-passive-interface {
    when "../passive-default = 'true'";
    type string {
      length "1..16";
    }
    description
      "A list of interfaces where the sending of RIP packets
       is enabled.";
  }

The 'when' statements guarantee that the list of passive interfaces
is cleared when the "passive-interface default" command is entered
(likewise, they guarantee that the list of non-passive interfaces is
cleared when the "passive-interface default" command is removed). This
matches exactly the behavior we want to model.

Finally, move the 'passive_default' global variable into the
'rip' structure where it belongs. This fixed the bug where the
"passive-interface default" command was being retained after a "no router
rip" + "router rip".

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00
Renato Westphal
8c942f6506 ripd: retrofit the 'offset-list' command to the new northbound model
Remove the rip_offset_list_set() and rip_offset_list_unset() functions
since they set/unset multiple configuration options at the same time. The
northbound callbacks need to set/unset configuration options individually.

The frr-ripd YANG module models the "offset-list" command using a list
keyed by the 'interface' and 'direction' leafs. One important detail is
that the IFNAME parameter is optional, and when it's not present it means
we want to match all interfaces. This is modeled using an interface name
of '*' since key lists are mandatory by definition in YANG.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-10-27 16:16:12 -02:00