mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 10:54:47 +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)) {
|
for (ALL_LIST_ELEMENTS_RO(pim->static_routes, node, s_route)) {
|
||||||
if (!pim_addr_cmp(s_route->group, group)
|
if (!pim_addr_cmp(s_route->group, group) &&
|
||||||
&& !pim_addr_cmp(s_route->source, source)) {
|
!pim_addr_cmp(s_route->source, source) &&
|
||||||
if (s_route->iif == iif_index
|
(s_route->iif == iif_index)) {
|
||||||
&& s_route->oif_ttls[oif_index]) {
|
|
||||||
|
if (s_route->oif_ttls[oif_index]) {
|
||||||
zlog_warn(
|
zlog_warn(
|
||||||
"%s %s: Unable to add static route: Route already exists (iif=%d,oif=%d,group=%pPAs,source=%pPAs)",
|
"%s %s: Unable to add static route: Route already exists (iif=%d,oif=%d,group=%pPAs,source=%pPAs)",
|
||||||
__FILE__, __func__, iif_index,
|
__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
|
/* Route exists and has the same input interface, but
|
||||||
* adding a new output interface */
|
* adding a new output interface */
|
||||||
if (s_route->iif == iif_index) {
|
s_route->oif_ttls[oif_index] = 1;
|
||||||
s_route->oif_ttls[oif_index] = 1;
|
oil_if_set(&s_route->c_oil, oif_index, 1);
|
||||||
oil_if_set(&s_route->c_oil, oif_index, 1);
|
s_route->c_oil.oif_creation[oif_index] =
|
||||||
s_route->c_oil.oif_creation[oif_index] =
|
pim_time_monotonic_sec();
|
||||||
pim_time_monotonic_sec();
|
++s_route->c_oil.oil_ref_count;
|
||||||
++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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user