summaryrefslogtreecommitdiff
path: root/pimd/pim_upstream.c
diff options
context:
space:
mode:
Diffstat (limited to 'pimd/pim_upstream.c')
-rw-r--r--pimd/pim_upstream.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c
index fb7840ee76..982fb7e5a5 100644
--- a/pimd/pim_upstream.c
+++ b/pimd/pim_upstream.c
@@ -1713,10 +1713,12 @@ static int pim_upstream_register_stop_timer(struct thread *t)
case PIM_REG_JOIN:
break;
case PIM_REG_PRUNE:
+ /* This is equalent to Couldreg -> False */
if (!up->rpf.source_nexthop.interface) {
if (PIM_DEBUG_PIM_TRACE)
zlog_debug("%s: up %s RPF is not present",
__func__, up->sg_str);
+ up->reg_state = PIM_REG_NOINFO;
return 0;
}
@@ -1810,10 +1812,16 @@ int pim_upstream_inherited_olist_decide(struct pim_instance *pim,
continue;
if (pim_upstream_evaluate_join_desired_interface(up, ch,
starch)) {
- int flag = PIM_OIF_FLAG_PROTO_PIM;
+ int flag = 0;
if (!ch)
flag = PIM_OIF_FLAG_PROTO_STAR;
+ else {
+ if (PIM_IF_FLAG_TEST_PROTO_IGMP(ch->flags))
+ flag = PIM_OIF_FLAG_PROTO_IGMP;
+ if (PIM_IF_FLAG_TEST_PROTO_PIM(ch->flags))
+ flag |= PIM_OIF_FLAG_PROTO_PIM;
+ }
pim_channel_add_oif(up->channel_oil, ifp, flag,
__func__);