]> git.puffer.fish Git - matthieu/frr.git/commit
pimd: Clear (s,g,rpt) ifchannel on (*, G) prune received
authorSarita Patra <saritap@vmware.com>
Tue, 3 Mar 2020 09:51:03 +0000 (01:51 -0800)
committerSarita Patra <saritap@vmware.com>
Fri, 5 Jun 2020 04:49:07 +0000 (21:49 -0700)
commitfa8c500f547ee96475be0fd993d36ab47f59d463
tree5683c332000f40e8e78e868d79a53c282a70492f
parent4765870ee751acdb9fa6d2617e0b4ffdb111e065
pimd: Clear (s,g,rpt) ifchannel on (*, G) prune received

Issue: After SPT switchover, do shut and no-shut the received connected
interface, traffic stops.
                 R2
            |         |
            +         +
 Client-----R1--------R3----Source
R2 is RP.

Root cause:
Client is sending join for G and Source is sending traffic for G.
Before SPT switchover, traffic flows R3-R2-R1, after SPT switchover,
traffic flows R3-R1. Now Check in R2, there will be 2 ifchannel gets
created. first is (*, G) ifchannel which gets created because of (*, G)
join received from R1, second is (S, G) ifchannel which gets created
because of (s,g,rpt) prune received from R1
Shut the receiver connected interface on R1, R1 will send a (*, G) prune
towards RP (R2). On receiving (*, G) prune, R2 deletes the (*, G) ifchannel.
(s,g) ifchannel with flag (s,g,rpt) set will be timeout after the prune timer
expires. Before this timer expires, do noshut the received connected inrterface
on R1. R1 will send a (*,G) join to R2(RP), So oil will be updated in (*, G),
but wont get updated in (s,g) since the flag (s,g,rpt) is set. So traffic flow
stops.

Fix: When (*, G) ifchannel is getting deleted because of (*, G) prune
received, as (*,G) prune indicates that the router no longer wishes
to receive shared tree traffic, so clear (S,G,RPT) flag on all the child (S,G)
ifchannel, which was created because of (S,G,RPT) prune received

Signed-off-by: Sarita Patra <saritap@vmware.com>
pimd/pim_join.c