diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c index 834399053b..4a04c7a91e 100644 --- a/pimd/pim_iface.c +++ b/pimd/pim_iface.c @@ -1566,6 +1566,16 @@ int pim_ifp_create(struct interface *ifp) if (pim_ifp) pim_ifp->pim = pim; pim_if_addr_add_all(ifp); + + /* + * Due to ordering issues based upon when + * a command is entered we should ensure that + * the pim reg is created for this vrf if we + * have configuration for it already. + * + * this is a no-op if it's already been done. + */ + pim_if_create_pimreg(pim); } /* diff --git a/pimd/pim_instance.c b/pimd/pim_instance.c index 019048abf1..a7048ecefa 100644 --- a/pimd/pim_instance.c +++ b/pimd/pim_instance.c @@ -175,9 +175,18 @@ static int pim_vrf_delete(struct vrf *vrf) static int pim_vrf_enable(struct vrf *vrf) { struct pim_instance *pim = (struct pim_instance *)vrf->info; + struct interface *ifp; zlog_debug("%s: for %s", __func__, vrf->name); + FOR_ALL_INTERFACES (vrf, ifp) { + if (!ifp->info) + continue; + + pim_if_create_pimreg(pim); + break; + } + pim_mroute_socket_enable(pim); return 0;