]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: When creating new upstream state, figure out what we should join 4177/head
authorDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 22 Apr 2019 21:36:58 +0000 (17:36 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 22 Apr 2019 21:45:04 +0000 (17:45 -0400)
Always when creating a new S,G state look at all possible ifchannels
to decide what the mroute should be.

The bug that this is fixing is this:

Suppose two incoming `*,G` joins on swp1, and swp2.
Now suppose that one of those ifchannel `*,G` sends a `*,G S,G RPT Prune`.
We were creating the S,G upstream state as we should but we were
only looking at the S,G ifchannel to decide the S,G mroute we would
be creating.  As such what we need to do is to look over the associated
*,G ifchannels and allow us to associate correct oil needed.

Ticket: CM-24732
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_upstream.c

index 7de2092a53cca3616c465f0bd0156067f34d6f05..b708e86a2050891625ab06f6a1c44e4beed6d5a7 100644 (file)
@@ -584,9 +584,10 @@ void pim_upstream_switch(struct pim_instance *pim, struct pim_upstream *up,
        pim_upstream_update_assert_tracking_desired(up);
 
        if (new_state == PIM_UPSTREAM_JOINED) {
+               pim_upstream_inherited_olist_decide(pim, up);
                if (old_state != PIM_UPSTREAM_JOINED) {
                        int old_fhr = PIM_UPSTREAM_FLAG_TEST_FHR(up->flags);
-                       forward_on(up);
+
                        pim_msdp_up_join_state_changed(pim, up);
                        if (pim_upstream_could_register(up)) {
                                PIM_UPSTREAM_FLAG_SET_FHR(up->flags);
@@ -601,8 +602,6 @@ void pim_upstream_switch(struct pim_instance *pim, struct pim_upstream *up,
                                pim_upstream_send_join(up);
                                join_timer_start(up);
                        }
-               } else {
-                       forward_on(up);
                }
        } else {