mirror_frr/pimd
Adriano Marto Reis 95e31a6081 pimd: Indicating the rp in the msdp sa message
Indicating the configured PIM Rendezvous Point (RP) in the MSDP SA
message

The RFC-3618, section 12.2.1, describes the fields included in the MSDP
SA message. The "RP address" field is "the address of the RP in the
domain the source has become active in".

In the most common case, we will establish an MSDP connection from RP to
RP. However, there are cases where we want to establish a MSDP
connection from an interface/address that is not the RP. Section 3 of
RFC-3618 describes that scenario as "intermediate MSDP peer". Moreover,
the RP could be another router in the PIM domain - not the one
establishing the MSDP connection.

The current implementation could be problematic even with a single
router per PIM domain. Consider the following scenario:
* There are two PIM domains, each one with a single router.
* The two routers are connected via two independent networks. Let's say
that is to provide redundancy.
* The routers are configured to establish two MSDP connections, one on
each network (redundancy again).
* A multicast source becomes active on the router 1. It will be
communicated to router 2 via two independent MSDP SA messages, one per
MSDP connection.
* Without these changes, each MSDP SA message will indicate a different
RP.
* Both RP addresses will pass the RPF check, and both MSDP sources will
be accepted.
* If the router has clients interested in that multicast group, it will
send PIM Join messages to both RPs and start receiving the multicast
traffic from both.

With the changes included in this commit, the multicast source available
in router 1 would still be communicated to router 2 twice. But both MSDP
SA messages would indicate the same RP, and one of them would be
discarded due to failure in the RPF-check failure. Also, the changes
allow us to define the RP that will be included in the MSDP SA message,
and it could be one of the interfaces used to establish the MSDP
connection, some other interface on the router, a loopback interface, or
another router in the PIM domain.

These changes should not create compatibility issues. As I mentioned, we
usually establish MSDP connections from RP to RP. In this case, the
result will be the same. We would still indicate the address used to
establish the MSDP connection if the RP is not set - I wonder if that
should even be a valid configuration.

Signed-off-by: Adriano Marto Reis <adrianomarto@gmail.com>
2023-10-04 14:30:44 +10:00
..
.gitignore pim6d: add skeleton for IPv6 PIM daemon 2022-01-12 18:23:50 +01:00
AUTHORS pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
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 pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
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: Correcting the help string 2023-06-11 21:54:24 -07:00
pim6_cmd.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim6_main.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim6_mld_protocol.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim6_mld.c * : include event ptr in event_execute api 2023-07-25 10:17:48 -04: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 pim6d: Impelmenting "ipv6 mld join" 2023-04-03 04:05:17 -07: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_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 pimd: Process no-forward BSM packet 2023-04-09 22:30:44 -07:00
pim_bsm.h *: Rename struct thread to struct event 2023-03-24 08:32:17 -04:00
pim_cmd_common.c pimd: Use a better name for oil_parent 2023-09-19 13:03:50 -04:00
pim_cmd_common.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_cmd.c pimd: Option to get IGMP groups and sources for a particular interface 2023-04-11 11:00:39 -07:00
pim_cmd.h pimd: Option to get IGMP groups and sources for a particular interface 2023-04-11 11:00:39 -07: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 pimd,pim6d: Modify pim_neighbor_find() API 2023-02-24 04:40:38 -08:00
pim_hello.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_iface.c Merge pull request #13605 from anlancs/fix/pimd-promote-interface 2023-07-20 08:16:17 -04:00
pim_iface.h pimd, pim6d: Move mld/igmp deletion code to a common api 2023-06-07 00:01:05 -07:00
pim_ifchannel.c pimd: Fix wrong protocol for SSM 2023-06-07 22:15:29 +08: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 *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01: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 *: Convert THREAD_XXX macros to EVENT_XXX macros 2023-03-24 08:32:17 -04:00
pim_igmp.h *: Rename struct thread to struct event 2023-03-24 08:32:17 -04:00
pim_igmpv2.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_igmpv2.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_igmpv3.c pimd: remove api source_channel_oil_detach() 2023-06-04 22:23:56 -07:00
pim_igmpv3.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_instance.c pimd: Fix wrong creating order for pimreg 2023-05-30 15:10:03 +08:00
pim_instance.h *: Convert struct event_master to struct event_loop 2023-03-24 08:32:17 -04: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 *: Convert THREAD_XXX macros to EVENT_XXX macros 2023-03-24 08:32:17 -04: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 *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
pim_memory.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_memory.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_mlag.c *: Convert thread_add_XXX functions to event_add_XXX 2023-03-24 08:32:17 -04:00
pim_mlag.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_mroute.c pimd: Use a better name for oil_parent 2023-09-19 13:03:50 -04:00
pim_mroute.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_msdp_packet.c pimd: Indicating the rp in the msdp sa message 2023-10-04 14:30:44 +10:00
pim_msdp_packet.h *: Rename struct thread to struct event 2023-03-24 08:32:17 -04:00
pim_msdp_socket.c *: Convert event.h to frrevent.h 2023-03-24 08:32:17 -04:00
pim_msdp_socket.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_msdp.c pimd: Indicating the rp in the msdp sa message 2023-10-04 14:30:44 +10:00
pim_msdp.h *: Convert struct event_master to struct event_loop 2023-03-24 08:32:17 -04:00
pim_msg.c pimd: Prevent vxlan from causing a S,G RPT Prune in some cases 2023-08-12 00:06:51 -04:00
pim_msg.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_nb_config.c pimd,pim6d: Resolving the YANG datatype Inconsistency for PIM Hello Interval 2023-08-30 06:02:12 -07:00
pim_nb.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_nb.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01: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: Add whether or not the rpf succeeded or not to the debug 2023-08-14 11:08:00 -04:00
pim_nht.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01: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: When receiving a packet be more careful with length in pim_pim_packet 2023-08-30 08:54:33 -04:00
pim_pim.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_register.c pimd: Prevent crash when receiving register message when the RP() is unknown 2023-08-31 07:44:36 -04: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 *: Add a hash_clean_and_free() function 2023-03-21 08:54:21 -04:00
pim_rp.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_rpf.c pimd, pim6d: fix pim neighbor check in pim_nexthop_lookup 2023-02-24 04:40:38 -08:00
pim_rpf.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01: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 *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_sock.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01: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 pim6d: Clear channel_oil on prune 2023-06-04 22:23:56 -07:00
pim_tib.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01: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 *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_tlv.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_upstream.c pimd: Use a better name for oil_parent 2023-09-19 13:03:50 -04:00
pim_upstream.h *: Rename struct thread to struct event 2023-03-24 08:32:17 -04:00
pim_util.c pimd: IN_MULTICAST needs host order 2023-03-11 19:39:22 -05:00
pim_util.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_vty.c pim6d: Impelmenting "ipv6 mld join" 2023-04-03 04:05:17 -07: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: Allow more immediate null registers to be sent in the vxlan code 2023-08-12 11:48:15 -04:00
pim_vxlan.h pimd: Allow more immediate null registers to be sent in the vxlan code 2023-08-12 11:48:15 -04:00
pim_zebra.c pimd: Fix possible null of pim instance 2023-04-21 07:08:53 -04:00
pim_zebra.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_zlookup.c pimd: Use a better name for oil_parent 2023-09-19 13:03:50 -04:00
pim_zlookup.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pim_zpthread.c *: Convert thread_add_XXX functions to event_add_XXX 2023-03-24 08:32:17 -04:00
pimd.c *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
pimd.h *: auto-convert to SPDX License IDs 2023-02-09 14:09:11 +01:00
README pimd: fix frr url 2020-03-29 17:19:37 -04:00
subdir.am pimd: Remove pim_addr_dump 2023-07-21 07:29:26 -04: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 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/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 --