From 4d114ab9f91fcac953e92e25b29192909b1a81bf Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Wed, 9 Oct 2019 15:12:23 -0400 Subject: [PATCH] pimd: Allow LHR in a AA situation to join upstream Add a special catch to the test for pim_macro_chisin_pim_include to allow the LHR to signal interest in joining upstream. This will allow both the DR and non DR of the ActiveActive situation to draw traffic to itself. The non-DR will continue to not forward traffic. Ticket: CM-26610 Signed-off-by: Donald Sharp --- pimd/pim_macro.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pimd/pim_macro.c b/pimd/pim_macro.c index ea3e1a244..c6961d30c 100644 --- a/pimd/pim_macro.c +++ b/pimd/pim_macro.c @@ -157,6 +157,7 @@ int pim_macro_ch_lost_assert(const struct pim_ifchannel *ch) int pim_macro_chisin_pim_include(const struct pim_ifchannel *ch) { struct pim_interface *pim_ifp = ch->interface->info; + bool mlag_active = false; if (!pim_ifp) { zlog_warn("%s: (S,G)=%s: multicast not enabled on interface %s", @@ -172,9 +173,21 @@ int pim_macro_chisin_pim_include(const struct pim_ifchannel *ch) if (ch->ifassert_winner.s_addr == pim_ifp->primary_address.s_addr) return 1; /* true */ + /* + * When we have a activeactive interface we need to signal + * that this interface is interesting to the upstream + * decision to JOIN *if* we are syncing over the interface + */ + if (pim_ifp->activeactive) { + struct pim_upstream *up = ch->upstream; + + if (PIM_UPSTREAM_FLAG_TEST_MLAG_INTERFACE(up->flags)) + mlag_active = true; + } + return ( /* I_am_DR( I ) ? */ - PIM_I_am_DR(pim_ifp) && + (PIM_I_am_DR(pim_ifp) || mlag_active) && /* lost_assert(S,G,I) == false ? */ (!pim_macro_ch_lost_assert(ch))); } -- 2.39.5