]> git.puffer.fish Git - matthieu/frr.git/commitdiff
isisd, yang: add configuration model and callback stubs
authorEmanuele Di Pascale <emanuele@voltanet.io>
Tue, 13 Nov 2018 15:35:07 +0000 (16:35 +0100)
committerEmanuele Di Pascale <emanuele@voltanet.io>
Tue, 18 Dec 2018 14:15:55 +0000 (15:15 +0100)
Signed-off-by: Emanuele Di Pascale <emanuele@voltanet.io>
isisd/isis_cli.c [new file with mode: 0644]
isisd/isis_cli.h [new file with mode: 0644]
isisd/isis_main.c
isisd/isis_northbound.c [new file with mode: 0644]
isisd/isisd.h
isisd/subdir.am
yang/frr-isisd.yang [new file with mode: 0644]
yang/subdir.am

diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c
new file mode 100644 (file)
index 0000000..9f82d85
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2001,2002   Sampo Saaristo
+ *                           Tampere University of Technology
+ *                           Institute of Communications Engineering
+ * Copyright (C) 2018        Volta Networks
+ *                           Emanuele Di Pascale
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <zebra.h>
+
+#include "if.h"
+#include "vrf.h"
+#include "log.h"
+#include "prefix.h"
+#include "command.h"
+#include "northbound_cli.h"
+#include "libfrr.h"
+#include "yang.h"
+#include "lib/linklist.h"
+#include "isisd/isisd.h"
+#include "isisd/isis_cli.h"
+#include "isisd/isis_misc.h"
+#include "isisd/isis_circuit.h"
+#include "isisd/isis_csm.h"
+
+#ifndef VTYSH_EXTRACT_PL
+#include "isisd/isis_cli_clippy.c"
+#endif
+
+#ifndef FABRICD
+
+void isis_cli_init(void)
+{
+}
+
+#endif /* ifndef FABRICD */
diff --git a/isisd/isis_cli.h b/isisd/isis_cli.h
new file mode 100644 (file)
index 0000000..952bd9d
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2018       Volta Networks
+ *                          Emanuele Di Pascale
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef ISISD_ISIS_CLI_H_
+#define ISISD_ISIS_CLI_H_
+
+/* add cli_show declarations here as externs */
+
+#endif /* ISISD_ISIS_CLI_H_ */
index cda3b2b3c5708ce57a4a8beb64ef76270574ebc9..40c483a0dbc05330298a5dead4ca980a205759ab 100644 (file)
@@ -151,8 +151,12 @@ struct quagga_signal_t isisd_signals[] = {
        },
 };
 
+
 static const struct frr_yang_module_info *isisd_yang_modules[] = {
        &frr_interface_info,
+#ifndef FABRICD
+       &frr_isisd_info,
+#endif /* ifndef FABRICD */
 };
 
 #ifdef FABRICD
@@ -217,6 +221,9 @@ int main(int argc, char **argv, char **envp)
        isis_init();
        isis_circuit_init();
        isis_vty_init();
+#ifndef FABRICD
+       isis_cli_init();
+#endif /* ifdef FABRICD */
        isis_spf_cmds_init();
        isis_redist_init();
        isis_route_map_init();
diff --git a/isisd/isis_northbound.c b/isisd/isis_northbound.c
new file mode 100644 (file)
index 0000000..23c4fec
--- /dev/null
@@ -0,0 +1,1826 @@
+/*
+ * Copyright (C) 2001,2002   Sampo Saaristo
+ *                           Tampere University of Technology
+ *                           Institute of Communications Engineering
+ * Copyright (C) 2018        Volta Networks
+ *                           Emanuele Di Pascale
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <zebra.h>
+#include "northbound.h"
+#include "libfrr.h"
+#include "linklist.h"
+#include "log.h"
+#include "isisd/dict.h"
+#include "isisd/isis_constants.h"
+#include "isisd/isis_common.h"
+#include "isisd/isis_flags.h"
+#include "isisd/isis_circuit.h"
+#include "isisd/isisd.h"
+#include "isisd/isis_lsp.h"
+#include "isisd/isis_pdu.h"
+#include "isisd/isis_dynhn.h"
+#include "isisd/isis_misc.h"
+#include "isisd/isis_csm.h"
+#include "isisd/isis_adjacency.h"
+#include "isisd/isis_spf.h"
+#include "isisd/isis_te.h"
+#include "isisd/isis_memory.h"
+#include "isisd/isis_mt.h"
+#include "isisd/isis_cli.h"
+#include "isisd/isis_redist.h"
+#include "lib/spf_backoff.h"
+#include "lib/lib_errors.h"
+#include "lib/vrf.h"
+
+/*
+ * XPath: /frr-isisd:isis/instance
+ */
+static int isis_instance_create(enum nb_event event,
+                               const struct lyd_node *dnode,
+                               union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_delete(enum nb_event event,
+                               const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/is-type
+ */
+static int isis_instance_is_type_modify(enum nb_event event,
+                                       const struct lyd_node *dnode,
+                                       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/area-address
+ */
+static int isis_instance_area_address_create(enum nb_event event,
+                                            const struct lyd_node *dnode,
+                                            union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_area_address_delete(enum nb_event event,
+                                            const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/dynamic-hostname
+ */
+static int isis_instance_dynamic_hostname_modify(enum nb_event event,
+                                                const struct lyd_node *dnode,
+                                                union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/attached
+ */
+static int isis_instance_attached_create(enum nb_event event,
+                                        const struct lyd_node *dnode,
+                                        union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_attached_delete(enum nb_event event,
+                                        const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/overload
+ */
+static int isis_instance_overload_create(enum nb_event event,
+                                        const struct lyd_node *dnode,
+                                        union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_overload_delete(enum nb_event event,
+                                        const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/metric-style
+ */
+static int isis_instance_metric_style_modify(enum nb_event event,
+                                            const struct lyd_node *dnode,
+                                            union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/purge-originator
+ */
+static int isis_instance_purge_originator_create(enum nb_event event,
+                                                const struct lyd_node *dnode,
+                                                union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_purge_originator_delete(enum nb_event event,
+                                                const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/lsp/mtu
+ */
+static int isis_instance_lsp_mtu_modify(enum nb_event event,
+                                       const struct lyd_node *dnode,
+                                       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/lsp/refresh-interval/level-1
+ */
+static int
+isis_instance_lsp_refresh_interval_level_1_modify(enum nb_event event,
+                                                 const struct lyd_node *dnode,
+                                                 union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/lsp/refresh-interval/level-2
+ */
+static int
+isis_instance_lsp_refresh_interval_level_2_modify(enum nb_event event,
+                                                 const struct lyd_node *dnode,
+                                                 union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-1
+ */
+static int
+isis_instance_lsp_maximum_lifetime_level_1_modify(enum nb_event event,
+                                                 const struct lyd_node *dnode,
+                                                 union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-2
+ */
+static int
+isis_instance_lsp_maximum_lifetime_level_2_modify(enum nb_event event,
+                                                 const struct lyd_node *dnode,
+                                                 union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/lsp/generation-interval/level-1
+ */
+static int isis_instance_lsp_generation_interval_level_1_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/lsp/generation-interval/level-2
+ */
+static int isis_instance_lsp_generation_interval_level_2_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay
+ */
+static int
+isis_instance_spf_ietf_backoff_delay_create(enum nb_event event,
+                                           const struct lyd_node *dnode,
+                                           union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int
+isis_instance_spf_ietf_backoff_delay_delete(enum nb_event event,
+                                           const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/init-delay
+ */
+static int isis_instance_spf_ietf_backoff_delay_init_delay_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/short-delay
+ */
+static int isis_instance_spf_ietf_backoff_delay_short_delay_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/long-delay
+ */
+static int isis_instance_spf_ietf_backoff_delay_long_delay_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/hold-down
+ */
+static int isis_instance_spf_ietf_backoff_delay_hold_down_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/time-to-learn
+ */
+static int isis_instance_spf_ietf_backoff_delay_time_to_learn_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/spf/minimum-interval/level-1
+ */
+static int
+isis_instance_spf_minimum_interval_level_1_modify(enum nb_event event,
+                                                 const struct lyd_node *dnode,
+                                                 union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/spf/minimum-interval/level-2
+ */
+static int
+isis_instance_spf_minimum_interval_level_2_modify(enum nb_event event,
+                                                 const struct lyd_node *dnode,
+                                                 union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/area-password
+ */
+static int isis_instance_area_password_create(enum nb_event event,
+                                             const struct lyd_node *dnode,
+                                             union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_area_password_delete(enum nb_event event,
+                                             const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/area-password/password
+ */
+static int
+isis_instance_area_password_password_modify(enum nb_event event,
+                                           const struct lyd_node *dnode,
+                                           union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/area-password/password-type
+ */
+static int
+isis_instance_area_password_password_type_modify(enum nb_event event,
+                                                const struct lyd_node *dnode,
+                                                union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/area-password/authenticate-snp
+ */
+static int isis_instance_area_password_authenticate_snp_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/domain-password
+ */
+static int isis_instance_domain_password_create(enum nb_event event,
+                                               const struct lyd_node *dnode,
+                                               union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_domain_password_delete(enum nb_event event,
+                                               const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/domain-password/password
+ */
+static int
+isis_instance_domain_password_password_modify(enum nb_event event,
+                                             const struct lyd_node *dnode,
+                                             union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/domain-password/password-type
+ */
+static int
+isis_instance_domain_password_password_type_modify(enum nb_event event,
+                                                  const struct lyd_node *dnode,
+                                                  union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/domain-password/authenticate-snp
+ */
+static int isis_instance_domain_password_authenticate_snp_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4
+ */
+static int isis_instance_default_information_originate_ipv4_create(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_default_information_originate_ipv4_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/always
+ */
+static int isis_instance_default_information_originate_ipv4_always_create(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_default_information_originate_ipv4_always_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/route-map
+ */
+static int isis_instance_default_information_originate_ipv4_route_map_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_default_information_originate_ipv4_route_map_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/metric
+ */
+static int isis_instance_default_information_originate_ipv4_metric_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_default_information_originate_ipv4_metric_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6
+ */
+static int isis_instance_default_information_originate_ipv6_create(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_default_information_originate_ipv6_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/always
+ */
+static int isis_instance_default_information_originate_ipv6_always_create(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_default_information_originate_ipv6_always_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/route-map
+ */
+static int isis_instance_default_information_originate_ipv6_route_map_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_default_information_originate_ipv6_route_map_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/metric
+ */
+static int isis_instance_default_information_originate_ipv6_metric_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_default_information_originate_ipv6_metric_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/redistribute/ipv4
+ */
+static int isis_instance_redistribute_ipv4_create(enum nb_event event,
+                                                 const struct lyd_node *dnode,
+                                                 union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_redistribute_ipv4_delete(enum nb_event event,
+                                                 const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/redistribute/ipv4/route-map
+ */
+static int
+isis_instance_redistribute_ipv4_route_map_modify(enum nb_event event,
+                                                const struct lyd_node *dnode,
+                                                union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int
+isis_instance_redistribute_ipv4_route_map_delete(enum nb_event event,
+                                                const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/redistribute/ipv4/metric
+ */
+static int
+isis_instance_redistribute_ipv4_metric_modify(enum nb_event event,
+                                             const struct lyd_node *dnode,
+                                             union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int
+isis_instance_redistribute_ipv4_metric_delete(enum nb_event event,
+                                             const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/redistribute/ipv6
+ */
+static int isis_instance_redistribute_ipv6_create(enum nb_event event,
+                                                 const struct lyd_node *dnode,
+                                                 union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_redistribute_ipv6_delete(enum nb_event event,
+                                                 const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/redistribute/ipv6/route-map
+ */
+static int
+isis_instance_redistribute_ipv6_route_map_modify(enum nb_event event,
+                                                const struct lyd_node *dnode,
+                                                union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int
+isis_instance_redistribute_ipv6_route_map_delete(enum nb_event event,
+                                                const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/redistribute/ipv6/metric
+ */
+static int
+isis_instance_redistribute_ipv6_metric_modify(enum nb_event event,
+                                             const struct lyd_node *dnode,
+                                             union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int
+isis_instance_redistribute_ipv6_metric_delete(enum nb_event event,
+                                             const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-multicast
+ */
+static int
+isis_instance_multi_topology_ipv4_multicast_create(enum nb_event event,
+                                                  const struct lyd_node *dnode,
+                                                  union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int
+isis_instance_multi_topology_ipv4_multicast_delete(enum nb_event event,
+                                                  const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-multicast/overload
+ */
+static int isis_instance_multi_topology_ipv4_multicast_overload_create(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_multi_topology_ipv4_multicast_overload_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-management
+ */
+static int isis_instance_multi_topology_ipv4_management_create(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_multi_topology_ipv4_management_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-management/overload
+ */
+static int isis_instance_multi_topology_ipv4_management_overload_create(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_multi_topology_ipv4_management_overload_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-unicast
+ */
+static int
+isis_instance_multi_topology_ipv6_unicast_create(enum nb_event event,
+                                                const struct lyd_node *dnode,
+                                                union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int
+isis_instance_multi_topology_ipv6_unicast_delete(enum nb_event event,
+                                                const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-unicast/overload
+ */
+static int isis_instance_multi_topology_ipv6_unicast_overload_create(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_multi_topology_ipv6_unicast_overload_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-multicast
+ */
+static int
+isis_instance_multi_topology_ipv6_multicast_create(enum nb_event event,
+                                                  const struct lyd_node *dnode,
+                                                  union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int
+isis_instance_multi_topology_ipv6_multicast_delete(enum nb_event event,
+                                                  const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-multicast/overload
+ */
+static int isis_instance_multi_topology_ipv6_multicast_overload_create(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_multi_topology_ipv6_multicast_overload_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-management
+ */
+static int isis_instance_multi_topology_ipv6_management_create(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_multi_topology_ipv6_management_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-management/overload
+ */
+static int isis_instance_multi_topology_ipv6_management_overload_create(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_multi_topology_ipv6_management_overload_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-dstsrc
+ */
+static int
+isis_instance_multi_topology_ipv6_dstsrc_create(enum nb_event event,
+                                               const struct lyd_node *dnode,
+                                               union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int
+isis_instance_multi_topology_ipv6_dstsrc_delete(enum nb_event event,
+                                               const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-dstsrc/overload
+ */
+static int isis_instance_multi_topology_ipv6_dstsrc_overload_create(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_instance_multi_topology_ipv6_dstsrc_overload_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/instance/log-adjacency-changes
+ */
+static int
+isis_instance_log_adjacency_changes_create(enum nb_event event,
+                                          const struct lyd_node *dnode,
+                                          union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int
+isis_instance_log_adjacency_changes_delete(enum nb_event event,
+                                          const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/mpls-te
+ */
+static int isis_mpls_te_create(enum nb_event event,
+                              const struct lyd_node *dnode,
+                              union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_mpls_te_delete(enum nb_event event,
+                              const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-isisd:isis/mpls-te/router-address
+ */
+static int isis_mpls_te_router_address_modify(enum nb_event event,
+                                             const struct lyd_node *dnode,
+                                             union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int isis_mpls_te_router_address_delete(enum nb_event event,
+                                             const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis
+ */
+static int lib_interface_isis_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_delete(enum nb_event event,
+                                    const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/area-tag
+ */
+static int lib_interface_isis_area_tag_modify(enum nb_event event,
+                                             const struct lyd_node *dnode,
+                                             union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/circuit-type
+ */
+static int lib_interface_isis_circuit_type_modify(enum nb_event event,
+                                                 const struct lyd_node *dnode,
+                                                 union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv4-routing
+ */
+static int lib_interface_isis_ipv4_routing_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_ipv4_routing_delete(enum nb_event event,
+                                                 const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv6-routing
+ */
+static int lib_interface_isis_ipv6_routing_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_ipv6_routing_delete(enum nb_event event,
+                                                 const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-1
+ */
+static int
+lib_interface_isis_csnp_interval_level_1_modify(enum nb_event event,
+                                               const struct lyd_node *dnode,
+                                               union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-2
+ */
+static int
+lib_interface_isis_csnp_interval_level_2_modify(enum nb_event event,
+                                               const struct lyd_node *dnode,
+                                               union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-1
+ */
+static int
+lib_interface_isis_psnp_interval_level_1_modify(enum nb_event event,
+                                               const struct lyd_node *dnode,
+                                               union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-2
+ */
+static int
+lib_interface_isis_psnp_interval_level_2_modify(enum nb_event event,
+                                               const struct lyd_node *dnode,
+                                               union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/padding
+ */
+static int lib_interface_isis_hello_padding_modify(enum nb_event event,
+                                                  const struct lyd_node *dnode,
+                                                  union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-1
+ */
+static int
+lib_interface_isis_hello_interval_level_1_modify(enum nb_event event,
+                                                const struct lyd_node *dnode,
+                                                union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-2
+ */
+static int
+lib_interface_isis_hello_interval_level_2_modify(enum nb_event event,
+                                                const struct lyd_node *dnode,
+                                                union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-1
+ */
+static int
+lib_interface_isis_hello_multiplier_level_1_modify(enum nb_event event,
+                                                  const struct lyd_node *dnode,
+                                                  union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-2
+ */
+static int
+lib_interface_isis_hello_multiplier_level_2_modify(enum nb_event event,
+                                                  const struct lyd_node *dnode,
+                                                  union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric/level-1
+ */
+static int
+lib_interface_isis_metric_level_1_modify(enum nb_event event,
+                                        const struct lyd_node *dnode,
+                                        union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric/level-2
+ */
+static int
+lib_interface_isis_metric_level_2_modify(enum nb_event event,
+                                        const struct lyd_node *dnode,
+                                        union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/priority/level-1
+ */
+static int
+lib_interface_isis_priority_level_1_modify(enum nb_event event,
+                                          const struct lyd_node *dnode,
+                                          union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/priority/level-2
+ */
+static int
+lib_interface_isis_priority_level_2_modify(enum nb_event event,
+                                          const struct lyd_node *dnode,
+                                          union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/network-type
+ */
+static int lib_interface_isis_network_type_modify(enum nb_event event,
+                                                 const struct lyd_node *dnode,
+                                                 union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+static int lib_interface_isis_network_type_delete(enum nb_event event,
+                                                 const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/passive
+ */
+static int lib_interface_isis_passive_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_passive_delete(enum nb_event event,
+                                            const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/password
+ */
+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. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/password/password
+ */
+static int
+lib_interface_isis_password_password_modify(enum nb_event event,
+                                           const struct lyd_node *dnode,
+                                           union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/password/password-type
+ */
+static int
+lib_interface_isis_password_password_type_modify(enum nb_event event,
+                                                const struct lyd_node *dnode,
+                                                union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake
+ */
+static int lib_interface_isis_disable_three_way_handshake_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_disable_three_way_handshake_delete(
+       enum nb_event event, const struct lyd_node *dnode)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast
+ */
+static int lib_interface_isis_multi_topology_ipv4_unicast_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-multicast
+ */
+static int lib_interface_isis_multi_topology_ipv4_multicast_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-management
+ */
+static int lib_interface_isis_multi_topology_ipv4_management_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-unicast
+ */
+static int lib_interface_isis_multi_topology_ipv6_unicast_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-multicast
+ */
+static int lib_interface_isis_multi_topology_ipv6_multicast_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-management
+ */
+static int lib_interface_isis_multi_topology_ipv6_management_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-dstsrc
+ */
+static int lib_interface_isis_multi_topology_ipv6_dstsrc_modify(
+       enum nb_event event, const struct lyd_node *dnode,
+       union nb_resource *resource)
+{
+       /* TODO: implement me. */
+       return NB_OK;
+}
+
+/* clang-format off */
+const struct frr_yang_module_info frr_isisd_info = {
+       .name = "frr-isisd",
+       .nodes = {
+               {
+                       .xpath = "/frr-isisd:isis/instance",
+                       .cbs.create = isis_instance_create,
+                       .cbs.delete = isis_instance_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/is-type",
+                       .cbs.modify = isis_instance_is_type_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/area-address",
+                       .cbs.create = isis_instance_area_address_create,
+                       .cbs.delete = isis_instance_area_address_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/dynamic-hostname",
+                       .cbs.modify = isis_instance_dynamic_hostname_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/attached",
+                       .cbs.create = isis_instance_attached_create,
+                       .cbs.delete = isis_instance_attached_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/overload",
+                       .cbs.create = isis_instance_overload_create,
+                       .cbs.delete = isis_instance_overload_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/metric-style",
+                       .cbs.modify = isis_instance_metric_style_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/purge-originator",
+                       .cbs.create = isis_instance_purge_originator_create,
+                       .cbs.delete = isis_instance_purge_originator_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/lsp/mtu",
+                       .cbs.modify = isis_instance_lsp_mtu_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/lsp/refresh-interval/level-1",
+                       .cbs.modify = isis_instance_lsp_refresh_interval_level_1_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/lsp/refresh-interval/level-2",
+                       .cbs.modify = isis_instance_lsp_refresh_interval_level_2_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-1",
+                       .cbs.modify = isis_instance_lsp_maximum_lifetime_level_1_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-2",
+                       .cbs.modify = isis_instance_lsp_maximum_lifetime_level_2_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/lsp/generation-interval/level-1",
+                       .cbs.modify = isis_instance_lsp_generation_interval_level_1_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/lsp/generation-interval/level-2",
+                       .cbs.modify = isis_instance_lsp_generation_interval_level_2_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay",
+                       .cbs.create = isis_instance_spf_ietf_backoff_delay_create,
+                       .cbs.delete = isis_instance_spf_ietf_backoff_delay_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/init-delay",
+                       .cbs.modify = isis_instance_spf_ietf_backoff_delay_init_delay_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/short-delay",
+                       .cbs.modify = isis_instance_spf_ietf_backoff_delay_short_delay_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/long-delay",
+                       .cbs.modify = isis_instance_spf_ietf_backoff_delay_long_delay_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/hold-down",
+                       .cbs.modify = isis_instance_spf_ietf_backoff_delay_hold_down_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/time-to-learn",
+                       .cbs.modify = isis_instance_spf_ietf_backoff_delay_time_to_learn_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/spf/minimum-interval/level-1",
+                       .cbs.modify = isis_instance_spf_minimum_interval_level_1_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/spf/minimum-interval/level-2",
+                       .cbs.modify = isis_instance_spf_minimum_interval_level_2_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/area-password",
+                       .cbs.create = isis_instance_area_password_create,
+                       .cbs.delete = isis_instance_area_password_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/area-password/password",
+                       .cbs.modify = isis_instance_area_password_password_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/area-password/password-type",
+                       .cbs.modify = isis_instance_area_password_password_type_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/area-password/authenticate-snp",
+                       .cbs.modify = isis_instance_area_password_authenticate_snp_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/domain-password",
+                       .cbs.create = isis_instance_domain_password_create,
+                       .cbs.delete = isis_instance_domain_password_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/domain-password/password",
+                       .cbs.modify = isis_instance_domain_password_password_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/domain-password/password-type",
+                       .cbs.modify = isis_instance_domain_password_password_type_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/domain-password/authenticate-snp",
+                       .cbs.modify = isis_instance_domain_password_authenticate_snp_modify,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4",
+                       .cbs.create = isis_instance_default_information_originate_ipv4_create,
+                       .cbs.delete = isis_instance_default_information_originate_ipv4_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4/always",
+                       .cbs.create = isis_instance_default_information_originate_ipv4_always_create,
+                       .cbs.delete = isis_instance_default_information_originate_ipv4_always_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4/route-map",
+                       .cbs.modify = isis_instance_default_information_originate_ipv4_route_map_modify,
+                       .cbs.delete = isis_instance_default_information_originate_ipv4_route_map_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4/metric",
+                       .cbs.modify = isis_instance_default_information_originate_ipv4_metric_modify,
+                       .cbs.delete = isis_instance_default_information_originate_ipv4_metric_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6",
+                       .cbs.create = isis_instance_default_information_originate_ipv6_create,
+                       .cbs.delete = isis_instance_default_information_originate_ipv6_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6/always",
+                       .cbs.create = isis_instance_default_information_originate_ipv6_always_create,
+                       .cbs.delete = isis_instance_default_information_originate_ipv6_always_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6/route-map",
+                       .cbs.modify = isis_instance_default_information_originate_ipv6_route_map_modify,
+                       .cbs.delete = isis_instance_default_information_originate_ipv6_route_map_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6/metric",
+                       .cbs.modify = isis_instance_default_information_originate_ipv6_metric_modify,
+                       .cbs.delete = isis_instance_default_information_originate_ipv6_metric_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/redistribute/ipv4",
+                       .cbs.create = isis_instance_redistribute_ipv4_create,
+                       .cbs.delete = isis_instance_redistribute_ipv4_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/redistribute/ipv4/route-map",
+                       .cbs.modify = isis_instance_redistribute_ipv4_route_map_modify,
+                       .cbs.delete = isis_instance_redistribute_ipv4_route_map_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/redistribute/ipv4/metric",
+                       .cbs.modify = isis_instance_redistribute_ipv4_metric_modify,
+                       .cbs.delete = isis_instance_redistribute_ipv4_metric_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/redistribute/ipv6",
+                       .cbs.create = isis_instance_redistribute_ipv6_create,
+                       .cbs.delete = isis_instance_redistribute_ipv6_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/redistribute/ipv6/route-map",
+                       .cbs.modify = isis_instance_redistribute_ipv6_route_map_modify,
+                       .cbs.delete = isis_instance_redistribute_ipv6_route_map_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/redistribute/ipv6/metric",
+                       .cbs.modify = isis_instance_redistribute_ipv6_metric_modify,
+                       .cbs.delete = isis_instance_redistribute_ipv6_metric_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-multicast",
+                       .cbs.create = isis_instance_multi_topology_ipv4_multicast_create,
+                       .cbs.delete = isis_instance_multi_topology_ipv4_multicast_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-multicast/overload",
+                       .cbs.create = isis_instance_multi_topology_ipv4_multicast_overload_create,
+                       .cbs.delete = isis_instance_multi_topology_ipv4_multicast_overload_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-management",
+                       .cbs.create = isis_instance_multi_topology_ipv4_management_create,
+                       .cbs.delete = isis_instance_multi_topology_ipv4_management_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-management/overload",
+                       .cbs.create = isis_instance_multi_topology_ipv4_management_overload_create,
+                       .cbs.delete = isis_instance_multi_topology_ipv4_management_overload_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-unicast",
+                       .cbs.create = isis_instance_multi_topology_ipv6_unicast_create,
+                       .cbs.delete = isis_instance_multi_topology_ipv6_unicast_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-unicast/overload",
+                       .cbs.create = isis_instance_multi_topology_ipv6_unicast_overload_create,
+                       .cbs.delete = isis_instance_multi_topology_ipv6_unicast_overload_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-multicast",
+                       .cbs.create = isis_instance_multi_topology_ipv6_multicast_create,
+                       .cbs.delete = isis_instance_multi_topology_ipv6_multicast_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-multicast/overload",
+                       .cbs.create = isis_instance_multi_topology_ipv6_multicast_overload_create,
+                       .cbs.delete = isis_instance_multi_topology_ipv6_multicast_overload_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-management",
+                       .cbs.create = isis_instance_multi_topology_ipv6_management_create,
+                       .cbs.delete = isis_instance_multi_topology_ipv6_management_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-management/overload",
+                       .cbs.create = isis_instance_multi_topology_ipv6_management_overload_create,
+                       .cbs.delete = isis_instance_multi_topology_ipv6_management_overload_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-dstsrc",
+                       .cbs.create = isis_instance_multi_topology_ipv6_dstsrc_create,
+                       .cbs.delete = isis_instance_multi_topology_ipv6_dstsrc_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-dstsrc/overload",
+                       .cbs.create = isis_instance_multi_topology_ipv6_dstsrc_overload_create,
+                       .cbs.delete = isis_instance_multi_topology_ipv6_dstsrc_overload_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/instance/log-adjacency-changes",
+                       .cbs.create = isis_instance_log_adjacency_changes_create,
+                       .cbs.delete = isis_instance_log_adjacency_changes_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/mpls-te",
+                       .cbs.create = isis_mpls_te_create,
+                       .cbs.delete = isis_mpls_te_delete,
+               },
+               {
+                       .xpath = "/frr-isisd:isis/mpls-te/router-address",
+                       .cbs.modify = isis_mpls_te_router_address_modify,
+                       .cbs.delete = isis_mpls_te_router_address_delete,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis",
+                       .cbs.create = lib_interface_isis_create,
+                       .cbs.delete = lib_interface_isis_delete,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/area-tag",
+                       .cbs.modify = lib_interface_isis_area_tag_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/circuit-type",
+                       .cbs.modify = lib_interface_isis_circuit_type_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/ipv4-routing",
+                       .cbs.create = lib_interface_isis_ipv4_routing_create,
+                       .cbs.delete = lib_interface_isis_ipv4_routing_delete,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/ipv6-routing",
+                       .cbs.create = lib_interface_isis_ipv6_routing_create,
+                       .cbs.delete = lib_interface_isis_ipv6_routing_delete,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-1",
+                       .cbs.modify = lib_interface_isis_csnp_interval_level_1_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-2",
+                       .cbs.modify = lib_interface_isis_csnp_interval_level_2_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-1",
+                       .cbs.modify = lib_interface_isis_psnp_interval_level_1_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-2",
+                       .cbs.modify = lib_interface_isis_psnp_interval_level_2_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/padding",
+                       .cbs.modify = lib_interface_isis_hello_padding_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-1",
+                       .cbs.modify = lib_interface_isis_hello_interval_level_1_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-2",
+                       .cbs.modify = lib_interface_isis_hello_interval_level_2_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-1",
+                       .cbs.modify = lib_interface_isis_hello_multiplier_level_1_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-2",
+                       .cbs.modify = lib_interface_isis_hello_multiplier_level_2_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/metric/level-1",
+                       .cbs.modify = lib_interface_isis_metric_level_1_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/metric/level-2",
+                       .cbs.modify = lib_interface_isis_metric_level_2_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/priority/level-1",
+                       .cbs.modify = lib_interface_isis_priority_level_1_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/priority/level-2",
+                       .cbs.modify = lib_interface_isis_priority_level_2_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/network-type",
+                       .cbs.modify = lib_interface_isis_network_type_modify,
+                       .cbs.delete = lib_interface_isis_network_type_delete,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/passive",
+                       .cbs.create = lib_interface_isis_passive_create,
+                       .cbs.delete = lib_interface_isis_passive_delete,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/password",
+                       .cbs.create = lib_interface_isis_password_create,
+                       .cbs.delete = lib_interface_isis_password_delete,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/password/password",
+                       .cbs.modify = lib_interface_isis_password_password_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/password/password-type",
+                       .cbs.modify = lib_interface_isis_password_password_type_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake",
+                       .cbs.create = lib_interface_isis_disable_three_way_handshake_create,
+                       .cbs.delete = lib_interface_isis_disable_three_way_handshake_delete,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast",
+                       .cbs.modify = lib_interface_isis_multi_topology_ipv4_unicast_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-multicast",
+                       .cbs.modify = lib_interface_isis_multi_topology_ipv4_multicast_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-management",
+                       .cbs.modify = lib_interface_isis_multi_topology_ipv4_management_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-unicast",
+                       .cbs.modify = lib_interface_isis_multi_topology_ipv6_unicast_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-multicast",
+                       .cbs.modify = lib_interface_isis_multi_topology_ipv6_multicast_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-management",
+                       .cbs.modify = lib_interface_isis_multi_topology_ipv6_management_modify,
+               },
+               {
+                       .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-dstsrc",
+                       .cbs.modify = lib_interface_isis_multi_topology_ipv6_dstsrc_modify,
+               },
+               {
+                       .xpath = NULL,
+               },
+       }
+};
index 2c0ea203f3ecc0df3ac16a0cc3581a9b430b56bd..14677ac7a501b2986effef4094c3a10caa7367f0 100644 (file)
@@ -50,6 +50,7 @@ static const bool fabricd = false;
 #define PROTO_REDIST_STR FRR_REDIST_STR_ISISD
 #define PROTO_REDIST_HELP FRR_REDIST_HELP_STR_ISISD
 #define ROUTER_NODE ISIS_NODE
+extern void isis_cli_init(void);
 #endif
 
 extern struct zebra_privs_t isisd_privs;
@@ -208,6 +209,8 @@ int isis_area_passwd_cleartext_set(struct isis_area *area, int level,
 int isis_area_passwd_hmac_md5_set(struct isis_area *area, int level,
                                  const char *passwd, uint8_t snp_auth);
 
+extern const struct frr_yang_module_info frr_isisd_info;
+extern void isis_northbound_init(void);
 /* Master of threads. */
 extern struct thread_master *master;
 
index 29ec1cdd1744322d5aea659ff196ad96097b4c47..749caec6e54a9eaf4ad2da54ce7f1eaa124050e5 100644 (file)
@@ -7,6 +7,7 @@ noinst_LIBRARIES += isisd/libisis.a
 sbin_PROGRAMS += isisd/isisd
 dist_examples_DATA += isisd/isisd.conf.sample
 vtysh_scan += \
+       $(top_srcdir)/isisd/isis_cli.c \
        $(top_srcdir)/isisd/isis_redist.c \
        $(top_srcdir)/isisd/isis_spf.c \
        $(top_srcdir)/isisd/isis_te.c \
@@ -57,6 +58,7 @@ noinst_HEADERS += \
        isisd/isisd.h \
        isisd/iso_checksum.h \
        isisd/fabricd.h \
+       isisd/isis_cli.h \
        # end
 
 LIBISIS_SOURCES = \
@@ -104,7 +106,13 @@ ISIS_LDADD_COMMON = lib/libfrr.la @LIBCAP@
 isisd_libisis_a_SOURCES = \
        $(LIBISIS_SOURCES) \
        isisd/isis_vty_isisd.c \
+       isisd/isis_northbound.c \
+       isisd/isis_cli.c \
        #end
+
+isisd/isis_cli_clippy.c: $(CLIPPY_DEPS)
+isisd/isis_cli.$(OBJEXT): isisd/isis_cli_clippy.c
+
 isisd_isisd_LDADD = isisd/libisis.a $(ISIS_LDADD_COMMON)
 isisd_isisd_SOURCES = $(ISIS_SOURCES)
 
diff --git a/yang/frr-isisd.yang b/yang/frr-isisd.yang
new file mode 100644 (file)
index 0000000..ab7da83
--- /dev/null
@@ -0,0 +1,1388 @@
+module frr-isisd {
+  yang-version 1.1;
+  namespace "http://frrouting.org/yang/isisd";
+  prefix frr-isisd;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+
+  import frr-interface {
+    prefix frr-interface;
+  }
+
+  import frr-route-types {
+    prefix frr-route-types;
+  }
+
+  organization
+    "Free Range Routing";
+  contact
+    "FRR Users List: <mailto:frog@lists.frrouting.org> FRR Development
+     List: <mailto:dev@lists.frrouting.org>";
+  description
+    "This module defines a model for managing FRR isisd daemon.";
+
+  revision 2018-07-26 {
+    description
+      "Initial revision.";
+    reference
+      "ISO/IEC 10589:2002.";
+  }
+
+  typedef level {
+    type enumeration {
+      enum "level-1" {
+        value 1;
+        description
+          "This enum indicates L1-only capability.";
+      }
+      enum "level-2" {
+        value 2;
+        description
+          "This enum indicates L2-only capability.";
+      }
+      enum "level-1-2" {
+        value 3;
+        description
+          "This enum indicates capability for both levels.";
+      }
+    }
+    description
+      "This type defines IS-IS level of an object.";
+  }
+
+  typedef network-type {
+    type enumeration {
+      enum "unknown" {
+        value 0;
+        description
+          "Unknown network type. Only valid as a state.";
+      }
+      enum "broadcast" {
+        value 1;
+        description
+          "Broadcast circuit network-type.";
+      }
+      enum "point-to-point" {
+        value 2;
+        description
+          "Point-to-point circuit network-type.";
+      }
+      enum "loopback" {
+        value 3;
+        description
+          "Loopback circuit network-type. Only valid as a state.";
+      }
+    }
+  }
+
+  typedef lsp-id {
+    type string {
+      pattern "[0-9A-Fa-f]{4}\\.[0-9A-Fa-f]{4}\\.[0-9A-Fa-f]{4}\\.[0-9][0-9]-[0-9][0-9]";
+    }
+    description
+      "This type defines the IS-IS LSP ID format using a
+       pattern, An example LSP ID is 0143.0438.AeF0.02-01";
+  }
+
+  typedef system-id {
+    type string {
+      pattern "[0-9A-Fa-f]{4}\\.[0-9A-Fa-f]{4}\\.[0-9A-Fa-f]{4}";
+    }
+    description
+      "This type defines IS-IS system-id using a pattern,
+       An example system-id is 0143.0438.AeF0";
+  }
+
+  typedef net-address {
+    type string {
+      pattern "[a-fA-F0-9]{2}(\\.[a-fA-F0-9]{4}){3,9}\\.[a-fA-F0-9]{2}";
+    }
+    description
+      "This type defines an OSI NET address using a pattern,
+       An example net-address is 49.0123.6452.1972.00";
+  }
+
+  typedef if-state-type {
+    type enumeration {
+      enum "up" {
+        value 0;
+        description
+          "Up state.";
+      }
+      enum "down" {
+        value 1;
+        description
+          "Down state";
+      }
+    }
+    description
+      "This type defines the state of an interface";
+  }
+
+  typedef adj-state-type {
+    type enumeration {
+      enum "up" {
+        value 0;
+        description
+          "State indicates the adjacency is established.";
+      }
+      enum "down" {
+        value 1;
+        description
+          "State indicates the adjacency is NOT established.";
+      }
+      enum "init" {
+        value 2;
+        description
+          "State indicates the adjacency is establishing.";
+      }
+      enum "failed" {
+        value 3;
+        description
+          "State indicates the adjacency is failed.";
+      }
+    }
+    description
+      "This type defines states of an adjacency";
+  }
+
+  typedef metric-style-type {
+    type enumeration {
+      enum "narrow" {
+        value 0;
+        description
+          "This enum describes narrow metric style";
+        reference
+          "RFC1195";
+      }
+      enum "wide" {
+        value 1;
+        description
+          "This enum describes wide metric style";
+        reference
+          "RFC5305";
+      }
+      enum "transition" {
+        value 2;
+        description
+          "This enum describes transition metric style";
+      }
+    }
+  }
+
+  grouping redistribute-attributes {
+    description
+      "Common optional attributes of any redistribute entry.";
+    choice attribute {
+      leaf route-map {
+        type string {
+          length "1..max";
+        }
+        description
+          "Applies the conditions of the specified route-map to routes that
+           are redistributed into this routing instance.";
+      }
+
+      leaf metric {
+        type uint32 {
+          range "0..16777215";
+        }
+        default "0";
+        description
+          "Metric used for the redistributed route. If 0,
+           the default-metric attribute is used instead.";
+      }
+    }
+  }
+
+  grouping redistribute-default {
+    description
+      "Redistribution of default route within a level.";
+    leaf always {
+      type empty;
+      description
+        "Always advertise default route.";
+    }
+
+    uses redistribute-attributes;
+  }
+
+  grouping isis-password {
+    description
+      "Authentication attributes or an IS-IS area or domain.";
+    leaf password {
+      type string {
+        length "1..254";
+      }
+      mandatory true;
+      description
+        "Actual password.";
+    }
+
+    leaf password-type {
+      type enumeration {
+        enum "clear" {
+          value 1;
+          description
+            "Clear-text password type.";
+        }
+        enum "md5" {
+          value 54;
+          description
+            "MD5 password type.";
+        }
+      }
+      mandatory true;
+      description
+        "Type of password used.";
+    }
+  }
+
+  grouping isis-area-password {
+    uses isis-password;
+
+    leaf authenticate-snp {
+      type enumeration {
+        enum "none" {
+          value 0;
+          description
+            "No SNP authentication.";
+        }
+        enum "send-only" {
+          value 1;
+          description
+            "Send authenticated PDUs but do not check on receiving.";
+        }
+        enum "validate" {
+          value 3;
+          description
+            "Send authenticated PDUs and check on receiving.";
+        }
+      }
+      default "none";
+      description
+        "SNP PDUs authentication.";
+    }
+  }
+
+  grouping notification-instance-hdr {
+    description
+      "Instance specific IS-IS notification data grouping";
+    leaf routing-instance {
+      type string;
+      description
+        "Name of the routing-instance instance.";
+    }
+
+    leaf routing-protocol-name {
+      type string;
+      description
+        "Name of the IS-IS instance.";
+    }
+
+    leaf isis-level {
+      type level;
+      description
+        "IS-IS level of the instance.";
+    }
+  }
+
+  grouping notification-interface-hdr {
+    description
+      "Interface specific IS-IS notification data grouping";
+    leaf interface-name {
+      type string;
+      description
+        "IS-IS interface name";
+    }
+
+    leaf interface-level {
+      type level;
+      description
+        "IS-IS level of the interface.";
+    }
+
+    leaf extended-circuit-id {
+      type uint32;
+      description
+        "Eextended circuit-id of the interface.";
+    }
+  }
+
+  container isis {
+    description
+      "Configuration of the IS-IS routing daemon.";
+    list instance {
+      key "area-tag";
+      description
+        "IS-IS routing instance.";
+      leaf area-tag {
+        type string;
+        description
+          "Area-tag associated to this routing instance.";
+      }
+
+      leaf is-type {
+        type level;
+        default "level-1";
+        description
+          "Level of the IS-IS routing instance (OSI only).";
+      }
+
+      leaf-list area-address {
+        type net-address;
+        max-elements 3;
+        description
+          "List of OSI NET addresses for this protocol instance.";
+      }
+
+      leaf dynamic-hostname {
+        type boolean;
+        default "true";
+        description
+          "Dynamic hostname support for IS-IS.";
+      }
+
+      leaf attached {
+        type empty;
+        description
+          "If present, identify as L1/L2 router for inter-area traffic.";
+      }
+
+      leaf overload {
+        type empty;
+        description
+          "If present, avoid any transit traffic.";
+      }
+
+      leaf metric-style {
+        type metric-style-type;
+        must ". = 'wide' or count(../multi-topology/*) = 0";
+        default "wide";
+        description
+          "Define the style of TLVs metric supported.";
+      }
+
+      leaf purge-originator {
+        type empty;
+        description
+          "Use the RFC 6232 purge-originator.";
+        reference
+          "RFC6232";
+      }
+
+      container lsp {
+        description
+          "Configuration of Link-State Packets (LSP) parameters";
+        leaf mtu {
+          type uint16 {
+            range "128..4352";
+          }
+          default "1497";
+          description
+            "MTU of an LSP.";
+        }
+
+        container refresh-interval {
+          description
+            "";
+          leaf level-1 {
+            type uint16;
+            units "seconds";
+            default "900";
+            description
+              "LSP refresh interval for level-1.";
+          }
+
+          leaf level-2 {
+            type uint16;
+            units "seconds";
+            default "900";
+            description
+              "LSP refresh interval for level-2.";
+          }
+        }
+
+        container maximum-lifetime {
+          description
+            "Maximum LSP lifetime.";
+          leaf level-1 {
+            type uint16 {
+              range "350..65535";
+            }
+            units "seconds";
+            must ". >= ../../refresh-interval/level-1 + 300";
+            default "1200";
+            description
+              "Maximum LSP lifetime for level-1.";
+          }
+
+          leaf level-2 {
+            type uint16 {
+              range "350..65535";
+            }
+            units "seconds";
+            must ". >= ../../refresh-interval/level-2 + 300";
+            default "1200";
+            description
+              "Maximum LSP lifetime for level-2.";
+          }
+        }
+
+        container generation-interval {
+          description
+            "Minimum LSP regeneration interval.";
+          leaf level-1 {
+            type uint16 {
+              range "1..120";
+            }
+            units "seconds";
+            must ". < ../../refresh-interval/level-1";
+            default "30";
+            description
+              "Minimum time allowed before level-1 LSP retransmissions.";
+          }
+
+          leaf level-2 {
+            type uint16 {
+              range "1..120";
+            }
+            units "seconds";
+            must ". < ../../refresh-interval/level-2";
+            default "30";
+            description
+              "Minimum time allowed before level-2 LSP retransmissions.";
+          }
+        }
+      }
+
+      container spf {
+        description
+          "Parameters related to the Shortest Path First algorithm.";
+        container ietf-backoff-delay {
+          presence "Present if IETF SPF back-off delay is enabled.";
+          description
+            "SPF back-off delay algorithm parameters (see RFC 8405).";
+          leaf init-delay {
+            type uint16 {
+              range "0..60000";
+            }
+            units "msec";
+            mandatory true;
+            description
+              "Delay used while in QUIET state";
+          }
+
+          leaf short-delay {
+            type uint16 {
+              range "0..60000";
+            }
+            units "msec";
+            mandatory true;
+            description
+              "Delay used while in SHORT_WAIT state";
+          }
+
+          leaf long-delay {
+            type uint16 {
+              range "0..60000";
+            }
+            units "msec";
+            mandatory true;
+            description
+              "Delay used while in LONG_WAIT state";
+          }
+
+          leaf hold-down {
+            type uint16 {
+              range "0..60000";
+            }
+            units "msec";
+            mandatory true;
+            description
+              "Time with no received IGP events before considering IGP stable";
+          }
+
+          leaf time-to-learn {
+            type uint16 {
+              range "0..60000";
+            }
+            units "msec";
+            mandatory true;
+            description
+              "Maximum duration needed to learn all the events related to a
+               single failure";
+          }
+        }
+
+        container minimum-interval {
+          description
+            "Minimum interval between consecutive executions of the
+             SPF algorithm.";
+          leaf level-1 {
+            type uint16 {
+              range "1..120";
+            }
+            units "seconds";
+            default "1";
+            description
+              "Minimum time between consecutive level-1 SPFs.";
+          }
+
+          leaf level-2 {
+            type uint16 {
+              range "1..120";
+            }
+            units "seconds";
+            default "1";
+            description
+              "Minimum time between consecutive level-2 SPFs.";
+          }
+        }
+      }
+
+      container area-password {
+        presence "Present if authentication is required for IS level-1.";
+        description
+          "Authentication password for an IS-IS area.";
+        uses isis-area-password;
+      }
+
+      container domain-password {
+        presence "Present if authentication is required for IS level-2.";
+        description
+          "Authentication password for an IS-IS domain.";
+        uses isis-area-password;
+      }
+
+      container default-information-originate {
+        description
+          "Distribution of default information.";
+        list ipv4 {
+          key "level";
+          description
+            "Distribute default route for IPv4.";
+          leaf level {
+            type level;
+            must "(. != \"level-1-2\") and ((../../../is-type = \"level-1-2\") or (. = ../../../is-type))";
+          }
+
+          uses redistribute-default;
+        }
+
+        list ipv6 {
+          key "level";
+          description
+            "Distribute default route for IPv6.";
+          leaf level {
+            type level;
+            must "(. != \"level-1-2\") and ((../../../is-type = \"level-1-2\") or (. = ../../../is-type))";
+          }
+
+          uses redistribute-default;
+        }
+      }
+
+      container redistribute {
+        description
+          "Redistributes routes learned from other routing protocols.";
+        list ipv4 {
+          key "protocol level";
+          description
+            "IPv4 route redistribution.";
+          leaf protocol {
+            type frr-route-types:frr-route-types-v4;
+            must ". != \"isis\"";
+            description
+              "Originating routing protocol for the IPv4 routes.";
+          }
+
+          leaf level {
+            type level;
+            must "(. != \"level-1-2\") and ((../../../is-type = \"level-1-2\") or (. = ../../../is-type))";
+            description
+              "IS-IS level into which the routes should be redistributed.";
+          }
+
+          uses redistribute-attributes;
+        }
+
+        list ipv6 {
+          key "protocol level";
+          description
+            "IPv6 route redistribution.";
+          leaf protocol {
+            type frr-route-types:frr-route-types-v6;
+            must ". != \"isis\"";
+            description
+              "Originating routing protocol for the IPv6 routes.";
+          }
+
+          leaf level {
+            type level;
+            must "(. != \"level-1-2\") and ((../../../is-type = \"level-1-2\") or (. = ../../../is-type))";
+            description
+              "IS-IS level into which the routes should be redistributed.";
+          }
+
+          uses redistribute-attributes;
+        }
+      }
+
+      container multi-topology {
+        description
+          "IS-IS topologies configured for this area.";
+        container ipv4-multicast {
+          presence "Present if a separate IPv4-multicast topology is configured for this area.";
+          description
+            "IPv4 multicast topology.";
+          leaf overload {
+            type empty;
+          }
+        }
+
+        container ipv4-management {
+          presence "Present if a separate IPv4-management topology is configured for this area.";
+          description
+            "IPv4 management topology.";
+          leaf overload {
+            type empty;
+          }
+        }
+
+        container ipv6-unicast {
+          presence "Present if a separate IPv6-unicast topology is configured for this area.";
+          description
+            "IPv6 unicast topology.";
+          leaf overload {
+            type empty;
+          }
+        }
+
+        container ipv6-multicast {
+          presence "Present if a separate IPv6-multicast topology is configured for this area.";
+          description
+            "IPv6 multicast topology.";
+          leaf overload {
+            type empty;
+          }
+        }
+
+        container ipv6-management {
+          presence "Present if a separate IPv6-management topology is configured for this area.";
+          description
+            "IPv6 management topology.";
+          leaf overload {
+            type empty;
+          }
+        }
+
+        container ipv6-dstsrc {
+          presence "Present if a separate IPv6 destination-source topology is configured for this area.";
+          description
+            "IPv6 destination-source topology.";
+          leaf overload {
+            type empty;
+          }
+        }
+      }
+
+      leaf log-adjacency-changes {
+        type empty;
+        description
+          "Log changes to the IS-IS adjacencies in this area.";
+      }
+    }
+
+    container mpls-te {
+      presence "Present if MPLS-TE is enabled.";
+      description
+        "Enable MPLS-TE functionality.";
+      leaf router-address {
+        type inet:ipv4-address;
+        description
+          "Stable IP address of the advertising router.";
+      }
+    }
+  }
+
+  augment "/frr-interface:lib/frr-interface:interface" {
+    description
+      "Extends interface model with IS-IS related parameters.";
+    container isis {
+      presence "Present if an IS-IS circuit is defined for this interface.";
+      description
+        "IS-IS interface parameters.";
+      leaf area-tag {
+        type string;
+        mandatory true;
+        description
+          "Area-tag associated to this circuit.";
+      }
+
+      leaf circuit-type {
+        type level;
+        default "level-1-2";
+        description
+          "IS-type of this circuit.";
+      }
+
+      leaf ipv4-routing {
+        type empty;
+        description
+          "Routing IS-IS IPv4 traffic over this circuit.";
+      }
+
+      leaf ipv6-routing {
+        type empty;
+        description
+          "Routing IS-IS IPv6 traffic over this circuit.";
+      }
+
+      container csnp-interval {
+        description
+          "Complete Sequence Number PDU (CSNP) generation interval.";
+        leaf level-1 {
+          type uint16 {
+            range "1..600";
+          }
+          units "seconds";
+          default "10";
+          description
+            "CNSP interval for level-1";
+        }
+
+        leaf level-2 {
+          type uint16 {
+            range "1..600";
+          }
+          units "seconds";
+          default "10";
+          description
+            "CNSP interval for level-2";
+        }
+      }
+
+      container psnp-interval {
+        description
+          "Partial Sequence Number PDU (PSNP) generation interval.";
+        leaf level-1 {
+          type uint16 {
+            range "1..120";
+          }
+          units "seconds";
+          default "2";
+          description
+            "PNSP interval for level-1";
+        }
+
+        leaf level-2 {
+          type uint16 {
+            range "1..120";
+          }
+          units "seconds";
+          default "2";
+          description
+            "PCNSP interval for level-2";
+        }
+      }
+
+      container hello {
+        description
+          "Parameters related to IS-IS hello PDUs.";
+        leaf padding {
+          type boolean;
+          default "true";
+          description
+            "Add padding to IS-IS hello PDUs.";
+        }
+
+        container interval {
+          description
+            "Interval between consecutive hello messages.";
+          leaf level-1 {
+            type uint32 {
+              range "1..600";
+            }
+            units "seconds";
+            default "3";
+            description
+              "Holding time for level-1; interval will depend on multiplier.";
+          }
+
+          leaf level-2 {
+            type uint32 {
+              range "1..600";
+            }
+            units "seconds";
+            default "3";
+            description
+              "Holding time for level-2; interval will depend on multiplier.";
+          }
+        }
+
+        container multiplier {
+          description
+            "Multiplier for the hello messages holding time.";
+          leaf level-1 {
+            type uint16 {
+              range "2..100";
+            }
+            default "10";
+            description
+              "Multiplier for the hello holding time.";
+          }
+
+          leaf level-2 {
+            type uint16 {
+              range "2..100";
+            }
+            default "10";
+            description
+              "Multiplier for the hello holding time.";
+          }
+        }
+      }
+
+      container metric {
+        description
+          "Default metric for this IS-IS circuit.";
+        leaf level-1 {
+          type uint32 {
+            range "0..16777215";
+          }
+          must ". < 64 or /frr-isisd:isis/instance[area-tag = current()/../../area-tag]/metric-style = 'wide'";
+          default "10";
+          description
+            "Default level-1 metric for this IS-IS circuit.";
+        }
+
+        leaf level-2 {
+          type uint32 {
+            range "0..16777215";
+          }
+          must ". < 64 or /frr-isisd:isis/instance[area-tag = current()/../../area-tag]/metric-style = 'wide'";
+          default "10";
+          description
+            "Default level-2 metric for this IS-IS circuit.";
+        }
+      }
+
+      container priority {
+        description
+          "Priority for Designated Router election.";
+        leaf level-1 {
+          type uint8 {
+            range "0..127";
+          }
+          default "64";
+          description
+            "Level-1 priority for this IS-IS circuit.";
+        }
+
+        leaf level-2 {
+          type uint8 {
+            range "0..127";
+          }
+          default "64";
+          description
+            "Level-2 priority for this IS-IS circuit.";
+        }
+      }
+
+      leaf network-type {
+        type network-type;
+        must "(. = \"point-to-point\") or (. = \"broadcast\")";
+        description
+          "Explicitly configured type of IS-IS circuit (broadcast or point-to-point).";
+      }
+
+      leaf passive {
+        type empty;
+        description
+          "Interface is in passive mode.";
+      }
+
+      container password {
+        presence "Present if a password is set for this IS interface.";
+        uses isis-password;
+      }
+
+      leaf disable-three-way-handshake {
+        type empty;
+        description
+          "Disables three-way handshake when creating new adjacencies.";
+      }
+
+      container multi-topology {
+        description
+          "IS-IS topologies configured on this circuit.";
+        leaf ipv4-unicast {
+          type boolean;
+          default "true";
+          description
+            "IPv4 unicast topology.";
+        }
+
+        leaf ipv4-multicast {
+          type boolean;
+          default "true";
+          description
+            "IPv4 multicast topology.";
+        }
+
+        leaf ipv4-management {
+          type boolean;
+          default "true";
+          description
+            "IPv4 management topology.";
+        }
+
+        leaf ipv6-unicast {
+          type boolean;
+          default "true";
+          description
+            "IPv6 unicast topology.";
+        }
+
+        leaf ipv6-multicast {
+          type boolean;
+          default "true";
+          description
+            "IPv6 multicast topology.";
+        }
+
+        leaf ipv6-management {
+          type boolean;
+          default "true";
+          description
+            "IPv6 management topology.";
+        }
+
+        leaf ipv6-dstsrc {
+          type boolean;
+          default "true";
+          description
+            "IPv6 destination-source topology.";
+        }
+      }
+    }
+  }
+
+  notification database-overload {
+    description
+      "This notification is sent when an IS-IS instance
+       overload state changes.";
+    uses notification-instance-hdr;
+
+    leaf overload {
+      type enumeration {
+        enum "off" {
+          value 0;
+          description
+            "Indicates IS-IS instance has left overload state";
+        }
+        enum "on" {
+          value 1;
+          description
+            "Indicates IS-IS instance has entered overload state";
+        }
+      }
+      description
+        "New overload state of the IS-IS instance";
+    }
+  }
+
+  notification lsp-too-large {
+    description
+      "This notification is sent when we attempt to propagate
+       an LSP that is larger than the dataLinkBlockSize for the
+       circuit.  The notification generation must be throttled
+       with at least 5 seconds betweeen successive
+       notifications.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf pdu-size {
+      type uint32;
+      description
+        "Size of the LSP PDU";
+    }
+
+    leaf lsp-id {
+      type lsp-id;
+      description
+        "LSP ID";
+    }
+  }
+
+  notification if-state-change {
+    description
+      "This notification is sent when an interface
+       state change is detected.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf state {
+      type if-state-type;
+      description
+        "Interface state.";
+    }
+  }
+
+  notification corrupted-lsp-detected {
+    description
+      "This notification is sent when we find that
+       an LSP that was stored in memory has become
+       corrupted.";
+    uses notification-instance-hdr;
+
+    leaf lsp-id {
+      type lsp-id;
+      description
+        "LSP ID";
+    }
+  }
+
+  notification attempt-to-exceed-max-sequence {
+    description
+      "This notification is sent when the system
+       wraps the 32-bit sequence counter of an LSP.";
+    uses notification-instance-hdr;
+
+    leaf lsp-id {
+      type lsp-id;
+      description
+        "LSP ID";
+    }
+  }
+
+  notification id-len-mismatch {
+    description
+      "This notification is sent when we receive a PDU
+       with a different value for the System ID length.
+       The notification generation must be throttled
+       with at least 5 seconds betweeen successive
+       notifications.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf pdu-field-len {
+      type uint8;
+      description
+        "Size of the ID length in the received PDU";
+    }
+
+    leaf raw-pdu {
+      type binary;
+      description
+        "Received raw PDU.";
+    }
+  }
+
+  notification max-area-addresses-mismatch {
+    description
+      "This notification is sent when we receive a PDU
+       with a different value for the Maximum Area Addresses.
+       The notification generation must be throttled
+       with at least 5 seconds betweeen successive
+       notifications.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf max-area-addresses {
+      type uint8;
+      description
+        "Received number of supported areas";
+    }
+
+    leaf raw-pdu {
+      type binary;
+      description
+        "Received raw PDU.";
+    }
+  }
+
+  notification own-lsp-purge {
+    description
+      "This notification is sent when the system receives
+       a PDU with its own system ID and zero age.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf lsp-id {
+      type lsp-id;
+      description
+        "LSP ID";
+    }
+  }
+
+  notification sequence-number-skipped {
+    description
+      "This notification is sent when the system receives a
+       PDU with its own system ID and different contents. The
+       system has to reoriginate the LSP with a higher sequence
+       number.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf lsp-id {
+      type lsp-id;
+      description
+        "LSP ID";
+    }
+  }
+
+  notification authentication-type-failure {
+    description
+      "This notification is sent when the system receives a
+       PDU with the wrong authentication type field.
+       The notification generation must be throttled
+       with at least 5 seconds betweeen successive
+       notifications.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf raw-pdu {
+      type binary;
+      description
+        "Received raw PDU.";
+    }
+  }
+
+  notification authentication-failure {
+    description
+      "This notification is sent when the system receives
+       a PDU with the wrong authentication information.
+       The notification generation must be throttled with
+       with at least 5 seconds betweeen successive
+       notifications.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf raw-pdu {
+      type binary;
+      description
+        "Received raw PDU.";
+    }
+  }
+
+  notification version-skew {
+    description
+      "This notification is sent when the system receives a
+       PDU with a different protocol version number.
+       The notification generation must be throttled
+       with at least 5 seconds betweeen successive
+       notifications.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf protocol-version {
+      type uint8;
+      description
+        "Protocol version received in the PDU.";
+    }
+
+    leaf raw-pdu {
+      type binary;
+      description
+        "Received raw PDU.";
+    }
+  }
+
+  notification area-mismatch {
+    description
+      "This notification is sent when the system receives a
+       Hello PDU from an IS that does not share any area
+       address. The notification generation must be throttled
+       with at least 5 seconds betweeen successive
+       notifications.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf raw-pdu {
+      type binary;
+      description
+        "Received raw PDU.";
+    }
+  }
+
+  notification rejected-adjacency {
+    description
+      "This notification is sent when the system receives a
+       Hello PDU from an IS but does not establish an adjacency
+       for some reason. The notification generation must be
+       throttled with at least 5 seconds betweeen successive
+       notifications.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf raw-pdu {
+      type binary;
+      description
+        "Received raw PDU.";
+    }
+
+    leaf reason {
+      type string;
+      description
+        "The system may provide a reason to reject the
+         adjacency. If the reason is not available,
+         an empty string will be returned.";
+    }
+  }
+
+  notification lsp-error-detected {
+    description
+      "This notification is sent when the system  receives an
+       LSP with a parse error. The notification generation must
+       be throttled with at least 5 seconds betweeen successive
+       notifications.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf lsp-id {
+      type lsp-id;
+      description
+        "LSP ID.";
+    }
+
+    leaf raw-pdu {
+      type binary;
+      description
+        "Received raw PDU.";
+    }
+
+    leaf error-offset {
+      type uint32;
+      description
+        "If the problem is a malformed TLV, the error-offset
+         points to the start of the TLV. If the problem is with
+         the LSP header, the error-offset points to the errant
+         byte";
+    }
+
+    leaf tlv-type {
+      type uint8;
+      description
+        "If the problem is a malformed TLV, the tlv-type is set
+         to the type value of the suspicious TLV. Otherwise,
+         this leaf is not present.";
+    }
+  }
+
+  notification adjacency-state-change {
+    description
+      "This notification is sent when an IS-IS adjacency
+       moves to Up state or to Down state.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf neighbor {
+      type string;
+      description
+        "Name of the neighbor. If the name of the neighbor is
+         not available, it is not returned.";
+    }
+
+    leaf neighbor-system-id {
+      type system-id;
+      description
+        "Neighbor system-id";
+    }
+
+    leaf state {
+      type adj-state-type;
+      description
+        "New state of the IS-IS adjacency.";
+    }
+
+    leaf reason {
+      type string;
+      description
+        "If the adjacency is going to DOWN,  this leaf provides
+         a reason for the adjacency going down. The reason is
+         provided as a text. If the adjacency is going to UP, no
+         reason is provided.";
+    }
+  }
+
+  notification lsp-received {
+    description
+      "This notification is sent when an LSP is received.
+       The notification generation must be throttled with at
+       least 5 seconds betweeen successive notifications.";
+    uses notification-instance-hdr;
+
+    uses notification-interface-hdr;
+
+    leaf lsp-id {
+      type lsp-id;
+      description
+        "LSP ID";
+    }
+
+    leaf sequence {
+      type uint32;
+      description
+        "Sequence number of the received LSP.";
+    }
+
+    leaf received-timestamp {
+      type yang:timestamp;
+      description
+        "Timestamp when the LSP was received.";
+    }
+
+    leaf neighbor-system-id {
+      type system-id;
+      description
+        "Neighbor system-id of LSP sender";
+    }
+  }
+
+  notification lsp-generation {
+    description
+      "This notification is sent when an LSP is regenerated.
+       The notification generation must be throttled with at
+       least 5 seconds betweeen successive notifications.";
+    uses notification-instance-hdr;
+
+    leaf lsp-id {
+      type lsp-id;
+      description
+        "LSP ID";
+    }
+
+    leaf sequence {
+      type uint32;
+      description
+        "Sequence number of the received LSP.";
+    }
+
+    leaf send-timestamp {
+      type yang:timestamp;
+      description
+        "Timestamp when our LSP was regenerated.";
+    }
+  }
+}
index 6484e1181f04cb9c42ef8b869c6772b5f205b43a..c95ec4dbff44b532fcd2bb031e0e9ceb43ce5a1f 100644 (file)
@@ -31,3 +31,7 @@ endif
 if RIPNGD
 dist_yangmodels_DATA += yang/frr-ripngd.yang
 endif
+
+if ISISD
+dist_yangmodels_DATA += yang/frr-isisd.yang
+endif