mirror_frr/pimd
Anuradha Karuppiah b07d897ec1 pimd: definition of pim-evpn origination and termination devices
Two devices have special significance to multicast VxLAN tunnels -
1. tunnel origination device -
This device is used as the source device to vxlan-encapsulate BUM traffic.
In the case of the default-vrf this is lo. And in the case of non-default
VRF this is vrf-net-device. This patchset is limited to default-VRF
underlay so all subsequent references of origination-dev are to lo. But it
is possible in the future to extend support to non-default VRFs.
Sample origination mroute on single-VTEP:
(27.0.0.7, 239.1.1.100)          Iif: lo         Oifs: uplink-1

In the case of MLAG we need to mroute traffic form the MLAG-peer so
we force the IIF to the ISL.
Sample origination mroute on MLAG-VTEP:
(36.0.0.9, 239.1.1.100)          Iif: peerlink-3.4094 Oifs: peerlink-3.4094 uplink-1

2. tunnel termination device -
This device is used in the OIL to indicate that packets matching the flow
must be vxlan terminated and overlay packets subsequently forward to the
tenants. A special device has been created for this purpose called ipmr-lo.
This is a simple dummy interface from the kernel perspective which has
special siginficance only to pimd which implicitly enabled pim on the
device and adds it to the termination mroutes.
Sample termination mroute:
(0.0.0.0, 239.1.1.100)           Iif: uplink-1   Oifs: uplink-1 ipmr-lo

PS: currently we default the termination device name to "ipmr-lo" but in
the future it is possible to provide a config command to set the
termination device.

Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
2019-04-20 08:33:21 -07: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 pimd: Create a struct pim_router and move thread master into it 2019-01-04 12:21:00 -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 Merge pull request #4096 from donaldsharp/pim_nht_cleanup 2019-04-16 10:27:35 -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 *: list_delete_and_null() -> list_delete() 2018-10-02 11:40:52 +02:00
pim_hello.h *: reindent 2017-07-17 14:04:07 +02:00
pim_iface.c *: remove null check before XFREE 2019-02-25 23:00:46 +00:00
pim_iface.h pimd: Add hidden 'ip pim active-active` command 2019-01-31 09:28:39 -05:00
pim_ifchannel.c pimd: Update state when receiving S,G join when in S,G RPT Prune state 2019-04-09 13:17:56 -04: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 pimd: pim_nexthop_lookup should return true/false 2019-04-02 08:20:36 -04: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: Create a struct pim_router and move thread master into it 2019-01-04 12:21:00 -05: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 pimd: Create a struct pim_router and move thread master into it 2019-01-04 12:21:00 -05:00
pim_igmpv3.h *: reindent 2017-07-17 14:04:07 +02:00
pim_instance.c pimd: initial infrastructure to maintain VxLAN SG database 2019-04-20 08:33:21 -07:00
pim_instance.h pimd: initial infrastructure to maintain VxLAN SG database 2019-04-20 08:33:21 -07: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: Handling Null incoming interface of dummy upstream 2019-02-24 21:26:58 -08:00
pim_join.h *: reindent 2017-07-17 14:04:07 +02:00
pim_jp_agg.c pimd: Handling Null incoming interface of dummy upstream 2019-02-24 21:26:58 -08:00
pim_jp_agg.h *: reindent 2017-07-17 14:04:07 +02:00
pim_macro.c pimd: Move the infinite_assert_metric global to pim_router 2019-01-04 12:23:39 -05:00
pim_macro.h *: reindent 2017-07-17 14:04:07 +02:00
pim_main.c *: use array_size instead of raw division 2019-02-25 23:00:16 +00:00
pim_memory.c pimd: initial infrastructure to maintain VxLAN SG database 2019-04-20 08:33:21 -07:00
pim_memory.h pimd: initial infrastructure to maintain VxLAN SG database 2019-04-20 08:33:21 -07:00
pim_mroute.c pimd: provide a per-SG control to disabled register encapsulation of data 2019-04-20 08:33:21 -07: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 pimd: Create a struct pim_router and move thread master into it 2019-01-04 12:21:00 -05:00
pim_msdp_socket.h pimd: Make msdp struct pim_instance * aware 2017-07-24 13:51:37 -04:00
pim_msdp.c *: remove null check before XFREE 2019-02-25 23:00:46 +00: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: 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 pimd: Limit lookup of neighbor since we know we have one 2019-04-02 08:20:02 -04:00
pim_neighbor.h *: reindent 2017-07-17 14:04:07 +02:00
pim_nht.c pimd: Add a flag PIM_NEXTHOP_ANSWER_RECEIVED 2019-04-05 11:12:59 -04:00
pim_nht.h pimd: Add a flag PIM_NEXTHOP_ANSWER_RECEIVED 2019-04-05 11:12:59 -04:00
pim_oil.c pimd: allow mroutes with IIF in the OIL 2019-04-20 08:33:21 -07:00
pim_oil.h pimd: Introduce mroute_creation in channel oil data structure 2019-03-31 23:38:28 -07:00
pim_pim.c pimd: Move packet_process variable to pim_router 2019-01-04 12:23:39 -05:00
pim_pim.h *: reindent 2017-07-17 14:04:07 +02:00
pim_register.c pimd: Cleanup extra paranthesis around S,G printout 2019-03-28 15:51:49 -04: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 pimd: Tracking of RPF is *separate* from the lookup 2019-04-05 11:12:59 -04:00
pim_rp.h pimd: Limit lookup of neighbor since we know we have one 2019-04-02 08:20:02 -04:00
pim_rpf.c pimd: provide a mechanism to pin the IIF for an SG entry 2019-04-20 08:33:21 -07:00
pim_rpf.h pimd: pim_nexthop_lookup should return true/false 2019-04-02 08:20:36 -04: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 *: 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 *: 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: Convert to using an ifindex_t for the vif 2019-01-25 12:07:02 -05: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 *: list_delete_and_null() -> list_delete() 2018-10-02 11:40:52 +02:00
pim_tlv.h *: reindent 2017-07-17 14:04:07 +02:00
pim_upstream.c pimd: per-SG control to allow any router to register itself as source 2019-04-20 08:33:21 -07:00
pim_upstream.h pimd: add new source types for vxlan orgination and termination mroutes 2019-04-20 08:33:21 -07: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 hidden 'ip pim active-active` command 2019-01-31 09:28:39 -05: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: initial infrastructure to maintain VxLAN SG database 2019-04-20 08:33:21 -07:00
pim_vxlan.h pimd: initial infrastructure to maintain VxLAN SG database 2019-04-20 08:33:21 -07:00
pim_zebra.c pimd: handle VxLAN SG notifications from zebra 2019-04-20 08:33:21 -07:00
pim_zebra.h pimd: Abstract a RPF change for upstream handling 2018-07-31 18:27:54 -04:00
pim_zlookup.c pimd: Cleanup extra paranthesis around S,G printout 2019-03-28 15:51:49 -04: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: initial infrastructure to maintain VxLAN SG database 2019-04-20 08:33:21 -07:00
README pimd: Fix README file for FRR 2017-01-19 08:57:17 -05:00
subdir.am pimd: initial infrastructure to maintain VxLAN SG database 2019-04-20 08:33:21 -07: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 --