mirror_frr/pimd
Donald Sharp b5469d021c pimd: blackhole traffic when we are not DR for Stream received
Suppose we have a bridge with a host and two routers attached
to it.

r1     r2
|      |
--------
    |
  host

host is sending traffic.
r1 and r2 are pim neighbors and r2 is the DR.

Both r1 and r2 will receive data from the stream up the pim
kernel socket.  r1 will notice that it is not the DR and
stop processing in pim.  This code adds a bit more code to blackhole
the route when r1 detects it is not the DR in this scenario.

This is being done because the kernel is both keeping state and
sending data to the pim process to continue processing this.
Additionally if we happen to be running this on a asic, then
blackholing the route in the asic can save a significant amount
of cpu time handling this situation.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-09-21 11:41:46 -04: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 *: fix config.h/zebra.h include order 2018-09-08 21:30:42 +02:00
pim_assert.c *: conform with COMMUNITY.md formatting rules, via 'make indent' 2018-03-06 14:04:32 -05:00
pim_assert.h *: reindent 2017-07-17 14:04:07 +02:00
pim_bfd.c bgpd/ospfd: make bgp and ospf json response a bit more consistent 2018-08-30 12:40:18 +00: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_cmd.c pimd: Add some extra information to a show command 2018-09-21 10:17:48 -04:00
pim_cmd.h pimd: Multicast traceroute client and router 2018-02-19 23:13:55 +01: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 *: conform with COMMUNITY.md formatting rules, via 'make indent' 2018-03-06 14:04:32 -05:00
pim_hello.h *: reindent 2017-07-17 14:04:07 +02:00
pim_iface.c pimd: use bool instead of int to pass true/false 2018-09-17 14:09:06 -04:00
pim_iface.h pimd: use bool instead of int to pass true/false 2018-09-17 14:09:06 -04:00
pim_ifchannel.c pimd ripd ripngd: variable shadowing fixes 2018-09-12 12:55:31 +02:00
pim_ifchannel.h pimd: Cleanup ifchannel deletion 2018-05-11 18:36:24 -04:00
pim_igmp_join.h pimd: Only need 1 return from a function 2018-08-02 10:09:09 -04:00
pim_igmp_mtrace.c *: fix some random warnings 2018-09-09 01:16:25 +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 *: LIB_[ERR|WARN] -> EC_LIB 2018-09-13 19:34:28 +00:00
pim_igmp.h pimd: show ip igmp statistics command 2018-05-04 17:05:19 +02: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 *: LIB_[ERR|WARN] -> EC_LIB 2018-09-13 19:34:28 +00:00
pim_igmpv3.h *: reindent 2017-07-17 14:04:07 +02:00
pim_instance.c *: add a vrf update hook to be informed of the vrf name 2018-08-28 16:23:50 +02:00
pim_instance.h pimd: Fix ecmp_enable and ecmp_rebalance_enable 2018-06-07 10:23:32 -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: add support for boundaries 2017-09-26 13:00:52 -04:00
pim_join.h *: reindent 2017-07-17 14:04:07 +02:00
pim_jp_agg.c pimd: Remove unnecessary alloc failures 2018-07-08 12:09:21 -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: Add pim_errors and define some pim specific errors 2018-08-14 20:02:05 +00: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: blackhole traffic when we are not DR for Stream received 2018-09-21 11:41:46 -04:00
pim_mroute.h pimd: Fix linux build on older kernels 2017-07-24 13:52:57 -04: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 *: style for EC replacements 2018-09-13 19:38:57 +00:00
pim_msdp_socket.h pimd: Make msdp struct pim_instance * aware 2017-07-24 13:51:37 -04:00
pim_msdp.c *: style for EC replacements 2018-09-13 19:38:57 +00:00
pim_msdp.h *: conform with COMMUNITY.md formatting rules, via 'make indent' 2018-03-06 14:04:32 -05:00
pim_msg.c pimd: RPT Prunes do not need to be figured for a *,G Prune 2018-07-25 14:37:30 -04:00
pim_msg.h *: reindent 2017-07-17 14:04:07 +02:00
pim_neighbor.c *: LIB_[ERR|WARN] -> EC_LIB 2018-09-13 19:34:28 +00:00
pim_neighbor.h *: reindent 2017-07-17 14:04:07 +02:00
pim_nht.c pimd: fix bogus uninitialized warning 2018-08-08 12:32:21 +02:00
pim_nht.h pimd: Remove duplicate parameter to functions 2018-07-07 10:15:02 -04:00
pim_oil.c *: fix gcc-8 format-overflow warnings 2018-08-21 21:05:09 +02:00
pim_oil.h pimd: Multicast traceroute client and router 2018-02-19 23:13:55 +01:00
pim_pim.c *: style for EC replacements 2018-09-13 19:38:57 +00:00
pim_pim.h *: reindent 2017-07-17 14:04:07 +02:00
pim_register.c *: conform with COMMUNITY.md formatting rules, via 'make indent' 2018-03-06 14:04:32 -05:00
pim_register.h pimd: Remove pimg from pim_register.c 2017-07-24 13:51:36 -04:00
pim_routemap.c lib, bgpd, ospf6d, ospfd, pimd: Allow finish to cleanup a bit more 2018-08-03 08:22:45 -04:00
pim_rp.c *: style for EC replacements 2018-09-13 19:38:57 +00:00
pim_rp.h bgpd, ospfd, pimd, zebra: Convert more use_json locations to bool 2018-09-04 17:39:04 +00:00
pim_rpf.c pimd: Remove duplicate parameter to functions 2018-07-07 10:15:02 -04:00
pim_rpf.h pimd: Move some data tracking variables per VRF 2018-03-17 21:34:55 -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 *: LIB_[ERR|WARN] -> EC_LIB 2018-09-13 19:34:28 +00: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 *: style for EC replacements 2018-09-13 19:38:57 +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 *: LIB_[ERR|WARN] -> EC_LIB 2018-09-13 19:34:28 +00: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: Remove unnecessary alloc failures 2018-07-08 12:09:21 -04: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 *: reindent 2017-07-17 14:04:07 +02:00
pim_str.h *: reindent 2017-07-17 14:04:07 +02:00
pim_time.c *: LIB_[ERR|WARN] -> EC_LIB 2018-09-13 19:34:28 +00:00
pim_time.h *: make consistent & update GPLv2 file headers 2017-05-15 16:37:41 +02:00
pim_tlv.c pimd: Convert over to use LIB_ERR_XXX for zlog_err 2018-08-14 20:02:05 +00:00
pim_tlv.h *: reindent 2017-07-17 14:04:07 +02:00
pim_upstream.c lib, pimd: Convert timer_wheel to use thread_execute_name 2018-09-13 10:51:13 -04:00
pim_upstream.h pimd: Cleanup the deletion event a tiny bit 2018-05-11 18:36:24 -04: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: create a new command "ip pim" configuring pim sm 2018-09-10 22:22:14 -07:00
pim_vty.h lib, pimd: Remove PIM_NODE as it is not needed 2018-01-30 03:21:42 -05:00
pim_zebra.c pimd: Add a debug to tell why we are not creating upsteam state 2018-09-21 10:28:57 -04:00
pim_zebra.h pimd: Abstract a RPF change for upstream handling 2018-07-31 18:27:54 -04:00
pim_zlookup.c *: style for EC replacements 2018-09-13 19:38:57 +00:00
pim_zlookup.h pimd: Make zlookup 'struct pim_instance' aware 2017-07-24 13:51:36 -04:00
pimd.c *: LIB_[ERR|WARN] -> EC_LIB 2018-09-13 19:34:28 +00:00
pimd.conf.sample pimd: Remove unnecessary QuaggaId 2016-12-21 20:26:03 -05:00
pimd.h *: ALLOC calls cannot fail 2018-08-11 17:14:58 +02:00
README pimd: Fix README file for FRR 2017-01-19 08:57:17 -05:00
subdir.am build: fix not building docs w/o sphinx 2018-09-09 20:01:08 +02: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 --