summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--isisd/isis_cli.c50
-rw-r--r--isisd/isis_cli.h25
-rw-r--r--isisd/isis_main.c7
-rw-r--r--isisd/isis_northbound.c1826
-rw-r--r--isisd/isisd.h3
-rw-r--r--isisd/subdir.am8
-rw-r--r--yang/frr-isisd.yang1388
-rw-r--r--yang/subdir.am4
8 files changed, 3311 insertions, 0 deletions
diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c
new file mode 100644
index 000000000..9f82d8581
--- /dev/null
+++ b/isisd/isis_cli.c
@@ -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
index 000000000..952bd9d74
--- /dev/null
+++ b/isisd/isis_cli.h
@@ -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_ */
diff --git a/isisd/isis_main.c b/isisd/isis_main.c
index cda3b2b3c..40c483a0d 100644
--- a/isisd/isis_main.c
+++ b/isisd/isis_main.c
@@ -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
index 000000000..23c4fec4f
--- /dev/null
+++ b/isisd/isis_northbound.c
@@ -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,
+ },
+ }
+};
diff --git a/isisd/isisd.h b/isisd/isisd.h
index 2c0ea203f..14677ac7a 100644
--- a/isisd/isisd.h
+++ b/isisd/isisd.h
@@ -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;
diff --git a/isisd/subdir.am b/isisd/subdir.am
index 29ec1cdd1..749caec6e 100644
--- a/isisd/subdir.am
+++ b/isisd/subdir.am
@@ -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
index 000000000..ab7da8300
--- /dev/null
+++ b/yang/frr-isisd.yang
@@ -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.";
+ }
+ }
+}
diff --git a/yang/subdir.am b/yang/subdir.am
index 6484e1181..c95ec4dbf 100644
--- a/yang/subdir.am
+++ b/yang/subdir.am
@@ -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