Merge pull request #9231 from idryzhov/zebra-rmap-set-src

zebra: remove checks for src address existence when using "set src"
This commit is contained in:
Russ White 2021-08-03 09:22:18 -04:00 committed by GitHub
commit 11093fc905
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 32 deletions

View File

@ -908,10 +908,11 @@ IPv6 example for OSPFv3.
.. note::
For both IPv4 and IPv6, the IP address has to exist at the point the
route-map is created. Be wary of race conditions if the interface is
not created at startup. On Debian, FRR might start before ifupdown
completes. Consider a reboot test.
For both IPv4 and IPv6, the IP address has to exist on some interface when
the route is getting installed into the system. Otherwise, kernel rejects
the route. To solve the problem of disappearing IPv6 addresses when the
interface goes down, use ``net.ipv6.conf.all.keep_addr_on_down``
:ref:`sysctl option <zebra-sysctl>`.
.. clicmd:: zebra route-map delay-timer (0-600)
@ -1238,6 +1239,8 @@ For protocols requiring an IPv6 router-id, the following commands are available:
Display the user configured IPv6 router-id.
.. _zebra-sysctl:
Expected sysctl settings
========================

View File

@ -247,9 +247,7 @@ lib_route_map_entry_set_action_rmap_set_action_ipv4_src_address_modify(
struct nb_cb_modify_args *args)
{
struct routemap_hook_context *rhc;
struct interface *pif = NULL;
const char *source;
struct vrf *vrf;
struct prefix p;
int rv;
@ -262,18 +260,6 @@ lib_route_map_entry_set_action_rmap_set_action_ipv4_src_address_modify(
yang_dnode_get_string(args->dnode, NULL));
return NB_ERR_VALIDATION;
}
RB_FOREACH(vrf, vrf_id_head, &vrfs_by_id) {
pif = if_lookup_exact_address(&p.u.prefix4, AF_INET,
vrf->vrf_id);
if (pif != NULL)
break;
}
if (pif == NULL) {
zlog_warn("%s: is not a local address: %s", __func__,
yang_dnode_get_string(args->dnode, NULL));
return NB_ERR_VALIDATION;
}
return NB_OK;
case NB_EV_PREPARE:
case NB_EV_ABORT:
@ -325,9 +311,7 @@ lib_route_map_entry_set_action_rmap_set_action_ipv6_src_address_modify(
struct nb_cb_modify_args *args)
{
struct routemap_hook_context *rhc;
struct interface *pif = NULL;
const char *source;
struct vrf *vrf;
struct prefix p;
int rv;
@ -340,18 +324,6 @@ lib_route_map_entry_set_action_rmap_set_action_ipv6_src_address_modify(
yang_dnode_get_string(args->dnode, NULL));
return NB_ERR_VALIDATION;
}
RB_FOREACH(vrf, vrf_id_head, &vrfs_by_id) {
pif = if_lookup_exact_address(&p.u.prefix6, AF_INET6,
vrf->vrf_id);
if (pif != NULL)
break;
}
if (pif == NULL) {
zlog_warn("%s: is not a local address: %s", __func__,
yang_dnode_get_string(args->dnode, NULL));
return NB_ERR_VALIDATION;
}
return NB_OK;
case NB_EV_PREPARE:
case NB_EV_ABORT: