Setup:
R1( LHR) ---------R2( RP) ----------R4( 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.
this behavior was tested on 1.3.3/ 1.5 where is solved (frr 9.1 ) :
# version : vyos@rt-rp:~$ show ip multicast route IP Multicast Routing Table Flags: S - Sparse, C - Connected, P - Pruned R - SGRpt Pruned, F - Register flag, T - SPT-bit set Source Group Flags Proto Input Output TTL Uptime * 239.255.12.42 S PIM dum0 eth1 1 00:00:16 100.64.0.2 239.255.12.42 ST STAR eth2 eth1 1 00:13:40 vyos@rt-rp:~$ show version Version: VyOS 1.5-rolling-202309170024 Release train: current Built by: [email protected] Built on: Sun 17 Sep 2023 01:47 UTC Build UUID: ba889739-2b8e-4de4-8bd9-10b665f66abb Build commit ID: 2ca594db0d1fe2 Architecture: x86_64 Boot via: installed image System type: KVM guest Hardware vendor: QEMU Hardware model: Standard PC (i440FX + PIIX, 1996) Hardware S/N: Hardware UUID: 5df7c954-4724-445d-8352-b2f3987c479a vyos@rt-rp:~$ show ip pim upstream Iif Source Group State Uptime JoinTimer RSTimer KATimer RefCnt eth2 100.64.0.2 239.255.12.42 NotJ 00:09:37 00:00:31 --:--:-- 00:02:17 1 vyos@rt-rp:~$ show ip multicast route IP Multicast Routing Table Flags: S - Sparse, C - Connected, P - Pruned R - SGRpt Pruned, F - Register flag, T - SPT-bit set Source Group Flags Proto Input Output TTL Uptime 100.64.0.2 239.255.12.42 SP none eth2 none 0 --:--:-- vyos@rt-rp:~$ vyos@rt-rp:~$ vyos@rt-rp:~$ show ip multicast route IP Multicast Routing Table Flags: S - Sparse, C - Connected, P - Pruned R - SGRpt Pruned, F - Register flag, T - SPT-bit set Source Group Flags Proto Input Output TTL Uptime * 239.255.12.42 S PIM dum0 eth1 1 00:00:13 100.64.0.2 239.255.12.42 ST STAR eth2 eth1 1 00:13:37 #configuration vyos@rt-rp:~$ show configuration commands set interfaces dummy dum0 address '172.16.255.1/24' set interfaces ethernet eth1 address '172.16.150.1/24' set interfaces ethernet eth2 address '172.16.100.1/24' set protocols bgp address-family ipv4-unicast redistribute connected set protocols bgp neighbor 172.16.100.2 address-family ipv4-unicast route-reflector-client set protocols bgp neighbor 172.16.100.2 disable-connected-check set protocols bgp neighbor 172.16.100.2 remote-as '65000' set protocols bgp neighbor 172.16.100.2 timers holdtime '30' set protocols bgp neighbor 172.16.100.2 timers keepalive '10' set protocols bgp neighbor 172.16.150.2 address-family ipv4-unicast route-reflector-client set protocols bgp neighbor 172.16.150.2 disable-connected-check set protocols bgp neighbor 172.16.150.2 remote-as '65000' set protocols bgp neighbor 172.16.150.2 timers holdtime '30' set protocols bgp neighbor 172.16.150.2 timers keepalive '10' set protocols bgp parameters router-id '172.16.100.1' set protocols bgp system-as '65000' set protocols pim interface dum0 set protocols pim interface eth1 set protocols pim interface eth2 set protocols pim rp address 172.16.255.1 group '224.0.0.0/4'
Case on FRR where introduce this fix : https://github.com/FRRouting/frr/pull/14117