mirror_frr/pimd
Donald Sharp 0885a9f1f4 pimd: Fix code to not send joins when SGRPT Prune is received
When we receive a SGRPT Prune we were switching the upstream
to JOINED and immediately sending a join.  This was not
the right thing to do.

This was happening because we were making decisions about the
new ifchannel before it was fully formed.

Rework ifchannel startup to provide enough information to
the pim upstream data structure to make the right decisions

Ticket: CM-16425
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-07-24 13:51:40 -04: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: Refactor code to be in better spots 2017-07-24 13:51:35 -04:00
pim_assert.c pimd: Fix code to not send joins when SGRPT Prune is received 2017-07-24 13:51:40 -04:00
pim_assert.h *: reindent 2017-07-17 14:04:07 +02:00
pim_bfd.c pimd: Remove pimg from pim_upstream.c 2017-07-24 13:51:35 -04:00
pim_bfd.h *: reindent 2017-07-17 14:04:07 +02:00
pim_br.c *: reindent 2017-07-17 14:04:07 +02:00
pim_br.h *: reindent 2017-07-17 14:04:07 +02:00
pim_cmd.c pimd: display down ports show ip pim interface 2017-07-24 13:51:40 -04:00
pim_cmd.h pimd: Create macro to get appropriate pim instance 2017-07-24 13:51:37 -04:00
pim_hello.c pimd: Make pim_hello choose correct vrf 2017-07-24 13:51:36 -04:00
pim_hello.h *: reindent 2017-07-17 14:04:07 +02:00
pim_iface.c pimd: Only add a igmp socket if the address is ipv4 2017-07-24 13:51:40 -04:00
pim_iface.h pimd: Allow pim to work in vrf's without explicitly configuring the vrf device 2017-07-24 13:51:39 -04:00
pim_ifchannel.c pimd: Fix code to not send joins when SGRPT Prune is received 2017-07-24 13:51:40 -04:00
pim_ifchannel.h pimd: Fix code to not send joins when SGRPT Prune is received 2017-07-24 13:51:40 -04:00
pim_igmp_join.h *: reindent 2017-07-17 14:04:07 +02:00
pim_igmp.c *: reindent 2017-07-17 14:04:07 +02:00
pim_igmp.h *: reindent 2017-07-17 14:04:07 +02:00
pim_igmpv2.c *: reindent 2017-07-17 14:04:07 +02:00
pim_igmpv2.h *: reindent 2017-07-17 14:04:07 +02:00
pim_igmpv3.c pimd: Cleanup pimg from pim_igmpv3.c 2017-07-24 13:51:37 -04:00
pim_igmpv3.h *: reindent 2017-07-17 14:04:07 +02:00
pim_instance.c pimd: Cleanup shutdown of vrf 2017-07-24 13:51:39 -04:00
pim_instance.h pimd: Make pim_ssmpingd.c 'struct pim_instance' aware 2017-07-24 13:51:37 -04:00
pim_int.c *: reindent 2017-07-17 14:04:07 +02:00
pim_int.h *: make consistent & update GPLv2 file headers 2017-05-15 16:37:41 +02:00
pim_join.c pimd: Cleanup some join debug messages 2017-07-24 13:51:39 -04:00
pim_join.h *: reindent 2017-07-17 14:04:07 +02:00
pim_jp_agg.c pimd: Cleanup pim_jp_agg_upstream_verification function 2017-07-24 13:51:36 -04:00
pim_jp_agg.h *: reindent 2017-07-17 14:04:07 +02:00
pim_macro.c *: reindent 2017-07-17 14:04:07 +02:00
pim_macro.h *: reindent 2017-07-17 14:04:07 +02:00
pim_main.c pimd: Make pim MSDP pim instance aware to some extent 2017-07-24 13:51:37 -04:00
pim_memory.c *: reindent 2017-07-17 14:04:07 +02:00
pim_memory.h *: make consistent & update GPLv2 file headers 2017-05-15 16:37:41 +02:00
pim_mroute.c pimd: Fix code to not send joins when SGRPT Prune is received 2017-07-24 13:51:40 -04:00
pim_mroute.h pimd: pim_mroute_[add|del]_vif become VRF aware 2017-07-24 13:51:34 -04:00
pim_msdp_packet.c pimd: Push 'struct pim_instance *' a bit further 2017-07-24 13:51:38 -04:00
pim_msdp_packet.h pimd: Make msdp struct pim_instance * aware 2017-07-24 13:51:37 -04:00
pim_msdp_socket.c pimd: Wisely delay startup of msdp listen/connect when vrf is not fully up 2017-07-24 13:51:40 -04:00
pim_msdp_socket.h pimd: Make msdp struct pim_instance * aware 2017-07-24 13:51:37 -04:00
pim_msdp.c pimd: Fix code to not send joins when SGRPT Prune is received 2017-07-24 13:51:40 -04:00
pim_msdp.h pimd: Fix crash when attempting to use channel_oil->pim before it is assigned 2017-07-24 13:51:38 -04:00
pim_msg.c pimd: Cleanup pim_msg.c to use correct pim instance 2017-07-24 13:51:37 -04:00
pim_msg.h *: reindent 2017-07-17 14:04:07 +02:00
pim_neighbor.c pimd: Remove pimg from pim_upstream.c 2017-07-24 13:51:35 -04:00
pim_neighbor.h *: reindent 2017-07-17 14:04:07 +02:00
pim_nht.c pimd: Ensure that (S,G) output is consistent 2017-07-24 13:51:40 -04:00
pim_nht.h pimd: Remove pimg from pim_nht.c in totality 2017-07-24 13:51:35 -04:00
pim_oil.c pimd: Convert channel_oil_hash and list into 'struct pim_instance *' 2017-07-24 13:51:36 -04:00
pim_oil.h pimd: Convert channel_oil_hash and list into 'struct pim_instance *' 2017-07-24 13:51:36 -04:00
pim_pim.c pimd: Fix crash when looking up incoming interface 2017-07-24 13:51:39 -04:00
pim_pim.h *: reindent 2017-07-17 14:04:07 +02:00
pim_register.c pimd: Fix code to not send joins when SGRPT Prune is received 2017-07-24 13:51:40 -04:00
pim_register.h pimd: Remove pimg from pim_register.c 2017-07-24 13:51:36 -04:00
pim_routemap.c *: reindent 2017-07-17 14:04:07 +02:00
pim_rp.c pimd: Convert pim_cmd.c to use correct pim instance 2017-07-24 13:51:38 -04:00
pim_rp.h pimd: Convert pim_cmd.c to use correct pim instance 2017-07-24 13:51:38 -04:00
pim_rpf.c pimd: Cleanup some basic crashes from mistakes made converting to vrf 2017-07-24 13:51:38 -04:00
pim_rpf.h pimd: Cleanup some basic crashes from mistakes made converting to vrf 2017-07-24 13:51:38 -04:00
pim_signals.c *: reindent 2017-07-17 14:04:07 +02:00
pim_signals.h *: make consistent & update GPLv2 file headers 2017-05-15 16:37:41 +02:00
pim_sock.c *: reindent 2017-07-17 14:04:07 +02:00
pim_sock.h *: reindent 2017-07-17 14:04:07 +02:00
pim_ssm.c pimd: Cleanup pim_ssm.c to use 'struct pim_instance *' 2017-07-24 13:51:36 -04:00
pim_ssm.h pimd: Cleanup pim_ssm.c to use 'struct pim_instance *' 2017-07-24 13:51:36 -04:00
pim_ssmpingd.c pimd: Make pim_ssmpingd.c 'struct pim_instance' aware 2017-07-24 13:51:37 -04:00
pim_ssmpingd.h pimd: Make pim_ssmpingd.c 'struct pim_instance' aware 2017-07-24 13:51:37 -04:00
pim_static.c pimd: Convert vif and ifindex lookups to use 'struct pim_instance *' 2017-07-24 13:51:36 -04:00
pim_static.h pimd: Refactore qpim_static_route_list into pim->static_routes 2017-07-24 13:51:35 -04:00
pim_str.c *: reindent 2017-07-17 14:04:07 +02:00
pim_str.h *: reindent 2017-07-17 14:04:07 +02:00
pim_time.c *: reindent 2017-07-17 14:04:07 +02:00
pim_time.h *: make consistent & update GPLv2 file headers 2017-05-15 16:37:41 +02:00
pim_tlv.c *: reindent 2017-07-17 14:04:07 +02:00
pim_tlv.h *: reindent 2017-07-17 14:04:07 +02:00
pim_upstream.c pimd: Fix code to not send joins when SGRPT Prune is received 2017-07-24 13:51:40 -04:00
pim_upstream.h pimd: Fix code to not send joins when SGRPT Prune is received 2017-07-24 13:51:40 -04:00
pim_util.c pimd: Error check str2prefix 2017-07-24 13:51:34 -04:00
pim_util.h *: reindent 2017-07-17 14:04:07 +02:00
pim_version.c *: reindent 2017-07-17 14:04:07 +02:00
pim_version.h *: reindent 2017-07-17 14:04:07 +02:00
pim_vty.c pimd: Cleanup the rest of the global config to be vrf aware for spacing 2017-07-24 13:51:37 -04:00
pim_vty.h pimd: Get show run to display vrf sub mode 2017-07-24 13:51:37 -04:00
pim_zebra.c pimd: Ensure that (S,G) output is consistent 2017-07-24 13:51:40 -04:00
pim_zebra.h pimd: Convert pim_cmd.c to use correct pim instance 2017-07-24 13:51:38 -04:00
pim_zlookup.c pimd: Remove unnecessary debug. 2017-07-24 13:51:40 -04:00
pim_zlookup.h pimd: Make zlookup 'struct pim_instance' aware 2017-07-24 13:51:36 -04:00
pimd.c pimd: Make pim_ssmpingd.c 'struct pim_instance' aware 2017-07-24 13:51:37 -04:00
pimd.conf.sample pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
pimd.h pimd: Add 'debug pim trace detail' command 2017-07-24 13:51:38 -04:00
README pimd: Fix README file for FRR 2017-01-19 08:57:17 -05:00
test_igmpv3_join.c pimd: Fix unchecked return value 2017-07-24 13:51:34 -04: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

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 --