mirror_frr/pimd
Chirag Shah 815c33c92f pimd: fix channel_oil and upstream RPF in sync
During PIM Neighbor change/UP event, pim_scan_oil api
scans all channel oil to see any rpf impacted. Instead of
passing current upstream's RPF it passes current RPF as 0 and
does query to rib for nexhtop (without ECMP/Rebalance). This creates
inconsist RPF between Upstream and Channel oil.
In Channel Oil keep backward pointer to upstream DB and fetch up's
RPF and passed to channel_oil scan.
Decrement channel_oil ref_count in upstream_del when decrementing
up ref_count and it is not the last.
Created ECMP based FIB lookup API.

Testing Done:
Performed following testing on tester setup:
5 x LHR, 4 x MSDP Spines, 6 Sources each sending to 1023 groups from one of the spines.
Total send rate 8Mpps.
Test that caused problems was to reboot every device at the same time.
After fix performed 5 iterations of reboot devices and show no sign of the problem.

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2017-05-06 17:38:18 -07:00
..
.gitignore pimd: merge pimd as of 2015-01-19 2016-05-25 20:38:32 -04:00
AUTHORS pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
CAVEATS pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
COMMANDS pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
COPYING pimd: merge pimd as of 2015-01-19 2016-05-25 20:38:32 -04:00
DEBUG pimd: Cleanup the headers. 2017-01-19 10:01:02 -05:00
LINUX_KERNEL_MROUTE_MFC pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
Makefile.am pimd: Allow SSM groups to co-exist with ASM groups. 2017-03-23 09:47:53 -07:00
pim_assert.c pimd: Assume buffer size passed in is of sufficient size 2017-02-24 10:03:40 -05:00
pim_assert.h pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
pim_br.c lib, pimd: Fix borked up prefix code 2016-12-21 20:26:05 -05:00
pim_br.h lib, pimd: Fix borked up prefix code 2016-12-21 20:26:05 -05:00
pim_cmd.c *: fix a bunch of segfaults detected by a CLI fuzzer 2017-05-04 14:39:58 -03:00
pim_cmd.h Merge remote-tracking branch 'origin/master' into pim_lib_work2 2017-01-17 21:01:56 -05:00
pim_hello.c Merge remote-tracking branch 'origin/master' into pim_lib_work2 2017-01-17 21:01:56 -05:00
pim_hello.h pimd: Cleanup the headers. 2017-01-19 10:01:02 -05:00
pim_iface.c pimd: Pim Nexthop Tracking support with ECMP 2017-04-25 12:51:18 -07:00
pim_iface.h pimd: Remove interface type SSM. 2017-03-23 09:48:04 -07:00
pim_ifchannel.c pimd: Note when a S,G stream should be a FHR as well 2017-05-04 11:11:57 -04:00
pim_ifchannel.h pimd: Fix WG/SGRpt & WG J/P processing 2017-04-25 12:51:58 -07:00
pim_igmp_join.h pimd: Fix uninitialized access of req 2017-03-16 20:06:31 -04:00
pim_igmp.c pimd: Cleanup unused variable write 2017-03-31 16:28:22 -04:00
pim_igmp.h pimd: Add hash lookup for igmp group's 2017-02-24 10:03:41 -05:00
pim_igmpv2.c pimd: Missing include causes compile failure on some bsd's 2017-01-19 08:49:12 -05:00
pim_igmpv2.h pimd: add support for IGMPv2 2016-12-21 20:26:11 -05:00
pim_igmpv3.c pimd: fix channel_oil and upstream RPF in sync 2017-05-06 17:38:18 -07:00
pim_igmpv3.h pimd: Cleanup the headers. 2017-01-19 10:01:02 -05:00
pim_int.c pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
pim_int.h pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
pim_join.c pimd: fix pimd crashes around pim rpf 2017-04-25 12:52:04 -07:00
pim_join.h pimd: Join/Prune Aggregation 2017-03-02 08:13:03 -05:00
pim_jp_agg.c pimd: fix pimd crashes around pim rpf 2017-04-25 12:52:04 -07:00
pim_jp_agg.h pimd: Remove unused value 2017-03-16 19:00:16 -04:00
pim_macro.c Merge remote-tracking branch 'origin/master' into pim_lib_work2 2017-01-17 21:01:56 -05:00
pim_macro.h pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
pim_main.c pimd: Allow SSM groups to co-exist with ASM groups. 2017-03-23 09:47:53 -07:00
pim_memory.c pimd: Add prefix list handling to spt-switchover 2017-04-20 15:55:50 -04:00
pim_memory.h pimd: Add prefix list handling to spt-switchover 2017-04-20 15:55:50 -04:00
pim_mroute.c pimd: Pim Nexthop Tracking support with ECMP 2017-04-25 12:51:18 -07:00
pim_mroute.h Merge remote-tracking branch 'origin/master' into pim_lib_work2 2017-01-17 21:01:56 -05:00
pim_msdp_packet.c pimd: increase the maximum msdp TLV burst to 100 from 12 2016-12-21 20:26:18 -05:00
pim_msdp_packet.h pimd: Fix the number of SAs pushed into one MSDP SA-TLV 2016-12-21 20:26:17 -05:00
pim_msdp_socket.c pimd: Cleanup shutdown a bit more. 2017-01-30 12:53:47 -05:00
pim_msdp_socket.h pim-msdp: part-1 - initial protocol infra. 2016-12-21 20:26:12 -05:00
pim_msdp.c pimd: reset packet size on tcp connection reset 2016-12-21 20:26:18 -05:00
pim_msdp.h pimd: Drop local SA reference when the upstream SG is deleted 2016-12-21 20:26:18 -05:00
pim_msg.c pimd: Start sending (S,G,rpt) Prune messages 2017-03-23 12:58:57 -04:00
pim_msg.h pimd: Optimize group size figuring out. 2017-03-23 12:58:24 -04:00
pim_neighbor.c pimd: fix pimd crashes around pim rpf 2017-04-25 12:52:04 -07:00
pim_neighbor.h pimd: Join/Prune Aggregation 2017-03-02 08:13:03 -05:00
pim_nht.c pimd: fix channel_oil and upstream RPF in sync 2017-05-06 17:38:18 -07:00
pim_nht.h pimd: fix channel_oil and upstream RPF in sync 2017-05-06 17:38:18 -07:00
pim_oil.c pimd: fix channel_oil and upstream RPF in sync 2017-05-06 17:38:18 -07:00
pim_oil.h pimd: fix channel_oil and upstream RPF in sync 2017-05-06 17:38:18 -07:00
pim_pim.c pimd: Cleanup unused variable write 2017-03-31 16:28:22 -04:00
pim_pim.h pimd: Add 'struct pim_msg_header' packed data structure. 2017-02-24 10:03:40 -05:00
pim_register.c pimd: Enable igmp on igmp version change cli 2017-04-25 12:51:48 -07:00
pim_register.h pimd: Allow SSM groups to co-exist with ASM groups. 2017-03-23 09:47:53 -07:00
pim_routemap.c Merge branch 'cmaster-next' into vtysh-grammar 2016-10-20 16:31:49 +00:00
pim_rp.c pimd: fix channel_oil and upstream RPF in sync 2017-05-06 17:38:18 -07:00
pim_rp.h pimd: Pim Nexthop Tracking support with ECMP 2017-04-25 12:51:18 -07:00
pim_rpf.c pimd: fix pimd crashes around pim rpf 2017-04-25 12:52:04 -07:00
pim_rpf.h pimd: Nexthop tracking support 2017-03-16 18:53:28 -04:00
pim_signals.c lib: remove remaining struct zlog * args 2017-03-08 00:15:40 +01:00
pim_signals.h *: add frr_init() infrastructure 2017-03-07 23:07:20 +01:00
pim_sock.c pimd: fix clang warning 2017-03-08 16:38:26 +01:00
pim_sock.h pimd: Allow a interface in a vrf to be configured. 2017-02-03 12:33:37 -05:00
pim_ssm.c pimd: Fix pim_ssm build failure by including zebra.h 2017-03-23 14:20:56 -07:00
pim_ssm.h pimd: Allow SSM groups to co-exist with ASM groups. 2017-03-23 09:47:53 -07:00
pim_ssmpingd.c *: Remove non-vrf based ifindex lookup 2017-03-15 10:26:53 -04:00
pim_ssmpingd.h pimd: Cleanup the headers. 2017-01-19 10:01:02 -05:00
pim_static.c pimd: Get Static mroutes displaying again 2017-02-24 10:31:34 -05:00
pim_static.h pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
pim_str.c pimd: Cleanup the headers. 2017-01-19 10:01:02 -05:00
pim_str.h pimd: Cleanup the headers. 2017-01-19 10:01:02 -05:00
pim_time.c Merge remote-tracking branch 'origin/master' into pim_lib_work2 2017-01-17 21:01:56 -05:00
pim_time.h Merge remote-tracking branch 'origin/master' into pim_lib_work2 2017-01-17 21:01:56 -05:00
pim_tlv.c pimd: Cleanup the headers. 2017-01-19 10:01:02 -05:00
pim_tlv.h pimd: Cleanup the headers. 2017-01-19 10:01:02 -05:00
pim_upstream.c pimd: fix channel_oil and upstream RPF in sync 2017-05-06 17:38:18 -07:00
pim_upstream.h pimd: Add ability for upstream to know it's ifchannels 2017-04-20 15:59:12 -04:00
pim_util.c pimd: Cleanup the headers. 2017-01-19 10:01:02 -05:00
pim_util.h pimd: Cleanup the headers. 2017-01-19 10:01:02 -05:00
pim_version.c pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
pim_version.h pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
pim_vty.c pimd: Add prefix list handling to spt-switchover 2017-04-20 15:55:50 -04:00
pim_vty.h pimd: Cleanup the headers. 2017-01-19 10:01:02 -05:00
pim_zebra.c pimd: fix channel_oil and upstream RPF in sync 2017-05-06 17:38:18 -07:00
pim_zebra.h pimd: Allow SSM groups to co-exist with ASM groups. 2017-03-23 09:47:53 -07:00
pim_zlookup.c *: Remove non-vrf based ifindex lookup 2017-03-15 10:26:53 -04:00
pim_zlookup.h pimd: Cleanup shutdown a bit more. 2017-01-30 12:53:47 -05:00
pimd.c Merge branch 'stable/3.0' into pim_dev_3_0 2017-04-28 10:38:05 -05:00
pimd.conf.sample pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
pimd.h Merge branch 'stable/3.0' into pim_dev_3_0 2017-04-28 10:38:05 -05:00
README pimd: Fix README file for FRR 2017-01-19 08:57:17 -05:00
test_igmpv3_join.c pimd: Cleanup the headers. 2017-01-19 10:01:02 -05:00
TODO *: Convert libzebra -> libfrr 2017-02-03 08:29:13 -05:00
TROUBLESHOOTING pimd: merge pimd as of 2015-01-19 2016-05-25 20:38:32 -04:00
WHY_SSM pimd: merge pimd as of 2015-01-19 2016-05-25 20:38:32 -04:00

INTRODUCTION

        qpimd aims to implement a PIM (Protocol Independent Multicast)
	daemon for the FRR Routing Suite.

	qpimd implements PIM-SM (Sparse Mode) of RFC 4601.
        Additionally MSDP has been implemented.

	In order to deliver end-to-end multicast routing control
	plane, qpimd includes the router-side of IGMPv[2|3] (RFC 3376).

LICENSE

        qpimd - pimd for FRR
        Copyright (C) 2008 Everton da Silva Marques

        qpimd is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as
        published by the Free Software Foundation; either version 2,
        or (at your option) any later version.

        qpimd is distributed in the hope that it will be useful, but
        WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public
        License along with qpimd; see the file COPYING.  If not, write
        to the Free Software Foundation, Inc., 59 Temple Place - Suite
        330, Boston, MA 02111-1307, USA.

HOME SITE

        qpimd lives at:

        https://github.com/freerangerouting/frr

PLATFORMS

	qpimd has been tested with Debian Jessie.

REQUIREMENTS

	qpimd requires FRR (2.0 or higher)


CONFIGURATION COMMANDS

	See available commands in the file pimd/COMMANDS.

KNOWN CAVEATS

	See list of known caveats in the file pimd/CAVEATS.

SUPPORT

	Please post comments, questions, patches, bug reports at the
	support site:

        https://freerangerouting/frr

RELATED WORK

	igmprt:	An IGMPv3-router implementation
	- http://www.loria.fr/~lahmadi/igmpv3-router.html

	USC pimd: PIMv2-SM daemon
	- http://netweb.usc.edu/pim/pimd (URL broken in 2008-12-23)
	- http://packages.debian.org/source/sid/pimd (from Debian)

	troglobit pimd: This is the original USC pimd from
	http://netweb.usc.edu/pim/. In January 16, 2010 it was revived
	with the intention to collect patches floating around in
	Debian, Gentoo, Lintrack and other distribution repositories
	and to provide a central point of collaboration.
	- http://github.com/troglobit/pimd

	zpimd: zpimd is not dependent of zebra or any other routing daemon
	- ftp://robur.slu.se/pub/Routing/Zebra
	- http://sunsite2.icm.edu.pl/pub/unix/routing/zpimd

	mrd6: an IPv6 Multicast Router for Linux systems
	- http://fivebits.net/proj/mrd6/

	MBGP: Implementation of RFC 2858 for Quagga
	- git://git.coplanar.net/~balajig/quagga
	- http://www.gossamer-threads.com/lists/quagga/dev/18000

REFERENCES

	IANA Protocol Independent Multicast (PIM) Parameters
	http://www.iana.org/assignments/pim-parameters/pim-parameters.txt

	Address Family Numbers
	http://www.iana.org/assignments/address-family-numbers

                              -- END --