]> git.proxmox.com Git - mirror_frr.git/log
mirror_frr.git
7 years agoisisd: fix an error that was probably a result of copypasting
Christian Franke [Tue, 14 Jun 2016 18:07:05 +0000 (20:07 +0200)]
isisd: fix an error that was probably a result of copypasting

The code should check for the existance of the correct list prior to
accessing it.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agobgpd: fix memory leaks in show commands
Christian Franke [Tue, 14 Jun 2016 18:07:01 +0000 (20:07 +0200)]
bgpd: fix memory leaks in show commands

sockunion_str2su allocates a struct sockunion that used to be leaked
in the show commands. Use str2sockunion and keep the information
on the stack instead.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
7 years agoospf6d: fix off-by-one on display of spf reasons
Christian Franke [Tue, 14 Jun 2016 18:07:04 +0000 (20:07 +0200)]
ospf6d: fix off-by-one on display of spf reasons

The loop should only iterate to array_size - 1.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agoospfd: fix double assignment in ospf_vl_set_timers
Christian Franke [Tue, 14 Jun 2016 18:07:02 +0000 (20:07 +0200)]
ospfd: fix double assignment in ospf_vl_set_timers

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agobgpd: fix off-by-one in attribute flags handling
Christian Franke [Tue, 14 Jun 2016 18:07:00 +0000 (20:07 +0200)]
bgpd: fix off-by-one in attribute flags handling

bgp_attr_flag_invalid can access beyond the last element of attr_flags_values.
Fix this by initializing attr_flags_values_max to the correct value.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agobgpd: don't leak memory in community_regexp_include
Christian Franke [Tue, 14 Jun 2016 18:06:59 +0000 (20:06 +0200)]
bgpd: don't leak memory in community_regexp_include

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agobgpd: setting nexthop doesn't need inet_pton
Christian Franke [Tue, 14 Jun 2016 18:06:56 +0000 (20:06 +0200)]
bgpd: setting nexthop doesn't need inet_pton

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agobgpd: 'show ip bgp summary json' shows large negative value for "peerUptimeMsec"
Daniel Walton [Thu, 20 Oct 2016 17:21:34 +0000 (17:21 +0000)]
bgpd: 'show ip bgp summary json' shows large negative value for "peerUptimeMsec"

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Ticket: CM-13239

7 years agobgpd: Fix shutdown order.
Donald Sharp [Wed, 19 Oct 2016 17:44:38 +0000 (13:44 -0400)]
bgpd: Fix shutdown order.

When shutting down bgp we were freeing the ecommunity hash
before we unintern'ed everything in it.

This is fallout from:
289d250 bgpd, lib: memory cleanups for valgrind, plus debug changes

Basically we started free'ing data we've never freed before
which caused us to access a hash that had already been freed.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agobgpd: implement admin distance
Maitane Zotes [Mon, 17 Mar 2014 13:01:42 +0000 (14:01 +0100)]
bgpd: implement admin distance

Until today the admin distance cannot be configured for any IPv6
routing protocol. This patch implements it for bgp.

Signed-off-by: Maitane Zotes <maz@open.ch>
Signed-off-by: Roman Hoog Antink <rha@open.ch>
7 years agoospf6d: implement admin distance
Maitane Zotes [Wed, 5 Mar 2014 08:13:43 +0000 (09:13 +0100)]
ospf6d: implement admin distance

Until today the admin distance cannot be configured for any IPv6
routing protocol. This patch implements it for ospf6.

Signed-off-by: Maitane Zotes <maz@open.ch>
Signed-off-by: Roman Hoog Antink <rha@open.ch>
7 years ago*: Fix duplicate commands from view/enable node consolidation
Paul Jakma [Thu, 16 Jun 2016 15:06:13 +0000 (16:06 +0100)]
*: Fix duplicate commands from view/enable node consolidation

7 years agolib: keep hash of node's commands to detect duplicate installs
Paul Jakma [Thu, 16 Jun 2016 15:03:11 +0000 (16:03 +0100)]
lib: keep hash of node's commands to detect duplicate installs

* command.h: (struct cmd_node) Add a hash, so duplicate installs of
  a cmd_element to a command node can be detected.  To help catch
  strays from the VIEW/ENABLE node consolidation particularly
  (installs to VIEW automatically install to ENABLE too now).
* command.c: (cmd_hash_{key,cmp}) helpers for the hash - just directly
  on the pointer value is sufficient to catch the main problem.
  (install_node) setup the hash for the command node.
  (install_element) check for duplicate installs.
  The assert on the cmd_parse_format seems misplaced.
  (install_default_basic) separate the basic, VIEW, node default commands
  to here.
  (cmd_init) get rid of dupes, given consolidation.
  (cmd_terminate) clean up the node command hash.

Not done: The (struct cmd_node)'s vector could be replaced with the
cmd hash, however much of the command parser depends heavily on the
vector and it's a lot of work to change.  A vector_lookup_value could
also work, particularly if vector could be backed by a hash.

The duplicate check could be disabled in releases - but useful in
development.  It's a little extra overhead at startup.  The command
initialisation overhead is already something that bites in
micro-benchmarks - makes it easy for other implementations to show
how much faster they are with benchmarks where other load is low
enough that startup time is a factor.

7 years agovtysh: fix oversight in vtysh buffer rewrite
David Lamparter [Wed, 19 Oct 2016 12:38:48 +0000 (14:38 +0200)]
vtysh: fix oversight in vtysh buffer rewrite

end can be NULL and shouldn't be adjusted in that case.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agolib: Fix redist memory free'ing
Donald Sharp [Wed, 19 Oct 2016 15:44:39 +0000 (11:44 -0400)]
lib: Fix redist memory free'ing

When shutting down, properly free memory associated
with zclient.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agolib: Add cleanup for routemaps
Donald Sharp [Wed, 19 Oct 2016 15:09:57 +0000 (11:09 -0400)]
lib: Add cleanup for routemaps

Some new routemap hash data structures were not being
properly cleaned up.  Add the hash_free code in.

This code does not fix the variety of daemons that
don't actually call route_map_finish.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years ago*: Consolidate routemap initialization
Donald Sharp [Wed, 19 Oct 2016 14:55:01 +0000 (10:55 -0400)]
*: Consolidate routemap initialization

Consolidate the routemap initialization into one
function.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
7 years agovtysh: refactor vtysh_client_{config,execute}
David Lamparter [Wed, 12 Oct 2016 15:05:51 +0000 (17:05 +0200)]
vtysh: refactor vtysh_client_{config,execute}

Triggered by a bugreport / patch by Gautam Kumar <gauta@amazon.com>,
this is a full rewrite vtysh_client_{config,execute}.  (The patch didn't
quite apply anymore.)

vtysh_client_run() now has a buffering implementation that can be read
without losing one's sanity and/or requiring alcoholic beverages.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agobgpd, lib: memory cleanups for valgrind, plus debug changes
Lou Berger [Wed, 10 Apr 2013 19:30:04 +0000 (12:30 -0700)]
bgpd, lib: memory cleanups for valgrind, plus debug changes

Description:
    We use valgrind memcheck quite a bit to spot leaks in
    our work with bgpd. In order to eliminate false positives,
    we added code in the exit path to release the remaining
    allocated memory.

    Bgpd startup log message now includes pid.

Some little tweaks by Paul Jakma <paul.jakma@hpe.com>:

* bgp_mplsvpn.c: (str2prefix_rd) do the cleanup in common code at the end
  and goto it.

[DL: dropped several chunks from original commit which are obsolete by
now on this tree.]

7 years agolib/zebra: remove code duplication in redist_del_instance()
Renato Westphal [Thu, 13 Oct 2016 16:06:10 +0000 (13:06 -0300)]
lib/zebra: remove code duplication in redist_del_instance()

Change redist_check_instance() to return a pointer instead of returning 1
on success. This way this function can be reused in redist_del_instance()
instead of duplicating the same logic there.

Also, remove unnecessary call to redist_check_instance() in
zebra_redistribute_delete().

While here, remove unnecessary cast from void* in redist_add_instance().

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
7 years agozebra: fix processing of redistribute messages
Renato Westphal [Thu, 6 Oct 2016 13:38:55 +0000 (10:38 -0300)]
zebra: fix processing of redistribute messages

We should not check/modify client->redist[] when the requested instance
is different than zero.

In the same way, we should not check/modify client->mi_redist[] when
the requested instance is zero.

Failure to respect these conditions can lead to unexpected behavior in
the client daemons.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
7 years agoldpd: remove dead code from zsend_redistribute_route()
Renato Westphal [Thu, 6 Oct 2016 13:16:58 +0000 (10:16 -0300)]
ldpd: remove dead code from zsend_redistribute_route()

As a general rule of thumb, we should write functions that do one thing
and that do it well. All callers of zsend_redistribute_route() are already
checking if the route should be redistributed or not (as the comment
says), so we definitely shouldn't bother with that in this function.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
7 years agozebra: cleanup redistribution code
Renato Westphal [Thu, 6 Oct 2016 12:18:41 +0000 (09:18 -0300)]
zebra: cleanup redistribution code

Remove code duplication and reduce excessive indentation levels whenever
possible.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
7 years agozebra: fix redistribution of default routes
Renato Westphal [Thu, 6 Oct 2016 12:45:27 +0000 (09:45 -0300)]
zebra: fix redistribution of default routes

We were always redistributing the default routes (IPv[46]) in
redistribute_update() because the 'client->redist_default' condition
always returns true.

The 'redist_default' member of the 'zserv' structure is a pointer and is
always initialized with vrf_bitmap_init() in the zebra_client_create()
function.

To fix this, use vrf_bitmap_check() instead.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
7 years agozebra/ldpd: introduce ZEBRA_ROUTE_ALL wildcard route type
Renato Westphal [Wed, 5 Oct 2016 20:58:01 +0000 (17:58 -0300)]
zebra/ldpd: introduce ZEBRA_ROUTE_ALL wildcard route type

The ZEBRA_ROUTE_ALL route type can be used by a client to request
all routes from zebra. The main motivation for introducing this is
to allow ldpd to get routes from all OSPF instances, not only from
the default one. Without ZEBRA_ROUTE_ALL, ldpd would need to send a
ZEBRA_REDISTRIBUTE_ADD message for each possible OSPF instance (65k),
which doesn't scale very well.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
7 years agobgpd: bgp_nexthop_cache not deleted with peers
Paul Jakma [Tue, 6 Sep 2016 16:23:48 +0000 (17:23 +0100)]
bgpd: bgp_nexthop_cache not deleted with peers

* Fix mild leak, bgp_nexthop_caches were not deleted when their peer was.
  Not a huge one, but makes valgrinding for other leaks noisier.

  Credit to Lou Berger <lberger@labn.net> for doing the hard work of
  debugging and pinning down the leak, and supplying an initial fix.
  That one didn't quite get the refcounting right, it seemed, hence
  this version.

  This version also keeps bncs pinned so long as the peer is defined, where
  Lou's tried to delete whenever the peer went through bgp_stop. That causes
  lots of zebra traffic if down peers go Active->Connect->Active, etc., so
  leaving bnc's in place until peer_delete seemed better.

* bgp_nht.c: (bgp_unlink_nexthop_by_peer) similar to bgp_unlink_nexthop, but
  by peer.
* bgp_nht.c: (bgp_unlink_nexthop_check) helper to consolidate checking
  if a bnc should be deleted.
  (bgp_unlink_nexthop_by_peer) ensure the bnc->nht_info peer reference
  is removed, and hence allow bncs to be removed by previous.
* bgpd.c: (peer_delete) cleanup the peer's bnc.

7 years agobgpd: Fix crash in 'show ip bgp nexthop'
Paul Jakma [Tue, 6 Sep 2016 10:20:27 +0000 (11:20 +0100)]
bgpd: Fix crash in 'show ip bgp nexthop'

* bgp_nexthop.c: (show_ip_bgp_nexthop_table) the AFIs are sparse, and start
  from 1, check there's a table before derefing so as not to crash.

7 years agolib: add event_counter
Christian Franke [Tue, 3 May 2016 17:59:42 +0000 (19:59 +0200)]
lib: add event_counter

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
7 years agolib: add api method to read current config path
Christian Franke [Tue, 3 May 2016 17:59:41 +0000 (19:59 +0200)]
lib: add api method to read current config path

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
7 years agobgpd: fix MRT table dumps for locally-originated routes
Colin Petrie [Wed, 11 May 2016 09:56:58 +0000 (11:56 +0200)]
bgpd: fix MRT table dumps for locally-originated routes

I've been working on a small patch to correct an issue in the BGP MRT
table dump code. It's a quick'n'easy fix initially, and I'd appreciate
any feedback on making it better :)

Issue:

When the BGP table dump code runs, it generates the peer_index_table.
This walks the list of peers, and dumps out their IP, ASN, address
family, etc. It also sets the peer index number in the peer struct.

Then the code walks the RIB, and for each prefix, writes out RIB
entries, that refer to the peer index number.

However, when it finds prefixes that are locally originated, the
associated peer is the 'self' peer, which wasn't in the list of peers,
never gets an index number assigned, but because it is calloc'd, the
index number is set to 0.

End result: locally-originated routes are associated with whichever peer
happens to be first in the list of remote peers in the index table :)

Example (from one of our route collectors) - these are two of our
originated prefixes (bgpdump output):
TABLE_DUMP2|1457568002|B|12.0.1.63|7018|84.205.80.0/24||IGP|193.0.4.28|0|0||NAG|64512
10.255.255.255|
TABLE_DUMP2|1457568006|B|12.0.1.63|7018|2001:7fb:ff00::/48||IGP|::|0|0||NAG||

The prefixes are announced by us (note it has an empty AS PATH (the
field after the prefix)) but also looks like it was received from AS7018
(12.0.1.63). In fact, the AS7018 peer just happens to be the first peer
in the index table.

Fix:

The simplest fix (which is also the method adopted by both OpenBGPd and
the BIRD mrtdump branch) is to create an empty placeholder 'peer' at the
start of the peer index table, for all the routes which are locally
originated to refer to.

I've attached a patch for this.
Here's a resulting bgpdump output after the patch:
TABLE_DUMP2|1458828539|B|0.0.0.0|0|93.175.150.0/24||IGP|0.0.0.0|0|0||NAG||
Now it is more obvious that the prefix is locally originated.

There are more complicated potential ways of fixing it
1) skip the local routes when dumping the RIB. This leads to questions
about what an MRT table dump *should* contain :)
2) include the 'self' peer in the list of peers used to generate the
index table.
etc etc.

But I'm quite happy with my 'create a fake peer, and associate local
routes with it' method :)

Your thoughts and feedback are welcome!

Regards,

Colin Petrie
Systems Engineer
RIPE NCC RIS Project
Tested-by: NetDEF CI System <cisystem@netdef.org>
7 years agozebra: use unsigned args for *addattr
David Lamparter [Tue, 11 Oct 2016 16:17:28 +0000 (18:17 +0200)]
zebra: use unsigned args for *addattr

[based on a patch by Paul Jakma changing it to size_t]

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agotests: fix MIN()-related sign warnings
David Lamparter [Tue, 11 Oct 2016 15:44:39 +0000 (17:44 +0200)]
tests: fix MIN()-related sign warnings

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agozebra: Fix route deletion on *BSD
Timo Teräs [Fri, 19 Feb 2016 02:19:54 +0000 (18:19 -0800)]
zebra: Fix route deletion on *BSD

Fix for not handling RTM_CHANGE correctly.  This patch change it to
delete/add instead.  Using RTM_CHANGE on kernels where it works is better,
but is left as an exercise for developer who has access and will to fix it
on *BSD.

[ed note: collaboration with Martin Winter]

7 years agozebra: kernel interface simplification
Timo Teräs [Fri, 15 Jan 2016 15:36:29 +0000 (17:36 +0200)]
zebra: kernel interface simplification

[DL: picked out from: "atomic FIB updates"]

This simplifies the OS-specific route update API into a single entry
point, kernel_route_rib(), which dispatches the various operations
internally.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
7 years agozebra: remove rt_ioctl kernel interface
David Lamparter [Sat, 28 Jun 2014 19:49:18 +0000 (21:49 +0200)]
zebra: remove rt_ioctl kernel interface

None of the BSDs uses ioctls to set routes anymore.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Acked-by: Greg Troxel <gdt@ir.bbn.com>
Acked-by: Feng Lu <lu.feng@6wind.com>
Acked-by: Paul Jakma <paul@jakma.org>
7 years agobgpd: Fix crash reported by NetDEF CI
Lou Berger [Fri, 5 Feb 2016 02:29:49 +0000 (21:29 -0500)]
bgpd: Fix crash reported by NetDEF CI

This patch is part of the previously submitted patch set on VPN and
Encap SAFIs.  It fixes an issue identified by NetDEF CI.

Ensure temp stack structures are initialized Add protection against
double frees / post free access to bgp_attr_flush

Signed-off-by: Lou Berger <lberger@labn.net>
7 years agobgp: add bgp_isvalid_nexthop helper and additional NHT zebra checks
Lou Berger [Tue, 11 Oct 2016 15:30:55 +0000 (11:30 -0400)]
bgp: add bgp_isvalid_nexthop helper and additional NHT zebra checks

7 years agobgp: ignore NHT when bgpd has never connected to zebra
Lou Berger [Fri, 7 Oct 2016 13:44:42 +0000 (09:44 -0400)]
bgp: ignore NHT when bgpd has never connected to zebra

7 years agorfapi: cleanup some warnings
Lou Berger [Thu, 6 Oct 2016 00:44:57 +0000 (20:44 -0400)]
rfapi: cleanup some warnings

7 years agozebra: Fix dist so that zebra includes right .h
Donald Sharp [Sun, 16 Oct 2016 03:44:17 +0000 (23:44 -0400)]
zebra: Fix dist so that zebra includes right .h

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agozebra: Fix compile failure in CI
Donald Sharp [Mon, 17 Oct 2016 22:00:19 +0000 (18:00 -0400)]
zebra: Fix compile failure in CI

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agozebra: Refactor netlink interactions
vivek [Mon, 17 Oct 2016 19:39:55 +0000 (12:39 -0700)]
zebra: Refactor netlink interactions

Separate core netlink functions and library functions from route-related
interactions and interface-related interactions.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Ticket: CM-13199
Reviewed By: CCR-5254
Testing Done: bgp-min, ospf-min

7 years agozebra: Derive VRF Id for slave interfaces correctly
vivek [Fri, 14 Oct 2016 23:02:37 +0000 (16:02 -0700)]
zebra: Derive VRF Id for slave interfaces correctly

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Ticket: CM-13195
Reviewed By: CCR-5250
Testing Done: Manual

<DETAILED DESCRIPTION (REPLACE)>

7 years agozebra: Ensure correct use of VRF ID versus NS ID
vivek [Fri, 14 Oct 2016 22:31:58 +0000 (15:31 -0700)]
zebra: Ensure correct use of VRF ID versus NS ID

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Ticket: CM-13194
Reviewed By: CCR-5248
Testing Done: None (trivial)

<DETAILED DESCRIPTION (REPLACE)>

7 years agozebra: Clear off pointer array into which netlink attributes are parsed
vivek [Fri, 14 Oct 2016 01:21:49 +0000 (18:21 -0700)]
zebra: Clear off pointer array into which netlink attributes are parsed

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Ticket: CM-13018
Reviewed By: CCR-5237
Testing Done: None

7 years agovtysh: fix build failure in vtysh_writeconfig_integrated()
Daniel Walton [Thu, 13 Oct 2016 13:48:02 +0000 (13:48 +0000)]
vtysh: fix build failure in vtysh_writeconfig_integrated()

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agozebra: Fix signed / unsigned build error
Daniel Walton [Thu, 13 Oct 2016 13:43:12 +0000 (13:43 +0000)]
zebra: Fix signed / unsigned build error

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agolib/vtysh: fix duplicate installation of some vty commands
Renato Westphal [Wed, 12 Oct 2016 15:39:02 +0000 (12:39 -0300)]
lib/vtysh: fix duplicate installation of some vty commands

This is a followup to commits 735e62 and 0b1442, where we forgot to apply
the same VIEW/ENABLE consolidation logic to vtysh. Also, we can't call
install_default() for the ENABLE node because some of the vty commands
installed by this function were already installed in the VIEW node before.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
7 years agovtysh: infer integrated config usage from existence of Quagga.conf
Christian Franke [Mon, 26 Sep 2016 20:01:37 +0000 (22:01 +0200)]
vtysh: infer integrated config usage from existence of Quagga.conf

Only write to integrated config if integrated config is configured
explicitly or it is already in use.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
7 years agobgp: Fix bi->extra->tag if statement
Donald Sharp [Tue, 11 Oct 2016 12:47:32 +0000 (08:47 -0400)]
bgp: Fix bi->extra->tag if statement

bi->extra->tag is a 3 byte array, the statement
as written will always be true.  Modify code
to see if we actually have any data in the
tag and then print the label.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Lou Berger <lberger@labn.net>
7 years agobgpd: Fix peer->weight usage
Donald Sharp [Tue, 11 Oct 2016 12:24:03 +0000 (08:24 -0400)]
bgpd: Fix peer->weight usage

When setting the weight make sure to use the
correct afi safi to get what we need.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Lou Berger <lberger@labn.net>
7 years agozebra: Fix signed / unsigned comparisons
Donald Sharp [Tue, 11 Oct 2016 12:21:41 +0000 (08:21 -0400)]
zebra: Fix signed / unsigned comparisons

clang is complaining about signed/unsigned comparisons
for rta_addattr_l.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agorfapi: cleanup some warnings
Lou Berger [Thu, 6 Oct 2016 00:44:57 +0000 (20:44 -0400)]
rfapi: cleanup some warnings

7 years agobgpd/rfp: fix remaining index_sub uses
David Lamparter [Tue, 11 Oct 2016 11:37:26 +0000 (13:37 +0200)]
bgpd/rfp: fix remaining index_sub uses

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agobuild: remove accidentally-added configure outputs
David Lamparter [Tue, 11 Oct 2016 11:08:10 +0000 (13:08 +0200)]
build: remove accidentally-added configure outputs

these files do not belong in the git tree.  (They're temporaries during
a ./configure run and normally removed at the end;  let's add them to
.gitignore anyway.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agoospfd: Fix arm compile issue
Donald Sharp [Mon, 10 Oct 2016 23:35:43 +0000 (19:35 -0400)]
ospfd: Fix arm compile issue

size_t printf formatter is %zd!

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agobgpd: 'neighbor x.x.x.x weight' should be per address-family
Daniel Walton [Mon, 10 Oct 2016 14:53:34 +0000 (07:53 -0700)]
bgpd: 'neighbor x.x.x.x weight' should be per address-family

Ticket: CM-13053
Reviewed By: dslice@cumulusnetworks.com

'neighbor x.x.x.x weight' was implemented as a per-peer knob instead of
a per-peer per-afi-safi option. This makes it configurable per-peer
per-afi-safi so that we can do things like soft clear that afi/safi when
weight is modified.

7 years agobgpd: Fix changes caused by index_sub change.
Donald Sharp [Sat, 8 Oct 2016 20:37:48 +0000 (16:37 -0400)]
bgpd: Fix changes caused by index_sub change.

The qobj changes changed how index_sub was handled.

This commit leaves some issues still.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years ago*: Consolidate all double VIEW_NODE and ENABLE_NODE's
Donald Sharp [Fri, 11 Mar 2016 19:27:13 +0000 (14:27 -0500)]
*: Consolidate all double VIEW_NODE and ENABLE_NODE's

If a command is put into the VIEW_NODE, it is going into the
ENABLE_NODE as well.  This is especially true for show commands.
As such if a command is in both consolidate it down to VIEW_NODE.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agolib: Consolidate VIEW_NODE to be ENABLE_NODE as well
Donald Sharp [Fri, 11 Mar 2016 19:27:12 +0000 (14:27 -0500)]
lib: Consolidate VIEW_NODE to be ENABLE_NODE as well

If you are in VIEW_NODE, the command should exist in ENABLE_NODE
as well.  This is being done to reduce chances of code being
added to one but not the other NODE.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agobgpd, lib: Remove RESTRICTED_NODE from code base
Donald Sharp [Fri, 11 Mar 2016 19:27:11 +0000 (14:27 -0500)]
bgpd, lib: Remove RESTRICTED_NODE from code base

The RESTRICTED_NODE command is not used, introduces code
complexity and provides no additional levels of security.

The only way to get into RESTRICTED_NODE is to add, under
vty configuration the command 'anonymous restricted', and
then telnet to a daemon, provide a password, then type
'enable' and fail to enter the password three times.
Then the user can enter a very limited set of commands to
monitor bgp and only bgp behavior.

This commit removes both the RESTRICTED_NODE usage as well
as the lib/* usage of the code

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agoripngd: add support for route tags
Christian Franke [Sat, 1 Oct 2016 20:35:32 +0000 (22:35 +0200)]
ripngd: add support for route tags

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
7 years agoripd: add support for route tags
Christian Franke [Sat, 1 Oct 2016 19:43:17 +0000 (21:43 +0200)]
ripd: add support for route tags

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
7 years agoospf6d: add support for route tags
Christian Franke [Sat, 1 Oct 2016 04:41:40 +0000 (06:41 +0200)]
ospf6d: add support for route tags

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
7 years ago*: Consistently support 32-bit route tags
Christian Franke [Sat, 1 Oct 2016 18:42:34 +0000 (20:42 +0200)]
*: Consistently support 32-bit route tags

This patch improves zebra,ripd,ripngd,ospfd and bgpd so that they can
make use of 32-bit route tags in the case of zebra,ospf,bgp or 16-bit
route-tags in the case of ripd,ripngd.

It is based on the following patch:

    commit d25764028829a3a30cdbabe85f32408a63cccadf
    Author: Paul Jakma <paul.jakma@hpe.com>
    Date:   Fri Jul 1 14:23:45 2016 +0100

    *: Widen width of Zserv routing tag field.

But also contains the changes which make this actually useful for all
the daemons.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
7 years agoospfd: Update route in zebra when tag changes
Christian Franke [Sat, 1 Oct 2016 02:06:03 +0000 (04:06 +0200)]
ospfd: Update route in zebra when tag changes

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
7 years agozebra: Fix some warnings found during compile.
Donald Sharp [Tue, 22 Dec 2015 20:24:25 +0000 (15:24 -0500)]
zebra: Fix some warnings found during compile.

This commit fixes some warnings found in Martin's Testbed
that compiles sun solaris and freebsd images.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agolib: Remove unknown protocol.
Donald Sharp [Fri, 7 Oct 2016 16:35:06 +0000 (12:35 -0400)]
lib: Remove unknown protocol.

What is MASC anyways?

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agolib: Fix ordering issue in protocol names
Donald Sharp [Fri, 7 Oct 2016 16:20:33 +0000 (12:20 -0400)]
lib: Fix ordering issue in protocol names

The protocol names and enum must be kept
in the same order.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agobgpd: remove the "exit" at the end of "router bgp"
Daniel Walton [Fri, 7 Oct 2016 14:13:26 +0000 (14:13 +0000)]
bgpd: remove the "exit" at the end of "router bgp"

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agozebra: use qobj and enable concurrent config edits
David Lamparter [Fri, 30 Sep 2016 13:38:03 +0000 (15:38 +0200)]
zebra: use qobj and enable concurrent config edits

This puts all the proper VTY_DECLVAR_CONTEXT calls in place, removing
all vty->index uses in the process.  With that, vty_config_lockless can
be enabled in zebra.

[v2: fix ordering screw-up in "interface XXX" command]

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agoldpd: replace global vars w/ qobj for vty context
Renato Westphal [Thu, 29 Sep 2016 17:16:50 +0000 (14:16 -0300)]
ldpd: replace global vars w/ qobj for vty context

ldpd was keeping track of the vty session's position in config editing
with 3 global static variables.  This worked because only one vty could
be in configuration-editing mode before.

Replace with vty->qobj_index infrastructure and enable
vty_config_lockless.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agoldpd: qobj: register everything
Renato Westphal [Wed, 22 Jun 2016 12:59:28 +0000 (09:59 -0300)]
ldpd: qobj: register everything

Place the appropriate QOBJ_* calls.  A bit more complicated for ldpd due
to the dup-merge config scheme.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agoldpd: add in-process API for creating/deleting
Renato Westphal [Wed, 22 Jun 2016 12:59:28 +0000 (09:59 -0300)]
ldpd: add in-process API for creating/deleting

These functions are currently unused but will be used by the Cap'n Proto
interface.  They're not a particular burden to maintain in-tree, so here
they go.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agoldpd: merge/dup/reload void **ref support
Renato Westphal [Wed, 22 Jun 2016 12:59:28 +0000 (09:59 -0300)]
ldpd: merge/dup/reload void **ref support

Extend configuration duplication-merge mechanism to allow keeping track
of a single specific object.  A "void **" pointer is passed in; the
"void *" pointer it points to is updated with the new address of the
object it points to.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agoldpd: reset interface configuration when it's disabled
Renato Westphal [Thu, 29 Sep 2016 17:52:32 +0000 (14:52 -0300)]
ldpd: reset interface configuration when it's disabled

This is necessary to prevent the same old configuration to come back
when the interface is reactivated later for a given address-family.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
7 years agolib, isisd: enable concurrent configuration editing
David Lamparter [Tue, 27 Sep 2016 14:53:25 +0000 (16:53 +0200)]
lib, isisd: enable concurrent configuration editing

Finally, this disables the config editing lock for isisd.  It also
enables deprecation warnings for the lib/ and isisd/ to catch accidental
uses of vty->index.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agoisisd: use qobj for vty->index context position
David Lamparter [Mon, 26 Sep 2016 16:36:13 +0000 (18:36 +0200)]
isisd: use qobj for vty->index context position

This converts all uses of vty->index over to qobj.  With this, isisd now
supports concurrent configuration editing as there are no more unsafe
references held anywhere while in config-edit mode.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agolib: replace vty->index_sub with qobj
David Lamparter [Tue, 27 Sep 2016 14:51:58 +0000 (16:51 +0200)]
lib: replace vty->index_sub with qobj

The keychain code is the only user of vty->index_sub;  this is also
replaced with a qobj safe-pointer.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agolib: use qobj for vty->index context position
David Lamparter [Mon, 26 Sep 2016 18:17:12 +0000 (20:17 +0200)]
lib: use qobj for vty->index context position

Prepares the library CLI functions for concurrent config access.  Note
the vty->index pointer is still kept functional for the daemons to use.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agolib: vty: add infrastructure for qobj ID "index"
David Lamparter [Mon, 26 Sep 2016 16:36:49 +0000 (18:36 +0200)]
lib: vty: add infrastructure for qobj ID "index"

As mentioned in previous commits, this prepares to replace the vty's
"void *index" context position with a safe qobj pointer.  This will
allow concurrent configuration editing by multiple users, as soon as no
more code (library included) in the daemon uses vty->index anymore.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agoisisd: qobj: register everything
David Lamparter [Tue, 5 Apr 2016 21:54:53 +0000 (18:54 -0300)]
isisd: qobj: register everything

Wire up all neccessary isisd first-class objects to be able to use qobj
safe-pointers on them.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agolib: qobj: register ifaces, routemaps & keychains
David Lamparter [Tue, 27 Sep 2016 12:51:08 +0000 (14:51 +0200)]
lib: qobj: register ifaces, routemaps & keychains

This places the appropriate calls so library objects can be used with
qobj "pointers", especially in the CLI.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agolib: add "qobj" object-ID infrastructure
David Lamparter [Mon, 26 Sep 2016 15:30:30 +0000 (17:30 +0200)]
lib: add "qobj" object-ID infrastructure

This adds 64-bit random identifiers as "safe pointers" which are also
type-tracked / can have type-specific extension methods.

This will be used by both the CLI (to keep safe references while in
config editing mode) as well as the Cap'n Proto code (to hand out
pointers to the user in a safe way and add per-type handlers)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
7 years agobgpd: 'Last write' does not update when we TX a keepalive
Daniel Walton [Thu, 6 Oct 2016 13:20:02 +0000 (13:20 +0000)]
bgpd: 'Last write' does not update when we TX a keepalive

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Ticket: CM-5518

8 years agobgpd: Fix crash in vnc_import_bgp_add_route
Donald Sharp [Sun, 2 Oct 2016 22:33:32 +0000 (18:33 -0400)]
bgpd: Fix crash in vnc_import_bgp_add_route

The ordering to check for NULL pointer was
reversed in this function.

I switched the order after examing a couple other
functions to see that they have the 'correct' order.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agosome rfapi compile fixes
Daniel Walton [Wed, 5 Oct 2016 20:54:55 +0000 (20:54 +0000)]
some rfapi compile fixes

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
7 years agozebra: Fix wrong afi used in zebra_static.c
Donald Sharp [Wed, 5 Oct 2016 14:58:43 +0000 (10:58 -0400)]
zebra: Fix wrong afi used in zebra_static.c

When calling a route uninstall in zebra_static.c use the
afi passed in and don't hardcode AFI_IP

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
7 years agodebian: Disable build of vnc currently
Donald Sharp [Mon, 3 Oct 2016 12:19:06 +0000 (08:19 -0400)]
debian: Disable build of vnc currently

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
7 years agovnc: look for librfp.a in builddir
Lou Berger [Thu, 29 Sep 2016 13:03:31 +0000 (09:03 -0400)]
vnc: look for librfp.a in builddir

7 years agovnc: default to enabled
Lou Berger [Wed, 28 Sep 2016 22:16:25 +0000 (18:16 -0400)]
vnc: default to enabled

7 years agovnc: use directories in includes (request from Martin W.)
Lou Berger [Wed, 28 Sep 2016 22:03:43 +0000 (18:03 -0400)]
vnc: use directories in includes (request from Martin W.)

7 years agobgpd: add L3/L2VPN Virtual Network Control feature
Lou Berger [Sat, 7 May 2016 18:18:56 +0000 (14:18 -0400)]
bgpd: add L3/L2VPN Virtual Network Control feature

This feature adds an L3 & L2 VPN application that makes use of the VPN
and Encap SAFIs.  This code is currently used to support IETF NVO3 style
operation.  In NVO3 terminology it provides the Network Virtualization
Authority (NVA) and the ability to import/export IP prefixes and MAC
addresses from Network Virtualization Edges (NVEs).  The code supports
per-NVE tables.

The NVE-NVA protocol used to communicate routing and Ethernet / Layer 2
(L2) forwarding information between NVAs and NVEs is referred to as the
Remote Forwarder Protocol (RFP). OpenFlow is an example RFP.  For
general background on NVO3 and RFP concepts see [1].  For information on
Openflow see [2].

RFPs are integrated with BGP via the RF API contained in the new "rfapi"
BGP sub-directory.  Currently, only a simple example RFP is included in
Quagga. Developers may use this example as a starting point to integrate
Quagga with an RFP of their choosing, e.g., OpenFlow.  The RFAPI code
also supports the ability import/export of routing information between
VNC and customer edge routers (CEs) operating within a virtual
network. Import/export may take place between BGP views or to the
default zebera VRF.

BGP, with IP VPNs and Tunnel Encapsulation, is used to distribute VPN
information between NVAs. BGP based IP VPN support is defined in
RFC4364, BGP/MPLS IP Virtual Private Networks (VPNs), and RFC4659,
BGP-MPLS IP Virtual Private Network (VPN) Extension for IPv6 VPN . Use
of both the Encapsulation Subsequent Address Family Identifier (SAFI)
and the Tunnel Encapsulation Attribute, RFC5512, The BGP Encapsulation
Subsequent Address Family Identifier (SAFI) and the BGP Tunnel
Encapsulation Attribute, are supported. MAC address distribution does
not follow any standard BGB encoding, although it was inspired by the
early IETF EVPN concepts.

The feature is conditionally compiled and disabled by default.
Use the --enable-bgp-vnc configure option to enable.

The majority of this code was authored by G. Paul Ziemba
<paulz@labn.net>.

[1] http://tools.ietf.org/html/draft-ietf-nvo3-nve-nva-cp-req
[2] https://www.opennetworking.org/sdn-resources/technical-library

Now includes changes needed to merge with cmaster-next.

8 years agolib: add skiplist
Lou Berger [Tue, 19 Apr 2016 20:00:37 +0000 (16:00 -0400)]
lib: add skiplist

8 years agobgpd: drop machineparse / random "show" improvements
Lou Berger [Tue, 12 Jan 2016 18:42:08 +0000 (13:42 -0500)]
bgpd: drop machineparse / random "show" improvements

Signed-off-by: Lou Berger <lberger@labn.net>
Fix up a few changed missed in previous merge

8 years agobgp debug: restore printing of memstats on exit, now prints if any debug flag set
Lou Berger [Sat, 24 Sep 2016 13:09:36 +0000 (09:09 -0400)]
bgp debug: restore printing of memstats on exit, now prints if any debug flag set

8 years agobgpd: remove old/duplicate, and now out of order prefixlen test
Lou Berger [Tue, 27 Sep 2016 11:54:56 +0000 (07:54 -0400)]
bgpd: remove old/duplicate, and now out of order prefixlen test

8 years agomemory: restore 'memstats:' keyword when logging memstats - useful in log
Lou Berger [Sat, 24 Sep 2016 13:18:23 +0000 (09:18 -0400)]
memory: restore 'memstats:' keyword when logging memstats - useful in log

8 years agolog.h: restore vzlog extern
Lou Berger [Fri, 23 Sep 2016 17:40:19 +0000 (13:40 -0400)]
log.h: restore vzlog extern

8 years agolib: add route_table_get_default_delegate
Lou Berger [Tue, 19 Apr 2016 20:06:35 +0000 (16:06 -0400)]
lib: add route_table_get_default_delegate