pimd: There exists a path where on vrf bringup we do not create the pimreg

When creating configuration for a vrf *Before* the vrf has been
created, pim will not properly create the pimreg device and
we will promptly crash when we try to pass data.

Put some code checks in place to ensure that the pimreg is
created for vrf's.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
Donald Sharp 2021-05-03 14:39:47 -04:00
parent 6806a59321
commit e5981db7e9
2 changed files with 19 additions and 0 deletions

View File

@ -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);
}
/*

View File

@ -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;