lib: fix backtraces broken by 837d16c...

837d16c ("*: use array_size() helper macro") accidentally changed one of
the expressions in the backtrace code, which afterwards read:

zlog_backtrace_sigsafe():
  if (((size = backtrace(array,array_size(array)) <= 0) ||

which boils down to: (size = backtrace(...)  <= 0).  The braces were
intended to go:      (size = backtrace(...)) <= 0.

All in all, this makes a nice textbook example of the original author
being too clever (trying to save a single line by pulling the assignment
into the condition) and the next person touching the code tripping over
it...

This code occurs another time in zlog_backtrace() where it is actually
correct.  Pulling out the assignment nonetheless.  Also, new test
program.

Cc: Andrew J. Schorr <ajschorr@alumni.princeton.edu>
Cc: Balaji.G <balajig81@gmail.com>
Cc: Scott Feldman <sfeldma@cumulusnetworks.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
lib: fix for dynamically grown hashes

Fixes commit 97c84db00c (hash: dynamically grow hash table). The
no_expand field it's not initialized and could make the hashes to
never grow the table index.

Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net>
Acked-by: Feng Lu <lu.feng@6wind.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
lib: fix possible off-by-one in stream_put_prefix()

The STREAM_WRITEABLE() call only checks if there is space for the
prefix in the stream but does not account for the prefixlen. The
stream_putc() call reduces available space by 1 and we can end
copying one byte too much and with "endp" off by one if we are
near the buffer end.

Instead of moving the stream_putc() call before STREAM_WRITEABLE(),
we check before hand for the required space, and open-code it. This
avoids a function call and verifying again the stream buffer.

Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
build: improve backtrace support/detection

libexecinfo is used to provide backtrace() on *BSD.  The API is
compatible with glibc's, so this is a "free" improvement.

To improve configure behaviour, the following configure options are
modified/introduced:

* --enable-gcc-rdynamic now defaults to "on" if the compiler is gcc.
  (I sadly wasn't able to find any documentation on the availability of
  this option for llvm, even though at least the version I have
  installed does support it)

* --enable-backtrace has been added.  This behaves as off/auto/on
  switch, i.e. giving either {dis,en}able will result in the requested
  behaviour (or an error if support wasn't found)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
build: remove now-useless --{en, dis}able-tests

commit d771020 "don't build tests unless make check is run" has made the
 --{en,dis}able-tests switch completely useless.  The differentiation is
now made by running "make check" or not doing so.  The only effect of
the switch is an "empty" excursion of make into the tests/ directory.

(well, and it turns "make check" useless from the main directory if
 --disable-tests is given, which I don't think makes sense either)

Acked-by: Greg Troxel <gdt@ir.bbn.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
zebra: set metric for directly connected routes via netlink to 0

a value of 1 is hard coded for the metric field, much like the
ifconfig utility it may have roots in.  in order to be in line
with the metric used in the linux kernel itself, we switch this
to 0.

Signed-off-by: Brett Ciphery <brett.ciphery@windriver.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
zebra: apply syntactic sugar to rib_dump()

strip the explicit __func__ present on all calls and make the prefix
argument a transparent union.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
bgpd, ospfd, zebra: fix some DEFUN definitions

Fixup some DEFUNS with incorrect command strings or mixed up helpstrings.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
tests: add a test program for lib/command.c

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
tests: fix build & disable testcommands

The perils of having tests, the test wasn't tested thoroughly enough...
Fixup various automake problems, and then disable it since it depends on
configure parameters in its current version.

For 0.99.24 we can ship a static copy of vtysh_cmd.c and have it
reenabled.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
lib/command.c: rewrite command matching/parsing

Add support for keyword commands.

Includes new documentation for DEFUN() in lib/command.h, for preexisting
features as well as new keyword specification.

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
ospfd/ospf_vty.c: use keyword cmd style

Use the new keyword command style for:

  - default-information originate
  - distance ospf
  - redistribute

Signed-off-by: Christian Franke <chris@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
ripngd: implement admin distance

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

Signed-off-by: Roman Hoog Antink <rha@open.ch>
Signed-off-by: Maitane Zotes <maz@open.ch>
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>
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>