summaryrefslogtreecommitdiff
path: root/pimd
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2020-06-03 12:12:32 -0400
committerDonald Sharp <sharpd@cumulusnetworks.com>2020-06-03 13:05:41 -0400
commitdf94b33a6e451fe8f81c83d17f4b8812f992ca9e (patch)
tree43bada4f4c89651650fd08b7f008599121caa323 /pimd
parentedfdfe201abb16b3a743208d5c47ea8e128e1a47 (diff)
pimd: Fix missing code
Found some more missing code that got dropped during the upstreaming process causing issues with things actually working. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'pimd')
-rw-r--r--pimd/pim_oil.c14
-rw-r--r--pimd/pim_upstream.h3
2 files changed, 16 insertions, 1 deletions
diff --git a/pimd/pim_oil.c b/pimd/pim_oil.c
index 21febcc969..3ec0720fc4 100644
--- a/pimd/pim_oil.c
+++ b/pimd/pim_oil.c
@@ -375,6 +375,20 @@ static bool pim_channel_eval_oif_mute(struct channel_oil *c_oil,
return do_mute;
}
+ if (PIM_I_am_DualActive(pim_ifp)) {
+ struct pim_upstream *starup = c_oil->up->parent;
+ if (PIM_UPSTREAM_FLAG_TEST_MLAG_INTERFACE(c_oil->up->flags)
+ && (PIM_UPSTREAM_FLAG_TEST_MLAG_NON_DF(c_oil->up->flags)))
+ do_mute = true;
+
+ /* In case entry is (S,G), Negotiation happens at (*.G) */
+ if (starup
+
+ && PIM_UPSTREAM_FLAG_TEST_MLAG_INTERFACE(starup->flags)
+ && (PIM_UPSTREAM_FLAG_TEST_MLAG_NON_DF(starup->flags)))
+ do_mute = true;
+ return do_mute;
+ }
return do_mute;
}
diff --git a/pimd/pim_upstream.h b/pimd/pim_upstream.h
index b3379c67b2..8030835fb2 100644
--- a/pimd/pim_upstream.h
+++ b/pimd/pim_upstream.h
@@ -286,7 +286,8 @@ static inline bool pim_up_mlag_is_local(struct pim_upstream *up)
/* XXX: extend this to also return true if the channel-oil has
* any AA devices
*/
- return (up->flags & PIM_UPSTREAM_FLAG_MASK_MLAG_VXLAN);
+ return (up->flags & (PIM_UPSTREAM_FLAG_MASK_MLAG_VXLAN
+ | PIM_UPSTREAM_FLAG_MASK_MLAG_INTERFACE));
}
struct pim_upstream *pim_upstream_find(struct pim_instance *pim,