diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-04-24 04:33:37 -0400 |
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-04-24 04:38:53 -0400 |
| commit | 2164ed5d04db1f556e717b1f0bd3ad442c2ced2c (patch) | |
| tree | 5917942df481d80d41c95f516ccd8eb990dacd44 /pimd/pim_zebra.c | |
| parent | bbd8da796b1ad74ca5ad2e6e0ff22178dcb63f0b (diff) | |
pimd: Deletion of a ifchannel does not immediately mean remove from OIL
So when we remove a ifchannel from the system we should check to
see if we still care about the S,G having it in the OIL still
due to inheritance rules. The deletion does not necessarily
mean it should not be in the OIL for the S,G.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'pimd/pim_zebra.c')
| -rw-r--r-- | pimd/pim_zebra.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c index aeaea7d69f..ab604bcbd8 100644 --- a/pimd/pim_zebra.c +++ b/pimd/pim_zebra.c @@ -1305,8 +1305,16 @@ void pim_forward_stop(struct pim_ifchannel *ch, bool install_it) install_it, up->channel_oil->installed); } - pim_channel_del_oif(up->channel_oil, ch->interface, - PIM_OIF_FLAG_PROTO_PIM); + /* + * If a channel is being removed, check to see if we still need + * to inherit the interface. If so make sure it is added in + */ + if (pim_upstream_evaluate_join_desired_interface(up, ch, ch->parent)) + pim_channel_add_oif(up->channel_oil, ch->interface, + PIM_OIF_FLAG_PROTO_PIM); + else + pim_channel_del_oif(up->channel_oil, ch->interface, + PIM_OIF_FLAG_PROTO_PIM); if (install_it && !up->channel_oil->installed) pim_mroute_add(up->channel_oil, __PRETTY_FUNCTION__); |
