mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 11:15:47 +00:00
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 <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
0f31a82a11
commit
4d114ab9f9
@ -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)
|
int pim_macro_chisin_pim_include(const struct pim_ifchannel *ch)
|
||||||
{
|
{
|
||||||
struct pim_interface *pim_ifp = ch->interface->info;
|
struct pim_interface *pim_ifp = ch->interface->info;
|
||||||
|
bool mlag_active = false;
|
||||||
|
|
||||||
if (!pim_ifp) {
|
if (!pim_ifp) {
|
||||||
zlog_warn("%s: (S,G)=%s: multicast not enabled on interface %s",
|
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)
|
if (ch->ifassert_winner.s_addr == pim_ifp->primary_address.s_addr)
|
||||||
return 1; /* true */
|
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 (
|
return (
|
||||||
/* I_am_DR( I ) ? */
|
/* I_am_DR( I ) ? */
|
||||||
PIM_I_am_DR(pim_ifp) &&
|
(PIM_I_am_DR(pim_ifp) || mlag_active) &&
|
||||||
/* lost_assert(S,G,I) == false ? */
|
/* lost_assert(S,G,I) == false ? */
|
||||||
(!pim_macro_ch_lost_assert(ch)));
|
(!pim_macro_ch_lost_assert(ch)));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user