Commit Graph

1944 Commits

Author SHA1 Message Date
Lou Berger
3f54388956 Merge pull request #939 from jbonor/optimization
Optimization
2017-08-22 09:01:20 -04:00
Donald Sharp
cacec09618 Merge pull request #1016 from opensourcerouting/cli-minor
minor cli foo (hashtable stats, pseudowire show)
2017-08-22 08:54:18 -04:00
David Lamparter
4093d47b99 lib: terminate capabilities only if initialized
zprivs_caps_init() is called conditionally, apply the same condition on
terminate.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-21 21:53:46 +02:00
David Lamparter
40818cec85 lib: move hashstats under debug, show per-daemon
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-21 14:41:02 +02:00
Jorge Boncompte
19aad877b7 lib: optimize IPV4_ADDR_[SAME|COPY]()
Change all callers of IPV4_ADDR_SAME() to pass a pointer to a struct in_addr

Use assignment and comparison instead of memcpy() and memcmp(). Avoids function
calls. Faster.

Signed-off-by: Jorge Boncompte <jbonor@gmail.com>
2017-08-17 17:58:35 +02:00
Jorge Boncompte
f104f6c1a6 lib: cleanup the work queue implementation
Convert the work queue implementation to not use the generic linked list
to mantain the item list and use instead a simple queue from queue.h that
does not allocate memory for each node.

Signed-off-by: Jorge Boncompte <jbonor@gmail.com>
2017-08-17 17:47:07 +02:00
Jorge Boncompte
cd85bc2e0b lib: standardize use of queue.h
The simple queue implementation in OpenBSD and FreeBSD are called diferently,
standardize in the use of the FreeBSD version and map the missing names only
if we compile on OpenBSD.

Signed-off-by: Jorge Boncompte <jbonor@gmail.com>
2017-08-17 17:47:05 +02:00
Jorge Boncompte
01dccc0b19 lib: inline route_node_lock()/route_node_unlock()
Avoid function calls.

Signed-off-by: Jorge Boncompte <jbonor@gmail.com>
2017-08-17 17:46:22 +02:00
David Lamparter
ce19a04aea lib: replace if_add_hook with hook_* logic
This allows modules to register their own additional hooks on interface
creation/deletion.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-15 13:25:44 +02:00
David Lamparter
0395137477 *: centralize some exit cleanup into libfrr
Start creating a counterpart to frr_init and frr_late_init.
Unfortunately, some daemons don't do any exit handling, this doesn't
change that just yet.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-15 13:25:44 +02:00
David Lamparter
08c4c73be6 lib: hooks: support priority ordering & reversing
Allow registering callbacks with a priority value used to order them
relative to each other.  Plus a reverse variant that just flips the
direction on priorities.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-15 13:25:41 +02:00
David Lamparter
bf30e5eaf2 Merge pull request #948 from qlyoung/fix-set-ip-next-hop-peer-address
lib, bgpd: fix `set ip next-hop peer-address`
2017-08-15 11:10:01 +02:00
David Lamparter
24fb3b1873 Merge pull request #934 from qlyoung/mac-parser
lib: add CLI token for 48-bit mac addresses
2017-08-15 11:09:15 +02:00
Quentin Young
473196f613
lib, python: add M:A:C support for clippy
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-14 11:30:08 -04:00
David Lamparter
b4e55fc5e8 lib: fix prefix list trie corruption
The specific code here needs to establish an absolute order of more
specific to less specific possible matches in a prefix list.  This is
indirectly checked by an assert on insertion, because the "next best"
entry is required to be consistent even when joining multiple chains
of candidates.

Unfortunately, trie_install_fn() would insert entries too far ahead in
the chain if another entry with higher sequence number was seen.  This
breaks the trie and (rightfully) triggers the assertion failure on
insert.

Fixes: #937
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-11 19:02:22 +02:00
Quentin Young
9779e3f193
lib: add CLI token for 48-bit mac addresses
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-11 12:42:01 -04:00
David Lamparter
fc4ecb5a5e Merge pull request #957 from chiragshah6/mdev
ospfd: fix crash due to conflicting router-id, fix MI-OSPF cli in lib commands and fix memory leaks
2017-08-11 18:28:04 +02:00
David Lamparter
eef3d03026 lib: don't close stdio when running foreground
c9c8d0d ("lib: close stdin/out/err in non-terminal case") overshot its
goal and closes stdin/stdout/stderr even when a daemon is running in
foreground.  That means stdout logging & exit memory reporting are both
broken.

Reported-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-11 15:45:56 +02:00
Chirag Shah
825d5fbf59 lib: Fix multi instance ospf
ospfd crashes upon configuring multi-instance ospf
i.e 'router ospf x'.
ospfd can return CMD_NOT_MY_INSTANCE which
is not supported in lib/commands

Support two of the error codes
CMD_NOT_MY_INSTANCE and CMD_WARNING_CONFIG_FAILED

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2017-08-10 14:59:07 -07:00
Quentin Young
89602edb31
lib, bgpd: fix set ip next-hop peer-address
This bgp-specific command had its positive form defined only in bgpd and
its negative form defined only in lib, which broke the whole rule for
other daemons.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-10 12:31:47 -04:00
David Lamparter
695bb8f0d1 Merge branch 'frr/pull/822' ("EVPN fixes")
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-09 21:34:10 +02:00
Donald Sharp
3cc2066899 Merge pull request #926 from opensourcerouting/tcp-zebra
remove `--enable-tcp-zebra`
2017-08-09 14:43:48 -04:00
David Lamparter
2c3699c0eb Merge pull request #940 from qlyoung/hashtable-expansion-lf
lib: use load factor as hash expansion trigger
2017-08-09 20:43:40 +02:00
David Lamparter
4e1fd26a5e Merge remote-tracking branch 'frr/master' into tcp-zebra 2017-08-09 20:42:27 +02:00
Donald Sharp
fc73dd4bdf Merge pull request #911 from opensourcerouting/non-recursive-2
more non-recursive build, fix cross-compile, & doc build mangling
2017-08-09 14:38:07 -04:00
Donald Sharp
f790234f2f Merge pull request #892 from opensourcerouting/watchfrr-simplify
simplify watchfrr, add --terminal, improve startup logging
2017-08-09 14:32:44 -04:00
David Lamparter
3b0f6068a8 lib: some final MAC access-list fixes
- couldn't load back written configs because it was trying to parse
  "any" as MAC address
- don't need special-casing in filter_match_zebra(), exact is going to
  be 0 for AF_ETHERNET anyway
- some vty formatting was slightly different
- is_zero_mac now static to prefix.c

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-09 20:30:34 +02:00
Quentin Young
bed7ad8387
lib: use load factor as hash expansion trigger
Previous strategy was to resize the hash table when the length of any
one bucket exceeded a certain size, with some logic for intelligently
stopping resizes when the gains from doing so weren't sufficient. While
this was a good idea that attempted to optimize both space and lookup
time, unfortunately under transient degenerate conditions this led to
some issues with the tables not resizing when they should have,
harming performance. The resizing restriction was lifted, but this had
the result of exacerbating degenerate behavior and caused out of memory
conditions.

This patch changes the hash expansion criterion to be based on the
number of elements in the table. Once the # of elements in the table
exceeds the number of buckets, the table size is doubled. While the
space efficiency of this method decreases relative to the perfectness of
the hash function, at least this strategy puts the table performance
squarely in the hands of the hash function.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-09 13:53:11 -04:00
Renato Westphal
2dd0d72624 zebra: add support for static pseudowires
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 13:03:36 +02:00
Renato Westphal
87b5f1b77b ldpd: integrate with the pseudowire manager in zebra
If we receive a notification from zebra indicating that the installation
of a pseudowire has failed (e.g. no reachability), send a PW Status
notification to the remote peer (or a Label Withdraw if the remote peer
doesn't support the PW Status TLV).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 12:35:16 +02:00
ßingen
6833ae01bc zebra: add pseudowire manager
Base framework for supporting MPLS pseudowires in FRR.

A consistent zserv interface is provided so that any client daemon
(e.g. ldpd, bgpd) can install/uninstall pseudowires in a standard
way. Static pseudowires can also be implemented by using the same
interface.

When zebra receives a request to install a pseudowire and the installation
in the kernel or hardware fails, a notification is sent back to the
client daemon and a new install attempt is made every 60 seconds (until
it succeeds).

Support for external dataplanes is provided by the use of hooks to
install/uninstall pseudowires.

Signed-off-by: ßingen <bingen@voltanet.io>
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 12:35:15 +02:00
ßingen
ea4ecfb351 ospf: Fix segfault if compiled with DEBUG
If OSPF_LS_REFRESH_TIME is 60, min_delay in ospf_refresher_register_lsa
function (ospf_lsa.c) would be negative, so index (which is unsigned)
would be out of range, causing a segfault.

Signed-off-by: ßingen <bingen@voltanet.io>
2017-08-09 12:07:58 +02:00
David Lamparter
b8c1fde3cb lib: don't mkdir state paths in watchfrr
watchfrr doesn't know if there will be -u/-g options on the individual
daemons, so it doesn't know what the appropriate ownership is.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-09 10:55:03 +02:00
David Lamparter
5d13cd091a lib: thoroughly disable tcp-zebra
Disable this in the code to make it hard for people to shoot themselves
in the foot.  It's only left as a remnant for development use.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-08 20:11:10 +02:00
Donald Sharp
0f6476ccc3 lib, bgpd: Use 'struct prefix *' for filter matching
There is no need for special casing of mac addresses,
since the mac address is it's own type integrated
into `struct prefix` now.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-08 12:55:03 -04:00
Quentin Young
eff09c66a4
lib: fix still reachable linked list in thread.c
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-08 12:54:28 -04:00
Donald Sharp
b03b88986e lib, bgpd: Distinguish between AF_EVPN and AF_ETHERNET
Create AF_EVPN for internal use and start using it.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2017-08-08 10:34:31 -04:00
Donald Sharp
b34fd35d3a lib, bgpd: Address Review comments.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-08 10:30:14 -04:00
Donald Sharp
1667fc4097 lib: Fix extra doc string
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-08 10:30:13 -04:00
Mitesh Kanjariya
69b61704b8 lib: changes needed for mac access-list any command
Ticket: CM-17074
Review: CCR-6453
Unit-test: Manual

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-08-08 10:28:55 -04:00
Mitesh Kanjariya
1a98c08704 bgpd/zebra/lib: EVPN support for asymmetric VxLan routing
1. Advertise gateway mac-ip in EVPN
2. Advertise VRR mac-ip in EVPN
3. Ignore gateway mac-ip advertisements in case of distributed gateway
4. Config knob to enable/disable gateway mac-ip advertisements

Ticket: CM-16456, CM-16543, CM-16555, CM-16778
Review: CCR-6283
Unit-test: Manual

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-08-08 10:28:46 -04:00
Mitesh Kanjariya
d37ba5499e bgpd, lib, vtysh: Added support for mac filtering in route-maps
1. Added support to create mac filters
2. Enabled route-map commands for EVPN address family
3. Provision to add mac filters under match clause in route-maps

Ticket: CM-16349
Review: CCR-6190
Unit-test: Manual (logs attached to ticket)

Signed-off-by: Mitesh Kanjariya <mitesh@cumulusnetworks.com>
2017-08-08 10:09:37 -04:00
Donald Sharp
99a6a31e50 *: Define the number of seconds in a Day, Week and year
The defines:

ONE_DAY_SECOND
ONE_WEEK_SECOND
ONE_YEAR_SECOND

were being defined all over the system, move the
define to a central location.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-08 09:06:22 -04:00
David Lamparter
689f5a8c84 *: remove --enable-tcp-zebra, rework ZAPI path
This adds "@tcp" as new choice on the -z option present in zebra and the
protocol daemons.  The --enable-tcp-zebra option on configure is no
longer needed, both UNIX and TCP socket support is always available.

Note that @tcp should not be used by default (e.g. in an init script),
and --enable-tcp-zebra should never have been in any distro package
builds, because

**** TCP-ZEBRA IS A SECURITY PROBLEM ****

It allows arbitrary local users to mess with the routing table and
inject bogus data -- and also ZAPI is not designed to be robust against
attacks.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-08 11:14:05 +02:00
David Lamparter
5225e155d3 lib: cli: don't run off graph "pre-end"
Behind END_TKN, there is another graph node whose data pointer is
actually struct cmd_element instead of struct cmd_token.  Don't try to
interpret that as cmd_token.  This causes very interesting crashes when
ASLR decides to give one of the strings of a command definition a lower
32-bit value that is a valid cmd_token_type (e.g. FORK_TKN).

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-07 15:05:34 +02:00
David Lamparter
9b0a8efa46 Merge pull request #912 from chiragshah6/mdev
Fix Multi-Instance OSPF configurations CLIs
2017-08-06 03:55:10 +02:00
David Lamparter
c053ff8bff Merge pull request #899 from donaldsharp/ETH_ALEN
Fix Crash and Convert to ETH_ALEN
2017-08-05 05:19:01 +02:00
Russ White
6b22ae607f Merge pull request #906 from opensourcerouting/vty-close
lib: vty: fix config-write fd leak
2017-08-04 13:14:43 -04:00
Quentin Young
61b9e9d6b3
lib: remove last powl()
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-04 10:58:00 -04:00
Chirag Shah
a3d826f0ea ospfd: Fix MI-OSPF configuraton clis
Multi-Instance OSPF configuration CLI would fail because
first client return error upon seeing qobj_index being 0.
With new marco generate new error code to return from each
instance (vtysh client) and if the command is intended for given
instance, its qobj_index would be nonzero and process the command
and push correct ospf context. Other instance would return the error.
On vtysh end, check all instance return an error log a message to a
file.

Testing Done:
Verfied various MI-OSPF configuration CLI with multi instances.

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2017-08-04 07:47:45 -07:00
Donald Sharp
7628d862ca lib: Add ETH_ALEN to prefix.h and deprecate ETHER_ADDR_LEN
From discussion we decided that we should use ETH_ALEN instead
of ETHER_ADDR_LEN.  Add ETH_ALEN to prefix.h and make
ETHER_ADDR_LEN generate a warning when used( but still work ).

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-04 09:06:14 -04:00
Donald Sharp
6b36796215 Merge pull request #909 from opensourcerouting/isis-perf
IS-IS: improve spf performance
2017-08-04 09:04:12 -04:00
David Lamparter
10b8a9c007 lib: vty: fix config-write fd leak
Since we were only setting vty->wfd in config_write, vty->fd would
remain 0 and vty_close() wouldn't close vty->wfd.

Clean up the entire fd closing and make it more explicit.  We were even
trying to write to stdin...

Reported-by: Jorge Boncompte <jbonor@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-04 12:15:54 +02:00
David Lamparter
70d27c5b7d build: clean up BUILT_SOURCES
BUILT_SOURCES doesn't do what the name suggests.  What it actually means
is "these files should be built first when doing a 'make' without
explicit target" (or "make all").

It's pretty much almost always wrong to use BUILT_SOURCES, the only
correct use is when a file is needed by an unspecified / large set of
files.

Also remove version.h and route_types.h from dist tarball while we're at
it.  configure will create them anyway.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-04 11:13:55 +02:00
David Lamparter
89727c8d9e build: fix clippy cross-compile
Broke the build-for-host setup for clippy in the non-recursive changes
:/

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-04 11:09:45 +02:00
David Lamparter
3619938e2f Merge pull request #891 from Jafaral/portability
Portability configurations
2017-08-04 08:52:07 +02:00
David Lamparter
e4f48ace5d Merge pull request #900 from qlyoung/apply-mask
lib: add missed apply_mask()
2017-08-04 08:49:20 +02:00
Quentin Young
bca37d172a
lib: minor style fixes
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-03 11:25:24 -04:00
Quentin Young
c7fcc67369
lib: add missed apply_mask()
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-03 11:12:14 -04:00
Christian Franke
c7d3895eb1 lib: Reformat comment so my eyes don't fall out while reading it
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2017-08-03 14:30:01 +02:00
Christian Franke
7a7761d21c lib: move prefix hash key to prefix.c to allow global use
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2017-08-03 13:37:58 +02:00
Christian Franke
31bfa0624d lib: add sbuf
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
2017-08-03 11:34:01 +02:00
David Lamparter
c9c8d0d189 lib: close stdin/out/err in non-terminal case
Oops, forgot this path... in the --terminal case, stdio is closed when
the user ends the terminal session, but without terminal it was left
open.

(This caused a ssh session hang in the CentOS6 CI because the file
descriptors were still open, so ssh would keep the session alive...)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-03 03:37:37 +02:00
David Lamparter
b4fa7c95f9 lib: replace stderr with zlog in vty config load
Now that the logging hole is plugged, we can just print config-loading
errors to the log.  This has 2 hidden advantages:

- vty_read_config calls in SIGHUP don't print errors to /dev/null
- errors are consistently printed to syslog on --enable-cumulus

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 23:36:42 +02:00
David Lamparter
d34cb7f0b7 lib: plug logging hole during startup
zlog_* doesn't work in startup before we've loaded the real logging
configuration.  Add some code to log to stderr for that window of time.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 23:36:42 +02:00
David Lamparter
beaa54706a lib: create pid/vty directories
If the paths for pid or vty don't exist, try creating them.  Failure is
ignored (on EEXIST) or prints a non-fatal warning (other errors).

Fixes: #507
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 23:36:42 +02:00
David Lamparter
37a1f2fbb6 lib: privs: make uid/gid accessible before setuid
This splits off privs_preinit(), which does the lookups for user and
group IDs.  This is so the init code can create state directories while
still running as root.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 23:36:39 +02:00
Jafar Al-Gharaibeh
dacb17162a Merge pull request #895 from qlyoung/flush-ready
lib: flush ready queue before poll() again
2017-08-02 14:24:41 -05:00
Jafar Al-Gharaibeh
408647964a Merge pull request #894 from donaldsharp/sockopt
lib: Remove sockopt_cork functionality
2017-08-02 14:22:43 -05:00
Quentin Young
d764d2cc50
lib: flush ready queue before poll() again
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-02 14:29:04 -04:00
Jafar Al-Gharaibeh
f9e755241a config: If we don't have crypt but we have ssl crypto, use it
Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
2017-08-02 10:01:17 -05:00
Donald Sharp
0ecfe5bf38 Merge branch 'master' into PIM_VRF 2017-08-02 09:39:38 -04:00
Renato Westphal
bd402424a4 lib: fix build from git repository on OpenBSD
The OpenBSD's cp(1) command doesn't support the -v option. This will
change in the next releases (starting from v6.2) but this patch fixes
the problem for v6.1 and older releases.

Fixes Issue #875.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-01 22:12:24 -03:00
David Lamparter
154b9e8f9f lib: vty_stdio signal handling
- SIGTSTP appropriately suspends the foreground terminal
- SIGINT causes the daemon to exit, regardless of -d
- SIGQUIT causes the daemon to daemonize, regardless of -d

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 02:59:51 +02:00
David Lamparter
cff2b2112e lib: --terminal option for all daemons
This allows, among other things, piping in a configuration from stdin.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 02:59:51 +02:00
David Lamparter
f43fbf837c lib: daemonize more intelligently
Block the parent process until the child has reached the main loop, e.g.
full service is available.

This means it's no longer neccessary to add a "safety sleep" for daemon
cross-dependencies, when using the -d startup option.  This doesn't help
if -d isn't used.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 02:59:51 +02:00
David Lamparter
181d61462b build: make gitversion more useful
Use --first-parent (i.e. mainline side of merge) and restrict to "frr-"
tags.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-02 02:59:51 +02:00
Donald Sharp
c62232b4b1 lib: Remove sockopt_cork functionality
Linux -> TCP_CORK is enabled by default
*BSD -> The equivalent is TCP_NOPUSH

As such sockopt_cork is effectively useless
especially since the two places it is used
do it right before TCP writes then disable
it right after the writes are over.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-01 20:36:33 -04:00
Donald Sharp
ab665082fe Merge pull request #882 from opensourcerouting/safi-cleanup
lib/bgpd: cleanup SAFI values
2017-08-01 14:21:26 -04:00
Donald Sharp
c72ec965b9 Merge pull request #860 from opensourcerouting/non-recursive
convert lib & zebra to non-recursive automake
2017-08-01 11:33:43 -04:00
Russ White
f7ba7b3b2b Merge pull request #884 from dwalton76/bgpd-peer-hash-limit
bgpd: peer hash expands until we are out of memory
2017-08-01 08:04:23 -04:00
David Lamparter
f1b32b2e5e build: fix/improve clippy dependencies
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-01 07:09:45 +02:00
Renato Westphal
085347cfad lib: use switch statements in the AFI/SAFI conversion functions
Switch statements are more elegant (and potentially faster... but that's
not the main motivation).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-07-31 23:45:03 -03:00
Renato Westphal
5c5255381e lib/bgpd: introduce the iana_safi_t enum
We had afi_t/iana_afi_t for AFIs but only safi_t for SAFIs. Fix this
inconsistency.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-07-31 23:44:42 -03:00
Renato Westphal
a08ca0a7e1 lib: remove SAFI_RESERVED_4 and SAFI_RESERVED_5
SAFI values have been a major source of confusion over the last few
years. That's because each SAFI needs to be represented in two different
ways:
* IANA's value used to send/receive packets over the network;
* Internal value used for array indexing.

In the second case, defining reserved values makes no sense because we
don't want to index SAFIs that simply don't exist. The sole purpose of
the internal SAFI values is to remove the gaps we have among the IANA
values, which would represent wasted memory in C arrays. With that said,
remove these reserved SAFIs to avoid further confusion in the future.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-07-31 23:38:38 -03:00
Daniel Walton
40520c3649 bgpd: peer hash expands until we are out of memory
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

swpX peers all start out with the same sockunion so initially they all
go into the same hash bucket. Once IPv6 ND has worked its magic they
will have different sockunions and will go in different buckets...life
is good.

Until then though, we are in a phase where all swpX peers have the same
socknunion. Once we have HASH_THRESHOLD (10) swpX peers and call
hash_get for a new swpX peer the hash code calls hash_expand(). This
happens because there are more than HASH_THRESHOLD entries in a single
bucket so the logic is "expand the hash to spread things out"...in our
case expanding doesn't spread out the swpX peers because all of their
sockunions are the same.

I looked at having peer_hash_make and peer_hash_same consider the ifname
of the swpX peer but that is a large change that we don't want to make
at the moment. So the fix is to put a cap on how large we are
willing to let the hash table get. By default there is no limit but if
max_size is set we will not allow the hash to expand above that.
2017-07-31 21:22:23 +00:00
David Lamparter
4a121f99f7 build: convert lib/ to non-recursive build
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-31 23:03:27 +02:00
David Lamparter
812ff999ca Merge pull request #865 from qlyoung/find
Find
2017-07-31 19:58:20 +02:00
Quentin Young
9d356c939f
lib: s/leychain/keychain
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-31 11:03:32 -04:00
Quentin Young
c652f6f633
lib: correct some node name typos
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-27 15:03:31 -04:00
Donald Sharp
8b2a6222e8 lib: Remove expansion of hash table
The hash code has the idea of stopping expanding
the hash table when certain criteria are set.
With the recent addition of `show hashtable`
we can now see that when we have a full internet
feed we've stopped expanding the table at 1k
buckets.  This results in some serious performance
issues at scale.

Since we now have the ability to see the statistics
on a hash table, let's allow it to expand.  Doing
so on a full feed showed this:

before:
   Hash table          |  Buckets   Entries   Empty   LF        SD      FLF       SD
 ----------------------+----------------------------------------------------------------
   route table hash    |  1024      1187579   0%      1159.75   34.06   1159.75   35.08
   route table hash    |  32768     76208     10%     2.33      2.80    2.58      4.03
   route table hash    |  1024      1187572   0%      1159.74   34.06   1159.74   35.08
   route table hash    |  2048      76205     0%      37.21     6.13    37.21     7.29

Showing hash table statistics for BGP
-------------------------------------

   Hash table         |  Buckets   Entries   Empty   LF       SD      FLF      SD
 ---------------------+--------------------------------------------------------------
   BGP Attributes     |  131072    251229    15%     1.92     2.48    2.25     3.33
   route table hash   |  4096      1187572   0%      289.93   17.03   289.93   17.87
   route table hash   |  32768     76205     10%     2.33     2.90    2.58     4.21

After:

   Hash table          |  Buckets   Entries   Empty   LF     SD     FLF    SD
 ----------------------+--------------------------------------------------------
   route table hash    |  1048576   1187349   32%     1.13   2.57   1.67   3.16
   route table hash    |  32768     76195     10%     2.33   2.81   2.58   4.03
   route table hash    |  1048576   1187342   32%     1.13   2.58   1.67   3.16
   route table hash    |  32768     76192     10%     2.33   2.68   2.58   3.81

Showing hash table statistics for BGP
-------------------------------------

   Hash table         |  Buckets   Entries   Empty   LF     SD     FLF    SD
 ---------------------+--------------------------------------------------------
   BGP Attributes     |  131072    251222    15%     1.92   2.64   2.25   3.58
   route table hash   |  1048576   1187342   32%     1.13   2.52   1.67   3.07
   route table hash   |  32768     76192     10%     2.33   2.86   2.58   4.12

We should see some significant performance improvements across the board
for full feeds.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-07-27 11:08:40 -04:00
Quentin Young
cf6c83e712
lib, vtysh: add find COMMAND
Substring search through all defined commands in all nodes.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-26 22:58:52 -04:00
Quentin Young
a83a533139
lib: add CLI node names
Adds an array of descriptive names for each CLI node, plus a runtime
check to make sure folks don't forget to update it.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-07-26 18:19:49 -04:00
Donald Sharp
c6413dd394 Merge pull request #848 from opensourcerouting/rb-tree-fix
Fix corrupted RB trees
2017-07-25 11:11:33 -04:00
David Lamparter
4ff218ac39 Merge pull request #838 from dwalton76/lib-copy-nexthops
lib: copy_nexthops() only copies the first nexthop
2017-07-25 16:20:08 +02:00
Renato Westphal
145b205177 lib: fix corrupted RB trees
Commit 8f942af90 introduced a bug while silencing a clang warning. Silence
the warning in a different way to fix our red-black tree implementation.

Fixes #841.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-07-24 18:50:45 -03:00
Renato Westphal
52535beec1 lib: revert reindent of files imported from OpenBSD
We should preserve the original indentation to make it easier to keep
these files in sync with the upstream.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-07-24 18:40:24 -03:00
Donald Sharp
e0ae31b886 lib, pimd, zebra: Allow pim to set pimregX into appropriate vrf
The pimregX devices when created by the kernel are put into
the default vrf.  When pim gets the callback that the device
exists, check to see if it is a pimregX device and if so
move it into the appropriate vrf.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-07-24 13:51:39 -04:00
David Lamparter
9d303b37d7 Revert "*: reindent pt. 2"
This reverts commit c14777c6bf.

clang 5 is not widely available enough for people to indent with.  This
is particularly problematic when rebasing/adjusting branches.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-07-22 14:52:33 +02:00
Daniel Walton
8744028312 lib: copy_nexthops() only copies the first nexthop
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

Before the fix NHT had each path resolving via swp1

cel-redxp-10# show ip route 20.0.11.253
Routing entry for 20.0.11.0/24
  Known via "bgp", distance 20, metric 0, best
  Last update 00:00:20 ago
  * 169.254.0.1, via swp1
  * 169.254.0.17, via swp2

cel-redxp-10#

cel-redxp-10# show ip nht
[snip]
20.0.11.253
 resolved via bgp
 via 169.254.0.1, swp1
 via 169.254.0.1, swp1
 Client list: pim(fd 19)

After the fix

cel-redxp-10# show ip nht
[snip]
20.0.11.253
 resolved via bgp
 via 169.254.0.1, swp1
 via 169.254.0.17, swp2
 Client list: pim(fd 19)
2017-07-20 17:11:43 +00:00