mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 07:37:54 +00:00
Merge pull request #11705 from Jafaral/pim-static
pimd: fix static mroute to also take into account the input interface
This commit is contained in:
commit
41e5409857
@ -97,10 +97,11 @@ int pim_static_add(struct pim_instance *pim, struct interface *iif,
|
||||
}
|
||||
|
||||
for (ALL_LIST_ELEMENTS_RO(pim->static_routes, node, s_route)) {
|
||||
if (!pim_addr_cmp(s_route->group, group)
|
||||
&& !pim_addr_cmp(s_route->source, source)) {
|
||||
if (s_route->iif == iif_index
|
||||
&& s_route->oif_ttls[oif_index]) {
|
||||
if (!pim_addr_cmp(s_route->group, group) &&
|
||||
!pim_addr_cmp(s_route->source, source) &&
|
||||
(s_route->iif == iif_index)) {
|
||||
|
||||
if (s_route->oif_ttls[oif_index]) {
|
||||
zlog_warn(
|
||||
"%s %s: Unable to add static route: Route already exists (iif=%d,oif=%d,group=%pPAs,source=%pPAs)",
|
||||
__FILE__, __func__, iif_index,
|
||||
@ -122,42 +123,11 @@ int pim_static_add(struct pim_instance *pim, struct interface *iif,
|
||||
|
||||
/* Route exists and has the same input interface, but
|
||||
* adding a new output interface */
|
||||
if (s_route->iif == iif_index) {
|
||||
s_route->oif_ttls[oif_index] = 1;
|
||||
oil_if_set(&s_route->c_oil, oif_index, 1);
|
||||
s_route->c_oil.oif_creation[oif_index] =
|
||||
pim_time_monotonic_sec();
|
||||
++s_route->c_oil.oil_ref_count;
|
||||
} else {
|
||||
/* input interface changed */
|
||||
s_route->iif = iif_index;
|
||||
pim_static_mroute_iif_update(
|
||||
&s_route->c_oil, iif_index, __func__);
|
||||
|
||||
#ifdef PIM_ENFORCE_LOOPFREE_MFC
|
||||
/* check to make sure the new input was not an
|
||||
* old output */
|
||||
if (s_route->oif_ttls[iif_index]) {
|
||||
s_route->oif_ttls[iif_index] = 0;
|
||||
s_route->c_oil.oif_creation[iif_index] =
|
||||
0;
|
||||
oil_if_set(&s_route->c_oil, iif_index,
|
||||
0);
|
||||
--s_route->c_oil.oil_ref_count;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* now add the new output, if it is new */
|
||||
if (!s_route->oif_ttls[oif_index]) {
|
||||
s_route->oif_ttls[oif_index] = 1;
|
||||
s_route->c_oil.oif_creation[oif_index] =
|
||||
pim_time_monotonic_sec();
|
||||
oil_if_set(&s_route->c_oil, oif_index,
|
||||
1);
|
||||
++s_route->c_oil.oil_ref_count;
|
||||
}
|
||||
}
|
||||
|
||||
s_route->oif_ttls[oif_index] = 1;
|
||||
oil_if_set(&s_route->c_oil, oif_index, 1);
|
||||
s_route->c_oil.oif_creation[oif_index] =
|
||||
pim_time_monotonic_sec();
|
||||
++s_route->c_oil.oil_ref_count;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user