mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-10-27 08:06:47 +00:00
Setup:
------
R1( LHR) ---------R2( RP) ----------R3( FHR)
Problem:
-------
- Send IGMP/MLD join and traffic.
LHR: (S,G) mroute is created with reference count = 2
and set the flag SRC_STREAM.
(Code flow: pim_mroute_msg_wholepkt -> pim_upstream_add,
pim_upstream_sg_running_proc -> pim_upstream_ref)
- Send IGMP/MLD prune.
LHR: removes (*,G) entry and it tries to remove childen (S,G) entries.
But (S,G) is having reference count = 2. So after prune,
(S,G) entry reference count becomes 1 and will be present
until KAT expires.
Fix:
---
Don't set SRC_STREAM flag for LHR.
In LHR, (S,G) should be maintained, until (*,G) is present.
When prune receives delete (*,G) and children (S,G).
When traffic stops, delete (S,G) after KAT expires.
Issue: #13893
Signed-off-by: Sarita Patra <saritap@vmware.com>
|
||
|---|---|---|
| .. | ||
| .gitignore | ||
| AUTHORS | ||
| CAVEATS | ||
| COMMANDS | ||
| DEBUG | ||
| LINUX_KERNEL_MROUTE_MFC | ||
| Makefile | ||
| mtracebis_netlink.c | ||
| mtracebis_netlink.h | ||
| mtracebis_routeget.c | ||
| mtracebis_routeget.h | ||
| mtracebis.c | ||
| pim6_cmd.c | ||
| pim6_cmd.h | ||
| pim6_main.c | ||
| pim6_mld_protocol.h | ||
| pim6_mld.c | ||
| pim6_mld.h | ||
| pim_addr.c | ||
| pim_addr.h | ||
| pim_assert.c | ||
| pim_assert.h | ||
| pim_bfd.c | ||
| pim_bfd.h | ||
| pim_bsm.c | ||
| pim_bsm.h | ||
| pim_cmd_common.c | ||
| pim_cmd_common.h | ||
| pim_cmd.c | ||
| pim_cmd.h | ||
| pim_errors.c | ||
| pim_errors.h | ||
| pim_hello.c | ||
| pim_hello.h | ||
| pim_iface.c | ||
| pim_iface.h | ||
| pim_ifchannel.c | ||
| pim_ifchannel.h | ||
| pim_igmp_join.h | ||
| pim_igmp_mtrace.c | ||
| pim_igmp_mtrace.h | ||
| pim_igmp_stats.c | ||
| pim_igmp_stats.h | ||
| pim_igmp.c | ||
| pim_igmp.h | ||
| pim_igmpv2.c | ||
| pim_igmpv2.h | ||
| pim_igmpv3.c | ||
| pim_igmpv3.h | ||
| pim_instance.c | ||
| pim_instance.h | ||
| pim_int.c | ||
| pim_int.h | ||
| pim_join.c | ||
| pim_join.h | ||
| pim_jp_agg.c | ||
| pim_jp_agg.h | ||
| pim_macro.c | ||
| pim_macro.h | ||
| pim_main.c | ||
| pim_memory.c | ||
| pim_memory.h | ||
| pim_mlag.c | ||
| pim_mlag.h | ||
| pim_mroute.c | ||
| pim_mroute.h | ||
| pim_msdp_packet.c | ||
| pim_msdp_packet.h | ||
| pim_msdp_socket.c | ||
| pim_msdp_socket.h | ||
| pim_msdp.c | ||
| pim_msdp.h | ||
| pim_msg.c | ||
| pim_msg.h | ||
| pim_nb_config.c | ||
| pim_nb.c | ||
| pim_nb.h | ||
| pim_neighbor.c | ||
| pim_neighbor.h | ||
| pim_nht.c | ||
| pim_nht.h | ||
| pim_oil.c | ||
| pim_oil.h | ||
| pim_pim.c | ||
| pim_pim.h | ||
| pim_register.c | ||
| pim_register.h | ||
| pim_routemap.c | ||
| pim_rp.c | ||
| pim_rp.h | ||
| pim_rpf.c | ||
| pim_rpf.h | ||
| pim_signals.c | ||
| pim_signals.h | ||
| pim_sock.c | ||
| pim_sock.h | ||
| pim_ssm.c | ||
| pim_ssm.h | ||
| pim_ssmpingd.c | ||
| pim_ssmpingd.h | ||
| pim_static.c | ||
| pim_static.h | ||
| pim_str.h | ||
| pim_tib.c | ||
| pim_tib.h | ||
| pim_time.c | ||
| pim_time.h | ||
| pim_tlv.c | ||
| pim_tlv.h | ||
| pim_upstream.c | ||
| pim_upstream.h | ||
| pim_util.c | ||
| pim_util.h | ||
| pim_vty.c | ||
| pim_vty.h | ||
| pim_vxlan_instance.h | ||
| pim_vxlan.c | ||
| pim_vxlan.h | ||
| pim_zebra.c | ||
| pim_zebra.h | ||
| pim_zlookup.c | ||
| pim_zlookup.h | ||
| pim_zpthread.c | ||
| pimd.c | ||
| pimd.h | ||
| README | ||
| subdir.am | ||
| test_igmpv3_join.c | ||
| TODO | ||
| 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 --