Commit Graph

780 Commits

Author SHA1 Message Date
David Lamparter
72d0fea782 zebra: fix VRF code for *BSD
There seems to be no rtm_table in struct rt_msghdr, at least on the
systems I have access to...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit d6cf5134c05a7890738411852d9357ee5bb322f3)
2016-06-09 09:39:03 -04:00
Timo Teräs
35d921cc20 zebra: use prefix2str for logging where possible
This makes code more robust, consice and readable.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit be6335d682c5ee1b6930345193eda875705fbab2)
2016-06-09 09:08:05 -04:00
Timo Teräs
196aecefeb zebra/vty: use prefix2str and unify show ip/ipv6 route code
Use prefix2str where possible. As now ip/ipv6 are practically
identical, they are merged removing unneeded code duplication.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 53a5c39c705f917567d5b1764f1fe12ad5c5e577)
2016-06-09 08:56:48 -04:00
Donald Sharp
4f87aceb78 zebra: Fix comparison warning
It's possible to have a comparison where
MULTIPATH_NUM is greater than the size of
data that a u_char supports for nexthop_num

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-06-08 15:37:21 -04:00
David Lamparter
9b6710b406 *: fix more initialisers (for BSD)
FreeBSD and NetBSD spew a few more warnings about variable initialisers.
Found with OSR's/NetDEF's fancy new CI system.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-06-08 15:01:33 -04:00
Timo Teräs
a879f2f815 zebra: fix build with rtadv disabled
Otherwise we get warning on rtadv_init() prototype not being
defined when compiling rtadv.c (as dummy stub is provided always).

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-06-08 14:15:47 -04:00
Donald Sharp
80ab3edfbb zebra: Fix last sent command to protocol
With the addition of VRF's we were not properly
storing the last sent command to individual
protocols from zebra.  This commit fixes this:

Pre-Fix:
Client: bgp
------------------------
FD: 14
Route Table ID: 0
Connect Time: 00:10:51
Not registered for Nexthop Updates
Last Msg Rx Time: 00:10:51
Last Msg Tx Time: 00:00:04
Last Rcvd Cmd: ZEBRA_REDISTRIBUTE_ADD
Last Sent Cmd: (null)

Post-Fix:
Client: bgp
------------------------
FD: 14
Route Table ID: 0
Connect Time: 00:02:42
Not registered for Nexthop Updates
Last Msg Rx Time: 00:02:42
Last Msg Tx Time: 00:00:09
Last Rcvd Cmd: ZEBRA_REDISTRIBUTE_ADD
Last Sent Cmd: ZEBRA_INTERFACE_UP

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-06-03 04:59:26 -04:00
David Lamparter
28feb0b3a2 zebra: clean up misc_null pragmas
The no-op alternatives provided in misc_null trigger a few warnings
since they provide functions / use pragmas without prototypes.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit a3466abd93f83424f9f83e56282e42188e1f94ce)
2016-06-07 09:43:32 -04:00
Donald Sharp
83a0b892dd zebra: Cleanup missed cherry-pick
Cherry-pick of 2e5ca49758543 was missing the
removal of some files.

Since these are not referenced in the build anymore
it's ok to remove them.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-06-07 09:38:02 -04:00
David Lamparter
908d1631b6 zebra: remove unused netlink_route()/kernel_rtm_ipv6()
kernel_delete_ipv6_old(), removed in 51bdeba a little while ago, was the
last user of netlink_route() and kernel_rtm_ipv6().  Everything else
uses the _multipath variants of these functions.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 872b0dc0537b62503d98bafd3075553795c847cb)
2016-06-07 09:16:21 -04:00
Timo Teräs
10ead5c82c zebra: simplify redistribution code
Merge the conditionals as one to avoid code duplication.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit f85592e05ae6463727433893e61afd1081fcf7e0)

Conflicts:
	zebra/redistribute.c
2016-06-06 09:00:40 -07:00
David Lamparter
6c4f4e6e6a *: use void * for printing pointers
On higher warning levels, compilers expect %p printf arguments to be
void *.  Since format string / argument warnings can be useful
otherwise, let's get rid of this noise by sprinkling casts to void *
over printf calls.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-29 21:27:26 -04:00
Everton Marques
22afbf9446 zebra_rib: Revert work-around for zebra marking recursive static route as inactive. 2016-05-29 20:59:38 -04:00
Everton Marques
8f26ef2c68 zebra_rib: Revert debug hooks. 2016-05-29 20:58:42 -04:00
David Lamparter
9e8da292d1 build: get rid of INCLUDES, use AM_CPPFLAGS
INCLUDES in configure.ac was not used at all, and INCLUDES in
Makefile.am is supposed to be AM_CPPFLAGS these days.

Reduces warnings spewed during bootstrap/autoreconf.

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>
(cherry picked from commit 237aac56960575f6ad2451ba2796d94bd5ae4b33)
2016-06-03 15:46:59 -04:00
David Lamparter
865730ab9f 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>
2016-06-03 14:51:51 -04:00
David Lamparter
42bb3dfdfa build: remove ancient Linux/BSD IPv6 cruft
IPv6 functions in a separate library... yeah, right.

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>
2016-06-03 14:46:56 -04:00
David Lamparter
1cbb5dfc29 build: remove INRIA, NRL and MUSICA IPv6 quirks
Valar dohaeris.

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>
2016-06-03 14:40:03 -04:00
David Lamparter
a4247f4b69 build: remove AIX, NEC EWS and IRIX
Valar morghulis.

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>
2016-06-03 14:29:00 -04:00
David Lamparter
35c4bf71e5 build: remove Linux non-netlink config
This path is deprecated, completely untested, likely broken and will not
be maintained.  Kill it with fire.

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>
(cherry picked from commit 2e5ca49758543cde69d98f4a6a7b39486e88311d)

Conflicts:
	configure.ac
	zebra/if_proc.c
	zebra/rtread_proc.c
2016-06-03 14:20:42 -04:00
Donald Sharp
54fec4d508 zebra: Remove experimental warning
Remove the pimd experimental warnings that are being
displayed for some commands.

Ticket: CM-6128
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-06-01 11:44:16 -04:00
Donald Sharp
82a95360cf zebra: Fix unprotected zlog_debug
Fixing an unprotected zlog_debug.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-06-01 09:23:29 -04:00
Balaji
7498d58d56 zebra: MBGP routes should not be installed in the kernel
MBGP routes are used only for PIM RPF checks and hence should
not be installed in the kernel's FIB. Ignore route node set to Multicast
SAFI.

Signed-off-by: Balaji.G <balajig81@gmail.com>
Acked-by: Everton Marques <everton.marques@gmail.com>
[pushed down rn->table->info assignment below assert]
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>

(cherry picked from commit 9511633e08ff15c23608983fdc1bc735d427332e)

Conflicts:
	zebra/zebra_rib.c
2016-05-26 20:42:53 +00:00
Paul Jakma
1f9a9fffc1 Fix most compiler warnings in default GCC build.
Fix lots of warnings. Some const and type-pun breaks strict-aliasing
warnings left but much reduced.

* bgp_advertise.h: (struct bgp_advertise_fifo) is functionally identical to
  (struct fifo), so just use that.  Makes it clearer the beginning of
  (struct bgp_advertise) is compatible with with (struct fifo), which seems
  to be enough for gcc.
  Add a BGP_ADV_FIFO_HEAD macro to contain the right cast to try shut up
  type-punning breaks strict aliasing warnings.
* bgp_packet.c: Use BGP_ADV_FIFO_HEAD.
  (bgp_route_refresh_receive) fix an interesting logic error in
  (!ok || (ret != BLAH)) where ret is only well-defined if ok.
* bgp_vty.c: Peer commands should use bgp_vty_return to set their return.
* jhash.{c,h}: Can take const on * args without adding issues & fix warnings.
* libospf.h: LSA sequence numbers use the unsigned range of values, and
  constants need to be set to unsigned, or it causes warnings in ospf6d.
* md5.h: signedness of caddr_t is implementation specific, change to an
  explicit (uint_8 *), fix sign/unsigned comparison warnings.
* vty.c: (vty_log_fixed) const on level is well-intentioned, but not going
  to fly given iov_base.
* workqueue.c: ALL_LIST_ELEMENTS_RO tests for null pointer, which is always
  true for address of static variable.  Correct but pointless warning in
  this case, but use a 2nd pointer to shut it up.
* ospf6_route.h: Add a comment about the use of (struct prefix) to stuff 2
  different 32 bit IDs into in (struct ospf6_route), and the resulting
  type-pun strict-alias breakage warnings this causes.  Need to use 2
  different fields to fix that warning?

general:

* remove unused variables, other than a few cases where they serve a
  sufficiently useful documentary purpose (e.g.  for code that needs
  fixing), or they're required dummies.  In those cases, try mark them as
  unused.
* Remove dead code that can't be reached.
* Quite a few 'no ...' forms of vty commands take arguments, but do not
  check the argument matches the command being negated.  E.g., should
  'distance X <prefix>' succeed if previously 'distance Y <prefix>' was set?
  Or should it be required that the distance match the previously configured
  distance for the prefix?
  Ultimately, probably better to be strict about this.  However, changing
  from slack to strict might expose problems in command aliases and tools.
* Fix uninitialised use of variables.
* Fix sign/unsigned comparison warnings by making signedness of types consistent.
* Mark functions as static where their use is restricted to the same compilation
  unit.
* Add required headers
* Move constants defined in headers into code.
* remove dead, unused functions that have no debug purpose.

(cherry picked from commit 7aa9dcef80b2ce50ecaa77653d87c8b84e009c49)

Conflicts:
	bgpd/bgp_advertise.h
	bgpd/bgp_mplsvpn.c
	bgpd/bgp_nexthop.c
	bgpd/bgp_packet.c
	bgpd/bgp_route.c
	bgpd/bgp_routemap.c
	bgpd/bgp_vty.c
	lib/command.c
	lib/if.c
	lib/jhash.c
	lib/workqueue.c
	ospf6d/ospf6_lsa.c
	ospf6d/ospf6_neighbor.h
	ospf6d/ospf6_spf.c
	ospf6d/ospf6_top.c
	ospfd/ospf_api.c
	zebra/router-id.c
	zebra/rt_netlink.c
	zebra/rt_netlink.h
2016-05-26 18:57:39 +00:00
Lu Feng
64fdba2ace zebra: fix rtnh_len in the rt_netlink messages for multipath case
In _netlink_route_build_multipath():
- Each time when appending a IPv4 gateway in the message, rtnh_len
  is increased by sizeof (struct rtattr) + 4, where we should use
  "bytelen" instead of the hard coding "4".
- As what done for IPv4, we should increase rtnh_len accordingly
  along with adding a IPv6 gateway, or else the IPv6 gateways will
  be lost.

Signed-off-by: Feng Lu <lu.feng@6wind.com>
Reviewed-by: Alain Ritoux <alain.ritoux@6wind.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 621e2aaf33d8ab73bf44b0eea3f3900135d34996)

Conflicts:
	zebra/rt_netlink.c
2016-05-26 17:13:49 +00:00
Lou Berger
c54632ec18 zebra: make RTF_LLINFO optional to fix FreeBSD
Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit b05c6ca57130f079f8a8a6686d9d4ffa5ff440f0)
2016-05-26 15:33:33 +00:00
Lou Berger
54f03be970 zebra: wire up "debug zebra packet detail"
There was no way to actually set ZEBRA_DEBUG_DETAIL, even though some
debug output was conditional to it.  Add CLI command.

Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit d7be042378eac103634ab62abf4b2a5ca225092d)
2016-05-26 15:33:33 +00:00
David Lamparter
a2bd376d90 zebra/if_ioctl_solaris: Make foo static
make interface_ioctl_ioctl() and if_get_index() static

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 7904509bdf9ec7fad3ac1aee763ae39e7c308c52)
2016-05-26 15:33:33 +00:00
David Lamparter
746c4f0295 zebra/rt_socket: Fix warnings
Fix warning about unused sin_masklen / sin6_masklen

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 8fa1d027f23115dcb1c38b09c6e46edf5b8f7238)
2016-05-26 15:33:33 +00:00
David Lamparter
dc32cccb62 zebra/rtread_getmsg: fix sign warnings
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit ebd2687a531a0f9b9449f6fcf7001f53afa99d02)
2016-05-26 15:33:33 +00:00
David Lamparter
fb4ca3e7c4 solaris: more warnings fixed
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit da1b7eaa0ac5d590818e1cde92a9807a2f0e07f2)
2016-05-26 15:33:32 +00:00
David Lamparter
f7f9a982fa solaris: no ROUNDUP
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit a2b503131b188292ede08df99309bcbef4bd1a52)
2016-05-26 15:33:32 +00:00
David Lamparter
defe21c79f zebra/solaris: fix uninitialised vars
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 6d9362274e8ba2d57ffe17aa735eb941ac3d5fbc)
2016-05-26 15:33:32 +00:00
Morgan Stewart
06b420a4d7 Fixed if_add_update possible null dereference
Coverity Scan #1221454
In zebra/interface.c if_data could be null dereferenced without early
check.

Signed-off-by: Morgan Stewart <morgan@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit c8394ace7081ef0e71f3d162067c83c2629fc088)
2016-05-26 15:33:32 +00:00
Morgan Stewart
a5c304ab35 zebra: Fix leaked sockets in rtadv.c
Coverity Scan #709790
In zebra/rtadv.c: rtadv_make_socket leaks socket for error cases.
Added lines to close the socket for each error case or return.

Signed-off-by: Morgan Stewart <morgan@cumulusnetworks.com>
(cherry picked from commit 26b663da7ea8a3efae816d6e7fda293bdc1082f5)
2016-05-26 15:33:32 +00:00
Hiroshi Yokoi
6e9b0ac1a9 zebra: fix addr sent in ZEBRA_IPV6_NEXTHOP_LOOKUP
I found that zebra doesn't set correct IPv6 address in its result because of
using *addr's address.  Although I'm using 0.99.22, the latest version has
also use "&addr".  Shouldn't it use "addr"?

Signed-off-by: Hiroshi Yokoi <hiroshi.yokoi.0313@gmail.com>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit 8ccd74c29f5242f312c1e0561497558482c9be65)
2016-05-26 15:33:31 +00:00
David Lamparter
24b46333dd zebra: fix NetBSD interface stats printf
"format '%qu' expects type 'long long unsigned int', but argument 3 has
type '__uint64_t'"

Move to %llu, which is more standard.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 193e78f2460a537695e34368a29fc5cd02e4e1f5)
2016-05-26 15:33:30 +00:00
David Lamparter
fbedba64f5 zebra: silence zebra_serv_un unused warning
zebra_serv_un() is unused if --enable-tcp-zebra is given.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 4b6c33282973c9e1545a519f2a51bda3cf42ae21)
2016-05-26 15:33:29 +00:00
David Lamparter
07e54734a1 zebra: static int inline -> static inline int
The BSD socket kernel interface had some weird ordering of function
attribute keywords. ("static int inline foobar()")

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 3e9e2c9fb66895df42159b98a3743e25399760df)
2016-05-26 15:33:29 +00:00
David Lamparter
e7f0e649dd zebra: use SA_SIZE for RT_ROUNDUP on FreeBSD
FreeBSD provides SA_SIZE (and none of the other options to infer padded
size of a struct sockaddr).  Just define SAROUNDUP to SA_SIZE if it is
available.

This also drops a superfluous-looking extra macro branch which would
require ROUNDUP.  It seemed redundant to my eyes, but I have no idea
what odd things might have triggered addition of this in the first
place...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 7e92322cfcc6c062acae3b550f90d36fe40763f1)
2016-05-26 15:33:29 +00:00
David Lamparter
27b8739312 zebra, isisd: cast to unsigned char for ctypes
ctype.h macros take int as arguments, but expect arguments to be in
unsigned char's range.  Even though it probably works, this isn't
correct on systems that have a signed char type.  Cast explicitly.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 52f02b47685bc823c4c75560175a27aab0bd6709)
2016-05-26 15:33:29 +00:00
Greg Troxel
67320b26b5 Fix alignment assumptions on non-RT_ROUNDUP platforms.
The comment said that apple uses int and BSD traditionally used long,
but the code was backwards.  This fixes apple to be int, and otherwise
long.  That should make FreeBSD, which aligns to long, work correctly,
even without using SA_SIZE.

(cherry picked from commit 941789e470199df4f612368f669ecc0fd096fb9a)
2016-05-26 15:25:14 +00:00
David Lamparter
b71cd0fc49 zebra: print "no link-detect"
The default for this is slated to change, so let's print the current
default value for preexisting configurations.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 4c421215a0330b96d85879810558d40027a96ca6)
2016-05-26 15:25:13 +00:00
Daniel Walton
29d03d081e zebra: remove netlink_route() it is no longer used
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-26 15:25:13 +00:00
David Lamparter
9e3a437b02 zebra: remove kernel_delete_ipv6_old()
The only user of this was rib_bogus_ipv6(), which was removed in the
previous commit.  Good riddance.

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>
(cherry picked from commit 51bdebad99fe813d1b7104543b352f0e39b1c8dc)
2016-05-26 15:25:13 +00:00
Greg Troxel
cfa0ed0949 zebra/kernel_socket.c: Use platform alignment
Use the platform-provided RT_ROUNDUP macro to align sockaddrs on the
routing socket, rather than using hard-coded assumptions about
alignment.  Emit a warning if the OS doesn't define alignment macros.

Resolves failure of ripngd on NetBSD 6 i386, which changed alignment
to uint64_t from long.

(cherry picked from commit 273b1bd341afff86ba571e0be296d88dba627136)
2016-05-26 15:24:50 +00:00
Paul Jakma
2d30dcac29 zebra: Build the test client, can be useful, and add IPv6 to testrib.conf
(cherry picked from commit 7a6eec54eaffa82f4f03363314bb81c400eb2a66)
2016-05-26 01:13:58 +00:00
Paul Jakma
46f4a4d21f Add missing GPL headers, and copyright claims that certainly apply.
* Fix (a subset of)? files with non-trivial code that are missing GPL headers.

* A few copyright claims added which I am certain apply, but which I had
  missed out on the original commits.

NB: Copyright claims are not exclusive and the addition of any copyright
claim should not be read as implying a lack of any further claims, or
denying the validity of any other claims.  All those with claims of
copyright over any portion of Quagga are welcome to submit them, ideally as
patches to update copyright strings in files.

(cherry picked from commit 010ebbbca6396f272cc2d50d147dd922dda68213)
2016-05-26 01:06:59 +00:00
Paul Jakma
95bb83054b build: Remove the old PIC/PIE patch, let libtool sort it out
* Remove the old change from '08 to add in PIE arguments at automake level.
  Versions of libtool since then know how to deal with -fpie and do the right
  thing according to whether its building shared or executable objects.
  So just pass '-fpie' as CFLAG and let libtool do its thing.
2016-05-25 20:38:35 -04:00
David Lamparter
7d20b83094 zebra: don't print uninitialized string (3b02fe8)
This crept in as part of the MRIB improvements and I missed the compiler
warning between other noise.  Unfortunately, printing an uninitialised
variable can in fact make zebra crash, so this is not trivial.

Fixes: 3b02fe8 ("zebra: add "show ip rpf" to get result of RPF lookup")
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:34 -04:00
Donald Sharp
63828c83f8 Removal of 'show ip mroute'
The 'show ip mroute' in zebra_vty.c collided with the
'show ip mroute' command in pim_cmd.c.  The 'show ip rpf'
command is functionally equivalent to the zebra_vty.c
'show ip mroute'.  Therefore remove the 'show ip mroute' command
in zebra_vty.c.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-05-25 20:38:32 -04:00
David Lamparter
0b0668e619 zebra: mark multicast commands experimental
depending on feedback from actually having these commands in a released
version, we may want to adjust them.  Thus, mark them as experimental so
users are aware of this.

Cc: Everton Marques <everton.marques@gmail.com>
Cc: Balaji G <balajig81@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:31 -04:00
David Lamparter
65dd94cffe zebra: add "show ip rpf" to get result of RPF lookup
Checking what route exactly a RPF lookup for a given source uses is
essential for an administrator to debug multicast routing issues.  This
command provides exactly that, using the multicst RPF lookup function
and printing out its result to the CLI.

Cc: Everton Marques <everton.marques@gmail.com>
Cc: Balaji G <balajig81@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:31 -04:00
David Lamparter
4623d89737 zebra: make MRIB lookup behaviour switchable
depending on the usage scenario (and availability of multitopology IGP
protocols, which is currently zero in Quagga), different approaches of
Multicast RPF lookups are useful.

Reference behaviours from commercial vendors are urib-only/mrib-only
(Juniper, depending on inet.2 availability) and lowest-distance (Cisco).
As we are currently without MT IGP support, mrib-first seems the most
useful default for Quagga.

Cc: Everton Marques <everton.marques@gmail.com>
Cc: Balaji G <balajig81@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:31 -04:00
David Lamparter
33550aa869 zebra: return route_node from rib_match_ipv4_safi
The multicast code needs to know the route_node in addition to the rib
entry in order to perform distance or prefix-length comparisons.  Add it
as optional "out" pointer parameter.

Cc: Everton Marques <everton.marques@gmail.com>
Cc: Balaji G <balajig81@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:31 -04:00
David Lamparter
416ec78d3a zebra: dummy kernel "install" multicast routes
This is a followup to 9511633 ("zebra: MBGP routes should not be
installed in the kernel"), which was correct in disabling MRIB routes
being installed in the kernel, yet broke the MRIB since now routes were
never marked as active.

Hence, push down the check into the kernel install functions, so that
the routes are still marked active.  At the same time, the FPM calls get
a check each since otherwise we'd bump the FPM interface on MRIB
updates.

Fixes: 9511633 ("zebra: MBGP routes should not be installed in the kernel")
Cc: Everton Marques <everton.marques@gmail.com>
Cc: Balaji G <balajig81@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:31 -04:00
David Lamparter
b8a9691548 zebra: fix optional distance on static mrib route
Unfortunately, the quagga CLI parser doesn't support [<1-255>].  Fix by
working around with an alias.

Replaces the following commits:
- zebra: mrib: [no] ip mroute - require distance.
- zebra: mrib: [no] ip mroute - make distance optional.
(Rewritten as alias)

Cc: Everton Marques <everton.marques@gmail.com>
Cc: Balaji G <balajig81@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:31 -04:00
Everton Marques
b78a80d742 zebra: mrib: static route support
With the MRIB being independent from the Unicast RIB, there's currently
now way to add static routes to the MRIB.  Address that by adding a
separate set of commands for MRIB static routes.

Combines these original patches:
- zebra: mrib: ip mroute command to add unicast route to MRIB for multicast RPF.
- zebra: mrib: no ip mroute: Fix removal of static multicast RPF route.
- zebra: mrib: remove unused static_add/delete_ipv4
- zebra: Cleanups to zebra_rib.
- pimd: Merge pim-only branch.

Cc: Everton Marques <everton.marques@gmail.com>
Cc: Balaji G <balajig81@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:31 -04:00
Everton Marques
6f61a5a3fc zebra: add ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB
This adds a new zapi call "ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB" performing a
Multicast RPF lookup for a given source.  Details of the lookup
behaviour are left to the zebra side of things.

Note: this is non-reactive, as in, only delivers a snapshot of the state
at a particular point in time.  There's no push notification of changes
happening to the RIB.

This combines the following 3 original patches:
- zebra: add zsend_ipv4_nexthop_lookup_mrib()
- zserv: Query mrib (SAFI_MULTICAST).
- zebra: Cleanups to zebra_rib.

Cc: Everton Marques <everton.marques@gmail.com>
Cc: Balaji G <balajig81@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:31 -04:00
Everton Marques
492dadb218 zebra: add rib_match_ipv4_safi()
This is the same as rib_lookup_ipv4(), without the SAFI hardcoded.

Cc: Balaji G <balajig81@gmail.com>
Cc: Everton Marques <everton.marques@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:31 -04:00
David Lamparter
cb65349115 zebra: identify MRIB on debug messages
since the same code handles both URIB and MRIB, the debug messages can
get rather confusing if the RIB isn't identified.  Mark the MRIB in
debug messages so we can distinguish that.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:31 -04:00
David Lamparter
2263a41286 zebra: factor out rib debug logs
Introduces a logging function that takes a struct route_node * argument,
and prefixes log output with that node's prefix.  While this removes
some duplication, it will also later be useful for srcdest route nodes.

Behaviour before and after the patch should be exactly identical.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-25 20:38:31 -04:00
Donald Sharp
99d8325e9a zebra: Fix zebra to exit on recvmsg buffer overrun
When zebra receives a recvmsg buffer from the kernel
silently exit so that watchquagga will notice and then
restart zebra.

Ticket: CM-11130
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-05-23 18:37:06 -04:00
vivek
c5b37afc6b zebra: Ensure IPv6 RA configuration is displayed correctly
IPv6 RAs on an interface can be enabled either by the operator or internally
due to the configuration of a BGP unnumbered neighbor. Ensure that this is
displayed in the configuration correctly.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-11076
Reviewed By: CCR-4770
Testing Done: Manual; also verified by defect submitter.
2016-05-23 09:46:14 -07:00
Donald Sharp
9050881a77 zebra: Clean up some small static analysis warnings
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-19 10:42:21 -04:00
Donald Sharp
040064c8ab quagga: Remove WEAK_ALIAS pragma usage
The code was using pragma's to override function calls
while there was code for platforms that don't support pragma's
Just remove the pragma usage from the program in it's entirety

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-19 10:41:25 -04:00
Donald Sharp
3ff8613314 zebra: Fix show ip route for ibgp only routes
When 'show ip route summ' is entered
and there are only ibgp routes they
are not being displayed.  This commit
fixes this issue.

Ticket: CM-10931
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-13 15:29:37 -04:00
vivek
1d20ccf32c zebra: Accept and process RAs with lifetime of zero
Fix code to not discard received RAs with a lifetime of 0. The router lifetime
is only applicable for default router processing which is not relevant here.
For the purposes of BGP unnumbered, the neighbor should be learnt without
consideration of the value of router lifetime in received RA.

Note: This patch brings in a portion of the earlier commit
690baa5359 - this included some additional
changes which have been reverted.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Daniel Walton <dwalton@cumulusnetworks.com>

Ticket: CM-10943
Reviewed By: CCR-4611
Testing Done: bgp-smoke
2016-05-13 10:17:37 -07:00
vivek
6b9efc026f Revert "Zebra: Update/fix router_lifetime in IPv6 RAs"
This reverts commit 690baa5359.

Making the router lifetime in the IPv6 RAs as 0 by default would break BGP
unnumbered when this version of Quagga goes up against a 2.5.x Quagga. This
is because of a defect in the Quagga code that ignores any received RAs with
a lifetime of 0.
2016-05-12 18:31:19 -07:00
Don Slice
8902474bd3 zebra: Add route-map support to ip import-table
Added the ability to supply a route-map to the ip import-table command,
which greatly improves filtering between the kernel prefixes in a
non-default table that are imported into the zebra rib.

Ticket:CM-8168
Signed-off-by: Donald Slice
Reviewed By: Donald Sharp
2016-05-12 20:22:53 -04:00
vivek
5c81b96aca BGP: Set advertisement interval when triggering IPv6 RAs
This change extends the earlier change which added the ability in BGP to
trigger IPv6 Router Advertisements when an unnumbered neighbor is configured.
In addition to triggering the RAs, the advertisement interval is also set to
10 seconds. This is needed to handle the scenario where the peer may start
later.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-10896
Reviewed By: CCR-4693
Testing Done: Manual, bgp-min, bgp-smoke
2016-05-12 16:51:43 -07:00
Donald Sharp
fb02523bf3 Fix unprotected debugs to warns and fix
In the case of a route replace failing we
saw two issues with the logging:

1) The route replace was a debug instead of a warn
  -> In this case change code to zlog_warn
2) The buf in the route replace was not being initialized
because buf initialization was protected by a debug check.
  -> In this case move the buf initialization to inside
the failure case.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-05-12 13:20:07 -04:00
Donald Sharp
778cb26fbd Fix non initialized usage of data in zebra_rnh.c
In zebra_deregister_rnh_static_nexthops the nh_p
structure was not being properly initialized for
all the cases that we could be storing a nexthop
for.  This was causing code later to retrieve
the table from an nh_p->family which was garbage.

In the case of BLACKHOLE and Ifindex based routes
do nothing because they shouldn't be a nexthop
considered for NHT.

==2239== Conditional jump or move depends on uninitialised value(s)
==2239== at 0x4E5F6CE: family2afi (prefix.c:217)
==2239== by 0x155F7C: get_rnh_table (zebra_rnh.c:83)
==2239== by 0x156194: zebra_lookup_rnh (zebra_rnh.c:148)
==2239== by 0x15655E: zebra_deregister_rnh_static_nh (zebra_rnh.c:242)
==2239== by 0x156681: zebra_deregister_rnh_static_nexthops
(zebra_rnh.c:280)
==2239== by 0x12F3DF: rib_unlink (zebra_rib.c:2210)
==2239== by 0x12E9CE: rib_process (zebra_rib.c:1843)
==2239== by 0x12EA8A: process_subq (zebra_rib.c:1873)
==2239== by 0x12ECAF: meta_queue_process (zebra_rib.c:1936)
==2239== by 0x4E89625: work_queue_run (workqueue.c:298)
==2239== by 0x4E63230: thread_call (thread.c:1577)
==2239== by 0x125830: main (main.c:432)
==2239==
==2239== Conditional jump or move depends on uninitialised value(s)
==2239== at 0x4E5F6DB: family2afi (prefix.c:220)
==2239== by 0x155F7C: get_rnh_table (zebra_rnh.c:83)
==2239== by 0x156194: zebra_lookup_rnh (zebra_rnh.c:148)
==2239== by 0x15655E: zebra_deregister_rnh_static_nh (zebra_rnh.c:242)
==2239== by 0x156681: zebra_deregister_rnh_static_nexthops
(zebra_rnh.c:280)
==2239== by 0x12F3DF: rib_unlink (zebra_rib.c:2210)
==2239== by 0x12E9CE: rib_process (zebra_rib.c:1843)
==2239== by 0x12EA8A: process_subq (zebra_rib.c:1873)
==2239== by 0x12ECAF: meta_queue_process (zebra_rib.c:1936)
==2239== by 0x4E89625: work_queue_run (workqueue.c:298)
==2239== by 0x4E63230: thread_call (thread.c:1577)
==2239== by 0x125830: main (main.c:432)

Ticket: CM-10667
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Shrijeet Mukherjee <shm@cumulusnetworks.com>
2016-05-12 13:20:07 -04:00
Donald Sharp
a3d21ef32e zebra: Fix interface based static routes
This commit fixes interface based static routes.

static routes are now stored and if an interface
comes up it finds the route and installs it.

Ticket: CM-10869
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-05-10 15:07:04 -04:00
radhika
567b877d7f zebra - BFD client de-registration support
CM-10680
Issue: When BGP daemon is stopped, all the BGP BFD sessions are not getting deleted from PTM.
Root cause: BGP daemon stop causes BFD de-register message to be sent for every peer on which BFD is enabled. But, all the de-register messages from bgpd to zebra are not processed before the socket close. This results in some stale BGP BFD sessions.
Fix: Support for client de-register message has been added in PTM/BFD.  Changes in Quagga to support BFD client de-registrations:
−   The BFD clients de-registration is sent directly from zebra daemon when zebra client (bgpd, ospfd and ospf6d) socket close is detected.
−   Introduced a BFD flag for the zebra clients to prevent BFD de-registration messages from being sent to zebra daemon when the client is shutting down. This reduces the BFD messaging.

CM-10540
Issue: Invalid ptm status “fail” instead of “n/a” being displayed for VRF interfaces.
Root cause: ptm status is not being initialized to “unknown” status when VRF interface is added or changed. The uninitialized value is ‘0’ which is the value for “fail”
Fix: Initialized the ptm status to the correct value.

Signed-off-by: Radhika Mahankali <radhika@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Kanna Rajagopal <kanna@cumulusnetworks.com>

Ticket: CM-10680, CM-10540
Reviewed By: CCR-4653
Testing Done: PTM smoke, BGP smoke and ptmd_test.py:TestMultipleAddrsIntfOspfBgp
2016-05-08 20:11:18 -07:00
Donald Sharp
010c141f8a zebra: fix show ip route vrf to use zvrf_list
Iterate over the zvrf_list to allow 'show ip route vrf...'
to show vrfs that are inactive -vs- not even configured

Ticket: CM-10139
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-05-06 10:41:32 -04:00
Donald Sharp
c1c747a897 zebra: Fix show vrf and show run to use the zvrf_list
The show vrf and show run commands were iterating
over the vrf_list.  Use the zvrf_list instead
so that we can understand the differences
between something configed -vs- created

Ticket: CM-10139
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-05-06 10:41:30 -04:00
Donald Sharp
871d39b325 zebra: Save the zvrf in a zvrf_list
The zebra vrf needs to be saved in a
zvrf_list so that we can tell when
things start/stop correctly

Ticket: CM-10139
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
Signed-off-by: Donald Sharp <sharpd@cumulustnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-05-06 10:41:29 -04:00
Donald Sharp
fb148af4a1 zebra: Add code to add/remove statics from the rib
On enable/disable of static routes add and remove them
from the rib as appropriate.

Ticket: CM-10139
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-05-06 10:41:28 -04:00
vivek
f47603b04d Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster 2016-05-03 13:05:05 -07:00
Donald Sharp
34f8e6af37 lib: Rework vrf_get
vrf_get has these possible lookup/creation ways of being called.

name = NULL, vrf_id = VRF_UNKNOWN
   Nothing to do here.

name = NULL, vrf_id != VRF_UNKNOWN
   Look up the vrf_id in the table.  Return that created vrf.
   If not found create a struct vrf to hold it properly.

name = <something>, vrf_id = VRF_UNKNOWN
   Look up the name in the vrf list, if found return that vrf.
   If not found create the vrf and zvrf

name = <something>, vrf_id != VRF_UNKNOWN
   Look up the name in the vrf list, if found check to see
   if the vrf->vrf_id is VRF_UNKNOWN, if so match up and return
   If not found, create the vrf and table entry and return

Ticket: CM-10139
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-05-03 15:58:26 -04:00
vivek
690baa5359 Zebra: Update/fix router_lifetime in IPv6 RAs
BGP Unnumbered relies on IPv6 Router Advertisements (RAs) to advertise our
link-local IPv6 address and learn of the peer's address in order to initiate
the BGP peering. When IPv6 RAs are enabled on an interface, Quagga currently
advertises a non-zero router lifetime which causes hosts receiving the RAs
to install the router as the default router. This may not be desirable in
many situations - the IPv6 RAs may be turned on just to get BGP unnumbered
peering up.

There is a sysctl available to control the host behavior (net.ipv6.conf.all.
accept_ra_defrtr). However, this requires setting on all hosts and this may
mean many hosts, especially if Quagga is run on the hosts.

An alternate solution arrived at was to modify Quagga to advertise a zero
router lifetime, unless a value is specifically set by the operator. This
patch implements this change. The change may not meet a strict interpretation
of the RFC, so it is under HAVE_CUMULUS. When hosts see an IPv6 RA with a
router lifetime of 0, they won't make that router a default router. The
patch also fixes an incorrect check in handling of received RAs which would
have caused us to drop RAs with a lifetime of 0.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Daniel Walton <dwalton@cumulusnetworks.com>

Ticket: CM-9815
Reviewed By: CCR-4611
Testing Done: Manual, bgp-min etc. (defails in defect)
2016-05-03 12:10:22 -07:00
root
825649bd9f zebra: Allow vrfs to be defined and displayed before netlink vrf add
Displays vrfs using the vrf_list rather than the route-nodes.  This allows "show vrf"
to display inactive (or not yet active) vrfs.  Also, IPv6 static routes are now
allowed to be defined and displayed prior to the netlink vrf add.

Ticket: CM-10139
Signed-off-by: Don Slice
Reviewed-by: Donald Sharp
2016-05-03 17:54:01 +00:00
vivek
4a04e5f796 BGP: Trigger IPv6 router advertisements upon config of unnumbered neighbor
Instead of turning on IPv6 RA on every interface as soon as it has an IPv6
address, only enable it upon configuration of BGP neighbor. When the BGP
neighbor is deleted, signal that RAs can be turned off.

To support this, introduce new message interaction between BGP and Zebra.
Also, take appropriate actions in BGP upon interface add/del since the
unnumbered neighbor could exist prior to interface creation etc.

Only unnumbered IPv6 neighbors require RA, the /30 or /31 based neighbors
don't. However, to keep the interaction simple and not have to deal with
too many dynamic conditions (e.g., address deletes or neighbor change to/from
'v6only'), RAs on the interface are triggered upon any unnumbered neighbor
configuration.

BGP-triggered RAs will cause RAs to be initiated on the interface; however,
if BGP asks that RAs be stopped (upon delete of unnumbered neighbor), RAs
will continue to be exchanged if the operator has explicitly enabled.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-10640
Reviewed By: CCR-4589
Testing Done: Various manual and automated (refer to defect)
2016-05-02 13:53:38 -07:00
Donald Sharp
b9f1114e38 zebra: Stop passing around vrf_id for static_XXX functions
The static zebra functions are passing around the vrf_id
At the crunchy edges gather the zvrf from passed in
vrf name and pass that around instead.

Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-05-02 13:17:00 -04:00
Donald Sharp
01bb6d5798 zebra: Refactor zebra_vrf_static_table
We were passing in the vrf_id pass in the zvrf
instead.

Signed-off-by: donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-05-02 13:16:45 -04:00
vivek
3e5c6e00cb zebra: Implement recovery for route install failure
Quagga does not have proper recovery for route install failure (in
the kernel). The lack of this may not be a significant issue if the
failure is only an exception. However, the introduction of route
replace presents a new failure scenario which was not there earlier.
Before replace, the update operation involved a delete followed by
add; the failure of add would not leave hanging route entries in the
kernel as they would've got deleted first. With route replace, if
the replace fails, recovery action to delete the route is needed, else
the route remains hanging in the kernel.

In particular, with VRFs and in the presence of ECMP/multipath, a
failure mode exists where Quagga thinks that routes have been cleaned
up and deleted from the kernel but the kernel continues to retain them.
This happens when multiple VRF interfaces are moved from one VRF to
another.

This patch addresses this scenario by implementing proper recovery for
route install failure.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Dinesh Dutt <ddutt@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-10361
Reviewed By: CCR-4566
Testing Done: bgp-min, ospf-min, bgp-smoke, ospf-smoke and manual

Note: There are some test failures and results aren't consistent across
runs; Daniel has resolved many of these through other fixes.
2016-04-28 22:09:17 -07:00
Dinesh G Dutt
aeb355e7d3 Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster 2016-04-27 13:56:23 -07:00
Dinesh G Dutt
6c9678b454 Add support for fast rexmit of RA on link transitions.
Ticket: CM-7076
Reviewed By: CCR-4568
Testing Done:

To allow for faster convergence, modify transmission of IPv6 RA so
that on link transitions(link up, change VRF, link add etc.), we
transmit RA fast to ensure faster convergence with BGP Unnumbered.
But we don't enable Fast RA if RA interval is in msecs as we've
fixed the fast RA interval to be 1s. We retransmit RA 4 times, once
each second on link events and when RA is first enabled.
2016-04-27 13:54:08 -07:00
Donald Sharp
651415bd61 quagga: Fixup startup to allow consistency between sysV and systemd
We want the ability to start up quagga in a varied set of
environments.  This needs to be done in SysV and systemd
startups.  As such refactor the code to allow us to
allow end users to easily switch between the two

sysV:
edit the /etc/quagga/daemons file
service quagga [start|stop|reload|restart]

Systemd:
edit the /etc/quagga/daemons file
systemctl [start|stop|reload|restart] quagga

Ticket: CM-10634
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-04-27 16:04:48 -04:00
Donald Sharp
e2dd9485cb Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster 2016-04-27 15:55:43 -04:00
Donald Sharp
7b3eaa999d zebra: Fix PTM to not pass a default vrf name
The default vrf name choosen in quagga has no meaning.
Don't pass it to the ptm process as it gets dizzy.

Ticket: CM-10581
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Kanna Rajagopal <kanna@cumulusnetworks.com>
2016-04-27 15:55:23 -04:00
Daniel Walton
00cbc1f56c "show ip route summary" has negative values for ebgp counters
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Dinesh Dutt <ddutt@cumulusnetworks.com>

Ticket: CM-10612
2016-04-26 22:50:34 +00:00
Daniel Walton
f857321ea9 BGP peers remain in active while rdnbrd is running.
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-7789, CM-8806

If the route-map for an "ip import-table" denied a route it only flagged
the nexthop as inactive, it did not actually delete the route. This
breaks all directly connected EBGP peers that peer via IPv4 because NHT
finds this /32 with an inactive nexthop.
2016-04-25 20:19:08 +00:00
Don Slice
1a5d323c02 Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster 2016-04-22 05:40:09 -07:00
Don Slice
4fe5171412 zebra: Change interface handling so non-vrf aware protocols correctly handle them
Changed interaction between zebra and routing protocols so that they correctly
fill in the vrf_iflist even for vrfs they're not responsible for.  In that way,
when they get callbacks from zebra they can correctly understand whether they need
to create them or not.

Ticket: CM-10427
Signed-off-by: Don Slice
Reviewed-by:
2016-04-22 05:26:12 -07:00
Dinesh G Dutt
d4986a1f56 Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster 2016-04-21 18:41:47 -07:00
radhika
986aa00f94 Addition on hidden command "bfd multihop/singlehop" and "ptm-enable" per interface command
CM-10435
Issue: IBGP BFD sessions are created as multi-hop even though peer is single-hop away. This is causing an interop issue with ICOS.
Root Cause: By design all IBGP peers are registered with BFD as multi-hop.
Fix:
• Changed the default behavior of always treating IBGP BFD sessions as mult-hop. shared_network variable is used to determine whether the IBGP peer is single hop or multi-hop away. The logic for determining whether EBGP peer is single hop or multi-hop has not been changed.
• Since the default behavior has been changed, it will cause interop issues between 2.5 and 3.0 IBGP BFD sessions. A new hidden command “bfd multihop/singlehop” has been introduced to overcome the interop issues.

dell-s6000-10(config-router)# neighbor 30.0.2.6 bfd
<2-255> Detect Multiplier
<cr>
dell-s6000-10(config-router)# neighbor 30.0.2.6 bfd multihop
dell-s6000-10(config-router)# no neighbor 30.0.2.6 bfd multihop
dell-s6000-10(config-router)#
dell-s6000-10(config-router)# neighbor 30.0.2.6 bfd multihop
dell-s6000-10(config-router)# do show running-config
!
router bgp 100
neighbor igroup peer-group
neighbor igroup bfd 5 500 500
neighbor igroup bfd multihop
neighbor 30.0.2.2 remote-as 100
neighbor 30.0.2.2 peer-group igroup
neighbor 3101🔤bcad::2 remote-as 100
neighbor 3101🔤bcad::2 peer-group igroup
neighbor 30.0.2.6 remote-as 200
neighbor 30.0.2.6 bfd multihop
neighbor 3102🔤bcad::6 remote-as 200
neighbor 3102🔤bcad::6 bfd
neighbor 3102🔤bcad::6 ebgp-multihop 255
!

CM-10260
Issue: “Unable to connect to socket” message keeps getting logged when ptmd process doesn’t exist.
Root Cause: BFD clients (bgpd, ospfd and ospf6d) during initialization try to register with BFD/PTM by default. This results in continuous logging If PTM does not exist since there is no max on number of retries.
Fix:
• Stop the retries to connect to PTM after max reconnect timer of 5 mins is reached.
• Added zebra debug event wrapper to message logging to prevent it from showing by default.

CM-4541
Issue: Addition of a new command "ptm-enable" or "no ptm-enable" per interface to enable/disable PTM link status checks for an interface.
Fix: Currently there is only one ptm-enable global command that enables/disables PTM status updates for all interfaces. This new command will give the handle to individually stop interface from reacting on the PTM status updates.
• by default interface uses the ptm-enable global configuration
• "no ptm-enable" on an interface will disable PTM status updates from taking affect for that interface. This can bring the interface up if it was brought down due to PTM status update.
• "ptm-enable" on an interface will cause the interface to fallback to the global ptm-enable configuration value and will bring the interface up or down based on the last stored PTM status update if global ptm is enabled.

Ticket: CM-10435, CM-10260 and CM-4541
Signed-off-by: Radhika Mahankali
Reviewed-by: Donald Sharp, Kanna Rajagopal
2016-04-21 15:39:38 -07:00
Dinesh G Dutt
1ff0858e52 Get route counts right for show ip route summary
Ticket: CM-9974
Reviewed By: CCR-4531
Testing Done: Testing with both single & multiple NHs

Zebra is counting each NH as a separate route which leads to all wrong
stats. Count routes, not NHs.
2016-04-21 12:15:59 -07:00
Donald Sharp
d651649ed5 zebra: Fix zebra_rnh_register crash
Zebra is crashing inside of zserv_rnh_register when it attempts to
lookup a vrf that was just deleted:

Imagine this series of events:

Pre (A): ifdown -a -X eth0
(A) zebra notification from kernel that vrf is goneroo
(B) zebra notifies all daemons
(C) bgpd is churning because we have been removing interfaces and we
have an new path and it hasn't handled the vrf goneroo event yet from
zebra so it sends to zebra a new rnh with an old vrf_id.
(D) zebra attempts to lookup the zvrf and crashes because of pointer
dereference.

zebra handles all callbacks in one function. Convert that function to
check to see if we have a valid zvrf. If so make the callback

Ticket: CM-10482
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
2016-04-20 16:17:14 -04:00