2 * Copyright (C) 2001,2002 Sampo Saaristo
3 * Tampere University of Technology
4 * Institute of Communications Engineering
5 * Copyright (C) 2018 Volta Networks
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the Free
10 * Software Foundation; either version 2 of the License, or (at your option)
13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
18 * You should have received a copy of the GNU General Public License along
19 * with this program; see the file COPYING; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24 #include "northbound.h"
28 #include "isisd/dict.h"
29 #include "isisd/isis_constants.h"
30 #include "isisd/isis_common.h"
31 #include "isisd/isis_flags.h"
32 #include "isisd/isis_circuit.h"
33 #include "isisd/isisd.h"
34 #include "isisd/isis_lsp.h"
35 #include "isisd/isis_pdu.h"
36 #include "isisd/isis_dynhn.h"
37 #include "isisd/isis_misc.h"
38 #include "isisd/isis_csm.h"
39 #include "isisd/isis_adjacency.h"
40 #include "isisd/isis_spf.h"
41 #include "isisd/isis_te.h"
42 #include "isisd/isis_memory.h"
43 #include "isisd/isis_mt.h"
44 #include "isisd/isis_cli.h"
45 #include "isisd/isis_redist.h"
46 #include "lib/spf_backoff.h"
47 #include "lib/lib_errors.h"
51 * XPath: /frr-isisd:isis/instance
53 static int isis_instance_create(enum nb_event event
,
54 const struct lyd_node
*dnode
,
55 union nb_resource
*resource
)
57 struct isis_area
*area
;
60 if (event
!= NB_EV_APPLY
)
63 area_tag
= yang_dnode_get_string(dnode
, "./area-tag");
64 area
= isis_area_lookup(area_tag
);
66 return NB_ERR_INCONSISTENCY
;
68 area
= isis_area_create(area_tag
);
69 /* save area in dnode to avoid looking it up all the time */
70 yang_dnode_set_entry(dnode
, area
);
75 static int isis_instance_delete(enum nb_event event
,
76 const struct lyd_node
*dnode
)
80 if (event
!= NB_EV_APPLY
)
83 area_tag
= yang_dnode_get_string(dnode
, "./area-tag");
84 isis_area_destroy(area_tag
);
90 * XPath: /frr-isisd:isis/instance/is-type
92 static int isis_instance_is_type_modify(enum nb_event event
,
93 const struct lyd_node
*dnode
,
94 union nb_resource
*resource
)
96 struct isis_area
*area
;
99 if (event
!= NB_EV_APPLY
)
102 area
= yang_dnode_get_entry(dnode
, true);
103 type
= yang_dnode_get_enum(dnode
, NULL
);
104 isis_area_is_type_set(area
, type
);
110 * XPath: /frr-isisd:isis/instance/area-address
112 static int isis_instance_area_address_create(enum nb_event event
,
113 const struct lyd_node
*dnode
,
114 union nb_resource
*resource
)
116 struct isis_area
*area
;
117 struct area_addr addr
, *addrr
= NULL
, *addrp
= NULL
;
118 struct listnode
*node
;
120 const char *net_title
= yang_dnode_get_string(dnode
, NULL
);
124 addr
.addr_len
= dotformat2buff(buff
, net_title
);
125 memcpy(addr
.area_addr
, buff
, addr
.addr_len
);
126 if (addr
.area_addr
[addr
.addr_len
- 1] != 0) {
128 EC_LIB_NB_CB_CONFIG_VALIDATE
,
129 "nsel byte (last byte) in area address must be 0");
130 return NB_ERR_VALIDATION
;
132 if (isis
->sysid_set
) {
133 /* Check that the SystemID portions match */
134 if (memcmp(isis
->sysid
, GETSYSID((&addr
)),
137 EC_LIB_NB_CB_CONFIG_VALIDATE
,
138 "System ID must not change when defining additional area addresses");
139 return NB_ERR_VALIDATION
;
144 addrr
= XMALLOC(MTYPE_ISIS_AREA_ADDR
, sizeof(struct area_addr
));
145 addrr
->addr_len
= dotformat2buff(buff
, net_title
);
146 memcpy(addrr
->area_addr
, buff
, addrr
->addr_len
);
147 resource
->ptr
= addrr
;
150 XFREE(MTYPE_ISIS_AREA_ADDR
, resource
->ptr
);
153 area
= yang_dnode_get_entry(dnode
, true);
154 addrr
= resource
->ptr
;
156 if (isis
->sysid_set
== 0) {
158 * First area address - get the SystemID for this router
160 memcpy(isis
->sysid
, GETSYSID(addrr
), ISIS_SYS_ID_LEN
);
163 /* check that we don't already have this address */
164 for (ALL_LIST_ELEMENTS_RO(area
->area_addrs
, node
,
166 if ((addrp
->addr_len
+ ISIS_SYS_ID_LEN
168 != (addrr
->addr_len
))
170 if (!memcmp(addrp
->area_addr
, addrr
->area_addr
,
172 XFREE(MTYPE_ISIS_AREA_ADDR
, addrr
);
173 return NB_OK
; /* silent fail */
178 /*Forget the systemID part of the address */
179 addrr
->addr_len
-= (ISIS_SYS_ID_LEN
+ ISIS_NSEL_LEN
);
180 assert(area
->area_addrs
); /* to silence scan-build sillyness */
181 listnode_add(area
->area_addrs
, addrr
);
183 /* only now we can safely generate our LSPs for this area */
184 if (listcount(area
->area_addrs
) > 0) {
185 if (area
->is_type
& IS_LEVEL_1
)
186 lsp_generate(area
, IS_LEVEL_1
);
187 if (area
->is_type
& IS_LEVEL_2
)
188 lsp_generate(area
, IS_LEVEL_2
);
196 static int isis_instance_area_address_delete(enum nb_event event
,
197 const struct lyd_node
*dnode
)
199 struct area_addr addr
, *addrp
= NULL
;
200 struct listnode
*node
;
202 struct isis_area
*area
;
203 const char *net_title
;
205 if (event
!= NB_EV_APPLY
)
208 net_title
= yang_dnode_get_string(dnode
, NULL
);
209 addr
.addr_len
= dotformat2buff(buff
, net_title
);
210 memcpy(addr
.area_addr
, buff
, (int)addr
.addr_len
);
211 area
= yang_dnode_get_entry(dnode
, true);
212 for (ALL_LIST_ELEMENTS_RO(area
->area_addrs
, node
, addrp
)) {
213 if ((addrp
->addr_len
+ ISIS_SYS_ID_LEN
+ 1) == addr
.addr_len
214 && !memcmp(addrp
->area_addr
, addr
.area_addr
, addr
.addr_len
))
218 return NB_ERR_INCONSISTENCY
;
220 listnode_delete(area
->area_addrs
, addrp
);
221 XFREE(MTYPE_ISIS_AREA_ADDR
, addrp
);
223 * Last area address - reset the SystemID for this router
225 if (listcount(area
->area_addrs
) == 0) {
226 memset(isis
->sysid
, 0, ISIS_SYS_ID_LEN
);
228 if (isis
->debugs
& DEBUG_EVENTS
)
229 zlog_debug("Router has no SystemID");
236 * XPath: /frr-isisd:isis/instance/dynamic-hostname
238 static int isis_instance_dynamic_hostname_modify(enum nb_event event
,
239 const struct lyd_node
*dnode
,
240 union nb_resource
*resource
)
242 struct isis_area
*area
;
244 if (event
!= NB_EV_APPLY
)
247 area
= yang_dnode_get_entry(dnode
, true);
248 isis_area_dynhostname_set(area
, yang_dnode_get_bool(dnode
, NULL
));
254 * XPath: /frr-isisd:isis/instance/attached
256 static int isis_instance_attached_create(enum nb_event event
,
257 const struct lyd_node
*dnode
,
258 union nb_resource
*resource
)
260 struct isis_area
*area
;
262 if (event
!= NB_EV_APPLY
)
265 area
= yang_dnode_get_entry(dnode
, true);
266 isis_area_attached_bit_set(area
, true);
271 static int isis_instance_attached_delete(enum nb_event event
,
272 const struct lyd_node
*dnode
)
274 struct isis_area
*area
;
276 if (event
!= NB_EV_APPLY
)
279 area
= yang_dnode_get_entry(dnode
, true);
280 isis_area_attached_bit_set(area
, false);
286 * XPath: /frr-isisd:isis/instance/overload
288 static int isis_instance_overload_create(enum nb_event event
,
289 const struct lyd_node
*dnode
,
290 union nb_resource
*resource
)
292 struct isis_area
*area
;
294 if (event
!= NB_EV_APPLY
)
297 area
= yang_dnode_get_entry(dnode
, true);
298 isis_area_overload_bit_set(area
, true);
303 static int isis_instance_overload_delete(enum nb_event event
,
304 const struct lyd_node
*dnode
)
306 struct isis_area
*area
;
308 if (event
!= NB_EV_APPLY
)
311 area
= yang_dnode_get_entry(dnode
, true);
312 isis_area_overload_bit_set(area
, false);
318 * XPath: /frr-isisd:isis/instance/metric-style
320 static int isis_instance_metric_style_modify(enum nb_event event
,
321 const struct lyd_node
*dnode
,
322 union nb_resource
*resource
)
324 struct isis_area
*area
;
325 bool old_metric
, new_metric
;
326 enum isis_metric_style metric_style
= yang_dnode_get_enum(dnode
, NULL
);
328 if (event
!= NB_EV_APPLY
)
331 area
= yang_dnode_get_entry(dnode
, true);
332 old_metric
= (metric_style
== ISIS_WIDE_METRIC
) ? false : true;
333 new_metric
= (metric_style
== ISIS_NARROW_METRIC
) ? false : true;
334 isis_area_metricstyle_set(area
, old_metric
, new_metric
);
340 * XPath: /frr-isisd:isis/instance/purge-originator
342 static int isis_instance_purge_originator_create(enum nb_event event
,
343 const struct lyd_node
*dnode
,
344 union nb_resource
*resource
)
346 /* TODO: implement me. */
350 static int isis_instance_purge_originator_delete(enum nb_event event
,
351 const struct lyd_node
*dnode
)
353 /* TODO: implement me. */
358 * XPath: /frr-isisd:isis/instance/lsp/mtu
360 static int isis_instance_lsp_mtu_modify(enum nb_event event
,
361 const struct lyd_node
*dnode
,
362 union nb_resource
*resource
)
364 /* TODO: implement me. */
369 * XPath: /frr-isisd:isis/instance/lsp/refresh-interval/level-1
372 isis_instance_lsp_refresh_interval_level_1_modify(enum nb_event event
,
373 const struct lyd_node
*dnode
,
374 union nb_resource
*resource
)
376 /* TODO: implement me. */
381 * XPath: /frr-isisd:isis/instance/lsp/refresh-interval/level-2
384 isis_instance_lsp_refresh_interval_level_2_modify(enum nb_event event
,
385 const struct lyd_node
*dnode
,
386 union nb_resource
*resource
)
388 /* TODO: implement me. */
393 * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-1
396 isis_instance_lsp_maximum_lifetime_level_1_modify(enum nb_event event
,
397 const struct lyd_node
*dnode
,
398 union nb_resource
*resource
)
400 /* TODO: implement me. */
405 * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-2
408 isis_instance_lsp_maximum_lifetime_level_2_modify(enum nb_event event
,
409 const struct lyd_node
*dnode
,
410 union nb_resource
*resource
)
412 /* TODO: implement me. */
417 * XPath: /frr-isisd:isis/instance/lsp/generation-interval/level-1
419 static int isis_instance_lsp_generation_interval_level_1_modify(
420 enum nb_event event
, const struct lyd_node
*dnode
,
421 union nb_resource
*resource
)
423 /* TODO: implement me. */
428 * XPath: /frr-isisd:isis/instance/lsp/generation-interval/level-2
430 static int isis_instance_lsp_generation_interval_level_2_modify(
431 enum nb_event event
, const struct lyd_node
*dnode
,
432 union nb_resource
*resource
)
434 /* TODO: implement me. */
439 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay
442 isis_instance_spf_ietf_backoff_delay_create(enum nb_event event
,
443 const struct lyd_node
*dnode
,
444 union nb_resource
*resource
)
446 /* TODO: implement me. */
451 isis_instance_spf_ietf_backoff_delay_delete(enum nb_event event
,
452 const struct lyd_node
*dnode
)
454 /* TODO: implement me. */
459 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/init-delay
461 static int isis_instance_spf_ietf_backoff_delay_init_delay_modify(
462 enum nb_event event
, const struct lyd_node
*dnode
,
463 union nb_resource
*resource
)
465 /* TODO: implement me. */
470 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/short-delay
472 static int isis_instance_spf_ietf_backoff_delay_short_delay_modify(
473 enum nb_event event
, const struct lyd_node
*dnode
,
474 union nb_resource
*resource
)
476 /* TODO: implement me. */
481 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/long-delay
483 static int isis_instance_spf_ietf_backoff_delay_long_delay_modify(
484 enum nb_event event
, const struct lyd_node
*dnode
,
485 union nb_resource
*resource
)
487 /* TODO: implement me. */
492 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/hold-down
494 static int isis_instance_spf_ietf_backoff_delay_hold_down_modify(
495 enum nb_event event
, const struct lyd_node
*dnode
,
496 union nb_resource
*resource
)
498 /* TODO: implement me. */
503 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/time-to-learn
505 static int isis_instance_spf_ietf_backoff_delay_time_to_learn_modify(
506 enum nb_event event
, const struct lyd_node
*dnode
,
507 union nb_resource
*resource
)
509 /* TODO: implement me. */
514 * XPath: /frr-isisd:isis/instance/spf/minimum-interval/level-1
517 isis_instance_spf_minimum_interval_level_1_modify(enum nb_event event
,
518 const struct lyd_node
*dnode
,
519 union nb_resource
*resource
)
521 /* TODO: implement me. */
526 * XPath: /frr-isisd:isis/instance/spf/minimum-interval/level-2
529 isis_instance_spf_minimum_interval_level_2_modify(enum nb_event event
,
530 const struct lyd_node
*dnode
,
531 union nb_resource
*resource
)
533 /* TODO: implement me. */
538 * XPath: /frr-isisd:isis/instance/area-password
540 static int isis_instance_area_password_create(enum nb_event event
,
541 const struct lyd_node
*dnode
,
542 union nb_resource
*resource
)
544 /* TODO: implement me. */
548 static int isis_instance_area_password_delete(enum nb_event event
,
549 const struct lyd_node
*dnode
)
551 /* TODO: implement me. */
556 * XPath: /frr-isisd:isis/instance/area-password/password
559 isis_instance_area_password_password_modify(enum nb_event event
,
560 const struct lyd_node
*dnode
,
561 union nb_resource
*resource
)
563 /* TODO: implement me. */
568 * XPath: /frr-isisd:isis/instance/area-password/password-type
571 isis_instance_area_password_password_type_modify(enum nb_event event
,
572 const struct lyd_node
*dnode
,
573 union nb_resource
*resource
)
575 /* TODO: implement me. */
580 * XPath: /frr-isisd:isis/instance/area-password/authenticate-snp
582 static int isis_instance_area_password_authenticate_snp_modify(
583 enum nb_event event
, const struct lyd_node
*dnode
,
584 union nb_resource
*resource
)
586 /* TODO: implement me. */
591 * XPath: /frr-isisd:isis/instance/domain-password
593 static int isis_instance_domain_password_create(enum nb_event event
,
594 const struct lyd_node
*dnode
,
595 union nb_resource
*resource
)
597 /* TODO: implement me. */
601 static int isis_instance_domain_password_delete(enum nb_event event
,
602 const struct lyd_node
*dnode
)
604 /* TODO: implement me. */
609 * XPath: /frr-isisd:isis/instance/domain-password/password
612 isis_instance_domain_password_password_modify(enum nb_event event
,
613 const struct lyd_node
*dnode
,
614 union nb_resource
*resource
)
616 /* TODO: implement me. */
621 * XPath: /frr-isisd:isis/instance/domain-password/password-type
624 isis_instance_domain_password_password_type_modify(enum nb_event event
,
625 const struct lyd_node
*dnode
,
626 union nb_resource
*resource
)
628 /* TODO: implement me. */
633 * XPath: /frr-isisd:isis/instance/domain-password/authenticate-snp
635 static int isis_instance_domain_password_authenticate_snp_modify(
636 enum nb_event event
, const struct lyd_node
*dnode
,
637 union nb_resource
*resource
)
639 /* TODO: implement me. */
644 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4
646 static int isis_instance_default_information_originate_ipv4_create(
647 enum nb_event event
, const struct lyd_node
*dnode
,
648 union nb_resource
*resource
)
650 /* TODO: implement me. */
654 static int isis_instance_default_information_originate_ipv4_delete(
655 enum nb_event event
, const struct lyd_node
*dnode
)
657 /* TODO: implement me. */
662 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/always
664 static int isis_instance_default_information_originate_ipv4_always_create(
665 enum nb_event event
, const struct lyd_node
*dnode
,
666 union nb_resource
*resource
)
668 /* TODO: implement me. */
672 static int isis_instance_default_information_originate_ipv4_always_delete(
673 enum nb_event event
, const struct lyd_node
*dnode
)
675 /* TODO: implement me. */
680 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/route-map
682 static int isis_instance_default_information_originate_ipv4_route_map_modify(
683 enum nb_event event
, const struct lyd_node
*dnode
,
684 union nb_resource
*resource
)
686 /* TODO: implement me. */
690 static int isis_instance_default_information_originate_ipv4_route_map_delete(
691 enum nb_event event
, const struct lyd_node
*dnode
)
693 /* TODO: implement me. */
698 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/metric
700 static int isis_instance_default_information_originate_ipv4_metric_modify(
701 enum nb_event event
, const struct lyd_node
*dnode
,
702 union nb_resource
*resource
)
704 /* TODO: implement me. */
708 static int isis_instance_default_information_originate_ipv4_metric_delete(
709 enum nb_event event
, const struct lyd_node
*dnode
)
711 /* TODO: implement me. */
716 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6
718 static int isis_instance_default_information_originate_ipv6_create(
719 enum nb_event event
, const struct lyd_node
*dnode
,
720 union nb_resource
*resource
)
722 /* TODO: implement me. */
726 static int isis_instance_default_information_originate_ipv6_delete(
727 enum nb_event event
, const struct lyd_node
*dnode
)
729 /* TODO: implement me. */
734 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/always
736 static int isis_instance_default_information_originate_ipv6_always_create(
737 enum nb_event event
, const struct lyd_node
*dnode
,
738 union nb_resource
*resource
)
740 /* TODO: implement me. */
744 static int isis_instance_default_information_originate_ipv6_always_delete(
745 enum nb_event event
, const struct lyd_node
*dnode
)
747 /* TODO: implement me. */
752 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/route-map
754 static int isis_instance_default_information_originate_ipv6_route_map_modify(
755 enum nb_event event
, const struct lyd_node
*dnode
,
756 union nb_resource
*resource
)
758 /* TODO: implement me. */
762 static int isis_instance_default_information_originate_ipv6_route_map_delete(
763 enum nb_event event
, const struct lyd_node
*dnode
)
765 /* TODO: implement me. */
770 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/metric
772 static int isis_instance_default_information_originate_ipv6_metric_modify(
773 enum nb_event event
, const struct lyd_node
*dnode
,
774 union nb_resource
*resource
)
776 /* TODO: implement me. */
780 static int isis_instance_default_information_originate_ipv6_metric_delete(
781 enum nb_event event
, const struct lyd_node
*dnode
)
783 /* TODO: implement me. */
788 * XPath: /frr-isisd:isis/instance/redistribute/ipv4
790 static int isis_instance_redistribute_ipv4_create(enum nb_event event
,
791 const struct lyd_node
*dnode
,
792 union nb_resource
*resource
)
794 /* TODO: implement me. */
798 static int isis_instance_redistribute_ipv4_delete(enum nb_event event
,
799 const struct lyd_node
*dnode
)
801 /* TODO: implement me. */
806 * XPath: /frr-isisd:isis/instance/redistribute/ipv4/route-map
809 isis_instance_redistribute_ipv4_route_map_modify(enum nb_event event
,
810 const struct lyd_node
*dnode
,
811 union nb_resource
*resource
)
813 /* TODO: implement me. */
818 isis_instance_redistribute_ipv4_route_map_delete(enum nb_event event
,
819 const struct lyd_node
*dnode
)
821 /* TODO: implement me. */
826 * XPath: /frr-isisd:isis/instance/redistribute/ipv4/metric
829 isis_instance_redistribute_ipv4_metric_modify(enum nb_event event
,
830 const struct lyd_node
*dnode
,
831 union nb_resource
*resource
)
833 /* TODO: implement me. */
838 isis_instance_redistribute_ipv4_metric_delete(enum nb_event event
,
839 const struct lyd_node
*dnode
)
841 /* TODO: implement me. */
846 * XPath: /frr-isisd:isis/instance/redistribute/ipv6
848 static int isis_instance_redistribute_ipv6_create(enum nb_event event
,
849 const struct lyd_node
*dnode
,
850 union nb_resource
*resource
)
852 /* TODO: implement me. */
856 static int isis_instance_redistribute_ipv6_delete(enum nb_event event
,
857 const struct lyd_node
*dnode
)
859 /* TODO: implement me. */
864 * XPath: /frr-isisd:isis/instance/redistribute/ipv6/route-map
867 isis_instance_redistribute_ipv6_route_map_modify(enum nb_event event
,
868 const struct lyd_node
*dnode
,
869 union nb_resource
*resource
)
871 /* TODO: implement me. */
876 isis_instance_redistribute_ipv6_route_map_delete(enum nb_event event
,
877 const struct lyd_node
*dnode
)
879 /* TODO: implement me. */
884 * XPath: /frr-isisd:isis/instance/redistribute/ipv6/metric
887 isis_instance_redistribute_ipv6_metric_modify(enum nb_event event
,
888 const struct lyd_node
*dnode
,
889 union nb_resource
*resource
)
891 /* TODO: implement me. */
896 isis_instance_redistribute_ipv6_metric_delete(enum nb_event event
,
897 const struct lyd_node
*dnode
)
899 /* TODO: implement me. */
904 * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-multicast
907 isis_instance_multi_topology_ipv4_multicast_create(enum nb_event event
,
908 const struct lyd_node
*dnode
,
909 union nb_resource
*resource
)
911 /* TODO: implement me. */
916 isis_instance_multi_topology_ipv4_multicast_delete(enum nb_event event
,
917 const struct lyd_node
*dnode
)
919 /* TODO: implement me. */
924 * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-multicast/overload
926 static int isis_instance_multi_topology_ipv4_multicast_overload_create(
927 enum nb_event event
, const struct lyd_node
*dnode
,
928 union nb_resource
*resource
)
930 /* TODO: implement me. */
934 static int isis_instance_multi_topology_ipv4_multicast_overload_delete(
935 enum nb_event event
, const struct lyd_node
*dnode
)
937 /* TODO: implement me. */
942 * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-management
944 static int isis_instance_multi_topology_ipv4_management_create(
945 enum nb_event event
, const struct lyd_node
*dnode
,
946 union nb_resource
*resource
)
948 /* TODO: implement me. */
952 static int isis_instance_multi_topology_ipv4_management_delete(
953 enum nb_event event
, const struct lyd_node
*dnode
)
955 /* TODO: implement me. */
960 * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-management/overload
962 static int isis_instance_multi_topology_ipv4_management_overload_create(
963 enum nb_event event
, const struct lyd_node
*dnode
,
964 union nb_resource
*resource
)
966 /* TODO: implement me. */
970 static int isis_instance_multi_topology_ipv4_management_overload_delete(
971 enum nb_event event
, const struct lyd_node
*dnode
)
973 /* TODO: implement me. */
978 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-unicast
981 isis_instance_multi_topology_ipv6_unicast_create(enum nb_event event
,
982 const struct lyd_node
*dnode
,
983 union nb_resource
*resource
)
985 /* TODO: implement me. */
990 isis_instance_multi_topology_ipv6_unicast_delete(enum nb_event event
,
991 const struct lyd_node
*dnode
)
993 /* TODO: implement me. */
998 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-unicast/overload
1000 static int isis_instance_multi_topology_ipv6_unicast_overload_create(
1001 enum nb_event event
, const struct lyd_node
*dnode
,
1002 union nb_resource
*resource
)
1004 /* TODO: implement me. */
1008 static int isis_instance_multi_topology_ipv6_unicast_overload_delete(
1009 enum nb_event event
, const struct lyd_node
*dnode
)
1011 /* TODO: implement me. */
1016 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-multicast
1019 isis_instance_multi_topology_ipv6_multicast_create(enum nb_event event
,
1020 const struct lyd_node
*dnode
,
1021 union nb_resource
*resource
)
1023 /* TODO: implement me. */
1028 isis_instance_multi_topology_ipv6_multicast_delete(enum nb_event event
,
1029 const struct lyd_node
*dnode
)
1031 /* TODO: implement me. */
1036 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-multicast/overload
1038 static int isis_instance_multi_topology_ipv6_multicast_overload_create(
1039 enum nb_event event
, const struct lyd_node
*dnode
,
1040 union nb_resource
*resource
)
1042 /* TODO: implement me. */
1046 static int isis_instance_multi_topology_ipv6_multicast_overload_delete(
1047 enum nb_event event
, const struct lyd_node
*dnode
)
1049 /* TODO: implement me. */
1054 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-management
1056 static int isis_instance_multi_topology_ipv6_management_create(
1057 enum nb_event event
, const struct lyd_node
*dnode
,
1058 union nb_resource
*resource
)
1060 /* TODO: implement me. */
1064 static int isis_instance_multi_topology_ipv6_management_delete(
1065 enum nb_event event
, const struct lyd_node
*dnode
)
1067 /* TODO: implement me. */
1072 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-management/overload
1074 static int isis_instance_multi_topology_ipv6_management_overload_create(
1075 enum nb_event event
, const struct lyd_node
*dnode
,
1076 union nb_resource
*resource
)
1078 /* TODO: implement me. */
1082 static int isis_instance_multi_topology_ipv6_management_overload_delete(
1083 enum nb_event event
, const struct lyd_node
*dnode
)
1085 /* TODO: implement me. */
1090 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-dstsrc
1093 isis_instance_multi_topology_ipv6_dstsrc_create(enum nb_event event
,
1094 const struct lyd_node
*dnode
,
1095 union nb_resource
*resource
)
1097 /* TODO: implement me. */
1102 isis_instance_multi_topology_ipv6_dstsrc_delete(enum nb_event event
,
1103 const struct lyd_node
*dnode
)
1105 /* TODO: implement me. */
1110 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-dstsrc/overload
1112 static int isis_instance_multi_topology_ipv6_dstsrc_overload_create(
1113 enum nb_event event
, const struct lyd_node
*dnode
,
1114 union nb_resource
*resource
)
1116 /* TODO: implement me. */
1120 static int isis_instance_multi_topology_ipv6_dstsrc_overload_delete(
1121 enum nb_event event
, const struct lyd_node
*dnode
)
1123 /* TODO: implement me. */
1128 * XPath: /frr-isisd:isis/instance/log-adjacency-changes
1131 isis_instance_log_adjacency_changes_create(enum nb_event event
,
1132 const struct lyd_node
*dnode
,
1133 union nb_resource
*resource
)
1135 /* TODO: implement me. */
1140 isis_instance_log_adjacency_changes_delete(enum nb_event event
,
1141 const struct lyd_node
*dnode
)
1143 /* TODO: implement me. */
1148 * XPath: /frr-isisd:isis/mpls-te
1150 static int isis_mpls_te_create(enum nb_event event
,
1151 const struct lyd_node
*dnode
,
1152 union nb_resource
*resource
)
1154 /* TODO: implement me. */
1158 static int isis_mpls_te_delete(enum nb_event event
,
1159 const struct lyd_node
*dnode
)
1161 /* TODO: implement me. */
1166 * XPath: /frr-isisd:isis/mpls-te/router-address
1168 static int isis_mpls_te_router_address_modify(enum nb_event event
,
1169 const struct lyd_node
*dnode
,
1170 union nb_resource
*resource
)
1172 /* TODO: implement me. */
1176 static int isis_mpls_te_router_address_delete(enum nb_event event
,
1177 const struct lyd_node
*dnode
)
1179 /* TODO: implement me. */
1184 * XPath: /frr-interface:lib/interface/frr-isisd:isis
1186 static int lib_interface_isis_create(enum nb_event event
,
1187 const struct lyd_node
*dnode
,
1188 union nb_resource
*resource
)
1190 struct isis_area
*area
;
1191 struct interface
*ifp
;
1192 struct isis_circuit
*circuit
;
1193 const char *area_tag
= yang_dnode_get_string(dnode
, "./area-tag");
1195 if (event
!= NB_EV_APPLY
)
1198 area
= isis_area_lookup(area_tag
);
1199 /* The area should have already be created. We are
1200 * setting the priority of the global isis area creation
1201 * slightly lower, so it should be executed first, but I
1202 * cannot rely on that so here I have to check.
1206 EC_LIB_NB_CB_CONFIG_APPLY
,
1207 "%s: attempt to create circuit for area %s before the area has been created",
1208 __func__
, area_tag
);
1212 ifp
= yang_dnode_get_entry(dnode
, true);
1213 circuit
= isis_circuit_create(area
, ifp
);
1214 assert(circuit
->state
== C_STATE_CONF
|| circuit
->state
== C_STATE_UP
);
1215 yang_dnode_set_entry(dnode
, circuit
);
1220 static int lib_interface_isis_delete(enum nb_event event
,
1221 const struct lyd_node
*dnode
)
1223 struct isis_circuit
*circuit
;
1225 if (event
!= NB_EV_APPLY
)
1228 circuit
= yang_dnode_get_entry(dnode
, true);
1230 return NB_ERR_INCONSISTENCY
;
1231 /* delete circuit through csm changes */
1232 switch (circuit
->state
) {
1234 isis_csm_state_change(IF_DOWN_FROM_Z
, circuit
,
1235 circuit
->interface
);
1236 isis_csm_state_change(ISIS_DISABLE
, circuit
, circuit
->area
);
1239 isis_csm_state_change(ISIS_DISABLE
, circuit
, circuit
->area
);
1242 isis_csm_state_change(IF_DOWN_FROM_Z
, circuit
,
1243 circuit
->interface
);
1251 * XPath: /frr-interface:lib/interface/frr-isisd:isis/area-tag
1253 static int lib_interface_isis_area_tag_modify(enum nb_event event
,
1254 const struct lyd_node
*dnode
,
1255 union nb_resource
*resource
)
1257 struct isis_circuit
*circuit
;
1258 struct interface
*ifp
;
1260 const char *area_tag
, *ifname
, *vrfname
;
1262 if (event
== NB_EV_VALIDATE
) {
1263 /* libyang doesn't like relative paths across module boundaries
1265 ifname
= yang_dnode_get_string(dnode
->parent
->parent
, "./name");
1266 vrfname
= yang_dnode_get_string(dnode
->parent
->parent
, "./vrf");
1267 vrf
= vrf_lookup_by_name(vrfname
);
1269 ifp
= if_lookup_by_name(ifname
, vrf
->vrf_id
);
1272 circuit
= circuit_lookup_by_ifp(ifp
, isis
->init_circ_list
);
1273 area_tag
= yang_dnode_get_string(dnode
, NULL
);
1274 if (circuit
&& circuit
->area
&& circuit
->area
->area_tag
1275 && strcmp(circuit
->area
->area_tag
, area_tag
)) {
1276 flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE
,
1277 "ISIS circuit is already defined on %s",
1278 circuit
->area
->area_tag
);
1279 return NB_ERR_VALIDATION
;
1287 * XPath: /frr-interface:lib/interface/frr-isisd:isis/circuit-type
1289 static int lib_interface_isis_circuit_type_modify(enum nb_event event
,
1290 const struct lyd_node
*dnode
,
1291 union nb_resource
*resource
)
1293 int circ_type
= yang_dnode_get_enum(dnode
, NULL
);
1294 struct isis_circuit
*circuit
;
1295 struct interface
*ifp
;
1297 const char *ifname
, *vrfname
;
1300 case NB_EV_VALIDATE
:
1301 /* libyang doesn't like relative paths across module boundaries
1303 ifname
= yang_dnode_get_string(dnode
->parent
->parent
, "./name");
1304 vrfname
= yang_dnode_get_string(dnode
->parent
->parent
, "./vrf");
1305 vrf
= vrf_lookup_by_name(vrfname
);
1307 ifp
= if_lookup_by_name(ifname
, vrf
->vrf_id
);
1310 circuit
= circuit_lookup_by_ifp(ifp
, isis
->init_circ_list
);
1311 if (circuit
&& circuit
->state
== C_STATE_UP
1312 && circuit
->area
->is_type
!= IS_LEVEL_1_AND_2
1313 && circuit
->area
->is_type
!= circ_type
) {
1314 flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE
,
1315 "Invalid circuit level for area %s",
1316 circuit
->area
->area_tag
);
1317 return NB_ERR_VALIDATION
;
1324 circuit
= yang_dnode_get_entry(dnode
, true);
1325 isis_circuit_is_type_set(circuit
, circ_type
);
1333 * XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv4-routing
1335 static int lib_interface_isis_ipv4_routing_create(enum nb_event event
,
1336 const struct lyd_node
*dnode
,
1337 union nb_resource
*resource
)
1340 struct isis_circuit
*circuit
;
1342 if (event
!= NB_EV_APPLY
)
1345 circuit
= yang_dnode_get_entry(dnode
, true);
1346 ipv6
= yang_dnode_exists(dnode
, "../ipv6-routing");
1347 isis_circuit_af_set(circuit
, true, ipv6
);
1352 static int lib_interface_isis_ipv4_routing_delete(enum nb_event event
,
1353 const struct lyd_node
*dnode
)
1356 struct isis_circuit
*circuit
;
1358 if (event
!= NB_EV_APPLY
)
1361 circuit
= yang_dnode_get_entry(dnode
, true);
1362 if (circuit
&& circuit
->area
) {
1363 ipv6
= yang_dnode_exists(dnode
, "../ipv6-routing");
1364 isis_circuit_af_set(circuit
, false, ipv6
);
1371 * XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv6-routing
1373 static int lib_interface_isis_ipv6_routing_create(enum nb_event event
,
1374 const struct lyd_node
*dnode
,
1375 union nb_resource
*resource
)
1378 struct isis_circuit
*circuit
;
1380 if (event
!= NB_EV_APPLY
)
1383 circuit
= yang_dnode_get_entry(dnode
, true);
1384 ipv4
= yang_dnode_exists(dnode
, "../ipv6-routing");
1385 isis_circuit_af_set(circuit
, ipv4
, true);
1390 static int lib_interface_isis_ipv6_routing_delete(enum nb_event event
,
1391 const struct lyd_node
*dnode
)
1394 struct isis_circuit
*circuit
;
1396 if (event
!= NB_EV_APPLY
)
1399 circuit
= yang_dnode_get_entry(dnode
, true);
1400 if (circuit
->area
) {
1401 ipv4
= yang_dnode_exists(dnode
, "../ipv4-routing");
1402 isis_circuit_af_set(circuit
, ipv4
, false);
1409 * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-1
1412 lib_interface_isis_csnp_interval_level_1_modify(enum nb_event event
,
1413 const struct lyd_node
*dnode
,
1414 union nb_resource
*resource
)
1416 /* TODO: implement me. */
1421 * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-2
1424 lib_interface_isis_csnp_interval_level_2_modify(enum nb_event event
,
1425 const struct lyd_node
*dnode
,
1426 union nb_resource
*resource
)
1428 /* TODO: implement me. */
1433 * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-1
1436 lib_interface_isis_psnp_interval_level_1_modify(enum nb_event event
,
1437 const struct lyd_node
*dnode
,
1438 union nb_resource
*resource
)
1440 /* TODO: implement me. */
1445 * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-2
1448 lib_interface_isis_psnp_interval_level_2_modify(enum nb_event event
,
1449 const struct lyd_node
*dnode
,
1450 union nb_resource
*resource
)
1452 /* TODO: implement me. */
1457 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/padding
1459 static int lib_interface_isis_hello_padding_modify(enum nb_event event
,
1460 const struct lyd_node
*dnode
,
1461 union nb_resource
*resource
)
1463 /* TODO: implement me. */
1468 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-1
1471 lib_interface_isis_hello_interval_level_1_modify(enum nb_event event
,
1472 const struct lyd_node
*dnode
,
1473 union nb_resource
*resource
)
1475 /* TODO: implement me. */
1480 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-2
1483 lib_interface_isis_hello_interval_level_2_modify(enum nb_event event
,
1484 const struct lyd_node
*dnode
,
1485 union nb_resource
*resource
)
1487 /* TODO: implement me. */
1492 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-1
1495 lib_interface_isis_hello_multiplier_level_1_modify(enum nb_event event
,
1496 const struct lyd_node
*dnode
,
1497 union nb_resource
*resource
)
1499 /* TODO: implement me. */
1504 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-2
1507 lib_interface_isis_hello_multiplier_level_2_modify(enum nb_event event
,
1508 const struct lyd_node
*dnode
,
1509 union nb_resource
*resource
)
1511 /* TODO: implement me. */
1516 * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric/level-1
1519 lib_interface_isis_metric_level_1_modify(enum nb_event event
,
1520 const struct lyd_node
*dnode
,
1521 union nb_resource
*resource
)
1523 /* TODO: implement me. */
1528 * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric/level-2
1531 lib_interface_isis_metric_level_2_modify(enum nb_event event
,
1532 const struct lyd_node
*dnode
,
1533 union nb_resource
*resource
)
1535 /* TODO: implement me. */
1540 * XPath: /frr-interface:lib/interface/frr-isisd:isis/priority/level-1
1543 lib_interface_isis_priority_level_1_modify(enum nb_event event
,
1544 const struct lyd_node
*dnode
,
1545 union nb_resource
*resource
)
1547 /* TODO: implement me. */
1552 * XPath: /frr-interface:lib/interface/frr-isisd:isis/priority/level-2
1555 lib_interface_isis_priority_level_2_modify(enum nb_event event
,
1556 const struct lyd_node
*dnode
,
1557 union nb_resource
*resource
)
1559 /* TODO: implement me. */
1564 * XPath: /frr-interface:lib/interface/frr-isisd:isis/network-type
1566 static int lib_interface_isis_network_type_modify(enum nb_event event
,
1567 const struct lyd_node
*dnode
,
1568 union nb_resource
*resource
)
1570 /* TODO: implement me. */
1574 static int lib_interface_isis_network_type_delete(enum nb_event event
,
1575 const struct lyd_node
*dnode
)
1577 /* TODO: implement me. */
1582 * XPath: /frr-interface:lib/interface/frr-isisd:isis/passive
1584 static int lib_interface_isis_passive_create(enum nb_event event
,
1585 const struct lyd_node
*dnode
,
1586 union nb_resource
*resource
)
1588 /* TODO: implement me. */
1592 static int lib_interface_isis_passive_delete(enum nb_event event
,
1593 const struct lyd_node
*dnode
)
1595 /* TODO: implement me. */
1600 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password
1602 static int lib_interface_isis_password_create(enum nb_event event
,
1603 const struct lyd_node
*dnode
,
1604 union nb_resource
*resource
)
1606 /* TODO: implement me. */
1610 static int lib_interface_isis_password_delete(enum nb_event event
,
1611 const struct lyd_node
*dnode
)
1613 /* TODO: implement me. */
1618 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password/password
1621 lib_interface_isis_password_password_modify(enum nb_event event
,
1622 const struct lyd_node
*dnode
,
1623 union nb_resource
*resource
)
1625 /* TODO: implement me. */
1630 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password/password-type
1633 lib_interface_isis_password_password_type_modify(enum nb_event event
,
1634 const struct lyd_node
*dnode
,
1635 union nb_resource
*resource
)
1637 /* TODO: implement me. */
1643 * /frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake
1645 static int lib_interface_isis_disable_three_way_handshake_create(
1646 enum nb_event event
, const struct lyd_node
*dnode
,
1647 union nb_resource
*resource
)
1649 /* TODO: implement me. */
1653 static int lib_interface_isis_disable_three_way_handshake_delete(
1654 enum nb_event event
, const struct lyd_node
*dnode
)
1656 /* TODO: implement me. */
1662 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast
1664 static int lib_interface_isis_multi_topology_ipv4_unicast_modify(
1665 enum nb_event event
, const struct lyd_node
*dnode
,
1666 union nb_resource
*resource
)
1668 /* TODO: implement me. */
1674 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-multicast
1676 static int lib_interface_isis_multi_topology_ipv4_multicast_modify(
1677 enum nb_event event
, const struct lyd_node
*dnode
,
1678 union nb_resource
*resource
)
1680 /* TODO: implement me. */
1686 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-management
1688 static int lib_interface_isis_multi_topology_ipv4_management_modify(
1689 enum nb_event event
, const struct lyd_node
*dnode
,
1690 union nb_resource
*resource
)
1692 /* TODO: implement me. */
1698 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-unicast
1700 static int lib_interface_isis_multi_topology_ipv6_unicast_modify(
1701 enum nb_event event
, const struct lyd_node
*dnode
,
1702 union nb_resource
*resource
)
1704 /* TODO: implement me. */
1710 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-multicast
1712 static int lib_interface_isis_multi_topology_ipv6_multicast_modify(
1713 enum nb_event event
, const struct lyd_node
*dnode
,
1714 union nb_resource
*resource
)
1716 /* TODO: implement me. */
1722 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-management
1724 static int lib_interface_isis_multi_topology_ipv6_management_modify(
1725 enum nb_event event
, const struct lyd_node
*dnode
,
1726 union nb_resource
*resource
)
1728 /* TODO: implement me. */
1733 * XPath: /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-dstsrc
1735 static int lib_interface_isis_multi_topology_ipv6_dstsrc_modify(
1736 enum nb_event event
, const struct lyd_node
*dnode
,
1737 union nb_resource
*resource
)
1739 /* TODO: implement me. */
1743 /* clang-format off */
1744 const struct frr_yang_module_info frr_isisd_info
= {
1745 .name
= "frr-isisd",
1748 .xpath
= "/frr-isisd:isis/instance",
1749 .cbs
.create
= isis_instance_create
,
1750 .cbs
.delete = isis_instance_delete
,
1751 .cbs
.cli_show
= cli_show_router_isis
,
1752 .priority
= NB_DFLT_PRIORITY
- 1,
1755 .xpath
= "/frr-isisd:isis/instance/is-type",
1756 .cbs
.modify
= isis_instance_is_type_modify
,
1757 .cbs
.cli_show
= cli_show_isis_is_type
,
1760 .xpath
= "/frr-isisd:isis/instance/area-address",
1761 .cbs
.create
= isis_instance_area_address_create
,
1762 .cbs
.delete = isis_instance_area_address_delete
,
1763 .cbs
.cli_show
= cli_show_isis_area_address
,
1766 .xpath
= "/frr-isisd:isis/instance/dynamic-hostname",
1767 .cbs
.modify
= isis_instance_dynamic_hostname_modify
,
1768 .cbs
.cli_show
= cli_show_isis_dynamic_hostname
,
1771 .xpath
= "/frr-isisd:isis/instance/attached",
1772 .cbs
.create
= isis_instance_attached_create
,
1773 .cbs
.delete = isis_instance_attached_delete
,
1774 .cbs
.cli_show
= cli_show_isis_attached
,
1777 .xpath
= "/frr-isisd:isis/instance/overload",
1778 .cbs
.create
= isis_instance_overload_create
,
1779 .cbs
.delete = isis_instance_overload_delete
,
1780 .cbs
.cli_show
= cli_show_isis_overload
,
1783 .xpath
= "/frr-isisd:isis/instance/metric-style",
1784 .cbs
.modify
= isis_instance_metric_style_modify
,
1785 .cbs
.cli_show
= cli_show_isis_metric_style
,
1788 .xpath
= "/frr-isisd:isis/instance/purge-originator",
1789 .cbs
.create
= isis_instance_purge_originator_create
,
1790 .cbs
.delete = isis_instance_purge_originator_delete
,
1793 .xpath
= "/frr-isisd:isis/instance/lsp/mtu",
1794 .cbs
.modify
= isis_instance_lsp_mtu_modify
,
1797 .xpath
= "/frr-isisd:isis/instance/lsp/refresh-interval/level-1",
1798 .cbs
.modify
= isis_instance_lsp_refresh_interval_level_1_modify
,
1801 .xpath
= "/frr-isisd:isis/instance/lsp/refresh-interval/level-2",
1802 .cbs
.modify
= isis_instance_lsp_refresh_interval_level_2_modify
,
1805 .xpath
= "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-1",
1806 .cbs
.modify
= isis_instance_lsp_maximum_lifetime_level_1_modify
,
1809 .xpath
= "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-2",
1810 .cbs
.modify
= isis_instance_lsp_maximum_lifetime_level_2_modify
,
1813 .xpath
= "/frr-isisd:isis/instance/lsp/generation-interval/level-1",
1814 .cbs
.modify
= isis_instance_lsp_generation_interval_level_1_modify
,
1817 .xpath
= "/frr-isisd:isis/instance/lsp/generation-interval/level-2",
1818 .cbs
.modify
= isis_instance_lsp_generation_interval_level_2_modify
,
1821 .xpath
= "/frr-isisd:isis/instance/spf/ietf-backoff-delay",
1822 .cbs
.create
= isis_instance_spf_ietf_backoff_delay_create
,
1823 .cbs
.delete = isis_instance_spf_ietf_backoff_delay_delete
,
1826 .xpath
= "/frr-isisd:isis/instance/spf/ietf-backoff-delay/init-delay",
1827 .cbs
.modify
= isis_instance_spf_ietf_backoff_delay_init_delay_modify
,
1830 .xpath
= "/frr-isisd:isis/instance/spf/ietf-backoff-delay/short-delay",
1831 .cbs
.modify
= isis_instance_spf_ietf_backoff_delay_short_delay_modify
,
1834 .xpath
= "/frr-isisd:isis/instance/spf/ietf-backoff-delay/long-delay",
1835 .cbs
.modify
= isis_instance_spf_ietf_backoff_delay_long_delay_modify
,
1838 .xpath
= "/frr-isisd:isis/instance/spf/ietf-backoff-delay/hold-down",
1839 .cbs
.modify
= isis_instance_spf_ietf_backoff_delay_hold_down_modify
,
1842 .xpath
= "/frr-isisd:isis/instance/spf/ietf-backoff-delay/time-to-learn",
1843 .cbs
.modify
= isis_instance_spf_ietf_backoff_delay_time_to_learn_modify
,
1846 .xpath
= "/frr-isisd:isis/instance/spf/minimum-interval/level-1",
1847 .cbs
.modify
= isis_instance_spf_minimum_interval_level_1_modify
,
1850 .xpath
= "/frr-isisd:isis/instance/spf/minimum-interval/level-2",
1851 .cbs
.modify
= isis_instance_spf_minimum_interval_level_2_modify
,
1854 .xpath
= "/frr-isisd:isis/instance/area-password",
1855 .cbs
.create
= isis_instance_area_password_create
,
1856 .cbs
.delete = isis_instance_area_password_delete
,
1859 .xpath
= "/frr-isisd:isis/instance/area-password/password",
1860 .cbs
.modify
= isis_instance_area_password_password_modify
,
1863 .xpath
= "/frr-isisd:isis/instance/area-password/password-type",
1864 .cbs
.modify
= isis_instance_area_password_password_type_modify
,
1867 .xpath
= "/frr-isisd:isis/instance/area-password/authenticate-snp",
1868 .cbs
.modify
= isis_instance_area_password_authenticate_snp_modify
,
1871 .xpath
= "/frr-isisd:isis/instance/domain-password",
1872 .cbs
.create
= isis_instance_domain_password_create
,
1873 .cbs
.delete = isis_instance_domain_password_delete
,
1876 .xpath
= "/frr-isisd:isis/instance/domain-password/password",
1877 .cbs
.modify
= isis_instance_domain_password_password_modify
,
1880 .xpath
= "/frr-isisd:isis/instance/domain-password/password-type",
1881 .cbs
.modify
= isis_instance_domain_password_password_type_modify
,
1884 .xpath
= "/frr-isisd:isis/instance/domain-password/authenticate-snp",
1885 .cbs
.modify
= isis_instance_domain_password_authenticate_snp_modify
,
1888 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv4",
1889 .cbs
.create
= isis_instance_default_information_originate_ipv4_create
,
1890 .cbs
.delete = isis_instance_default_information_originate_ipv4_delete
,
1893 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv4/always",
1894 .cbs
.create
= isis_instance_default_information_originate_ipv4_always_create
,
1895 .cbs
.delete = isis_instance_default_information_originate_ipv4_always_delete
,
1898 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv4/route-map",
1899 .cbs
.modify
= isis_instance_default_information_originate_ipv4_route_map_modify
,
1900 .cbs
.delete = isis_instance_default_information_originate_ipv4_route_map_delete
,
1903 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv4/metric",
1904 .cbs
.modify
= isis_instance_default_information_originate_ipv4_metric_modify
,
1905 .cbs
.delete = isis_instance_default_information_originate_ipv4_metric_delete
,
1908 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv6",
1909 .cbs
.create
= isis_instance_default_information_originate_ipv6_create
,
1910 .cbs
.delete = isis_instance_default_information_originate_ipv6_delete
,
1913 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv6/always",
1914 .cbs
.create
= isis_instance_default_information_originate_ipv6_always_create
,
1915 .cbs
.delete = isis_instance_default_information_originate_ipv6_always_delete
,
1918 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv6/route-map",
1919 .cbs
.modify
= isis_instance_default_information_originate_ipv6_route_map_modify
,
1920 .cbs
.delete = isis_instance_default_information_originate_ipv6_route_map_delete
,
1923 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv6/metric",
1924 .cbs
.modify
= isis_instance_default_information_originate_ipv6_metric_modify
,
1925 .cbs
.delete = isis_instance_default_information_originate_ipv6_metric_delete
,
1928 .xpath
= "/frr-isisd:isis/instance/redistribute/ipv4",
1929 .cbs
.create
= isis_instance_redistribute_ipv4_create
,
1930 .cbs
.delete = isis_instance_redistribute_ipv4_delete
,
1933 .xpath
= "/frr-isisd:isis/instance/redistribute/ipv4/route-map",
1934 .cbs
.modify
= isis_instance_redistribute_ipv4_route_map_modify
,
1935 .cbs
.delete = isis_instance_redistribute_ipv4_route_map_delete
,
1938 .xpath
= "/frr-isisd:isis/instance/redistribute/ipv4/metric",
1939 .cbs
.modify
= isis_instance_redistribute_ipv4_metric_modify
,
1940 .cbs
.delete = isis_instance_redistribute_ipv4_metric_delete
,
1943 .xpath
= "/frr-isisd:isis/instance/redistribute/ipv6",
1944 .cbs
.create
= isis_instance_redistribute_ipv6_create
,
1945 .cbs
.delete = isis_instance_redistribute_ipv6_delete
,
1948 .xpath
= "/frr-isisd:isis/instance/redistribute/ipv6/route-map",
1949 .cbs
.modify
= isis_instance_redistribute_ipv6_route_map_modify
,
1950 .cbs
.delete = isis_instance_redistribute_ipv6_route_map_delete
,
1953 .xpath
= "/frr-isisd:isis/instance/redistribute/ipv6/metric",
1954 .cbs
.modify
= isis_instance_redistribute_ipv6_metric_modify
,
1955 .cbs
.delete = isis_instance_redistribute_ipv6_metric_delete
,
1958 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv4-multicast",
1959 .cbs
.create
= isis_instance_multi_topology_ipv4_multicast_create
,
1960 .cbs
.delete = isis_instance_multi_topology_ipv4_multicast_delete
,
1963 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv4-multicast/overload",
1964 .cbs
.create
= isis_instance_multi_topology_ipv4_multicast_overload_create
,
1965 .cbs
.delete = isis_instance_multi_topology_ipv4_multicast_overload_delete
,
1968 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv4-management",
1969 .cbs
.create
= isis_instance_multi_topology_ipv4_management_create
,
1970 .cbs
.delete = isis_instance_multi_topology_ipv4_management_delete
,
1973 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv4-management/overload",
1974 .cbs
.create
= isis_instance_multi_topology_ipv4_management_overload_create
,
1975 .cbs
.delete = isis_instance_multi_topology_ipv4_management_overload_delete
,
1978 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-unicast",
1979 .cbs
.create
= isis_instance_multi_topology_ipv6_unicast_create
,
1980 .cbs
.delete = isis_instance_multi_topology_ipv6_unicast_delete
,
1983 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-unicast/overload",
1984 .cbs
.create
= isis_instance_multi_topology_ipv6_unicast_overload_create
,
1985 .cbs
.delete = isis_instance_multi_topology_ipv6_unicast_overload_delete
,
1988 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-multicast",
1989 .cbs
.create
= isis_instance_multi_topology_ipv6_multicast_create
,
1990 .cbs
.delete = isis_instance_multi_topology_ipv6_multicast_delete
,
1993 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-multicast/overload",
1994 .cbs
.create
= isis_instance_multi_topology_ipv6_multicast_overload_create
,
1995 .cbs
.delete = isis_instance_multi_topology_ipv6_multicast_overload_delete
,
1998 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-management",
1999 .cbs
.create
= isis_instance_multi_topology_ipv6_management_create
,
2000 .cbs
.delete = isis_instance_multi_topology_ipv6_management_delete
,
2003 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-management/overload",
2004 .cbs
.create
= isis_instance_multi_topology_ipv6_management_overload_create
,
2005 .cbs
.delete = isis_instance_multi_topology_ipv6_management_overload_delete
,
2008 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-dstsrc",
2009 .cbs
.create
= isis_instance_multi_topology_ipv6_dstsrc_create
,
2010 .cbs
.delete = isis_instance_multi_topology_ipv6_dstsrc_delete
,
2013 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-dstsrc/overload",
2014 .cbs
.create
= isis_instance_multi_topology_ipv6_dstsrc_overload_create
,
2015 .cbs
.delete = isis_instance_multi_topology_ipv6_dstsrc_overload_delete
,
2018 .xpath
= "/frr-isisd:isis/instance/log-adjacency-changes",
2019 .cbs
.create
= isis_instance_log_adjacency_changes_create
,
2020 .cbs
.delete = isis_instance_log_adjacency_changes_delete
,
2023 .xpath
= "/frr-isisd:isis/mpls-te",
2024 .cbs
.create
= isis_mpls_te_create
,
2025 .cbs
.delete = isis_mpls_te_delete
,
2028 .xpath
= "/frr-isisd:isis/mpls-te/router-address",
2029 .cbs
.modify
= isis_mpls_te_router_address_modify
,
2030 .cbs
.delete = isis_mpls_te_router_address_delete
,
2033 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis",
2034 .cbs
.create
= lib_interface_isis_create
,
2035 .cbs
.delete = lib_interface_isis_delete
,
2038 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/area-tag",
2039 .cbs
.modify
= lib_interface_isis_area_tag_modify
,
2042 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/circuit-type",
2043 .cbs
.modify
= lib_interface_isis_circuit_type_modify
,
2046 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/ipv4-routing",
2047 .cbs
.create
= lib_interface_isis_ipv4_routing_create
,
2048 .cbs
.delete = lib_interface_isis_ipv4_routing_delete
,
2049 .cbs
.cli_show
= cli_show_ip_isis_ipv4
,
2052 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/ipv6-routing",
2053 .cbs
.create
= lib_interface_isis_ipv6_routing_create
,
2054 .cbs
.delete = lib_interface_isis_ipv6_routing_delete
,
2055 .cbs
.cli_show
= cli_show_ip_isis_ipv6
,
2058 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-1",
2059 .cbs
.modify
= lib_interface_isis_csnp_interval_level_1_modify
,
2062 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-2",
2063 .cbs
.modify
= lib_interface_isis_csnp_interval_level_2_modify
,
2066 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-1",
2067 .cbs
.modify
= lib_interface_isis_psnp_interval_level_1_modify
,
2070 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-2",
2071 .cbs
.modify
= lib_interface_isis_psnp_interval_level_2_modify
,
2074 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/hello/padding",
2075 .cbs
.modify
= lib_interface_isis_hello_padding_modify
,
2078 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-1",
2079 .cbs
.modify
= lib_interface_isis_hello_interval_level_1_modify
,
2082 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-2",
2083 .cbs
.modify
= lib_interface_isis_hello_interval_level_2_modify
,
2086 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-1",
2087 .cbs
.modify
= lib_interface_isis_hello_multiplier_level_1_modify
,
2090 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-2",
2091 .cbs
.modify
= lib_interface_isis_hello_multiplier_level_2_modify
,
2094 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/metric/level-1",
2095 .cbs
.modify
= lib_interface_isis_metric_level_1_modify
,
2098 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/metric/level-2",
2099 .cbs
.modify
= lib_interface_isis_metric_level_2_modify
,
2102 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/priority/level-1",
2103 .cbs
.modify
= lib_interface_isis_priority_level_1_modify
,
2106 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/priority/level-2",
2107 .cbs
.modify
= lib_interface_isis_priority_level_2_modify
,
2110 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/network-type",
2111 .cbs
.modify
= lib_interface_isis_network_type_modify
,
2112 .cbs
.delete = lib_interface_isis_network_type_delete
,
2115 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/passive",
2116 .cbs
.create
= lib_interface_isis_passive_create
,
2117 .cbs
.delete = lib_interface_isis_passive_delete
,
2120 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/password",
2121 .cbs
.create
= lib_interface_isis_password_create
,
2122 .cbs
.delete = lib_interface_isis_password_delete
,
2125 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/password/password",
2126 .cbs
.modify
= lib_interface_isis_password_password_modify
,
2129 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/password/password-type",
2130 .cbs
.modify
= lib_interface_isis_password_password_type_modify
,
2133 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake",
2134 .cbs
.create
= lib_interface_isis_disable_three_way_handshake_create
,
2135 .cbs
.delete = lib_interface_isis_disable_three_way_handshake_delete
,
2138 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast",
2139 .cbs
.modify
= lib_interface_isis_multi_topology_ipv4_unicast_modify
,
2142 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-multicast",
2143 .cbs
.modify
= lib_interface_isis_multi_topology_ipv4_multicast_modify
,
2146 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-management",
2147 .cbs
.modify
= lib_interface_isis_multi_topology_ipv4_management_modify
,
2150 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-unicast",
2151 .cbs
.modify
= lib_interface_isis_multi_topology_ipv6_unicast_modify
,
2154 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-multicast",
2155 .cbs
.modify
= lib_interface_isis_multi_topology_ipv6_multicast_modify
,
2158 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-management",
2159 .cbs
.modify
= lib_interface_isis_multi_topology_ipv6_management_modify
,
2162 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-dstsrc",
2163 .cbs
.modify
= lib_interface_isis_multi_topology_ipv6_dstsrc_modify
,