Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The PIM assert mechanism did not take effect in a ring network topology, so downstream routers still receive two copies of duplicate multicast packets. #13574

Closed
Odiebeck opened this issue May 22, 2023 · 3 comments
Assignees
Labels
triage Needs further investigation

Comments

@Odiebeck
Copy link

Describe the bug
Recently, I have been using FRR8.2.2 to set up a ring network topology and conduct PIM assert testing.
However, I found that the PIM assert mechanism did not fully take effect due to one upstream router (Router2) not participating in the assert election, resulting in failure to prune the assert oif.
This caused downstream Router4 to continue receiving duplicate multicast traffic.

To Reproduce

1. Build the following network topology
										Receiver
										   |
										   |
									 br-lan_R_3403				
								                   |
										   |
										Router2
									  /			\
									/			  \
							br-lan_R_3401  		     br-lan_R_3402
								    /				      \
								  /					\
								/					  \
						br-lan_R_3401				              \
							    /					              \
							  /                    		                        \				
Sender ---br-lan_R_3403--	Router1             		                      Switch------ br-lan_R_3401--Router4--br-lan_R_3402--- Receiver1				
            				                \						       /
							  \						     /
							br-lan_R_3402			           /	
	      	  					      \                  	                 /
								\				       /
								  \				     /
								br-lan_R_3401	br-lan_R_3402	
									\			 /
									  \		       /
									    Router3 	

sender: 192.168.10.2
receiver1: 192.168.40.2
receiver2: 192.168.20.2

Router1: 
br-lan_R_3401: 192.168.122.1
br-lan_R_3402: 192.168.144.1
br-lan_R_3403: 192.168.10.1

Router2:
br-lan_R_3401: 192.168.122.2
br-lan_R_3402: 192.168.155.1
br-lan_R_3403: 192.168.20.1

Router3:
br-lan_R_3401: 192.168.144.2
br-lan_R_3402: 192.168.155.2

Router4:
br-lan_R_3401: 192.168.155.3
br-lan_R_3402: 192.168.155.2
  1. Configure unicast static routes.
Router1:
root@Test:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     192.168.144.2   255.255.0.0     UG    20     0        0 br-lan_R_3402
192.168.10.0    0.0.0.0         255.255.255.0   U     3408   0        0 br-lan_R_3403
192.168.20.0    192.168.122.2   255.255.255.0   UG    20     0        0 br-lan_R_3401
192.168.40.0    192.168.122.2   255.255.255.0   UG    20     0        0 br-lan_R_3401
192.168.50.0    192.168.122.2   255.255.255.0   UG    20     0        0 br-lan_R_3401
192.168.122.0   0.0.0.0         255.255.255.0   U     3406   0        0 br-lan_R_3401
192.168.133.0   192.168.122.2   255.255.255.0   UG    20     0        0 br-lan_R_3401
192.168.144.0   0.0.0.0         255.255.255.0   U     3407   0        0 br-lan_R_3402
192.168.155.0   192.168.122.2   255.255.255.0   UG    20     0        0 br-lan_R_3401
192.168.166.0   192.168.122.2   255.255.255.0   UG    20     0        0 br-lan_R_3401

Router2:
root@Test:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.122.1   0.0.0.0         UG    20     0        0 br-lan_R_3201
192.168.10.0    192.168.122.1   255.255.255.0   UG    20     0        0 br-lan_R_3201
192.168.20.0    0.0.0.0         255.255.255.0   U     3208   0        0 br-lan_R_3203
192.168.40.0    192.168.155.3   255.255.255.0   UG    20     0        0 br-lan_R_3202
192.168.122.0   0.0.0.0         255.255.255.0   U     3206   0        0 br-lan_R_3201
192.168.155.0   0.0.0.0         255.255.255.0   U     3207   0        0 br-lan_R_3202

Router3:
root@Test:/tmp# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0    192.168.144.1   255.255.255.0   UG    20     0        0 br-lan_R_3401
192.168.40.0    192.168.155.3   255.255.255.0   UG    20     0        0 br-lan_R_3402
192.168.122.0   192.168.144.1   255.255.255.0   UG    20     0        0 br-lan_R_3401
192.168.144.0   0.0.0.0         255.255.255.0   U     3406   0        0 br-lan_R_3401
192.168.155.0   0.0.0.0         255.255.255.0   U     3407   0        0 br-lan_R_3402

Router4:
root@Test:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.155.1   0.0.0.0         UG    20     0        0 br-lan_R_3401
192.168.10.0    192.168.155.2   255.255.255.0   UG    20     0        0 br-lan_R_3401
192.168.40.0    0.0.0.0         255.255.255.0   U     3407   0        0 br-lan_R_3402
192.168.122.0   192.168.155.1   255.255.255.0   UG    20     0        0 br-lan_R_3401
192.168.144.0   192.168.155.2   255.255.255.0   UG    20     0        0 br-lan_R_3401
192.168.155.0   0.0.0.0         255.255.255.0   U     3406   0        0 br-lan_R_3401
  1. Two receivers apply to join the multicast group 225.0.0.10, and the sender sends a multicast stream. The multicast route automatically switches from RPT to SPT.
Router1:
root@Test:~# ip mroute
(192.168.10.2, 225.0.0.10)       Iif: br-lan_R_3403 Oifs: pimreg br-lan_R_3401 br-lan_R_3402 
(0.0.0.0, 225.0.0.10)            Iif: br-lan_R_3401 Oifs: br-lan_R_3401

Router2:
root@Test:~# ip mroute
(192.168.10.2, 225.0.0.10)       Iif: br-lan_R_3201 Oifs: br-lan_R_3202 br-lan_R_3203 
(0.0.0.0, 225.0.0.10)            Iif: br-lan_R_3201 Oifs: pimreg br-lan_R_3201 br-lan_R_3202 br-lan_R_3203

Router3:
root@Test:/tmp# ip mroute
(192.168.10.2, 225.0.0.10)       Iif: br-lan_R_3401 Oifs: br-lan_R_3402 

Router4:
root@Test:~# ip mroute
(192.168.10.2, 225.0.0.10)       Iif: br-lan_R_3401 Oifs: br-lan_R_3402 
(0.0.0.0, 225.0.0.10)            Iif: br-lan_R_3401 Oifs: pimreg br-lan_R_3401 br-lan_R_3402 
  1. After the multicast traffic is forwarded, the assert mechanism is triggered on Router2, Router3 and Router4. However, the assert mechanism has not fully taken effect, and Router4 still receives two duplicate multicast packets.
assert log:
Router2: 
2023/05/22 20:30:09 PIM: [SBM9X-5CWB4] Recv PIM JOINPRUNE packet from 192.168.155.3 to 224.0.0.13 on br-lan_R_3202: ttl=1 pim_version=2 pim_msg_size=34 checksum=cd8a
2023/05/22 20:30:09 PIM: [VA0P1-P6Y3D] pim_neighbor_timer_reset: starting 105 sec timer for neighbor 192.168.155.3 on br-lan_R_3202
2023/05/22 20:30:09 PIM: [VCHA2-Z4SX2] recv_join: join (S,G)=(192.168.10.2,225.0.0.10) rpt=0 wc=0 upstream=192.168.155.2 holdtime=210 from 192.168.155.3 on br-lan_R_3202
2023/05/22 20:30:09 PIM: [PESWF-QK53T] nonlocal_upstream: recv join (S,G)=(192.168.10.2,225.0.0.10) to non-local upstream=192.168.155.2 on br-lan_R_3202
2023/05/22 20:30:09 PIM: [KV88C-GTVKB] pimd/pim_ifchannel.c check_recv_upstream: (S,G)=(192.168.10.2,225.0.0.10) upstream=192.168.155.2 not directed to RPF'(S,G)=192.168.122.1 on interface br-lan_R_3202
2023/05/22 20:30:09 PIM: [GW27G-J4HGZ] Scheduling READ event on PIM socket fd=20
2023/05/22 20:30:10 PIM: [P9NV8-8V8GK] on_neighbor_jp_timer:Sending JP Agg to 192.168.155.2 on br-lan_R_3202 with 0 groups
2023/05/22 20:30:10 PIM: [GWV0R-3FY80] pim_joinprune_send: from 192.168.155.2 on br-lan_R_3202
2023/05/22 20:30:14 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRONGVIF type=2 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3202 vifi=2  size=28
2023/05/22 20:30:14 PIM: [PJ5W8-Y5JGS] pim_mroute_msg_wrongvif: WRONGVIF (S,G)=(192.168.10.2,225.0.0.10) interface br-lan_R_3202 is not downstream for channel
2023/05/22 20:30:14 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRVIFWHOLE type=4 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3202 vifi=2  size=1364
2023/05/22 20:30:14 PIM: [QPET8-SNN46] WRVIFWHOLE (S,G)=(192.168.10.2,225.0.0.10) found ifchannel on interface br-lan_R_3202
2023/05/22 20:30:15 PIM: [SBM9X-5CWB4] Recv PIM HELLO packet from 192.168.155.2 to 224.0.0.13 on br-lan_R_3202: ttl=1 pim_version=2 pim_msg_size=56 checksum=3cc9
2023/05/22 20:30:15 PIM: [VA0P1-P6Y3D] pim_neighbor_timer_reset: starting 105 sec timer for neighbor 192.168.155.2 on br-lan_R_3202
2023/05/22 20:30:15 PIM: [GW27G-J4HGZ] Scheduling READ event on PIM socket fd=20
2023/05/22 20:30:15 PIM: [GEEFD-9DMSG] pim_tlv_append_addrlist_ucast: number of encoded secondary unicast IPv4 addresses: 0
2023/05/22 20:30:15 PIM: [GEEFD-9DMSG] pim_tlv_append_addrlist_ucast: number of encoded secondary unicast IPv4 addresses: 1
2023/05/22 20:30:15 PIM: [P9FK3-3P8F2] pim_msg_send: to 224.0.0.13 on br-lan_R_3202: msg_size=56 checksum=91e4
2023/05/22 20:30:17 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRONGVIF type=2 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3202 vifi=2  size=28
2023/05/22 20:30:17 PIM: [PJ5W8-Y5JGS] pim_mroute_msg_wrongvif: WRONGVIF (S,G)=(192.168.10.2,225.0.0.10) interface br-lan_R_3202 is not downstream for channel
2023/05/22 20:30:17 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRVIFWHOLE type=4 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3202 vifi=2  size=1364
2023/05/22 20:30:17 PIM: [QPET8-SNN46] WRVIFWHOLE (S,G)=(192.168.10.2,225.0.0.10) found ifchannel on interface br-lan_R_3202
2023/05/22 20:30:20 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRONGVIF type=2 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3202 vifi=2  size=28
2023/05/22 20:30:20 PIM: [PJ5W8-Y5JGS] pim_mroute_msg_wrongvif: WRONGVIF (S,G)=(192.168.10.2,225.0.0.10) interface br-lan_R_3202 is not downstream for channel
2023/05/22 20:30:20 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRVIFWHOLE type=4 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3202 vifi=2  size=1364
2023/05/22 20:30:20 PIM: [QPET8-SNN46] WRVIFWHOLE (S,G)=(192.168.10.2,225.0.0.10) found ifchannel on interface br-lan_R_3202

Route3:
2023/05/22 20:30:16 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRONGVIF type=2 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3402 vifi=2  size=28
2023/05/22 20:30:16 PIM: [ZWZDE-J5AWK] pim_mroute_msg_wrongvif: WRONGVIF (S,G)=(192.168.10.2,225.0.0.10) channel is not on Assert NoInfo state for interface br-lan_R_3402
2023/05/22 20:30:16 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRVIFWHOLE type=4 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3402 vifi=2  size=1364
2023/05/22 20:30:16 PIM: [QPET8-SNN46] WRVIFWHOLE (S,G)=(192.168.10.2,225.0.0.10) found ifchannel on interface br-lan_R_3402
2023/05/22 20:30:16 PIM: [GEEFD-9DMSG] pim_tlv_append_addrlist_ucast: number of encoded secondary unicast IPv4 addresses: 0
2023/05/22 20:30:16 PIM: [GEEFD-9DMSG] pim_tlv_append_addrlist_ucast: number of encoded secondary unicast IPv4 addresses: 1
2023/05/22 20:30:16 PIM: [P9FK3-3P8F2] pim_msg_send: to 224.0.0.13 on br-lan_R_3402: msg_size=56 checksum=3cc9
2023/05/22 20:30:17 PIM: [SBM9X-5CWB4] Recv PIM HELLO packet from 192.168.155.3 to 224.0.0.13 on br-lan_R_3402: ttl=1 pim_version=2 pim_msg_size=56 checksum=5e1e
2023/05/22 20:30:17 PIM: [VA0P1-P6Y3D] pim_neighbor_timer_reset: starting 105 sec timer for neighbor 192.168.155.3 on br-lan_R_3402
2023/05/22 20:30:17 PIM: [GW27G-J4HGZ] Scheduling READ event on PIM socket fd=20
2023/05/22 20:30:19 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRONGVIF type=2 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3402 vifi=2  size=28
2023/05/22 20:30:19 PIM: [ZWZDE-J5AWK] pim_mroute_msg_wrongvif: WRONGVIF (S,G)=(192.168.10.2,225.0.0.10) channel is not on Assert NoInfo state for interface br-lan_R_3402
2023/05/22 20:30:19 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRVIFWHOLE type=4 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3402 vifi=2  size=1364
2023/05/22 20:30:19 PIM: [QPET8-SNN46] WRVIFWHOLE (S,G)=(192.168.10.2,225.0.0.10) found ifchannel on interface br-lan_R_3402
2023/05/22 20:30:22 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRONGVIF type=2 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3402 vifi=2  size=28
2023/05/22 20:30:22 PIM: [ZWZDE-J5AWK] pim_mroute_msg_wrongvif: WRONGVIF (S,G)=(192.168.10.2,225.0.0.10) channel is not on Assert NoInfo state for interface br-lan_R_3402
2023/05/22 20:30:22 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRVIFWHOLE type=4 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3402 vifi=2  size=1364
2023/05/22 20:30:22 PIM: [QPET8-SNN46] WRVIFWHOLE (S,G)=(192.168.10.2,225.0.0.10) found ifchannel on interface br-lan_R_3402
2023/05/22 20:30:25 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRONGVIF type=2 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3402 vifi=2  size=28
2023/05/22 20:30:25 PIM: [ZWZDE-J5AWK] pim_mroute_msg_wrongvif: WRONGVIF (S,G)=(192.168.10.2,225.0.0.10) channel is not on Assert NoInfo state for interface br-lan_R_3402
2023/05/22 20:30:25 PIM: [ZAER8-BYQAT] pim_mroute_msg: pim kernel upcall WRVIFWHOLE type=4 ip_p=0 from fd=9 for (S,G)=(192.168.10.2,225.0.0.10) on br-lan_R_3402 vifi=2  size=1364
2023/05/22 20:30:25 PIM: [QPET8-SNN46] WRVIFWHOLE (S,G)=(192.168.10.2,225.0.0.10) found ifchannel on interface br-lan_R_3402

Router4:
root@Ruijie:~# 2023/05/22 20:29:46 PIM: [SBM9X-5CWB4] Recv PIM HELLO packet from 192.168.155.2 to 224.0.0.13 on br-lan_R_3401: ttl=1 pim_version=2 pim_msg_size=56 checksum=3cc9
2023/05/22 20:29:46 PIM: [VA0P1-P6Y3D] pim_neighbor_timer_reset: starting 105 sec timer for neighbor 192.168.155.2 on br-lan_R_3401
2023/05/22 20:29:46 PIM: [GW27G-J4HGZ] Scheduling READ event on PIM socket fd=18
2023/05/22 20:29:47 PIM: [SBM9X-5CWB4] Recv PIM HELLO packet from 192.168.155.1 to 224.0.0.13 on br-lan_R_3401: ttl=1 pim_version=2 pim_msg_size=56 checksum=91e4
2023/05/22 20:29:47 PIM: [VA0P1-P6Y3D] pim_neighbor_timer_reset: starting 105 sec timer for neighbor 192.168.155.1 on br-lan_R_3401
2023/05/22 20:29:47 PIM: [GW27G-J4HGZ] Scheduling READ event on PIM socket fd=18
2023/05/22 20:29:47 PIM: [GEEFD-9DMSG] pim_tlv_append_addrlist_ucast: number of encoded secondary unicast IPv4 addresses: 0
2023/05/22 20:29:47 PIM: [GEEFD-9DMSG] pim_tlv_append_addrlist_ucast: number of encoded secondary unicast IPv4 addresses: 1
2023/05/22 20:29:47 PIM: [P9FK3-3P8F2] pim_msg_send: to 224.0.0.13 on br-lan_R_3401: msg_size=56 checksum=5e1e
2023/05/22 20:29:57 ZEBRA: [GQ030-V0JRT] Asking for (192.168.10.2,225.0.0.10)[default(0)] mroute information
2023/05/22 20:29:57 ZEBRA: [HCFTH-1NSTK] netlink_talk: netlink-cmd (NS 0) type RTM_GETROUTE(26), len=68 seq=1083 flags 0x1
2023/05/22 20:29:57 ZEBRA: [KMXEB-K771Y] netlink_parse_info: netlink-cmd (NS 0) type RTM_NEWROUTE(24), len=72, seq=1083, pid=4294963192
2023/05/22 20:29:57 ZEBRA: [Q3MY3-G3YNJ] MCAST VRF: default(0) RTM_NEWROUTE (192.168.10.2,225.0.0.10) IIF: br-lan_R_3401(13) OIF: br-lan_R_3402(20)  jiffies: 0
2023/05/22 20:29:57 PIM: [HB692-AVWA8] Sending Request for New Channel Oil Information(192.168.10.2,225.0.0.10) VIIF 1(default)
2023/05/22 20:30:03 ZEBRA: [N7K2G-09SG6] rib_match_ipv4_multicast: 0.0.0.0: vrf: default(0) found URIB, using URIB
2023/05/22 20:30:03 PIM: [NJ8DR-JXKXD] zclient_lookup_nexthop_once: addr=*(default)
2023/05/22 20:30:03 PIM: [NJ8DR-JXKXD] zclient_read_nexthop: addr=*(default)
2023/05/22 20:30:05 PIM: [P9NV8-8V8GK] on_neighbor_jp_timer:Sending JP Agg to 192.168.155.1 on br-lan_R_3401 with 1 groups
2023/05/22 20:30:05 PIM: [GWV0R-3FY80] pim_joinprune_send: from 192.168.155.1 on br-lan_R_3401
2023/05/22 20:30:05 PIM: [TDPQH-VGA9F] pim_msg_get_jp_group_size: Considering ((*,225.0.0.10)) children for (S,G,rpt) prune
2023/05/22 20:30:05 PIM: [TXA2P-XZS84] pim_msg_get_jp_group_size: SPT Bit and RPF'((*,225.0.0.10)) == RPF'(S,G): Not adding Prune for ((192.168.10.2,225.0.0.10),rpt)
2023/05/22 20:30:05 PIM: [MCW79-K545J] Lookedup: 0x9ca338 for rp_info: 0x9cea70(225.0.0.10/32) Lock: 2
2023/05/22 20:30:05 PIM: [H8G8R-SHK6F] pim_rp_g: NHT Register RP addr 192.168.122.1/32 grp 225.0.0.10/32 with Zebra
2023/05/22 20:30:05 PIM: [HWBEV-9D9K2] pim_rpf_set_refresh_time: vrf(default) New last route change time: 1684758605170000
2023/05/22 20:30:05 PIM: [QCZ5P-RQFQQ] pim_ecmp_nexthop_lookup: Looking up: 192.168.122.1(default), last lookup time: 1684725240620000
2023/05/22 20:30:05 PIM: [VKDZ4-H8FEM] pim_ecmp_nexthop_search: (192.168.122.1,225.0.0.10)(default) current nexthop br-lan_R_3401 is valid, skipping new path selection
2023/05/22 20:30:05 PIM: [K89KQ-TD67B] pim_joinprune_send: interface br-lan_R_3401 num_joins 1 num_prunes 0
2023/05/22 20:30:05 PIM: [P9FK3-3P8F2] pim_msg_send: to 224.0.0.13 on br-lan_R_3401: msg_size=34 checksum=5a8c
2023/05/22 20:30:10 PIM: [GEEFD-9DMSG] pim_tlv_append_addrlist_ucast: number of encoded secondary unicast IPv4 addresses: 0
2023/05/22 20:30:10 PIM: [GEEFD-9DMSG] pim_tlv_append_addrlist_ucast: number of encoded secondary unicast IPv4 addresses: 1
2023/05/22 20:30:10 PIM: [P9FK3-3P8F2] pim_msg_send: to 224.0.0.13 on br-lan_R_3402: msg_size=56 checksum=ef6b
2023/05/22 20:30:11 PIM: [P9NV8-8V8GK] on_neighbor_jp_timer:Sending JP Agg to 192.168.155.2 on br-lan_R_3401 with 1 groups
2023/05/22 20:30:11 PIM: [GWV0R-3FY80] pim_joinprune_send: from 192.168.155.2 on br-lan_R_3401
2023/05/22 20:30:11 PIM: [K89KQ-TD67B] pim_joinprune_send: interface br-lan_R_3401 num_joins 1 num_prunes 0
2023/05/22 20:30:11 PIM: [P9FK3-3P8F2] pim_msg_send: to 224.0.0.13 on br-lan_R_3401: msg_size=34 checksum=cd8a
2023/05/22 20:30:16 PIM: [SBM9X-5CWB4] Recv PIM HELLO packet from 192.168.155.2 to 224.0.0.13 on br-lan_R_3401: ttl=1 pim_version=2 pim_msg_size=56 checksum=3cc9
2023/05/22 20:30:16 PIM: [VA0P1-P6Y3D] pim_neighbor_timer_reset: starting 105 sec timer for neighbor 192.168.155.2 on br-lan_R_3401
2023/05/22 20:30:16 PIM: [GW27G-J4HGZ] Scheduling READ event on PIM socket fd=18
2023/05/22 20:30:17 PIM: [GEEFD-9DMSG] pim_tlv_append_addrlist_ucast: number of encoded secondary unicast IPv4 addresses: 0
2023/05/22 20:30:17 PIM: [GEEFD-9DMSG] pim_tlv_append_addrlist_ucast: number of encoded secondary unicast IPv4 addresses: 1
2023/05/22 20:30:17 PIM: [P9FK3-3P8F2] pim_msg_send: to 224.0.0.13 on br-lan_R_3401: msg_size=56 checksum=5e1e
assert result:
Router2:
Test# show ip pim assert
Interface        Address         Source          Group           State  Winner          Uptime   Timer
Test# 
Test# show ip pim assert-internal
CA:   CouldAssert
ECA:  Evaluate CouldAssert
ATD:  AssertTrackingDesired
eATD: Evaluate AssertTrackingDesired

Interface        Address         Source          Group           CA  eCA ATD eATD
br-lan_R_3202    192.168.155.1   *               225.0.0.10      no  no  yes yes 
br-lan_R_3202    192.168.155.1   192.168.10.2    225.0.0.10      no  no  no  no  
br-lan_R_3203    192.168.20.1    *               225.0.0.10      no  no  yes yes 
br-lan_R_3203    192.168.20.1    *               239.255.255.250 no  no  yes yes

Router3:
Test# show ip pim assert
Interface        Address         Source          Group           State  Winner          Uptime   Timer
br-lan_R_3402    192.168.155.2   192.168.10.2    225.0.0.10      WINNER 192.168.155.2   05:24:18 00:13
Test# 
Test# 
Test# show ip pim assert-internal
CA:   CouldAssert
ECA:  Evaluate CouldAssert
ATD:  AssertTrackingDesired
eATD: Evaluate AssertTrackingDesired

Interface        Address         Source          Group           CA  eCA ATD eATD
br-lan_R_3402    192.168.155.2   192.168.10.2    225.0.0.10      yes yes yes yes 

Router4:
Test# show ip pim assert
Interface        Address         Source          Group           State  Winner          Uptime   Timer
br-lan_R_3401    192.168.155.3   192.168.10.2    225.0.0.10      LOSER  192.168.155.2   00:00:00 02:59
Test# 
Test# show ip pim assert-internal
CA:   CouldAssert
ECA:  Evaluate CouldAssert
ATD:  AssertTrackingDesired
eATD: Evaluate AssertTrackingDesired

Interface        Address         Source          Group           CA  eCA ATD eATD
br-lan_R_3401    192.168.155.3   192.168.10.2    225.0.0.10      no  no  yes yes 
br-lan_R_3402    192.168.40.1    *               225.0.0.10      no  no  yes yes 

Expected behavior

  1. After triggering the assert election mechanism, the br-lan_R_3402 interface of upstream Router2 fails to win the assert election and is pruned from OIL.
    The br-lan_R_3402 interface of upstream Router3 wins the assert election and is retained to continue forwarding multicast traffic.
  2. After the assert election is over, downstream Router4 only receives one copy of multicast traffic from the assert winner.

Screenshots

Versions
FRR Version: 8.2.2

@Odiebeck Odiebeck added the triage Needs further investigation label May 22, 2023
@Odiebeck
Copy link
Author

Odiebeck commented May 22, 2023

Based on the initial analysis of the existing logs,
Router2 and Router3 respectively receive multicast traffic on their oif interfaces.
They both see that the kernel can report WRONGVIF events to pimd properly.
Router3 will first elect itself as the winner and send out an assert message.
Router4 will receive the assert message sent by Router3 and fail in the election, becoming a loser.

However, there are two problems with Router2:

  1. After receiving the WRONGVIF event, it does not trigger the assert mechanism properly and fails to send out an assert message.
  2. It does not handle the assert message sent by Router2 properly.

The specific assert election results and assert status flags are as follows:

Router2:
Test# show ip pim assert
Interface        Address         Source          Group           State  Winner          Uptime   Timer
Test# 
Test# show ip pim assert-internal
CA:   CouldAssert
ECA:  Evaluate CouldAssert
ATD:  AssertTrackingDesired
eATD: Evaluate AssertTrackingDesired

Interface        Address         Source          Group           CA  eCA ATD eATD
br-lan_R_3202    192.168.155.1   *               225.0.0.10      no  no  yes yes 
br-lan_R_3202    192.168.155.1   192.168.10.2    225.0.0.10      no  no  no  no  
br-lan_R_3203    192.168.20.1    *               225.0.0.10      no  no  yes yes 
br-lan_R_3203    192.168.20.1    *               239.255.255.250 no  no  yes yes

Router3:
Test# show ip pim assert
Interface        Address         Source          Group           State  Winner          Uptime   Timer
br-lan_R_3402    192.168.155.2   192.168.10.2    225.0.0.10      WINNER 192.168.155.2   05:24:18 00:13
Test# 
Test# 
Test# show ip pim assert-internal
CA:   CouldAssert
ECA:  Evaluate CouldAssert
ATD:  AssertTrackingDesired
eATD: Evaluate AssertTrackingDesired

Interface        Address         Source          Group           CA  eCA ATD eATD
br-lan_R_3402    192.168.155.2   192.168.10.2    225.0.0.10      yes yes yes yes 

Router4:
Test# show ip pim assert
Interface        Address         Source          Group           State  Winner          Uptime   Timer
br-lan_R_3401    192.168.155.3   192.168.10.2    225.0.0.10      LOSER  192.168.155.2   00:00:00 02:59
Test# 
Test# show ip pim assert-internal
CA:   CouldAssert
ECA:  Evaluate CouldAssert
ATD:  AssertTrackingDesired
eATD: Evaluate AssertTrackingDesired

Interface        Address         Source          Group           CA  eCA ATD eATD
br-lan_R_3401    192.168.155.3   192.168.10.2    225.0.0.10      no  no  yes yes 
br-lan_R_3402    192.168.40.1    *               225.0.0.10      no  no  yes yes

Copy link

This issue is stale because it has been open 180 days with no activity. Comment or remove the autoclose label in order to avoid having this issue closed.

@frrbot
Copy link

frrbot bot commented Nov 20, 2023

This issue will be automatically closed in the specified period unless there is further activity.

@frrbot frrbot bot closed this as completed Nov 27, 2023
@frrbot frrbot bot removed the autoclose label Nov 27, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
triage Needs further investigation
Projects
None yet
Development

No branches or pull requests

2 participants