diff options
author | anlan_cs <vic.lan@pica8.com> | 2022-10-21 07:17:29 +0200 |
---|---|---|
committer | anlan_cs <vic.lan@pica8.com> | 2022-10-24 14:51:12 +0200 |
commit | 7231b9ab170de27b431b7b586b4f0008bf358e74 (patch) | |
tree | 712fb32fe674675ff62085f97bbf4d52e70c7bbb | |
parent | Merge pull request #12144 from patrasar/v4-over-v6_nh (diff) | |
download | frr-7231b9ab170de27b431b7b586b4f0008bf358e74.tar.xz frr-7231b9ab170de27b431b7b586b4f0008bf358e74.zip |
bgpd: return failure for wildcard ERT
The "RTLIST..." list should be maintained integrity. If wildcard check
failed, it should immediately return failure. Otherwise user configuration
will be partial.
```
anlan(config-router-af)# route-target export *:55 33:33
% Wildcard '*' only applicable for import
anlan(config-router-af)# route-target both *:55 33:33
% Wildcard '*' only applicable for import
```
With this commit, the RTs without wildcard will not be executed as before. And
the same for `no` form.
Signed-off-by: anlan_cs <vic.lan@pica8.com>
-rw-r--r-- | bgpd/bgp_evpn_vty.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/bgpd/bgp_evpn_vty.c b/bgpd/bgp_evpn_vty.c index f920a783b..997250db1 100644 --- a/bgpd/bgp_evpn_vty.c +++ b/bgpd/bgp_evpn_vty.c @@ -5866,13 +5866,6 @@ static int parse_rtlist(struct bgp *bgp, struct vty *vty, int argc, * the ecommunity parser. */ if ((argv[i]->arg)[0] == '*') { - if (!is_import) { - vty_out(vty, - "%% Wildcard '*' only applicable for import\n"); - ret = CMD_WARNING; - continue; - } - (argv[i]->arg)[0] = '0'; is_wildcard = true; } @@ -5950,6 +5943,16 @@ DEFUN (bgp_evpn_vrf_rt, return CMD_WARNING_CONFIG_FAILED; } + if (rt_type != RT_TYPE_IMPORT) { + for (int i = 2; i < argc; i++) { + if ((argv[i]->arg)[0] == '*') { + vty_out(vty, + "%% Wildcard '*' only applicable for import\n"); + return CMD_WARNING_CONFIG_FAILED; + } + } + } + /* Add/update the import route-target */ if (rt_type == RT_TYPE_BOTH || rt_type == RT_TYPE_IMPORT) tmp_ret = parse_rtlist(bgp, vty, argc, argv, 2, true, true); @@ -6056,6 +6059,16 @@ DEFUN (no_bgp_evpn_vrf_rt, } } + if (rt_type != RT_TYPE_IMPORT) { + for (int i = 3; i < argc; i++) { + if ((argv[i]->arg)[0] == '*') { + vty_out(vty, + "%% Wildcard '*' only applicable for import\n"); + return CMD_WARNING_CONFIG_FAILED; + } + } + } + if (rt_type == RT_TYPE_BOTH || rt_type == RT_TYPE_IMPORT) tmp_ret = parse_rtlist(bgp, vty, argc, argv, 3, false, true); |