]> git.proxmox.com Git - mirror_frr.git/commitdiff
isisd: retrofit the 'isis password' command
authorEmanuele Di Pascale <emanuele@voltanet.io>
Wed, 14 Nov 2018 11:51:45 +0000 (12:51 +0100)
committerEmanuele Di Pascale <emanuele@voltanet.io>
Tue, 18 Dec 2018 14:23:49 +0000 (15:23 +0100)
Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
isisd/isis_cli.c
isisd/isis_cli.h
isisd/isis_northbound.c
isisd/isis_vty_common.c
isisd/isis_vty_fabricd.c

index 16c34a73e332603924cd6b7143ad54362a10584d..607408853f4c8a41b943c54f48690d93a1ce7179 100644 (file)
@@ -1236,6 +1236,49 @@ void cli_show_ip_isis_passive(struct vty *vty, struct lyd_node *dnode,
        vty_out(vty, " isis passive\n");
 }
 
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/password
+ */
+
+DEFPY(isis_passwd, isis_passwd_cmd, "isis password <md5|clear>$type WORD$pwd",
+      "IS-IS routing protocol\n"
+      "Configure the authentication password for a circuit\n"
+      "HMAC-MD5 authentication\n"
+      "Cleartext password\n"
+      "Circuit password\n")
+{
+       nb_cli_enqueue_change(vty, "./frr-isisd:isis/password", NB_OP_CREATE,
+                             NULL);
+       nb_cli_enqueue_change(vty, "./frr-isisd:isis/password/password",
+                             NB_OP_MODIFY, pwd);
+       nb_cli_enqueue_change(vty, "./frr-isisd:isis/password/password-type",
+                             NB_OP_MODIFY, type);
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY(no_isis_passwd, no_isis_passwd_cmd, "no isis password [<md5|clear> WORD]",
+      NO_STR
+      "IS-IS routing protocol\n"
+      "Configure the authentication password for a circuit\n"
+      "HMAC-MD5 authentication\n"
+      "Cleartext password\n"
+      "Circuit password\n")
+{
+       nb_cli_enqueue_change(vty, "./frr-isisd:isis/password", NB_OP_DELETE,
+                             NULL);
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+void cli_show_ip_isis_password(struct vty *vty, struct lyd_node *dnode,
+                              bool show_defaults)
+{
+       vty_out(vty, " isis password %s %s\n",
+               yang_dnode_get_string(dnode, "./password-type"),
+               yang_dnode_get_string(dnode, "./password"));
+}
+
 void isis_cli_init(void)
 {
        install_element(CONFIG_NODE, &router_isis_cmd);
@@ -1289,6 +1332,9 @@ void isis_cli_init(void)
        install_element(ISIS_NODE, &isis_topology_cmd);
 
        install_element(INTERFACE_NODE, &isis_passive_cmd);
+
+       install_element(INTERFACE_NODE, &isis_passwd_cmd);
+       install_element(INTERFACE_NODE, &no_isis_passwd_cmd);
 }
 
 #endif /* ifndef FABRICD */
index 35ade792e14c7276d945e795650af9402883db8e..8a95ead122cd88fc76ce22253b011b5eb865d9f6 100644 (file)
@@ -83,5 +83,7 @@ void cli_show_isis_mt_ipv6_dstsrc(struct vty *vty, struct lyd_node *dnode,
                                  bool show_defaults);
 void cli_show_ip_isis_passive(struct vty *vty, struct lyd_node *dnode,
                              bool show_defaults);
+void cli_show_ip_isis_password(struct vty *vty, struct lyd_node *dnode,
+                              bool show_defaults);
 
 #endif /* ISISD_ISIS_CLI_H_ */
index ec341566d93c2db1af6deb72dc46799af693f195..e76e72c29c6b9cc380e09ab25668a3f1ecca3ff7 100644 (file)
@@ -2087,14 +2087,20 @@ static int lib_interface_isis_password_create(enum nb_event event,
                                              const struct lyd_node *dnode,
                                              union nb_resource *resource)
 {
-       /* TODO: implement me. */
        return NB_OK;
 }
 
 static int lib_interface_isis_password_delete(enum nb_event event,
                                              const struct lyd_node *dnode)
 {
-       /* TODO: implement me. */
+       struct isis_circuit *circuit;
+
+       if (event != NB_EV_APPLY)
+               return NB_OK;
+
+       circuit = yang_dnode_get_entry(dnode, true);
+       isis_circuit_passwd_unset(circuit);
+
        return NB_OK;
 }
 
@@ -2106,7 +2112,17 @@ lib_interface_isis_password_password_modify(enum nb_event event,
                                            const struct lyd_node *dnode,
                                            union nb_resource *resource)
 {
-       /* TODO: implement me. */
+       struct isis_circuit *circuit;
+       const char *password;
+
+       if (event != NB_EV_APPLY)
+               return NB_OK;
+
+       password = yang_dnode_get_string(dnode, NULL);
+       circuit = yang_dnode_get_entry(dnode, true);
+       circuit->passwd.len = strlen(password);
+       strncpy((char *)circuit->passwd.passwd, password, 255);
+
        return NB_OK;
 }
 
@@ -2118,7 +2134,16 @@ lib_interface_isis_password_password_type_modify(enum nb_event event,
                                                 const struct lyd_node *dnode,
                                                 union nb_resource *resource)
 {
-       /* TODO: implement me. */
+       struct isis_circuit *circuit;
+       uint8_t pass_type;
+
+       if (event != NB_EV_APPLY)
+               return NB_OK;
+
+       pass_type = yang_dnode_get_enum(dnode, NULL);
+       circuit = yang_dnode_get_entry(dnode, true);
+       circuit->passwd.type = pass_type;
+
        return NB_OK;
 }
 
@@ -2645,6 +2670,7 @@ const struct frr_yang_module_info frr_isisd_info = {
                        .xpath = "/frr-interface:lib/interface/frr-isisd:isis/password",
                        .cbs.create = lib_interface_isis_password_create,
                        .cbs.delete = lib_interface_isis_password_delete,
+                       .cbs.cli_show = cli_show_ip_isis_password,
                },
                {
                        .xpath = "/frr-interface:lib/interface/frr-isisd:isis/password/password",
index bd53594e790c9f714815cebaf809d4cdec83476a..8ee1bf2cc08d70ce2b64e80141721c83ae992024 100644 (file)
@@ -56,53 +56,6 @@ struct isis_circuit *isis_circuit_lookup(struct vty *vty)
        return circuit;
 }
 
-DEFUN (isis_passwd,
-       isis_passwd_cmd,
-       PROTO_NAME " password <md5|clear> WORD",
-       PROTO_HELP
-       "Configure the authentication password for a circuit\n"
-       "HMAC-MD5 authentication\n"
-       "Cleartext password\n"
-       "Circuit password\n")
-{
-       int idx_encryption = 2;
-       int idx_word = 3;
-       struct isis_circuit *circuit = isis_circuit_lookup(vty);
-       ferr_r rv;
-
-       if (!circuit)
-               return CMD_ERR_NO_MATCH;
-
-       if (argv[idx_encryption]->arg[0] == 'm')
-               rv = isis_circuit_passwd_hmac_md5_set(circuit,
-                                                     argv[idx_word]->arg);
-       else
-               rv = isis_circuit_passwd_cleartext_set(circuit,
-                                                      argv[idx_word]->arg);
-
-       CMD_FERR_RETURN(rv, "Failed to set circuit password: $ERR");
-       return CMD_SUCCESS;
-}
-
-DEFUN (no_isis_passwd,
-       no_isis_passwd_cmd,
-       "no " PROTO_NAME " password [<md5|clear> WORD]",
-       NO_STR
-       PROTO_HELP
-       "Configure the authentication password for a circuit\n"
-       "HMAC-MD5 authentication\n"
-       "Cleartext password\n"
-       "Circuit password\n")
-{
-       struct isis_circuit *circuit = isis_circuit_lookup(vty);
-       if (!circuit)
-               return CMD_ERR_NO_MATCH;
-
-       CMD_FERR_RETURN(isis_circuit_passwd_unset(circuit),
-                       "Failed to unset circuit password: $ERR");
-       return CMD_SUCCESS;
-}
-
 DEFUN (isis_metric,
        isis_metric_cmd,
        PROTO_NAME " metric (0-16777215)",
@@ -410,9 +363,6 @@ DEFUN (no_isis_bfd,
 
 void isis_vty_init(void)
 {
-       install_element(INTERFACE_NODE, &isis_passwd_cmd);
-       install_element(INTERFACE_NODE, &no_isis_passwd_cmd);
-
        install_element(INTERFACE_NODE, &isis_metric_cmd);
        install_element(INTERFACE_NODE, &no_isis_metric_cmd);
 
index f7deea3d821b19ac3fbe3c82d1fd740def2f0c91..0dcf12aa051089bd39c27c914dff05f037310177 100644 (file)
@@ -723,6 +723,53 @@ DEFUN (no_isis_passive,
        return CMD_SUCCESS;
 }
 
+DEFUN (isis_passwd,
+       isis_passwd_cmd,
+       PROTO_NAME " password <md5|clear> WORD",
+       PROTO_HELP
+       "Configure the authentication password for a circuit\n"
+       "HMAC-MD5 authentication\n"
+       "Cleartext password\n"
+       "Circuit password\n")
+{
+       int idx_encryption = 2;
+       int idx_word = 3;
+       struct isis_circuit *circuit = isis_circuit_lookup(vty);
+       ferr_r rv;
+
+       if (!circuit)
+               return CMD_ERR_NO_MATCH;
+
+       if (argv[idx_encryption]->arg[0] == 'm')
+               rv = isis_circuit_passwd_hmac_md5_set(circuit,
+                                                     argv[idx_word]->arg);
+       else
+               rv = isis_circuit_passwd_cleartext_set(circuit,
+                                                      argv[idx_word]->arg);
+
+       CMD_FERR_RETURN(rv, "Failed to set circuit password: $ERR");
+       return CMD_SUCCESS;
+}
+
+DEFUN (no_isis_passwd,
+       no_isis_passwd_cmd,
+       "no " PROTO_NAME " password [<md5|clear> WORD]",
+       NO_STR
+       PROTO_HELP
+       "Configure the authentication password for a circuit\n"
+       "HMAC-MD5 authentication\n"
+       "Cleartext password\n"
+       "Circuit password\n")
+{
+       struct isis_circuit *circuit = isis_circuit_lookup(vty);
+       if (!circuit)
+               return CMD_ERR_NO_MATCH;
+
+       CMD_FERR_RETURN(isis_circuit_passwd_unset(circuit),
+                       "Failed to unset circuit password: $ERR");
+       return CMD_SUCCESS;
+}
+
 void isis_vty_daemon_init(void)
 {
        install_element(ROUTER_NODE, &fabric_tier_cmd);
@@ -764,4 +811,7 @@ void isis_vty_daemon_init(void)
 
        install_element(INTERFACE_NODE, &isis_passive_cmd);
        install_element(INTERFACE_NODE, &no_isis_passive_cmd);
+
+       install_element(INTERFACE_NODE, &isis_passwd_cmd);
+       install_element(INTERFACE_NODE, &no_isis_passwd_cmd);
 }