]> git.puffer.fish Git - mirror/frr.git/log
mirror/frr.git
8 years agopimd: Add hash lookups for upstream
Donald Sharp [Fri, 7 Oct 2016 14:25:08 +0000 (14:25 +0000)]
pimd: Add hash lookups for upstream

8 years agopimd: Only delete on KAT when created by stream
Donald Sharp [Wed, 12 Oct 2016 23:18:19 +0000 (19:18 -0400)]
pimd: Only delete on KAT when created by stream

When we have pim_mroute.c or pim_register.c create
the upstream state, only delete it then when
the KAT timer expires, else we will not have
the refcount right and we will do bad things.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix message size read from kernel
Donald Sharp [Mon, 10 Oct 2016 19:31:27 +0000 (15:31 -0400)]
pimd: Fix message size read from kernel

When we read data from the kernel allow for
larger packet sizes to be sent to us.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix LHR both a receiver and a sender
Donald Sharp [Tue, 4 Oct 2016 11:56:09 +0000 (07:56 -0400)]
pimd: Fix LHR both a receiver and a sender

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agozebra: Fix include order for build
Donald Sharp [Fri, 7 Oct 2016 13:05:28 +0000 (09:05 -0400)]
zebra: Fix include order for build

8 years agopimd: Allow bigger packet sizes when receiving callbacks.
Donald Sharp [Mon, 3 Oct 2016 22:42:59 +0000 (18:42 -0400)]
pimd: Allow bigger packet sizes when receiving callbacks.

When receiving callbacks from the kernel allow bigger
packet sizes than 3k to be handled appropriately.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix crash when looking at S,G from *,G
Donald Sharp [Tue, 27 Sep 2016 23:59:34 +0000 (19:59 -0400)]
pimd: Fix crash when looking at S,G from *,G

When looping over S,G's associated with a *,G,
there can exist situations where we have not created
the channel oil for the S,G yet.  Don't allow this
to crash the system.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: 'sh ip pim int' showed local IP as the DR
Daniel Walton [Wed, 28 Sep 2016 22:57:31 +0000 (22:57 +0000)]
pimd: 'sh ip pim int' showed local IP as the DR

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agopimd: use JSON_C_TO_STRING_PRETTY everywhere
Daniel Walton [Wed, 28 Sep 2016 01:43:20 +0000 (01:43 +0000)]
pimd: use JSON_C_TO_STRING_PRETTY everywhere

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
8 years agopimd: 'show ip pim state json' use JSON_C_TO_STRING_PRETTY
Daniel Walton [Wed, 28 Sep 2016 01:35:22 +0000 (18:35 -0700)]
pimd: 'show ip pim state json' use JSON_C_TO_STRING_PRETTY

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Ticket: CM-11812

8 years agopimd: initial "show ip pim state"
Daniel Walton [Wed, 28 Sep 2016 01:33:33 +0000 (01:33 +0000)]
pimd: initial "show ip pim state"

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Ticket: CM-11812

superm-redxp-05# show ip pim state

Source           Group            IIF    OIL
20.0.13.253      230.10.10.1      br1    swp1
20.0.13.253      230.20.20.1      br1
0.0.0.0          230.40.40.1      swp1   br1
0.0.0.0          230.42.42.1      swp1   br1
0.0.0.0          230.42.43.1      swp1   br1

superm-redxp-05#
superm-redxp-05# show ip pim state 20.0.13.253

Source           Group            IIF    OIL
20.0.13.253      230.10.10.1      br1    swp1
20.0.13.253      230.20.20.1      br1

superm-redxp-05# show ip pim state 20.0.13.253 230.10.10.1

Source           Group            IIF    OIL
20.0.13.253      230.10.10.1      br1    swp1

superm-redxp-05#
superm-redxp-05# show ip pim state 230.40.40.1

Source           Group            IIF    OIL
0.0.0.0          230.40.40.1      swp1   br1

superm-redxp-05# show ip pim state 230.40.40.1 json
{
  "230.40.40.1":{
    "0.0.0.0":{
      "swp1":{
        "br1":{
          "source":"0.0.0.0",
          "group":"230.40.40.1",
          "inboundInterface":"swp1",
          "outboundInterface":"br1"
        }
      }
    }
  }
}
superm-redxp-05#

8 years agopimd: Print '*' for INADDR_ANY
Donald Sharp [Tue, 27 Sep 2016 15:06:12 +0000 (11:06 -0400)]
pimd: Print '*' for INADDR_ANY

When INADDR_ANY is sent to the pim dump function, return "*"

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: sort pim_ifchannel_list
Daniel Walton [Wed, 28 Sep 2016 00:40:58 +0000 (00:40 +0000)]
pimd: sort pim_ifchannel_list

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: sort qpim_channel_oil_list and qpim_upstream_list
Daniel Walton [Wed, 28 Sep 2016 00:14:22 +0000 (00:14 +0000)]
pimd: sort qpim_channel_oil_list and qpim_upstream_list

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
This allows "show ip mroute" and "show ip pim upstream" to display the
groups in order.

8 years agopimd: Add debug wrapping around rp nexthop lookup
Donald Sharp [Mon, 26 Sep 2016 23:59:48 +0000 (19:59 -0400)]
pimd: Add debug wrapping around rp nexthop lookup

When looking up the RP only print debugs when
debugging is turned on.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Added json to 'show ip igmp group'
Daniel Walton [Tue, 27 Sep 2016 16:37:38 +0000 (16:37 +0000)]
pimd: Added json to 'show ip igmp group'

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
root@superm-redxp-05[quagga-pim]# vtysh -c 'show ip igmp group'
Interface Address         Group           Mode Timer    Srcs V Uptime
br1       20.0.13.1       230.40.40.1     EXCL 00:03:24    1 3 00:01:28
root@superm-redxp-05[quagga-pim]#
root@superm-redxp-05[quagga-pim]#
root@superm-redxp-05[quagga-pim]# vtysh -c 'show ip igmp group json' |
python -m json.tool
{
    "br1": {
        "230.40.40.1": {
            "group": "230.40.40.1",
            "mode": "EXCLUDE",
            "source": "20.0.13.1",
            "sourcesCount": 1,
            "timer": "00:03:23",
            "uptime": "00:01:30",
            "version": 3
        },
        "address": "20.0.13.1",
        "flagBroadcast": true,
        "flagMulticast": true,
        "index": 96,
        "lanDelayEnabled": true,
        "name": "br1",
        "state": "up"
    }
}
root@superm-redxp-05[quagga-pim]#

8 years agopimd: Don't ask for information when you are notgoing to get an answer
Donald Sharp [Tue, 27 Sep 2016 03:13:42 +0000 (23:13 -0400)]
pimd: Don't ask for information when you are notgoing to get an answer

When we have intentionally not installed a mroute( for whatever
reason ), do not ask for information about that mroute from the
kernel when it happens.

Ticket: CM-12986
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd,zebra: Pass back error message if received
Donald Sharp [Tue, 27 Sep 2016 01:26:43 +0000 (21:26 -0400)]
pimd,zebra: Pass back error message if received

When zebra asks for mroute information let pim
know that the request failed or succeeded.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agolib, pimd: Modify writen to retry on certain failures
Donald Sharp [Mon, 26 Sep 2016 20:37:08 +0000 (16:37 -0400)]
lib, pimd: Modify writen to retry on certain failures

When writen fails, allow itto retry on certain failures
until it succeeds.

Ticket: CM-12986
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agozebra: Fix up the debug for receiving multicast routes
Donald Sharp [Tue, 27 Sep 2016 02:27:37 +0000 (22:27 -0400)]
zebra: Fix up the debug for receiving multicast routes

Improve the netlink debug message.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Remove some more unprotected warnings/debugs
Donald Sharp [Mon, 26 Sep 2016 22:39:54 +0000 (18:39 -0400)]
pimd: Remove some more unprotected warnings/debugs

Pim is outputting a bunch of unprotected debugs.
In a system with a high # of events even with
no logging we will receive lots of messages.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix 'show ip mroute count'
Donald Sharp [Fri, 23 Sep 2016 20:16:38 +0000 (16:16 -0400)]
pimd: Fix 'show ip mroute count'

Add the lastused data.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fixup to use new lastused
Donald Sharp [Fri, 23 Sep 2016 19:43:19 +0000 (19:43 +0000)]
pimd: Fixup to use new lastused

The kernel now reports lastused as the time in hz since
we last saw any packets.  So let's start tracking it
that way.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fixup pim mroute output
Donald Sharp [Thu, 22 Sep 2016 14:50:43 +0000 (14:50 +0000)]
pimd: Fixup pim mroute output

Cleanup the 'show ip mroute' command to be a bit
more minimalistic.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Track upstream state a bit better.
Donald Sharp [Fri, 23 Sep 2016 15:10:31 +0000 (11:10 -0400)]
pimd: Track upstream state a bit better.

Track the upstream state if we are adding
a new state to a pre-existing upstream.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: When sending a register stop don't need a nbr
Donald Sharp [Thu, 22 Sep 2016 19:55:02 +0000 (15:55 -0400)]
pimd: When sending a register stop don't need a nbr

When you send a register stop it is not necessary to
have a neighbor out the choosen interface.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Stop join/prunes from crashing
Donald Sharp [Thu, 22 Sep 2016 17:25:48 +0000 (13:25 -0400)]
pimd: Stop join/prunes from crashing

When we receive a join/prune for a upstream
that we are unable to create, safely ignore
the request until the situation resolves itself.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Allow igmp query to go out immediately on startup
Donald Sharp [Wed, 21 Sep 2016 00:34:31 +0000 (20:34 -0400)]
pimd: Allow igmp query to go out immediately on startup

When starting up allow the 1st query to go out immediately,
well ok 1 second, and then the next queries to go out in
query_interval/4 seconds until startup mode is finished.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Do not send register stop in some cases
Donald Sharp [Wed, 21 Sep 2016 20:16:43 +0000 (16:16 -0400)]
pimd: Do not send register stop in some cases

When we are disabling pim, there exists some
race conditions where we are attempting
to send a register stop out a interface that
is not setup for pim yet.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Further work to fix rpf lookups and nbrs
Donald Sharp [Thu, 15 Sep 2016 20:50:08 +0000 (16:50 -0400)]
pimd: Further work to fix rpf lookups and nbrs

When we do a RPF lookup return a path that we have
neighbors for in those cases where we need to have
a neighbor to pass along the SG state via a pim
join/prune message.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Add debug messages as to why a register packet is rejected.
Donald Sharp [Mon, 19 Sep 2016 17:09:38 +0000 (13:09 -0400)]
pimd: Add debug messages as to why a register packet is rejected.

When we reject a register message from someone, give some reasoning
as to the why of it being rejected to help in debugging the situation.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: "show ip mroute" skips entries without an OIF
Daniel Walton [Sat, 17 Sep 2016 04:10:44 +0000 (04:10 +0000)]
pimd: "show ip mroute" skips entries without an OIF

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
The entry for 230.10.10.4 was not being displayed

root@superm-redxp-05[pimd]# ip mroute show
(20.0.13.253, 230.10.10.4)       Iif: br1
(20.0.13.253, 230.10.10.1)       Iif: br1        Oifs: swp1
root@superm-redxp-05[pimd]#

root@superm-redxp-05[pimd]#
root@superm-redxp-05[pimd]# vtysh -c 'show ip mroute'
Proto: I=IGMP P=PIM S=STATIC O=SOURCE

Source          Group           Proto Input iVifI Output oVifI TTL Uptime
20.0.13.253     230.10.10.1     P     br1       1 swp1       2   1 00:01:09
20.0.13.253     230.10.10.4     P     br1       1 none       0   0 --:--:--
root@superm-redxp-05[pimd]#

8 years agopimd: JSON support for "show ip mroute"
Daniel Walton [Sat, 17 Sep 2016 03:52:58 +0000 (03:52 +0000)]
pimd: JSON support for "show ip mroute"

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Ticket: CM-12876

root@superm-redxp-05[pimd]# vtysh -c 'show ip mroute json' | pjson
{
  "230.10.10.1": {
    "20.0.13.253": {
      "br1": {
        "swp1": {
          "group": "230.10.10.1",
          "iVifI": 1,
          "inboundInterface": "br1",
          "oVifI": 2,
          "outboundInterface": "swp1",
          "protocolPim": true,
          "source": "20.0.13.253",
          "ttl": 1,
          "upTime": "00:02:37"
        }
      }
    }
  },
  "230.10.10.4": {
    "20.0.13.253": {
      "br1": {}
    }
  }
}
root@superm-redxp-05[pimd]#

8 years agopimd: json support for "show ip pim" commands
Daniel Walton [Sat, 17 Sep 2016 02:22:02 +0000 (02:22 +0000)]
pimd: json support for "show ip pim" commands

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Ticket: CM-12865

8 years agopimd: show ip pim int WORD, show ip pim nei WORD, show ip igmp int WORD
Daniel Walton [Thu, 15 Sep 2016 18:49:18 +0000 (18:49 +0000)]
pimd: show ip pim int WORD, show ip pim nei WORD, show ip igmp int WORD

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Ticket: CM-11812

8 years agopimd: Turn off neighbor lookup for the moment
Donald Sharp [Thu, 15 Sep 2016 17:42:04 +0000 (13:42 -0400)]
pimd: Turn off neighbor lookup for the moment

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: show ip pim int WORD, show ip pim nei WORD, show ip igmp int WORD
Daniel Walton [Thu, 15 Sep 2016 17:16:36 +0000 (17:16 +0000)]
pimd: show ip pim int WORD, show ip pim nei WORD, show ip igmp int WORD

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Ticket: CM-11812

8 years agopimd: Bad Bit shifts
Donald Sharp [Thu, 15 Sep 2016 15:14:53 +0000 (11:14 -0400)]
pimd: Bad Bit shifts

I programmed the bit shifts improperly.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Rework approach for needing nbrs
Donald Sharp [Thu, 15 Sep 2016 14:18:28 +0000 (14:18 +0000)]
pimd: Rework approach for needing nbrs

Pim sometimes needs the upstream rpf lookup to
only take into account if we have a nbr out
the selected interface or not.  Move
the code for this to a better spot so
we can make a more intelligent decision
here.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Allow loopbacks to resolve
Donald Sharp [Thu, 15 Sep 2016 13:03:51 +0000 (09:03 -0400)]
pimd: Allow loopbacks to resolve

When doing a rpf check ensure that
if we've considered the RP to be a loopback
allow there to be no neighbor on the other
side.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Resolve rp after neighbor come up
Donald Sharp [Thu, 15 Sep 2016 12:00:42 +0000 (08:00 -0400)]
pimd: Resolve rp after neighbor come up

When a neighbor comes up, see if we suddenly
have a path to the RP.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Only use paths that we have nbrs on
Donald Sharp [Thu, 15 Sep 2016 00:51:28 +0000 (20:51 -0400)]
pimd: Only use paths that we have nbrs on

When looking up nexthops for a path, we
should only allow nexthops that we
actually have neighbors formed for.  Otherwise
when we send join/prune messages they will
do nothing.

Ticket:CM-12754
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Don't assert when looking up a neighbor
Donald Sharp [Thu, 15 Sep 2016 00:45:00 +0000 (20:45 -0400)]
pimd: Don't assert when looking up a neighbor

Do not assert when looking up a neighbor, we don't know
if we have a neighbor don't punish us.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd, zebra: Pass the ifindex for NEXTHOP_TYPE_IPV4
Donald Sharp [Wed, 14 Sep 2016 23:17:54 +0000 (19:17 -0400)]
pimd, zebra: Pass the ifindex for NEXTHOP_TYPE_IPV4

NEXTHOP_TYPE_IPV4 has the ifindex of the route.  Pass it
along so the other side can use it if it is needed.

This will make pim much happier in that we will need to do less
recursive lookups.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Use MULTIPATH_NUM for maxpaths
Donald Sharp [Wed, 14 Sep 2016 15:24:06 +0000 (11:24 -0400)]
pimd: Use MULTIPATH_NUM for maxpaths

When looking up nexthops for a address, just
use the MULTIPATH_NUM as the number allowed
to receive instead of an arbitrary limit of 20 paths.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agoPIM: json support for "show ip pim" commands
Daniel Walton [Wed, 14 Sep 2016 15:12:13 +0000 (15:12 +0000)]
PIM: json support for "show ip pim" commands

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

8 years agoPIM: prefix-list support for selecting RP
Daniel Walton [Tue, 13 Sep 2016 19:41:33 +0000 (19:41 +0000)]
PIM: prefix-list support for selecting RP

Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: CCR-5173
Ticket: CM-12819

8 years agopimd: Start noticing where upstream state came from
Donald Sharp [Tue, 13 Sep 2016 12:20:39 +0000 (12:20 +0000)]
pimd: Start noticing where upstream state came from

We need the ability to know where upstream state
comes from and to do the right thing from there.

ticket: CM-12771
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Add some additional upstream sources
Donald Sharp [Mon, 12 Sep 2016 23:51:02 +0000 (23:51 +0000)]
pimd: Add some additional upstream sources

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Switch all up->fhr to use up->flags
Donald Sharp [Mon, 12 Sep 2016 17:02:53 +0000 (17:02 +0000)]
pimd: Switch all up->fhr to use up->flags

Allow up->flags to know if we are a FHR or not

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Allow flags to know if this is a FHR or not
Donald Sharp [Mon, 12 Sep 2016 16:50:30 +0000 (16:50 +0000)]
pimd: Allow flags to know if this is a FHR or not

Start the switch of storing if the upstream (S,G) is located
on the FHR or not.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Vif is not created in some startup conditions
Donald Sharp [Mon, 12 Sep 2016 23:30:27 +0000 (19:30 -0400)]
pimd: Vif is not created in some startup conditions

When rebooting a switch, if under unnumbered config
there exists a situation where some interfaces
may not create the vif in the kernel.

Ticket: CM-12830
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Startup does not need to assert
Donald Sharp [Mon, 12 Sep 2016 19:09:28 +0000 (15:09 -0400)]
pimd: Startup does not need to assert

When pim starts up there is no need to assert in pim_init
if state is not set as wanted.  Especially for qpim_debugs
as that I would like to turn on debugs before we even start
doing anything in the code.

As for the PIM_MROUTE_IS_ENABLED, the variable is set
right above it, so no need to assert on it.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix high cpu load of pim when interface goes down
Donald Sharp [Mon, 12 Sep 2016 13:01:46 +0000 (09:01 -0400)]
pimd: Fix high cpu load of pim when interface goes down

When a interface goes down we accidently put ourselves into
an infinite loop.

Ticket: CM-12803
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agoUnable to remove route-map from quagga
Daniel Walton [Fri, 9 Sep 2016 20:24:31 +0000 (20:24 +0000)]
Unable to remove route-map from quagga

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

pim was missing route-map hooks

(cherry picked from commit 28b0c6b377e56e76c674c27e384238a755b173b2)

Conflicts:
pimd/pimd.c

8 years agopimd: Add some MSDP infrastructure
Donald Sharp [Thu, 8 Sep 2016 17:17:38 +0000 (13:17 -0400)]
pimd: Add some MSDP infrastructure

Add some very basic MSDP infrastructure to pim.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix unguarded log message
Donald Sharp [Wed, 7 Sep 2016 19:43:17 +0000 (15:43 -0400)]
pimd: Fix unguarded log message

In pim_rpf.c when we receive multiple paths for the
rpf we are complaining that we are not sure what
to do with it yet.  Change the _info to _debug
and don't print out unless we are debugging
stuff.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd, zebra: Allow v6 based nexthops to work in pim
Donald Sharp [Wed, 7 Sep 2016 19:36:43 +0000 (15:36 -0400)]
pimd, zebra: Allow v6 based nexthops to work in pim

When we get a v6 address/ifindex combo back from
a v4 lookup.  Check to see if the outgoing
interface only has one neighbor and if so
use that neighbors loopback address as
the route to use.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Add the ability to lookup neighbor on a interface
Donald Sharp [Wed, 7 Sep 2016 19:34:29 +0000 (15:34 -0400)]
pimd: Add the ability to lookup neighbor on a interface

On a specified interface return the single
neighbor on that interface.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Allow ip address selection for BGP unnumbered
Donald Sharp [Wed, 7 Sep 2016 13:06:47 +0000 (09:06 -0400)]
pimd: Allow ip address selection for BGP unnumbered

When a interface is configured as BGP unnumbered, it
has a v6 LL address as well as no v4 addresses.  In
this case let's look at the lo's ip address as the
primary address to use.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
rebase

8 years agopimd: Allow breaking up of packet.
Donald Sharp [Thu, 8 Sep 2016 12:42:04 +0000 (08:42 -0400)]
pimd: Allow breaking up of packet.

When a packet is too large to send in one go, break it up.

Ticket: CM-12768
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix display of rp information in 'show run'
Donald Sharp [Wed, 7 Sep 2016 14:34:02 +0000 (10:34 -0400)]
pimd: Fix display of rp information in 'show run'

The recent conversion of in_addr_t to struct prefix
caused a display issue in the 'show run' of the rp.

Ticket: CM-12752
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Refactor pim_find_primary_addr
Donald Sharp [Wed, 7 Sep 2016 12:51:29 +0000 (08:51 -0400)]
pimd: Refactor pim_find_primary_addr

The pim_find_primary_addr function just called 1 static function
that was called no where else.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix SA warning
Donald Sharp [Mon, 5 Sep 2016 12:31:46 +0000 (08:31 -0400)]
pimd: Fix SA warning

Restructure code to remove SA warning from clang build.

For some reason, the Clang SA system thought that si.sin_port and
si.sin_addr where not being set to anything.  Fix this problem.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix up rp initialization breakage
Donald Sharp [Fri, 2 Sep 2016 18:34:14 +0000 (14:34 -0400)]
pimd: Fix up rp initialization breakage

When I converted over to using 'struct prefix'
I broke the initialization of the rp.

In addition, I used the wrong AFI type
to switch on in pim_rpf.c

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix compile error on some platforms.
Donald Sharp [Fri, 2 Sep 2016 16:55:18 +0000 (12:55 -0400)]
pimd: Fix compile error on some platforms.

Fix the failure to build vtysh information for pim
on some platforms.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: switch pim_rpf.h to use 'struct prefix' for address
Donald Sharp [Fri, 2 Sep 2016 16:17:10 +0000 (12:17 -0400)]
pimd: switch pim_rpf.h to use 'struct prefix' for address

mrib_nexthop_addr and rpf_addr should be 'struct prefix'
so that we can safely handle unnumbered data from a nexthop
lookup in zebra

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Use Quagga as official bug report place
Donald Sharp [Fri, 2 Sep 2016 15:22:24 +0000 (11:22 -0400)]
pimd: Use Quagga as official bug report place

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Move rpf code into pim_rpf.h
Donald Sharp [Fri, 2 Sep 2016 15:03:43 +0000 (11:03 -0400)]
pimd: Move rpf code into pim_rpf.h

The pim_rpf code needs to be in pim_rpf.h as that it belongs in there.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Switch 'struct in_addr' to 'struct prefix' in pim_zlookup.h
Donald Sharp [Fri, 2 Sep 2016 14:56:29 +0000 (10:56 -0400)]
pimd: Switch 'struct in_addr' to 'struct prefix' in pim_zlookup.h

This is setup code to allow us to receive v6 addresses from
a nexthop lookup from zebra.  This will allow us to work
with unnumbered interfaces.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Add pim_addr_dump to facilitate v4 and v6 address dumping
Donald Sharp [Fri, 2 Sep 2016 14:50:50 +0000 (10:50 -0400)]
pimd: Add pim_addr_dump to facilitate v4 and v6 address dumping

Allow pim_addr_dump to understand prefixes to print out.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix duplicate code in zlookup
Donald Sharp [Fri, 2 Sep 2016 14:43:26 +0000 (10:43 -0400)]
pimd: Fix duplicate code in zlookup

In the nexthop lookup routine, fix the duplicate code
to not check for too many indexes earlier.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Allow interfaces to be unnumbered.
Donald Sharp [Thu, 1 Sep 2016 22:49:53 +0000 (18:49 -0400)]
pimd: Allow interfaces to be unnumbered.

Specify the ifindex of the interface that we want
to turn on IP_MULTICAST_IF on instead of the
address.  If we pass in the address then the
fact that we have multiple interfaces with the
same ip address causes confusion in the kernel.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix creation of channel oil to happen 1st.
Donald Sharp [Wed, 31 Aug 2016 14:50:20 +0000 (10:50 -0400)]
pimd: Fix creation of channel oil to happen 1st.

This has 2 fixes:

On nocache event, crate the channel oil first in
case we don't need to actually create the upstream
information

on wrvifwhole, create the channel oil and install
it, then only create the upstream information
if we are connected to the source.

Ticket: CM-12593
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Allow larger range for KAT(S,G)
Donald Sharp [Thu, 1 Sep 2016 12:33:02 +0000 (08:33 -0400)]
pimd: Allow larger range for KAT(S,G)

Allow the KAT(S,G) time be set to up to 60000
seconds.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: trigger on nbr up to look at rpf cache
Donald Sharp [Mon, 29 Aug 2016 14:49:47 +0000 (10:49 -0400)]
pimd: trigger on nbr up to look at rpf cache

If a neighbor comes up *after* igmp joins and *after* all
the routes are installed into the kernel, then we never
go back and fix up the rpf cache information.  So joins
never go out for those igmp joins.

Ticket: CM-12613
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix debugs to be more logical
Donald Sharp [Fri, 26 Aug 2016 18:09:41 +0000 (14:09 -0400)]
pimd: Fix debugs to be more logical

The rpf debugs really should be zebra debugs
instead of trace debugs.

Additionally fix a return 0; to return NULL;

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Further refinement of switch on a stick
Donald Sharp [Fri, 26 Aug 2016 13:40:08 +0000 (09:40 -0400)]
pimd: Further refinement of switch on a stick

The original modification to allow the RP to receive
packets on the incoming interface when it has
no outgoing interfaces was a bit aggressive and
turned all register events into a join event.

This further divides up the code to do the
right thing in each situation.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Track the # of times we ask for nexthp information
Donald Sharp [Fri, 26 Aug 2016 12:38:18 +0000 (12:38 +0000)]
pimd: Track the # of times we ask for nexthp information

Keep an idea of how many times we are asking zebra
for nexthop information.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Remove unprotected debug log
Donald Sharp [Thu, 25 Aug 2016 13:40:48 +0000 (09:40 -0400)]
pimd: Remove unprotected debug log

Upon receiving *,G joins from downstream we were outputing
a unprotected debug.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Another null pointer dereference
Donald Sharp [Wed, 24 Aug 2016 20:09:28 +0000 (16:09 -0400)]
pimd: Another null pointer dereference

When starting up with a large # of streams
it is possible to have a timing where we
do not yet have a pim_ifp.

Ticket: CM-12636
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Do not crash when attempting to install a mroute.
Donald Sharp [Wed, 24 Aug 2016 19:35:09 +0000 (15:35 -0400)]
pimd: Do not crash when attempting to install a mroute.

When installing a mroute on rpf change make sure
that we have oil for it at this time.

Ticket: CM-12636
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Do not display placeholder for 'show ip pim rp-info'
Donald Sharp [Wed, 24 Aug 2016 19:32:57 +0000 (15:32 -0400)]
pimd: Do not display placeholder for 'show ip pim rp-info'

do not display the 224.0.0.0/4 rp information if none-have
been provided.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix crash in channel_oil_add_oif
Donald Sharp [Wed, 24 Aug 2016 15:23:41 +0000 (11:23 -0400)]
pimd: Fix crash in channel_oil_add_oif

Remove assert, warn user that there is a
problem and move on.

Ticket: CM-12614
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Turn on forwarding for a late added interface.
Donald Sharp [Wed, 24 Aug 2016 14:25:11 +0000 (10:25 -0400)]
pimd: Turn on forwarding for a late added interface.

If we receive a join for a upstream interface that hasn't
yet been added to pim for working under it, we never
go back and add the forwarding on when we get the
interface added to pim.

Ticket: CM-11800
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix unwrappered debug message
Donald Sharp [Wed, 24 Aug 2016 13:30:25 +0000 (09:30 -0400)]
pimd: Fix unwrappered debug message

When checking with zebra about lastused we were not
protecting a debug message.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Do not send join out loopback interfaces
Donald Sharp [Wed, 24 Aug 2016 13:26:54 +0000 (09:26 -0400)]
pimd: Do not send join out loopback interfaces

When we the join timer pops for a interface
don't send the join out a loopback interface.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix crash with interface not configed under pim.
Donald Sharp [Wed, 24 Aug 2016 12:29:24 +0000 (08:29 -0400)]
pimd: Fix crash with interface not configed under pim.

When the RP's address in PIM is not under the loopback,
we can have a situation where this causes PIM to crash.
Check for NULL pointers.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix double close of socket.
Donald Sharp [Wed, 24 Aug 2016 12:20:38 +0000 (08:20 -0400)]
pimd: Fix double close of socket.

When a interface bounces fix the double close from happening

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Add "show ip pim rp-info" command
Donald Sharp [Tue, 23 Aug 2016 20:22:14 +0000 (16:22 -0400)]
pimd: Add "show ip pim rp-info" command

List the RP information we have configured.

Fix bug where we were not properly initializing some code

Ticket: CM-12617
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix bad state no FHR after quagga restart
Donald Sharp [Tue, 23 Aug 2016 17:39:48 +0000 (17:39 +0000)]
pimd: Fix bad state no FHR after quagga restart

If on the FHR we have an established stream between
interested parties and we stop the stream and restart
quagga we were not coming back up into the correct
state.  For the multicast stream.

Ticket: CM-12462
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix crash on RP.
Donald Sharp [Tue, 23 Aug 2016 16:25:55 +0000 (12:25 -0400)]
pimd: Fix crash on RP.

When register stop was received but the upstream
creation fails we are not handling it properly.
Note and return.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Move pim_mroute_connected_to_source to pim_iface.c
Donald Sharp [Tue, 23 Aug 2016 14:35:16 +0000 (10:35 -0400)]
pimd: Move pim_mroute_connected_to_source to pim_iface.c

Move the pim_mroute_conected_to_source function to pim_iface.c
because this is a interface question not a mroute question.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: On RP Allow no output interfaces
Donald Sharp [Mon, 22 Aug 2016 18:59:24 +0000 (14:59 -0400)]
pimd: On RP Allow no output interfaces

On the RP when we receive a register packet for the
same interface that we received the *,G join on
allow the RP to receive the packets but to do
nothing with them.

Additionally check the last_used values even
if the ioctl fails.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix pim to use correct src address for packets
Donald Sharp [Mon, 22 Aug 2016 13:10:05 +0000 (09:10 -0400)]
pimd: Fix pim to use correct src address for packets

When sending register packets to the RP from the FHR
we should be using the ip address of the incoming interface
that received the mcast packet.

Ticket: CM-12445
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix RP upstream Prune -> join state
Donald Sharp [Fri, 19 Aug 2016 19:21:45 +0000 (15:21 -0400)]
pimd: Fix RP upstream Prune -> join state

This fix allows the RP to transition from a Prune'd to Join
state on reception of proper control messages.

Additionally it was noticed on if down -> if up transitions
the prune then join message was going out the wrong interface.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd - Fix rpf lookup to what it was originally
Donald Sharp [Fri, 19 Aug 2016 17:25:20 +0000 (13:25 -0400)]
pimd - Fix rpf lookup to what it was originally

I tried to be smart and skirt around rpf lookup if I knew
the incoming interface.  This turns out to be not necessarily
a good thing because we can easily have asymetrical routing.

This fix removes the attempt to cache the ifp we received
the incoming packet on and just lets the lookup work like
it should.

Additionally it removes the weird hardcoding of the rpf
interface from the register stuff.

Ticket: CM-12530
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
reb

8 years agopimd: When deleting upstream double ensure route is removed
Donald Sharp [Fri, 19 Aug 2016 14:05:01 +0000 (10:05 -0400)]
pimd: When deleting upstream double ensure route is removed

Ensure that when an upstream is removed that we actually
remove the route

Also when we get a callback for whole packet before
we send a register stop make sure we are actually on the
RP.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Fix join received when in Prune or Prune Pending
Donald Sharp [Fri, 19 Aug 2016 13:07:19 +0000 (09:07 -0400)]
pimd: Fix join received when in Prune or Prune Pending

When we are a FHR, and the upstream state is in Prune or Prune Pending
allow the join because we know we want to forward traffic to the RP.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
8 years agopimd: Modify pim_upstream_state2str for more usage
Donald Sharp [Fri, 19 Aug 2016 11:56:59 +0000 (07:56 -0400)]
pimd: Modify pim_upstream_state2str for more usage

Just pass in the actual state to allow us to translate
the state to a string even if we don't have a upstream.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>