if (!pim_ifp)
pim_ifp = pim_if_new(ifp, false, true, false, false);
else
- PIM_IF_DO_PIM(pim_ifp->options);
+ pim_ifp->pim_enable = true;
pim_if_addr_add_all(ifp);
+ pim_upstream_nh_if_update(pim_ifp->pim, ifp);
pim_if_membership_refresh(ifp);
pim_if_create_pimreg(pim_ifp->pim);
*/
pim_sock_delete(ifp, "pim unconfigured on interface");
- if (!PIM_IF_TEST_IGMP(pim_ifp->options)) {
+ if (!pim_ifp->igmp_enable) {
pim_if_addr_del_all(ifp);
+ pim_upstream_nh_if_update(pim_ifp->pim, ifp);
pim_if_delete(ifp);
}
void pim_rp_nexthop_del(struct rp_info *rp_info);
/* for RPF check on BSM message receipt */
-void pim_nht_bsr_add(struct pim_instance *pim, struct in_addr bsr_addr);
-void pim_nht_bsr_del(struct pim_instance *pim, struct in_addr bsr_addr);
+void pim_nht_bsr_add(struct pim_instance *pim, pim_addr bsr_addr);
+void pim_nht_bsr_del(struct pim_instance *pim, pim_addr bsr_addr);
/* RPF(bsr_addr) == src_ip%src_ifp? */
-bool pim_nht_bsr_rpf_check(struct pim_instance *pim, struct in_addr bsr_addr,
+bool pim_nht_bsr_rpf_check(struct pim_instance *pim, pim_addr bsr_addr,
struct interface *src_ifp, pim_addr src_ip);
+ void pim_upstream_nh_if_update(struct pim_instance *pim, struct interface *ifp);
#endif
__func__, ifp->name, first_ifindex,
&addr);
i++;
-
- } else if (!PIM_IF_TEST_PIM(((struct pim_interface *)ifp->info)
- ->options)) {
++ } else if (!((struct pim_interface *)ifp->info)->pim_enable) {
+ if (PIM_DEBUG_ZEBRA)
+ zlog_debug(
- "%s: pim not enabled on input interface %s (ifindex=%d, RPF for source %pI4)",
++ "%s: pim not enabled on input interface %s (ifindex=%d, RPF for source %pPA)",
+ __func__, ifp->name, first_ifindex,
+ &addr);
+ i++;
-
- } else if (neighbor_needed &&
- !pim_if_connected_to_source(ifp, addr)) {
- nbr = pim_neighbor_find_prefix(
- ifp, &nexthop_tab[i].nexthop_addr);
+ } else if (neighbor_needed
+ && !pim_if_connected_to_source(ifp, addr)) {
+ nbr = pim_neighbor_find(ifp,
+ nexthop_tab[i].nexthop_addr);
if (PIM_DEBUG_PIM_TRACE_DETAIL)
zlog_debug("ifp name: %s, pim nbr: %p",
ifp->name, nbr);