}
} /* pim */
}
+ if (PIM_MROUTE_IS_ENABLED) {
+ /*
+ * PIM or IGMP is enabled on interface, and there is at least one
+ * address assigned, then try to create a vif_index.
+ */
+ if (pim_ifp->mroute_vif_index < 0) {
+ pim_if_add_vif(ifp);
+ }
+ pim_ifchannel_scan_forward_start (ifp);
+ }
+
pim_rp_setup();
pim_rp_check_on_if_add(pim_ifp);
}
pim_ifp = ch->interface->info;
+ if (ch->upstream->channel_oil)
+ {
+ pim_channel_del_oif (ch->upstream->channel_oil, ch->interface, PIM_OIF_FLAG_PROTO_PIM);
+ /*
+ * Do we have any S,G's that are inheriting?
+ * Nuke from on high too.
+ */
+ if (ch->upstream->sources)
+ {
+ struct pim_upstream *child;
+ struct listnode *up_node;
+
+ for (ALL_LIST_ELEMENTS_RO (ch->upstream->sources, up_node, child))
+ pim_channel_del_oif (child->channel_oil, ch->interface, PIM_OIF_FLAG_PROTO_PIM);
+ }
+ }
+
/*
* When this channel is removed
* we need to find all our children
struct pim_ifchannel *ifchannel;
pim_ifp = ifp->info;
+ if (!pim_ifp)
+ return;
for (ALL_LIST_ELEMENTS (pim_ifp->pim_ifchannel_list, ifchannel_node,
ifchannel_nextnode, ifchannel))
}
if (!if_is_operative(ifp)) {
+ pim_ifchannel_delete_all(ifp);
/*
pim_if_addr_del_all() suffices for shutting down IGMP,
but not for shutting down PIM
}
}
+ if (ifp->info)
+ pim_if_del_vif(ifp);
+
return 0;
}