summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Ryzhov <iryzhov@nfware.com>2021-10-05 17:38:21 +0300
committerIgor Ryzhov <iryzhov@nfware.com>2021-10-05 17:38:21 +0300
commit1bfee9368adcd91337b4b4b5ad22330678ed0e78 (patch)
tree8c38a5231a85cf1a5c178531eac8ecc41bf2a350
parent31df775552690649ab769c57ed796a9de82fa22b (diff)
isisd: fix redistribute CLI
Currently, it is possible to configure IPv6 protocols for IPv4 redistribution and vice versa in CLI. The YANG model doesn't allow this so the user receives the following error: ``` nfware(config-router)# redistribute ipv4 ospf6 level-1 % Failed to edit configuration. YANG error(s): Invalid enumeration value "ospf6". Invalid enumeration value "ospf6". Invalid enumeration value "ospf6". YANG path: Schema location /frr-isisd:isis/instance/redistribute/ipv4/protocol. ``` Let's make CLI more user-friendly and allow only supported protocols in redistribution commands. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
-rw-r--r--isisd/isis_cli.c9
-rw-r--r--isisd/isis_redist.c10
-rw-r--r--isisd/isisd.h8
-rw-r--r--python/clidef.py2
4 files changed, 22 insertions, 7 deletions
diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c
index 70ec66fd7f..f48b142b1a 100644
--- a/isisd/isis_cli.c
+++ b/isisd/isis_cli.c
@@ -1330,11 +1330,14 @@ void cli_show_isis_def_origin_ipv6(struct vty *vty, struct lyd_node *dnode,
* XPath: /frr-isisd:isis/instance/redistribute
*/
DEFPY_YANG(isis_redistribute, isis_redistribute_cmd,
- "[no] redistribute <ipv4|ipv6>$ip " PROTO_REDIST_STR
- "$proto <level-1|level-2>$level [{metric (0-16777215)|route-map WORD}]",
+ "[no] redistribute <ipv4$ip " PROTO_IP_REDIST_STR "$proto|ipv6$ip "
+ PROTO_IP6_REDIST_STR "$proto> <level-1|level-2>$level"
+ "[{metric (0-16777215)|route-map WORD}]",
NO_STR REDIST_STR
"Redistribute IPv4 routes\n"
- "Redistribute IPv6 routes\n" PROTO_REDIST_HELP
+ PROTO_IP_REDIST_HELP
+ "Redistribute IPv6 routes\n"
+ PROTO_IP6_REDIST_HELP
"Redistribute into level-1\n"
"Redistribute into level-2\n"
"Metric for redistributed routes\n"
diff --git a/isisd/isis_redist.c b/isisd/isis_redist.c
index 2f5e490da1..45d69bc352 100644
--- a/isisd/isis_redist.c
+++ b/isisd/isis_redist.c
@@ -543,12 +543,13 @@ void isis_redist_area_finish(struct isis_area *area)
#ifdef FABRICD
DEFUN (isis_redistribute,
isis_redistribute_cmd,
- "redistribute <ipv4|ipv6> " PROTO_REDIST_STR
+ "redistribute <ipv4 " PROTO_IP_REDIST_STR "|ipv6 " PROTO_IP6_REDIST_STR ">"
" [{metric (0-16777215)|route-map WORD}]",
REDIST_STR
"Redistribute IPv4 routes\n"
+ PROTO_IP_REDIST_HELP
"Redistribute IPv6 routes\n"
- PROTO_REDIST_HELP
+ PROTO_IP6_REDIST_HELP
"Metric for redistributed routes\n"
"ISIS default metric\n"
"Route map reference\n"
@@ -599,12 +600,13 @@ DEFUN (isis_redistribute,
DEFUN (no_isis_redistribute,
no_isis_redistribute_cmd,
- "no redistribute <ipv4|ipv6> " PROTO_REDIST_STR,
+ "no redistribute <ipv4 " PROTO_IP_REDIST_STR "|ipv6 " PROTO_IP6_REDIST_STR ">",
NO_STR
REDIST_STR
"Redistribute IPv4 routes\n"
+ PROTO_IP_REDIST_HELP
"Redistribute IPv6 routes\n"
- PROTO_REDIST_HELP)
+ PROTO_IP6_REDIST_HELP)
{
int idx_afi = 2;
int idx_protocol = 3;
diff --git a/isisd/isisd.h b/isisd/isisd.h
index 64fbf78a07..13f3475b70 100644
--- a/isisd/isisd.h
+++ b/isisd/isisd.h
@@ -46,7 +46,11 @@ static const bool fabricd = true;
#define PROTO_NAME "openfabric"
#define PROTO_HELP "OpenFabric routing protocol\n"
#define PROTO_REDIST_STR FRR_REDIST_STR_FABRICD
+#define PROTO_IP_REDIST_STR FRR_IP_REDIST_STR_FABRICD
+#define PROTO_IP6_REDIST_STR FRR_IP6_REDIST_STR_FABRICD
#define PROTO_REDIST_HELP FRR_REDIST_HELP_STR_FABRICD
+#define PROTO_IP_REDIST_HELP FRR_IP_REDIST_HELP_STR_FABRICD
+#define PROTO_IP6_REDIST_HELP FRR_IP6_REDIST_HELP_STR_FABRICD
#define ROUTER_NODE OPENFABRIC_NODE
#else
static const bool fabricd = false;
@@ -54,7 +58,11 @@ static const bool fabricd = false;
#define PROTO_NAME "isis"
#define PROTO_HELP "IS-IS routing protocol\n"
#define PROTO_REDIST_STR FRR_REDIST_STR_ISISD
+#define PROTO_IP_REDIST_STR FRR_IP_REDIST_STR_ISISD
+#define PROTO_IP6_REDIST_STR FRR_IP6_REDIST_STR_ISISD
#define PROTO_REDIST_HELP FRR_REDIST_HELP_STR_ISISD
+#define PROTO_IP_REDIST_HELP FRR_IP_REDIST_HELP_STR_ISISD
+#define PROTO_IP6_REDIST_HELP FRR_IP6_REDIST_HELP_STR_ISISD
#define ROUTER_NODE ISIS_NODE
extern void isis_cli_init(void);
#endif
diff --git a/python/clidef.py b/python/clidef.py
index a47cee2d6b..ba7c9072c5 100644
--- a/python/clidef.py
+++ b/python/clidef.py
@@ -435,6 +435,8 @@ if __name__ == "__main__":
macros.load(os.path.join(basepath, "bgpd/bgp_vty.h"))
# sigh :(
macros["PROTO_REDIST_STR"] = "FRR_REDIST_STR_ISISD"
+ macros["PROTO_IP_REDIST_STR"] = "FRR_IP_REDIST_STR_ISISD"
+ macros["PROTO_IP6_REDIST_STR"] = "FRR_IP6_REDIST_STR_ISISD"
errors = process_file(args.cfile, ofd, dumpfd, args.all_defun, macros)
if errors != 0: