diff options
Diffstat (limited to 'pimd/pim_macro.c')
| -rw-r--r-- | pimd/pim_macro.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/pimd/pim_macro.c b/pimd/pim_macro.c index 6691cc00d6..c6961d30c2 100644 --- a/pimd/pim_macro.c +++ b/pimd/pim_macro.c @@ -113,8 +113,7 @@ int pim_macro_ch_lost_assert(const struct pim_ifchannel *ch) ifp = ch->interface; if (!ifp) { - zlog_warn("%s: (S,G)=%s: null interface", __PRETTY_FUNCTION__, - ch->sg_str); + zlog_warn("%s: (S,G)=%s: null interface", __func__, ch->sg_str); return 0; /* false */ } @@ -125,7 +124,7 @@ int pim_macro_ch_lost_assert(const struct pim_ifchannel *ch) pim_ifp = ifp->info; if (!pim_ifp) { zlog_warn("%s: (S,G)=%s: multicast not enabled on interface %s", - __PRETTY_FUNCTION__, ch->sg_str, ifp->name); + __func__, ch->sg_str, ifp->name); return 0; /* false */ } @@ -158,10 +157,11 @@ 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", - __PRETTY_FUNCTION__, ch->sg_str, ch->interface->name); + __func__, ch->sg_str, ch->interface->name); return 0; /* false */ } @@ -173,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))); } @@ -221,8 +233,7 @@ int pim_macro_ch_could_assert_eval(const struct pim_ifchannel *ch) ifp = ch->interface; if (!ifp) { - zlog_warn("%s: (S,G)=%s: null interface", __PRETTY_FUNCTION__, - ch->sg_str); + zlog_warn("%s: (S,G)=%s: null interface", __func__, ch->sg_str); return 0; /* false */ } @@ -379,15 +390,14 @@ int pim_macro_assert_tracking_desired_eval(const struct pim_ifchannel *ch) ifp = ch->interface; if (!ifp) { - zlog_warn("%s: (S,G)=%s: null interface", __PRETTY_FUNCTION__, - ch->sg_str); + zlog_warn("%s: (S,G)=%s: null interface", __func__, ch->sg_str); return 0; /* false */ } pim_ifp = ifp->info; if (!pim_ifp) { zlog_warn("%s: (S,G)=%s: multicast not enabled on interface %s", - __PRETTY_FUNCTION__, ch->sg_str, ch->interface->name); + __func__, ch->sg_str, ch->interface->name); return 0; /* false */ } |
