]> git.proxmox.com Git - mirror_frr.git/log
mirror_frr.git
8 years agopimd: Fixup some broken code for the register receive
Donald Sharp [Tue, 20 Oct 2015 15:42:16 +0000 (08:42 -0700)]
pimd: Fixup some broken code for the register receive

Some of the register receive code was broken.  This fixes that

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Cleanup some comments and documentation
Donald Sharp [Tue, 20 Oct 2015 15:41:09 +0000 (08:41 -0700)]
pimd: Cleanup some comments and documentation

Starting the transition of PIM-SSM to PIM-SM means
that we have to cleanup some internal code comments
so that the code will match the comments.

Signed-off-by: Donald Sharp<sharpd@cumulusnetworks.com
8 years agopimd: Start handling of pim REGISTER packet type
Donald Sharp [Tue, 20 Oct 2015 15:36:37 +0000 (08:36 -0700)]
pimd: Start handling of pim REGISTER packet type

This code starts the handling of the pim register type.  No guarantees that
it works correctly, just that it compiles and the start of the code is in there.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Cause NOCACHE event to create WHOLEPKT events for pimd
Donald Sharp [Tue, 20 Oct 2015 15:26:24 +0000 (08:26 -0700)]
pimd: Cause NOCACHE event to create WHOLEPKT events for pimd

pimd needs the ability to send the multicast packet to the RP.
This code causes the incoming unknown multicast packet to
be send to pimd so it can be sent as a REGISTER packet towards
the RP.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix nexthop resolution breakage
Donald Sharp [Tue, 20 Oct 2015 15:25:13 +0000 (08:25 -0700)]
pimd: Fix nexthop resolution breakage

Nexthop resolution was broken due to some ill placed debug statements.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fixup kernel callbacks to handle them better
Donald Sharp [Tue, 20 Oct 2015 13:00:02 +0000 (06:00 -0700)]
pimd: Fixup kernel callbacks to handle them better

This patch sets up the handling of the 3 basic kernel callbacks:
IGMPMSG_WRONGVIF - When a multicast message comes in the wrong vif
IGMPMSG_NOCACHE - There is no multicast route associated with a received(S,G)
IGMPMSG_WHOLEPKT - There is no outgoing interface for a packet.

The code's debugs are cleaned up to be covered by debug statements

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Register with kernel to get unknown multicast packets
Donald Sharp [Tue, 20 Oct 2015 01:23:16 +0000 (18:23 -0700)]
pimd: Register with kernel to get unknown multicast packets

Start the process of creating the pimreg vif device so that
we can get the callbacks from the kernel with the multicast packets

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agozebra: don't print uninitialized string (3b02fe8)
David Lamparter [Sat, 7 Mar 2015 07:40:48 +0000 (08:40 +0100)]
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>
8 years agopimd: SwitchToSptDesired addition
Donald Sharp [Fri, 16 Oct 2015 16:11:51 +0000 (09:11 -0700)]
pimd: SwitchToSptDesired addition

Add code to tell us if we want to switch to a SPT for the (S,G)

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com
8 years agopimd: Add code to start the KAT(S,G) as needed
Donald Sharp [Fri, 16 Oct 2015 14:50:16 +0000 (07:50 -0700)]
pimd: Add code to start the KAT(S,G) as needed

The KAT(S,G) timer can now be started and on
expiry the timer clears the PMBR(S,G).

More work needs to be done for when this timer pops, but
good enough of a start now.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Create some infrastructure code for RST(S,G) and KAT(S,G)
Donald Sharp [Fri, 16 Oct 2015 14:01:47 +0000 (07:01 -0700)]
pimd: Create some infrastructure code for RST(S,G) and KAT(S,G)

These two timers have some default values.  Create the
default defines to be used and start setting up the data
structures for them.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Start work for handling of register command
Donald Sharp [Thu, 15 Oct 2015 16:02:50 +0000 (09:02 -0700)]
pimd: Start work for handling of register command

Start the coding of the REGISTER receive and send.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Check to see if we are the RP
Donald Sharp [Thu, 15 Oct 2015 15:58:37 +0000 (08:58 -0700)]
pimd: Check to see if we are the RP

Add code to allow on interface up/down events the check of whether
or not this process is the RP.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Add SPTbit(S,G) support
Donald Sharp [Thu, 15 Oct 2015 13:58:41 +0000 (06:58 -0700)]
pimd: Add SPTbit(S,G) support

Add code to allow pimd to store the SPTbit as needed and
to properly test against it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Start adding the ability to handle the Bridge Router
Donald Sharp [Thu, 15 Oct 2015 13:19:31 +0000 (06:19 -0700)]
pimd: Start adding the ability to handle the Bridge Router

Add code to allow the check and set the PMBR(S,G) if the register.borderbit
is set.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Add code to get RP(G)
Donald Sharp [Fri, 2 Oct 2015 17:34:11 +0000 (10:34 -0700)]
pimd: Add code to get RP(G)

Add code to figure out who the RP is for group G.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Add RP check code
Donald Sharp [Fri, 2 Oct 2015 16:30:02 +0000 (09:30 -0700)]
pimd: Add RP check code

Add the ability for the node to determine if it is the RP or not.
Currently this only allows static RP's.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Receive and transmit (*,G) to the RP
Donald Sharp [Wed, 30 Sep 2015 12:41:18 +0000 (05:41 -0700)]
pimd: Receive and transmit (*,G) to the RP

Receive a (*,G) route and send it upstream to the RP.
The RP at this time does not properly handle the route.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix test_igmp_join code to handle thread_master * changes
Donald Sharp [Tue, 29 Sep 2015 16:42:08 +0000 (09:42 -0700)]
pimd: Fix test_igmp_join code to handle thread_master * changes

Fixup of pimd to be cognizant of thread_master pointer changes

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agoImplement "ip pim rp X.Y.Z.A" and "ip pim sm" commands
Donald Sharp [Tue, 8 Sep 2015 15:10:19 +0000 (08:10 -0700)]
Implement "ip pim rp X.Y.Z.A" and "ip pim sm" commands

Allow the user to specify the static Rendevous point
as well as specifying that an interface is Sparse Mode.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agoFixup of Code to allow pimd to actually run on startup
Donald Sharp [Wed, 3 Jun 2015 15:20:45 +0000 (08:20 -0700)]
Fixup of Code to allow pimd to actually run on startup

Fixup of various control files to allow quagga to startup
properly with pimd actually part of the set

8 years agopimd: Limit pim hello log messages
Donald Sharp [Wed, 21 Oct 2015 20:13:51 +0000 (16:13 -0400)]
pimd: Limit pim hello log messages

pimd was outputting allot of data surrounding pim hello packets.
In addition the debugging was inconsistent and not all turned
on via 'debug pim packet hello'.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix size_t zlog_err format string warning
Paul Jakma [Thu, 29 Oct 2015 14:24:13 +0000 (14:24 +0000)]
pimd: Fix size_t zlog_err format string warning

fc1c114aa / "pimd: Fix warning", the size_t arg should have a %zu format.

8 years agopimd: Cleanup interface startup
Donald Sharp [Fri, 2 Oct 2015 16:27:27 +0000 (12:27 -0400)]
pimd: Cleanup interface startup

This patch cleans up some interface startup, removes duplicate
debug messages and protects against some always being displayed.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Notice when we receive a packet type we can't handle yet
Donald Sharp [Thu, 1 Oct 2015 16:40:52 +0000 (12:40 -0400)]
pimd: Notice when we receive a packet type we can't handle yet

There are PIM packet types that have not been implemented yet.
Notice when we get one of those and safely do nothing.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Add knowledge of different packet types
Donald Sharp [Thu, 1 Oct 2015 16:40:51 +0000 (12:40 -0400)]
pimd: Add knowledge of different packet types

There are several additional packet types that pimd is unaware of
Add code to allow pim to understand them in the future.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Cleanup zebra debugs to be protected by debug commands
Donald Sharp [Wed, 30 Sep 2015 14:22:46 +0000 (10:22 -0400)]
pimd: Cleanup zebra debugs to be protected by debug commands

pimd is very chatty without any pim debugs turned on.
This commit fixes a bunch of the debugs to be protected
by appropriate pim debug statement.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Do not display some default values as part of a show run
Donald Sharp [Wed, 30 Sep 2015 13:10:12 +0000 (09:10 -0400)]
pimd: Do not display some default values as part of a show run

There is no need to display igmp default values for the query-interval
and the query-max-response-time-dsec

Before change:

!
interface swp4
 description swp4 -> host-212's swp1
 ip igmp
 ip igmp query-interval 125
 ip igmp query-max-response-time-dsec 100
 ip pim ssm
 link-detect
!

After change:
!
interface br1
 ip igmp
 ip pim ssm
 link-detect
!

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix warning
Martin Winter [Thu, 24 Sep 2015 04:13:58 +0000 (21:13 -0700)]
pimd: Fix warning

Fix long unsigned / unsigned mixup

Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
8 years agopimd: use IPPROTO_IP (not SOL_IP) for IP_PKTINFO
David Lamparter [Tue, 15 Sep 2015 09:18:23 +0000 (02:18 -0700)]
pimd: use IPPROTO_IP (not SOL_IP) for IP_PKTINFO

Solaris uses the same socket API for IP_PKTINFO as Linux, but doesn't
have a SOL_IP define.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 years agopimd: Fix compile warning (error with Werror) on BSD
Paul Jakma [Thu, 24 Sep 2015 09:26:55 +0000 (10:26 +0100)]
pimd: Fix compile warning (error with Werror) on BSD

* ioctl commands can vary in type between systems, cast to an unsigned long
  before passing to format command.

8 years agopimd: Remove stdout zlog changes
Donald Sharp [Tue, 8 Sep 2015 19:19:55 +0000 (15:19 -0400)]
pimd: Remove stdout zlog changes

Quagga start has unnecessary pim messages to stdout.  Causing some confusion.
Logging is already saving this information in pimd.log

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix leaked fd
Donald Sharp [Tue, 8 Sep 2015 19:02:07 +0000 (15:02 -0400)]
pimd: Fix leaked fd

When caling pim_sock_open if the failure cause happens, however
unlikely, don't leak the fd on failure.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agobuild: Enable vtysh and pimd as part of default build
Donald Sharp [Fri, 17 Jul 2015 01:18:34 +0000 (21:18 -0400)]
build: Enable vtysh and pimd as part of default build

The default build needs vtysh and pimd as a default build so
that when a change is made we can catch build issues before they
become a problem.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agobgpd/pimd: fix zAPI parsing
Nicolas Dichtel [Wed, 16 Sep 2015 07:42:36 +0000 (09:42 +0200)]
bgpd/pimd: fix zAPI parsing

Commit c99f3481a598 has changed the API. Now, the vrfid has been added in
the header, thus we must read it before parsing the rest of the message.

To ease code maintenance, let's add a new function to read a zAPI header.

Fixes: c99f3481a598 ("*: add VRF ID in the API message header")
Reported-by: Martin Winter <mwinter@opensourcerouting.org>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
Tested-by: Martin Winter <mwinter@opensourcerouting.org>
8 years agopimd: Create ability to modify hell and hold timers per interface
Donald Sharp [Fri, 21 Aug 2015 23:35:27 +0000 (19:35 -0400)]
pimd: Create ability to modify hell and hold timers per interface

Create new per interface command:
'ip pim hello <1-180> {<1-180>}'

The first number is the Hello Timer for this interface
The second number is the Hold Timer to pass to neighbors on this interface.
The second number is optional.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Change ioctl call failure from vty_out to zlog_warn
Donald Sharp [Thu, 2 Jul 2015 13:53:59 +0000 (09:53 -0400)]
pimd: Change ioctl call failure from vty_out to zlog_warn

The command 'show ip multicast' when run, iterates over all interfaces
on the router, if you do not have pim configured on that interface
it would generate an error message:

Interface Address         ifi Vif  PktsIn PktsOut    BytesIn   BytesOut
br1       20.0.15.1         7   7       0       0          0          0
swp1      169.254.0.10      3   3       0       0          0          0
swp2      169.254.0.26      4   4       0       0          0          0
ioctl(SIOCGETVIFCNT=35296) failure for interface swp3 vif_index=-1: errno=22: Invalid argument
ioctl(SIOCGETVIFCNT=35296) failure for interface swp4 vif_index=-1: errno=22: Invalid argument

This fixes the issue to display this instead:

Interface Address         ifi Vif  PktsIn PktsOut    BytesIn   BytesOut
br1       20.0.15.1         7   7       0       0          0          0
swp1      169.254.0.10      3   3       0       0          0          0
swp2      169.254.0.26      4   4       0       0          0          0
swp3      0.0.0.0           5  -1       0       0          0          0
swp4      0.0.0.0           6  -1       0       0          0          0

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Ensure new generation_id is different from previous
Donald Sharp [Thu, 2 Jul 2015 17:22:49 +0000 (13:22 -0400)]
pimd: Ensure new generation_id is different from previous

The RFC states that an interfaces generation_id must be changed
if it experiences an if down.  From 4.3.1:

The GenID option contains a randomly generated
32-bit value that is regenerated each time PIM forwarding is started
or restarted on the interface, including when the router itself
restarts.

Since we are only grabbing a new generation_id without comparing
it to the previous generation_id, it is possible that random
can generate the exact same number.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Stop DR election on every hello
Donald Sharp [Tue, 16 Jun 2015 20:19:56 +0000 (13:19 -0700)]
pimd: Stop DR election on every hello

The DR election is occurring on every hello received.
This is because the hello receive packet returns a 0
for any successfully received packet.  PIMD then looked
at the 0 returned and did a DR election.

Code was inspected for the cases where DR should happen:
(A) Interface ip address change
(B) DR priority in hello packet changes
(C) Received a new neighbor on an interface
(D) Neighbor timer pops.

Each of these initiate a DR election in the code currently.

Testing was initiated on a pim network:
tor-11# show ip pim designated-router
NonPri: Number of neighbors missing DR Priority hello option

Interface Address         DR              Uptime   Elections Changes NonPri
br1       20.0.15.1       20.0.15.1       00:08:16         1       1      0
swp1      169.254.0.10    169.254.0.10    00:08:16         2       1      0
swp2      169.254.0.26    169.254.0.26    00:08:16         2       1      0
tor-11#

As you can see Elections == 2.  This is because pimd performs
an election on (A) and (C) above.  I see no need to modify
(A) to check if we have any knowledge of the interface before
this call.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix first DR Election
Donald Sharp [Fri, 19 Jun 2015 00:01:34 +0000 (17:01 -0700)]
pimd: Fix first DR Election

The function pim_neighbor_new caused the dr election before
the addition of the neighbor to the pim_ifp->pim_neighbor_list,
in pim_neighbor_add, which is needed to properly elect the
correct DR.

Move the dr_election and hello trigger till after the addition
to the list.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Add ability to set DR Priority for an interface
Donald Sharp [Fri, 19 Jun 2015 01:14:20 +0000 (18:14 -0700)]
pimd: Add ability to set DR Priority for an interface

From RFC 4601, Section 4.3.1:

The DR_Priority Option allows a network administrator to give
preference to a particular router in the DR election process by
giving it a numerically larger DR Priority.  The DR_Priority Option
SHOULD be included in every Hello message, even if no DR Priority is
explicitly configured on that interface.  This is necessary because
priority-based DR election is only enabled when all neighbors on an
interface advertise that they are capable of using the DR_Priority
Option.  The default priority is 1.

This modification allows the setting of the DR Priority on a per
interface basis.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: add support for configuring multicast static routes
Jafar Al-Gharaibeh [Thu, 11 Jun 2015 23:29:02 +0000 (18:29 -0500)]
pimd: add support for configuring multicast static routes

Hi,

This patch adds the ability to configure multicast static routes
directly into pimd. Two source files are introduced to implement the new
feature in addition to changes to existing files.

Here is how it can be used the CLI:

interface <incoming interface>
ip mroute <outgoing interface> <group addr>                          #
for asm
or ip mroute <outgoing interface> <group addr> <source>    # for ssm

Please let me know if you have any questions or concerns,

Regards,
Jafar

Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agoRemoval of 'show ip mroute'
Donald Sharp [Sat, 30 May 2015 22:57:54 +0000 (18:57 -0400)]
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>
8 years agopim: 'show debugging' collision
Donald Sharp [Thu, 28 May 2015 00:40:46 +0000 (17:40 -0700)]
pim: 'show debugging' collision

The 'show debugging' cli as setup by pim collided with 'show debugging isis'.
Fix that and clean up cli help commands to actually display correctly.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agoFixup of redhat control files to properly start pimd
Donald Sharp [Thu, 28 May 2015 00:57:31 +0000 (17:57 -0700)]
Fixup of redhat control files to properly start pimd

8 years agopimd assert when no route to source from a new igmp join
Donald Sharp [Sat, 13 Jun 2015 00:47:26 +0000 (17:47 -0700)]
pimd assert when no route to source from a new igmp join

When pim_upstream_new is called the code looks up the nexthop.
If there is no route to the source, the code silently ignored
the error returned.  When the nexthop lookup fails don't create
the 'struct pim_stream *' to return.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopim_mroute.h has a different version of code than linux/mroute.h provides
Donald Sharp [Fri, 5 Jun 2015 19:15:44 +0000 (12:15 -0700)]
pim_mroute.h has a different version of code than linux/mroute.h provides

linux/mroutes.h and pim_mroute.h both have copies of the same structures.
This is causing failures in setsockopt(..., MRT_ADD_MFC,...) because
of data structure incompatibilities between the kernel and what
pim_mroute.h was providing.  Modify the code to check for mroute.h
and include it if necessary.  I did not modify the non linux/mroute.h
path because I do not have other systems to test on easily.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agoPIMD: Fix code to use srandom/random
Donald Sharp [Fri, 19 Jun 2015 23:26:18 +0000 (19:26 -0400)]
PIMD: Fix code to use srandom/random

pimd rolled it's own solution to random #'s, that was not
terribly random.  Rely on the underlying system to generate
random #'s for us

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years ago*: assorted warning fixes
David Lamparter [Tue, 21 Apr 2015 08:46:13 +0000 (10:46 +0200)]
*: assorted warning fixes

A few warnings slipped through the cracks...

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 years agopimd: fix out of tree build
David Lamparter [Tue, 21 Apr 2015 07:45:06 +0000 (09:45 +0200)]
pimd: fix out of tree build

pimd/Makefile.am was missing srcdir/lib from its include paths, breaking
out-of-tree build regarding route_types.h

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 years agopimd: cast ioctl values when printing them
David Lamparter [Wed, 4 Mar 2015 05:37:20 +0000 (06:37 +0100)]
pimd: cast ioctl values when printing them

ioctl values might be int or long, cast them to unsigned long for
consistent printing.  (They're long on FreeBSD, but were printed with
%d.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 years agopimd: cast to sockaddr_in to sockaddr
David Lamparter [Tue, 3 Mar 2015 20:03:52 +0000 (21:03 +0100)]
pimd: cast to sockaddr_in to sockaddr

While glibc seems to have something in the system headers that prevents
this from triggering a warning, FreeBSD doesn't.  Fix the warning.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 years agopimd: Rework pim to handle changes between us and upstream
Donald Sharp [Wed, 25 May 2016 05:31:30 +0000 (01:31 -0400)]
pimd: Rework pim to handle changes between us and upstream

The code in pimd needs to be updated to handle the changes
we've made to api's that it depends on.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: mask unused zclient_broken()
David Lamparter [Tue, 3 Mar 2015 09:41:21 +0000 (10:41 +0100)]
pimd: mask unused zclient_broken()

this function is used by the currently not present zclient reconnect
code.  It'll be unmasked again when that code hits master.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 years agobuild: enable pimd in test script
David Lamparter [Wed, 4 Feb 2015 05:24:41 +0000 (06:24 +0100)]
build: enable pimd in test script

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 years agopimd: merge pimd as of 2015-01-19
David Lamparter [Wed, 4 Feb 2015 06:01:14 +0000 (07:01 +0100)]
pimd: merge pimd as of 2015-01-19

Welcome pimd to the Quagga daemon zoo!

This is a merge of commit 77ae369 ("pimd: Log ifindex found for an
interface when zebra lib reports a new connected address."), with
the intermediate "reconnect" changes removed (c9adf00...d274381).
d274381 is replaced with b162ab7, which includes some changes.  In
addition, 4 reconnect-related changes and 1 cosmetic one have been
bumped out.

The rebase command used to produce the branch that is merged here is:
  git rebase --onto b162ab7 c9adf00 77ae369

Note that 3 patches had their author rewritten from
    "Anonymous SR#108542 <>" (which is not a valid git author ID)
to: "Savannah SR#108542 <nbahr@atcorp.com>" (which is the e-mail address
                               listed in the associated Savannah ticket)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 years agodoc: explain rpf lookup default mode
David Lamparter [Mon, 2 Feb 2015 02:00:22 +0000 (03:00 +0100)]
doc: explain rpf lookup default mode

Reported-by: Alexis Rosen <quagga-users@alexis.users.panix.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 years agodoc: zebra multicast RIB commands
David Lamparter [Fri, 30 Jan 2015 00:44:25 +0000 (01:44 +0100)]
doc: zebra multicast RIB commands

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
8 years agozebra: mark multicast commands experimental
David Lamparter [Tue, 27 Jan 2015 19:24:15 +0000 (20:24 +0100)]
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>
8 years agozebra: add "show ip rpf" to get result of RPF lookup
David Lamparter [Thu, 22 Jan 2015 18:12:35 +0000 (19:12 +0100)]
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>
8 years agozebra: make MRIB lookup behaviour switchable
David Lamparter [Tue, 6 Jan 2015 18:53:24 +0000 (19:53 +0100)]
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>
8 years agozebra: return route_node from rib_match_ipv4_safi
David Lamparter [Thu, 22 Jan 2015 18:09:36 +0000 (19:09 +0100)]
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>
8 years agozebra: dummy kernel "install" multicast routes
David Lamparter [Mon, 12 Jan 2015 06:05:06 +0000 (07:05 +0100)]
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>
8 years agozebra: fix optional distance on static mrib route
David Lamparter [Thu, 22 Jan 2015 18:03:53 +0000 (19:03 +0100)]
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>
8 years agozebra: mrib: static route support
Everton Marques [Mon, 14 Jul 2014 14:19:00 +0000 (11:19 -0300)]
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>
8 years agozebra: add ZEBRA_IPV4_NEXTHOP_LOOKUP_MRIB
Everton Marques [Tue, 1 Jul 2014 18:15:52 +0000 (15:15 -0300)]
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>
8 years agozebra: add rib_match_ipv4_safi()
Everton Marques [Mon, 22 Sep 2014 22:35:51 +0000 (19:35 -0300)]
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>
8 years agozebra: identify MRIB on debug messages
David Lamparter [Thu, 22 Jan 2015 18:02:13 +0000 (19:02 +0100)]
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>
8 years agozebra: factor out rib debug logs
David Lamparter [Thu, 24 Apr 2014 18:22:53 +0000 (20:22 +0200)]
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>
8 years agozebra: Ensure IPv6 RA configuration is displayed correctly
vivek [Mon, 23 May 2016 16:46:14 +0000 (09:46 -0700)]
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.

8 years agocumulus: Increase netlink socket buffer size
Donald Sharp [Thu, 19 May 2016 17:31:51 +0000 (13:31 -0400)]
cumulus: Increase netlink socket buffer size

Ticket: CM-10950
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
8 years agoQuagga: Make sure order of route-maps in list and hash table matches
vivek [Wed, 18 May 2016 21:08:55 +0000 (14:08 -0700)]
Quagga: Make sure order of route-maps in list and hash table matches

Quick create/delete actions on a route-map can result in the same route-map
entity having multiple entries created for it — because BGP hasn't run the
update processing to complete prior delete action. The route-map is present
in both a hash table as well as a linked list and the order in each is
different. This can lead to problems when the BGP route-map update processing
runs and finds the same route-map entity present for deletion multiple times.
For example, while processing instance-2 of rmap-A, the code may end up
freeing the hash bucket corresponding to instance-1 of rmap-A.

The fix works by ensuring the list is ordered the same way as the hash
buckets.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Shrijeet Mukherjee <shm@cumulusnetworks.com>
Ticket: CM-10023
Reviewed By: CCR-4747
Testing Done: manual, bgp-smoke

8 years agolib: Compiler warning fix
Donald Sharp [Fri, 20 May 2016 12:48:21 +0000 (08:48 -0400)]
lib: Compiler warning fix

There exists a code path where fld would
be used uninitialized.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agovtysh: fix vtysh warnings from another compiler
Donald Sharp [Mon, 16 May 2016 01:07:50 +0000 (21:07 -0400)]
vtysh: fix vtysh warnings from another compiler

Remove some dead code and fix char `\0` being
used as NULL.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agoospfd: Fix compiler warnings
Donald Sharp [Sun, 15 May 2016 17:41:23 +0000 (13:41 -0400)]
ospfd: Fix compiler warnings

Two issues:

1) nbr->oi->ifp->name is an array it would
always evaluate to true.

2) There exist a code path where addr
would be used without initialization.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agoisisd: Remove dead case
Donald Sharp [Sun, 15 May 2016 17:40:33 +0000 (13:40 -0400)]
isisd: Remove dead case

It's impossible to ever get to the else statement.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agolib: Fix some more compiler warnings
Donald Sharp [Sun, 15 May 2016 17:33:15 +0000 (13:33 -0400)]
lib: Fix some more compiler warnings

Three different changes:
a) in nexthop.c we have an actual bug, we've rearranged
the enumerated types and the list of enums has changed, we
were displaying the wrong nexthop information.

b) Remove some dead code from sockunion.h

c) '\0' evaluates to 0 which is NULL.  vector_set takes
a pointer.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agobgpd: Fix more clang compiler warnings
Donald Sharp [Sun, 15 May 2016 17:31:30 +0000 (13:31 -0400)]
bgpd: Fix more clang compiler warnings

Remove some dead code and fix initialization of the
sockunion.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agobgpd: Fix warnings -> errors issues
Donald Sharp [Sat, 7 May 2016 23:14:33 +0000 (19:14 -0400)]
bgpd: Fix warnings -> errors issues

Switched to !another! new compiler and a few more
warnings creeped in.  Also noticed a json issue
that caused an error in output.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agobgpd: Fix possible api.tag uninitialized usage
Donald Sharp [Sat, 7 May 2016 19:43:50 +0000 (15:43 -0400)]
bgpd: Fix possible api.tag uninitialized usage

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agolib: Fix possible uninitialized pointer usage.
Donald Sharp [Sat, 7 May 2016 19:42:51 +0000 (15:42 -0400)]
lib: Fix possible uninitialized pointer usage.

Signed-off-by: Donald Sharp <sharp@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agobgpd: Clean up some static analysis warnings
Donald Sharp [Sat, 7 May 2016 00:19:05 +0000 (20:19 -0400)]
bgpd: Clean up some 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>
8 years agozebra: Clean up some small static analysis warnings
Donald Sharp [Sat, 7 May 2016 00:18:07 +0000 (20:18 -0400)]
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>
8 years agolib: Clean up some small static analysis warnings
Donald Sharp [Sat, 7 May 2016 00:17:31 +0000 (20:17 -0400)]
lib: 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>
8 years agoospf6d: Fix printf % code usage
Donald Sharp [Fri, 6 May 2016 23:32:00 +0000 (19:32 -0400)]
ospf6d: Fix printf % code usage

Use correct % code in printf statement.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agobgpd: Fix function return
Donald Sharp [Fri, 6 May 2016 23:30:33 +0000 (19:30 -0400)]
bgpd: Fix function return

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agoisisd: Use correct boolean operator type.
Donald Sharp [Fri, 6 May 2016 23:29:36 +0000 (19:29 -0400)]
isisd: Use correct boolean operator type.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agoquagga: Remove WEAK_ALIAS pragma usage
Donald Sharp [Fri, 6 May 2016 23:27:16 +0000 (19:27 -0400)]
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>
8 years agobgpd: peer_uptime overflows after 1 year
Paul Jakma [Tue, 26 May 2015 14:19:38 +0000 (15:19 +0100)]
bgpd: peer_uptime overflows after 1 year

* bgpd.c: (peer_uptime) Wraps after 1 year, and doesn't indicate years.
  Fix. Assume a year is 365 days, for an easy life.

Fixes: Bug #836
Reported-by: Rolf Hanßen
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agobgpd: Refactor peer_uptime
Donald Sharp [Fri, 6 May 2016 14:12:20 +0000 (10:12 -0400)]
bgpd: Refactor peer_uptime

peer_uptime was doing the same work unnecessarily.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agoOSPF LSA may not be refreshed within 1800s, ANVL OSPF test 12.4 fails
Daniel Walton [Wed, 18 May 2016 13:36:38 +0000 (13:36 +0000)]
OSPF LSA may not be refreshed within 1800s, ANVL OSPF test 12.4 fails

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

The previous formula for calculating delay was:

    delay = OSPF_LS_REFRESH_TIME - LS_AGE (lsa) - OSPF_LS_REFRESH_JITTER
              + (random () % (2*OSPF_LS_REFRESH_JITTER));

If LS_AGE() is 0 we get:

  delay = 1800 - 0 - 60 + (random() % 2*60)

So delay will be 1740 + 0..120, so we could easily pick a delay that is
greater than OSPF_LS_REFRESH_TIME (1800).  For the normal case where
we hit this else the LS_AGE will be > 0 so that reduces the chances of
delay being greater than 1800.

8 years agoBGP: "show ip bgp neighbor json" keys are stepping all over each other
Daniel Walton [Wed, 18 May 2016 13:31:59 +0000 (13:31 +0000)]
BGP: "show ip bgp neighbor json" keys are stepping all over each other

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

bgp_show_neighbor() was allocating a json_neigh struct and using that
for every single peer...so the resulting json was a munge of state from
all peers

We need to allocate a new json_neigh for each neighbor.

8 years agoquagga reload failure (Tested on VX)
Daniel Walton [Mon, 16 May 2016 14:36:17 +0000 (14:36 +0000)]
quagga reload failure (Tested on VX)

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

ctx_keys needs to be a tuple and not a list but there was one spot
where I created a tmp copy of the ctx_keys but failed to convert it to
tuple

8 years agoBGP: Unlink BGP instance from VRF only at the end of deletion
vivek [Sat, 14 May 2016 23:07:18 +0000 (16:07 -0700)]
BGP: Unlink BGP instance from VRF only at the end of deletion

Additional change missed out in earlier commit. Updates
d3f5a0d3f51a8a7f3f02c38bd4c1c6870b4b2a5b.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Ticket: CM-10930
Reviewed By: CCR-4717
Testing Done: Manual, bgp-smoke

8 years agoMerge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster
vivek [Sat, 14 May 2016 22:58:23 +0000 (15:58 -0700)]
Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster

8 years agoBGP: Unlink BGP instance from VRF only at the end of deletion
vivek [Sat, 14 May 2016 21:48:18 +0000 (14:48 -0700)]
BGP: Unlink BGP instance from VRF only at the end of deletion

When a BGP instance including the default instance is deleted, it needs to be
unlinked from the corresponding VRF structure. However, instance deletion does
not happen in one shot but needs a lot of threads to run - peer event handling,
route processing etc. - before it can complete. Premature unlinking of the
instance from underlying VRF would result in BGP routes not being deleted from
the zebra RIB.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Ticket: CM-10930
Reviewed By: CCR-4717
Testing Done: Manual, bgp-smoke

8 years agoOSPF ANVL failures in 3.0
Daniel Walton [Sat, 14 May 2016 02:29:11 +0000 (02:29 +0000)]
OSPF ANVL failures in 3.0

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

When we pulled this patch from upstream there was one spot where we
incorrectly used min_ls_interval (5s) instead of min_ls_arrival (1s).
commit ac7424f9dec0d49d891e0b457afa8e31c2b854fe
Author: Michael Rossberg <michael.rossberg@tu-ilmenau.de>
Date:   Mon Jul 27 21:05:44 2015 +0200

    configuration options for faster OSPF convergence

    Allow configuration of faster OSPF convergence via the
    min_ls_interval and min_ls_arrival timer lengths.

    This patch was originated by Michael, and cross-ported
    to Cumulus's Quagga.

8 years agozebra: Fix show ip route for ibgp only routes
Donald Sharp [Fri, 13 May 2016 18:13:00 +0000 (14:13 -0400)]
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>
8 years agoOSPF refreshTimerMsecs in json output is off
Daniel Walton [Fri, 13 May 2016 18:19:56 +0000 (18:19 +0000)]
OSPF refreshTimerMsecs in json output is off

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

The timer is in seconds and was being divided by 1000 instead of
multiplying by 1000 when converting to ms.

8 years agoMerge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster
vivek [Fri, 13 May 2016 17:18:37 +0000 (10:18 -0700)]
Merge branch 'cmaster' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster