mirror_frr/pimd
Rajesh Varatharaj 02de49a3b2 pimd: Fix for data packet loss when FHR is LHR and RP
Topology:
A single router is acting as the First Hop Router (FHR), Last Hop Router (LHR), and RP.

RC and Issue:
When an upstream S,G is in join state, it sends a register message to the RP.
If the RP has the receiver, it sends a register stop message and switches to the shortest path.
When the register stop message is processed, it removes pimreg, moves to prune,
and starts the reg stop timer.

When the reg stop timer expires, PIM changes S,G state to Join Pending and sends out a NULL
register message to RP. RP receives it and fails to send Reg stop because SPT is not set at that point.

The problem is when the register stop timer pops and state is in Join Pending.
According to https://www.rfc-editor.org/rfc/rfc4601#section-4.4.1,
we need to put back the pimreg reg tunnel into the S,G mroute.
This causes data to be sent to the control plane and subsequently interrupts the line rate.

Fix:
If the router is FHR and RP to the group,
ignore SPT status and send out a register stop message back to the DR (in this context, the same router).

Ticket: #3506780

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Signed-off-by: Rajesh Varatharaj <rvaratharaj@nvidia.com>
(cherry picked from commit 8280257cc9)
2025-02-20 16:57:15 +00:00
..
.gitignore pim6d: add skeleton for IPv6 PIM daemon 2022-01-12 18:23:50 +01:00
AUTHORS
CAVEATS pimd: added mtrace caveat 2018-02-27 14:03:39 +01:00
COMMANDS pimd: show ip igmp statistics command 2018-05-04 17:05:19 +02:00
DEBUG pimd: Cleanup the headers. 2017-01-19 10:01:02 -05:00
LINUX_KERNEL_MROUTE_MFC
Makefile build: non-recursive pimd 2017-09-07 16:20:42 +02:00
mtracebis_netlink.c *: manual SPDX License ID conversions 2023-02-09 14:09:07 +01:00
mtracebis_netlink.h *: manual SPDX License ID conversions 2023-02-09 14:09:07 +01:00
mtracebis_routeget.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
mtracebis_routeget.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
mtracebis.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim6_cmd.c pim6d: support embedded-rp 2024-11-13 12:05:35 -03:00
pim6_cmd.h pim6d: support embedded-rp 2024-11-13 12:05:35 -03:00
pim6_main.c pimd: Candidate-RP support 2024-09-09 12:42:28 -05:00
pim6_mld_protocol.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim6_mld.c pim6d: fix crash on clear ipv6 mroute 2024-12-11 10:39:36 -03:00
pim6_mld.h pim6d: Fixing core while running MLD conformance test. 2023-07-18 03:11:21 -07:00
pim_addr.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_addr.h pimd, lib, vtysh: Added new 'router pim[6] [vrf NAME]' config node 2024-07-16 13:30:35 -05:00
pim_assert.c *: Convert THREAD_XXX macros to EVENT_XXX macros 2023-03-24 08:32:17 -04:00
pim_assert.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_autorp.c pimd: Close AutoRP socket when not needed 2025-01-27 17:04:14 +00:00
pim_autorp.h pimd: Implement autorp mapping agent 2024-11-19 22:33:11 +00:00
pim_bfd.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_bfd.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_bsm.c Merge pull request #17850 from Jafaral/wr-rpg 2025-01-14 12:41:15 -05:00
pim_bsm.h pimd: Implement autorp mapping agent CLI 2024-11-19 22:33:11 +00:00
pim_bsr_rpdb.c pimd: Implement rpf lookup mode as a list 2025-01-09 21:58:22 +00:00
pim_cmd_common.c pimd: Close AutoRP socket when not needed 2025-01-27 17:04:14 +00:00
pim_cmd_common.h pimd: Implement autorp mapping agent CLI 2024-11-19 22:33:11 +00:00
pim_cmd.c pimd: Implement rpf lookup mode as a list 2025-01-09 21:58:22 +00:00
pim_cmd.h pimd,yang: Implement AutoRP CLI and NB config path 2024-09-24 16:39:17 +00:00
pim_errors.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_errors.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_hello.c *: convert struct interface->connected to DLIST 2023-11-22 23:00:30 +01:00
pim_hello.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_iface.c pimd: Refactor pim NHT 2024-12-13 17:36:34 +00:00
pim_iface.h pimd: Convert boundary_oil_plist to struct prefix_list 2024-12-06 14:44:52 -06:00
pim_ifchannel.c pimd: Fix for FHR mroute taking longer to age out 2025-02-07 03:40:41 +00:00
pim_ifchannel.h *: Rename struct thread to struct event 2023-03-24 08:32:17 -04:00
pim_igmp_join.h pim6d: Impelmenting "ipv6 mld join" 2023-04-03 04:05:17 -07:00
pim_igmp_mtrace.c pimd: Implement rpf lookup mode as a list 2025-01-09 21:58:22 +00:00
pim_igmp_mtrace.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_igmp_stats.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_igmp_stats.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_igmp.c pimd,yang: Extend multicast boundary functionality 2024-12-06 14:44:17 -06:00
pim_igmp.h pimd: add proxy join/prune functionality 2024-09-23 11:43:32 -07:00
pim_igmpv2.c pimd,yang: Extend multicast boundary functionality 2024-12-06 14:44:17 -06:00
pim_igmpv2.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_igmpv3.c pimd: Convert boundary_oil_plist to struct prefix_list 2024-12-06 14:44:52 -06:00
pim_igmpv3.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_instance.c pimd: Refactor pim NHT 2024-12-13 17:36:34 +00:00
pim_instance.h pimd: Implement rpf lookup mode as a list 2025-01-09 21:58:22 +00:00
pim_int.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_int.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_join.c pimd,yang: Extend multicast boundary functionality 2024-12-06 14:44:17 -06:00
pim_join.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_jp_agg.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_jp_agg.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_macro.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_macro.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_main.c pimd: Candidate-RP support 2024-09-09 12:42:28 -05:00
pim_memory.c pimd: fix memory leak and assign allocation type 2025-02-06 16:32:34 +00:00
pim_memory.h pimd: fix memory leak and assign allocation type 2025-02-06 16:32:34 +00:00
pim_mlag.c *: Let's use the native IFNAMSIZ instead of INTERFACE_NAMSIZ 2023-11-21 08:08:29 -05:00
pim_mlag.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_mroute.c pimd: Implement rpf lookup mode as a list 2025-01-09 21:58:22 +00:00
pim_mroute.h pimd: Cleanup inclusion of headers 2024-03-08 18:04:34 +00:00
pim_msdp_packet.c pimd: support originator id configuration 2024-12-12 10:34:19 -03:00
pim_msdp_packet.h pimd: MSDP SA filtering 2024-07-27 11:32:30 -03:00
pim_msdp_socket.c pimd: remove temporary variables from MSDP peer 2024-11-20 12:06:00 -03:00
pim_msdp_socket.h pimd: add support for MSDP authentication 2024-07-29 11:40:53 -03:00
pim_msdp.c pimd: fix memory leak and assign allocation type 2025-02-06 16:32:34 +00:00
pim_msdp.h pimd: support originator id configuration 2024-12-12 10:34:19 -03:00
pim_msg.c pimd: Re-align pim_msg_get_jp_group_size 2024-01-12 15:04:59 -05:00
pim_msg.h pimd: Candidate-BSR support 2024-09-09 13:27:49 -05:00
pim_nb_config.c pimd: fix DR election race on startup 2025-02-07 03:42:34 +00:00
pim_nb.c pimd,yang: Expand rpf-lookup-mode command 2025-01-09 21:58:22 +00:00
pim_nb.h pimd,yang: Expand rpf-lookup-mode command 2025-01-09 21:58:22 +00:00
pim_neighbor.c Merge pull request #13020 from SaiGomathiN/2462808-3 2023-05-02 11:55:34 -04:00
pim_neighbor.h *: Rename struct thread to struct event 2023-03-24 08:32:17 -04:00
pim_nht.c pimd: Implement rpf lookup mode as a list 2025-01-09 21:58:22 +00:00
pim_nht.h pimd: Implement rpf lookup mode as a list 2025-01-09 21:58:22 +00:00
pim_oil.c pimd: Use a better name for oil_parent 2023-09-19 13:03:50 -04:00
pim_oil.h pimd: Use a better name for oil_parent 2023-09-19 13:03:50 -04:00
pim_pim.c pimd: refactor pim_sock_read to be used with unicast bsr msgs 2024-09-09 13:27:49 -05:00
pim_pim.h pimd: refactor pim_sock_read to be used with unicast bsr msgs 2024-09-09 13:27:49 -05:00
pim_register.c pimd: Fix for data packet loss when FHR is LHR and RP 2025-02-20 16:57:15 +00:00
pim_register.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_routemap.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_rp.c pim: handle return code to fix a couple of coverity issues 2024-12-18 21:52:48 -06:00
pim_rp.h pimd: Refactor pim NHT 2024-12-13 17:36:34 +00:00
pim_rpf.c pimd: Refactor pim NHT 2024-12-13 17:36:34 +00:00
pim_rpf.h pimd: Refactor pim NHT 2024-12-13 17:36:34 +00:00
pim_signals.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_signals.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_sock.c pimd: Add AutoRP functionality to PIMD 2024-09-24 16:36:53 +00:00
pim_sock.h pimd: Add AutoRP functionality to PIMD 2024-09-24 16:36:53 +00:00
pim_ssm.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_ssm.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_ssmpingd.c pimd: remove redundant closing socket 2023-09-23 21:06:32 +08:00
pim_ssmpingd.h *: Rename struct thread to struct event 2023-03-24 08:32:17 -04:00
pim_static.c pimd: Use a better name for oil_parent 2023-09-19 13:03:50 -04:00
pim_static.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_str.h pimd: Remove pim_addr_dump 2023-07-21 07:29:26 -04:00
pim_tib.c pim: handle return code to fix a couple of coverity issues 2024-12-18 21:52:48 -06:00
pim_tib.h pimd: add proxy join/prune functionality 2024-09-23 11:43:32 -07:00
pim_time.c *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
pim_time.h *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
pim_tlv.c pimd: Candidate-BSR support 2024-09-09 13:27:49 -05:00
pim_tlv.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_upstream.c pimd: Fix for FHR mroute taking longer to age out 2025-02-07 03:40:41 +00:00
pim_upstream.h pimd: move all MSDP code to its own place 2024-12-11 11:58:25 -03:00
pim_util.c pimd,pim6d: optimize multicast prefix generation 2024-12-13 08:28:42 -03:00
pim_util.h pimd,pim6d: optimize multicast prefix generation 2024-12-13 08:28:42 -03:00
pim_vty.c pimd,yang: Expand rpf-lookup-mode command 2025-01-09 21:58:22 +00:00
pim_vty.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_vxlan_instance.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_vxlan.c pimd: Refactor pim NHT 2024-12-13 17:36:34 +00:00
pim_vxlan.h pimd: Send up to 10 NULL registers on vxlan startup 2024-01-10 15:36:47 -05:00
pim_zebra.c pimd: skip init of mlag roles based on the zebra capabilities message 2024-12-09 12:31:29 -05:00
pim_zebra.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_zlookup.c pimd: Implement rpf lookup mode as a list 2025-01-09 21:58:22 +00:00
pim_zlookup.h pimd: Implement rpf lookup mode as a list 2025-01-09 21:58:22 +00:00
pim_zpthread.c *: Convert thread_add_XXX functions to event_add_XXX 2023-03-24 08:32:17 -04:00
pimd.c pimd: Fix access-list memory leak in pimd 2024-11-26 10:47:46 -06:00
pimd.h pimd: Add AutoRP functionality to PIMD 2024-09-24 16:36:53 +00:00
README pimd: fix frr url 2020-03-29 17:19:37 -04:00
subdir.am pimd: Add AutoRP functionality to PIMD 2024-09-24 16:36:53 +00:00
test_igmpv3_join.c pim6d: Impelmenting "ipv6 mld join" 2023-04-03 04:05:17 -07:00
TODO pimd: Cleanup TODO file 2018-02-26 21:33:02 -05:00
TROUBLESHOOTING

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/frrouting/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://frrouting.org/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 --