mirror_frr/pimd
Sarita Patra 3d68661d7b pimd: neighbor needed true in pim nexthop lookup
Issue:
Client---LHR---RP
1. Add kernel route for RP on LHR. Client send join
2. (*,G) will be get created in LHR and RP.
3. Kill the FRR on all the nodes
4. Start FRR only on LHR node
5. In LHR, (*, G) will be created with iif as unknown.

Root cause:
In the step 4, When LHR will receive igmp join, it will call
the function pim_ecmp_fib_lookup_if_vif_index which will look
for nexthop to RP with neighbor needed as false. So RPF lookup will
be true as the route is present in the kernel. It will create a
(*, G) channel_oil with incoming interface as the RPF interface
towards RP and install the (*,G) mroute in kernel.
Along with this (*,G) upstream gets craeted, which call the function
pim_rpf_update, which will look for the nexthop to RP with neighbor
needed as true. As the frr is not running in RP, no neighbor is present
on the nexthop interface. Due to which this will fail and will update
the channel_oil incoming interface as MAXVIFS(32).

Fix:
pim_ecmp_fib_lookup_if_vif_index() call the function pim_ecmp_nexthop_lookup
with neighbor_needed as true.

Signed-off-by: Sarita Patra <saritap@vmware.com>
2020-03-03 03:31:22 -08:00
..
.gitignore *: cleanup .gitignore files 2018-09-08 21:30:42 +02: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
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 build: non-recursive pimd 2017-09-07 16:20:42 +02:00
mtracebis_netlink.c pimd ripd ripngd: variable shadowing fixes 2018-09-12 12:55:31 +02:00
mtracebis_netlink.h *: conform with COMMUNITY.md formatting rules, via 'make indent' 2018-03-06 14:04:32 -05:00
mtracebis_routeget.c *: fix config.h/zebra.h include order 2018-09-08 21:30:42 +02:00
mtracebis_routeget.h pimd: Multicast traceroute client and router 2018-02-19 23:13:55 +01:00
mtracebis.c *: Replace s_addr 0 => INADDR_ANY 2020-02-06 09:00:12 +02:00
pim_assert.c pimd: Slightly loosen pim assert message length tests 2019-09-10 10:53:15 -04:00
pim_assert.h *: reindent 2017-07-17 14:04:07 +02:00
pim_bfd.c bfdd: Handling local and remote admin-down 2019-10-28 21:38:20 -07:00
pim_bfd.h bgpd/ospfd: make bgp and ospf json response a bit more consistent 2018-08-30 12:40:18 +00:00
pim_br.c *: ALLOC calls cannot fail 2018-08-11 17:14:58 +02:00
pim_br.h *: reindent 2017-07-17 14:04:07 +02:00
pim_bsm.c *: remove null check before XFREE 2020-02-04 13:19:37 -05:00
pim_bsm.h pimd: Forwarding the stored BSM to new neighbor or restarted neighbor 2019-05-14 21:42:22 -07:00
pim_cmd.c *: Replace s_addr 0 => INADDR_ANY 2020-02-06 09:00:12 +02:00
pim_cmd.h pimd : Add support for MLAG Register & Un-register 2019-11-13 19:46:52 -08:00
pim_errors.c pimd: PIM_[ERR|WARN] -> EC_PIM 2018-09-13 19:12:58 +00:00
pim_errors.h pimd: PIM_[ERR|WARN] -> EC_PIM 2018-09-13 19:12:58 +00:00
pim_hello.c *: strip trailing whitespace 2019-09-30 16:44:43 +00:00
pim_hello.h *: reindent 2017-07-17 14:04:07 +02:00
pim_iface.c eigrpd, ospfd, pimd: Fix assumption that interface may not be up 2019-12-04 14:23:20 -05:00
pim_iface.h *: Add infrastructure to support zapi interface callbacks 2019-09-19 13:34:06 -04:00
pim_ifchannel.c *: Remove break after return 2020-02-13 15:39:54 +02:00
pim_ifchannel.h lib: hashing functions should take const arguments 2019-05-14 21:23:08 +00:00
pim_igmp_join.h pimd: Add command to join any-source multicast. 2019-12-12 13:09:46 +01:00
pim_igmp_mtrace.c *: Replace s_addr 0 => INADDR_ANY 2020-02-06 09:00:12 +02:00
pim_igmp_mtrace.h pimd: adding querying of state to mtrace 2018-04-24 18:47:50 +02:00
pim_igmp_stats.c *: fix config.h/zebra.h include order 2018-09-08 21:30:42 +02:00
pim_igmp_stats.h pimd: show ip igmp statistics command 2018-05-04 17:05:19 +02:00
pim_igmp.c pimd: Do not warn for common occurrence in igmp code 2020-01-03 08:41:46 -05:00
pim_igmp.h pimd: Added cli to generate igmp query. 2019-06-24 03:15:10 -07:00
pim_igmpv2.c pimd: show ip igmp statistics command 2018-05-04 17:05:19 +02:00
pim_igmpv2.h *: reindent 2017-07-17 14:04:07 +02:00
pim_igmpv3.c pimd: Cleanup igmp debugs a tiny bit 2019-11-12 09:38:04 -05:00
pim_igmpv3.h *: reindent 2017-07-17 14:04:07 +02:00
pim_instance.c pimd : Add support for MLAG Register & Un-register 2019-11-13 19:46:52 -08:00
pim_instance.h pimd: Convert the upstream_list and hash to a rb tree 2020-01-03 08:39:55 -05: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 Merge pull request #5355 from AnuradhaKaruppiah/pim-state-machine-fixes 2019-12-06 17:47:07 -06:00
pim_join.h *: reindent 2017-07-17 14:04:07 +02:00
pim_jp_agg.c pimd: jp-agg list update debug logs 2019-11-15 14:16:08 -08:00
pim_jp_agg.h pimd: jp-agg list update debug logs 2019-11-15 14:16:08 -08:00
pim_macro.c *: Remove break after return 2020-02-13 15:39:54 +02:00
pim_macro.h *: reindent 2017-07-17 14:04:07 +02:00
pim_main.c pimd: Add missing yang callbacks for route-maps 2020-02-14 00:53:01 -05:00
pim_memory.c pimd: BSM related memory definition to static and function reordering 2019-05-14 21:37:35 -07:00
pim_memory.h pimd: BSM related memory definition to static and function reordering 2019-05-14 21:37:35 -07:00
pim_mlag.c zebra,pim : Fixing Review comments in PIM_MLAG 2019-11-19 08:54:11 -08:00
pim_mlag.h pimd, lib: adding support for MLAG Message processing at PIM 2019-11-13 20:43:15 -08:00
pim_mroute.c pimd: readd iph length checks 2019-12-22 13:34:40 -05:00
pim_mroute.h pimd: enforce PIM_ENFORCE_LOOPFREE_MFC at the time of MFC programming 2019-11-15 14:16:08 -08:00
pim_msdp_packet.c *: style for EC replacements 2018-09-13 19:38:57 +00:00
pim_msdp_packet.h pimd: Make msdp struct pim_instance * aware 2017-07-24 13:51:37 -04:00
pim_msdp_socket.c *: frr_elevate_privs -> frr_with_privs 2019-09-03 17:18:35 +02:00
pim_msdp_socket.h pimd: Make msdp struct pim_instance * aware 2017-07-24 13:51:37 -04:00
pim_msdp.c *: Replace s_addr 0 => INADDR_ANY 2020-02-06 09:00:12 +02:00
pim_msdp.h pimd: Remove pim_msdp_config_write as it was never used 2019-01-04 12:23:39 -05:00
pim_msg.c pimd: fixup (S,G,rpt) prune to conform to the RFC 2019-11-15 14:16:02 -08:00
pim_msg.h pimd: handle endianness in pim header structure 2019-07-10 11:46:40 +08:00
pim_neighbor.c *: Convert prefix_free to double pointer 2019-11-02 16:13:44 -04:00
pim_neighbor.h *: reindent 2017-07-17 14:04:07 +02:00
pim_nht.c pimd: neighbor needed true in pim nexthop lookup 2020-03-03 03:31:22 -08:00
pim_nht.h Merge pull request #4239 from sarav511/rp 2019-05-28 10:26:28 -05:00
pim_oil.c pimd: Convert the upstream_list and hash to a rb tree 2020-01-03 08:39:55 -05:00
pim_oil.h pimd: Convert the channel_oil_list|hash to a rb_tree 2020-01-03 08:39:55 -05:00
pim_pim.c *: Remove break after return 2020-02-13 15:39:54 +02:00
pim_pim.h *: reindent 2017-07-17 14:04:07 +02:00
pim_register.c *: Remove break after return 2020-02-13 15:39:54 +02:00
pim_register.h pimd: extern pim_null_register_send 2019-04-20 08:33:22 -07:00
pim_routemap.c bgpd, lib, ospf6d, ospfd, pimd, zebra: Rework routemap event callback 2019-05-10 18:43:21 -04:00
pim_rp.c pimd: Convert the upstream_list and hash to a rb tree 2020-01-03 08:39:55 -05:00
pim_rp.h pimd: rp_new & rp_del split into 2 tier functions & implement rp_change 2019-05-14 21:35:45 -07:00
pim_rpf.c *: Remove break after return 2020-02-13 15:39:54 +02:00
pim_rpf.h pimd: add caller string prefix to pim_rpf_update logs 2019-11-15 14:16:08 -08:00
pim_signals.c Treewide: use ANSI function definitions 2019-01-24 11:21:59 +01:00
pim_signals.h *: make consistent & update GPLv2 file headers 2017-05-15 16:37:41 +02:00
pim_sock.c pimd: Mark Default TOS Values for PIM & IGMP Outgoing packets 2019-09-23 23:03:12 -07:00
pim_sock.h pimd: pim_socket_join_source is only called from one place 2018-08-02 10:09:09 -04:00
pim_ssm.c *: remove null check before XFREE 2019-02-25 23:00:46 +00: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: Create a struct pim_router and move thread master into it 2019-01-04 12:21:00 -05: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: set mfcc_parent at the time of MFCC programming 2019-11-15 12:00:29 -08:00
pim_static.h pimd: Put 'struct pim_instance *' as the first function parameter 2017-07-24 13:51:41 -04:00
pim_str.c lib: move SG prefix2str APIs from pimd to lib 2019-04-20 08:33:20 -07:00
pim_str.h lib: move SG prefix2str APIs from pimd to lib 2019-04-20 08:33:20 -07:00
pim_time.c Treewide: use ANSI function definitions 2019-01-24 11:21:59 +01:00
pim_time.h *: make consistent & update GPLv2 file headers 2017-05-15 16:37:41 +02:00
pim_tlv.c *: Remove break after return 2020-02-13 15:39:54 +02:00
pim_tlv.h *: reindent 2017-07-17 14:04:07 +02:00
pim_upstream.c *: Remove break after return 2020-02-13 15:39:54 +02:00
pim_upstream.h pimd: Convert the upstream_list and hash to a rb tree 2020-01-03 08:39:55 -05:00
pim_util.c pimd: add support for boundaries 2017-09-26 13:00:52 -04:00
pim_util.h pimd: add support for boundaries 2017-09-26 13:00:52 -04: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: Add command to join any-source multicast. 2019-12-12 13:09:46 +01:00
pim_vty.h lib, pimd: Remove PIM_NODE as it is not needed 2018-01-30 03:21:42 -05:00
pim_vxlan_instance.h pimd: definition of pim-evpn origination and termination devices 2019-04-20 08:33:21 -07:00
pim_vxlan.c pimd: add caller string prefix to pim_rpf_update logs 2019-11-15 14:16:08 -08:00
pim_vxlan.h pimd: re-eval c_oil mute flags on upstream attach/detach 2019-11-15 10:05:06 -08:00
pim_zebra.c pimd: Convert the channel_oil_list|hash to a rb_tree 2020-01-03 08:39:55 -05:00
pim_zebra.h *: Convert from ->interface_up to the interface callback 2019-09-19 13:34:06 -04:00
pim_zlookup.c pimd: lookup nh using vrf_id we checked before 2020-01-08 12:22:30 -05:00
pim_zlookup.h pimd, zebra: Encode nexthop vrf in message 2018-11-01 19:24:59 -04:00
pimd.c pimd: Free up zlookup structure late 2019-03-14 17:03:26 -04:00
pimd.conf.sample pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
pimd.h pimd : Add support for MLAG Register & Un-register 2019-11-13 19:46:52 -08:00
README pimd: Fix README file for FRR 2017-01-19 08:57:17 -05:00
subdir.am doc: rename man pages to frr-* 2020-01-15 14:05:11 +01:00
test_igmpv3_join.c pimd: Fix indentation issue that slipped in? 2017-08-30 07:39:01 -04: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/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 --