pimd: Fix pim_channel_oil_empty tests

The pim_channel_oil_empty() function was setting
the pimreg if it ever existed for NULL comparison
but of course the pimreg device is never pulled back
out again when it was needed to be when the pimreg
is not present.

Commit: a5fa982256
broke this.

Fixes: #11368
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
Donald Sharp 2022-06-08 16:51:48 -04:00
parent 121903bd01
commit 30b82c7af7

View File

@ -544,27 +544,19 @@ int pim_channel_add_oif(struct channel_oil *channel_oil, struct interface *oif,
int pim_channel_oil_empty(struct channel_oil *c_oil)
{
#if PIM_IPV == 4
static struct mfcctl null_oil;
#else
static struct mf6cctl null_oil;
#endif
static struct channel_oil null_oil;
if (!c_oil)
return 1;
/* exclude pimreg from the OIL when checking if the inherited_oil is
* non-NULL.
* pimreg device (in all vrfs) uses a vifi of
* 0 (PIM_OIF_PIM_REGISTER_VIF) so we simply mfcc_ttls[0] */
if (oil_if_has(c_oil, 0)) {
#if PIM_IPV == 4
null_oil.mfcc_ttls[0] = 1;
#else
IF_SET(0, &null_oil.mf6cc_ifset);
#endif
}
if (oil_if_has(c_oil, 0))
oil_if_set(&null_oil, 0, 1);
else
oil_if_set(&null_oil, 0, 0);
return !oil_if_cmp(&c_oil->oil, &null_oil);
return !oil_if_cmp(&c_oil->oil, &null_oil.oil);
}