]> git.proxmox.com Git - mirror_frr.git/blame - isisd/isis_northbound.c
isisd: retrofit the 'net' command
[mirror_frr.git] / isisd / isis_northbound.c
CommitLineData
20bd27e2
EDP
1/*
2 * Copyright (C) 2001,2002 Sampo Saaristo
3 * Tampere University of Technology
4 * Institute of Communications Engineering
5 * Copyright (C) 2018 Volta Networks
6 * Emanuele Di Pascale
7 *
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)
11 * any later version.
12 *
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
16 * more details.
17 *
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
21 */
22
23#include <zebra.h>
24#include "northbound.h"
25#include "libfrr.h"
26#include "linklist.h"
27#include "log.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"
48#include "lib/vrf.h"
49
50/*
51 * XPath: /frr-isisd:isis/instance
52 */
53static int isis_instance_create(enum nb_event event,
54 const struct lyd_node *dnode,
55 union nb_resource *resource)
56{
aaf2fd21
EDP
57 struct isis_area *area;
58 const char *area_tag;
59
60 if (event != NB_EV_APPLY)
61 return NB_OK;
62
63 area_tag = yang_dnode_get_string(dnode, "./area-tag");
64 area = isis_area_lookup(area_tag);
65 if (area)
66 return NB_ERR_INCONSISTENCY;
67
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);
71
20bd27e2
EDP
72 return NB_OK;
73}
74
75static int isis_instance_delete(enum nb_event event,
76 const struct lyd_node *dnode)
77{
aaf2fd21
EDP
78 const char *area_tag;
79
80 if (event != NB_EV_APPLY)
81 return NB_OK;
82
83 area_tag = yang_dnode_get_string(dnode, "./area-tag");
84 isis_area_destroy(area_tag);
85
20bd27e2
EDP
86 return NB_OK;
87}
88
89/*
90 * XPath: /frr-isisd:isis/instance/is-type
91 */
92static int isis_instance_is_type_modify(enum nb_event event,
93 const struct lyd_node *dnode,
94 union nb_resource *resource)
95{
aaf2fd21
EDP
96 struct isis_area *area;
97 int type;
98
99 if (event != NB_EV_APPLY)
100 return NB_OK;
101
102 area = yang_dnode_get_entry(dnode, true);
103 type = yang_dnode_get_enum(dnode, NULL);
104 isis_area_is_type_set(area, type);
105
20bd27e2
EDP
106 return NB_OK;
107}
108
109/*
110 * XPath: /frr-isisd:isis/instance/area-address
111 */
112static int isis_instance_area_address_create(enum nb_event event,
113 const struct lyd_node *dnode,
114 union nb_resource *resource)
115{
f084ea55
EDP
116 struct isis_area *area;
117 struct area_addr addr, *addrr = NULL, *addrp = NULL;
118 struct listnode *node;
119 uint8_t buff[255];
120 const char *net_title = yang_dnode_get_string(dnode, NULL);
121
122 switch (event) {
123 case NB_EV_VALIDATE:
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) {
127 flog_warn(
128 EC_LIB_NB_CB_CONFIG_VALIDATE,
129 "nsel byte (last byte) in area address must be 0");
130 return NB_ERR_VALIDATION;
131 }
132 if (isis->sysid_set) {
133 /* Check that the SystemID portions match */
134 if (memcmp(isis->sysid, GETSYSID((&addr)),
135 ISIS_SYS_ID_LEN)) {
136 flog_warn(
137 EC_LIB_NB_CB_CONFIG_VALIDATE,
138 "System ID must not change when defining additional area addresses");
139 return NB_ERR_VALIDATION;
140 }
141 }
142 break;
143 case NB_EV_PREPARE:
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;
148 break;
149 case NB_EV_ABORT:
150 XFREE(MTYPE_ISIS_AREA_ADDR, resource->ptr);
151 break;
152 case NB_EV_APPLY:
153 area = yang_dnode_get_entry(dnode, true);
154 addrr = resource->ptr;
155
156 if (isis->sysid_set == 0) {
157 /*
158 * First area address - get the SystemID for this router
159 */
160 memcpy(isis->sysid, GETSYSID(addrr), ISIS_SYS_ID_LEN);
161 isis->sysid_set = 1;
162 } else {
163 /* check that we don't already have this address */
164 for (ALL_LIST_ELEMENTS_RO(area->area_addrs, node,
165 addrp)) {
166 if ((addrp->addr_len + ISIS_SYS_ID_LEN
167 + ISIS_NSEL_LEN)
168 != (addrr->addr_len))
169 continue;
170 if (!memcmp(addrp->area_addr, addrr->area_addr,
171 addrr->addr_len)) {
172 XFREE(MTYPE_ISIS_AREA_ADDR, addrr);
173 return NB_OK; /* silent fail */
174 }
175 }
176 }
177
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);
182
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);
189 }
190 break;
191 }
192
20bd27e2
EDP
193 return NB_OK;
194}
195
196static int isis_instance_area_address_delete(enum nb_event event,
197 const struct lyd_node *dnode)
198{
f084ea55
EDP
199 struct area_addr addr, *addrp = NULL;
200 struct listnode *node;
201 uint8_t buff[255];
202 struct isis_area *area;
203 const char *net_title;
204
205 if (event != NB_EV_APPLY)
206 return NB_OK;
207
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))
215 break;
216 }
217 if (!addrp)
218 return NB_ERR_INCONSISTENCY;
219
220 listnode_delete(area->area_addrs, addrp);
221 XFREE(MTYPE_ISIS_AREA_ADDR, addrp);
222 /*
223 * Last area address - reset the SystemID for this router
224 */
225 if (listcount(area->area_addrs) == 0) {
226 memset(isis->sysid, 0, ISIS_SYS_ID_LEN);
227 isis->sysid_set = 0;
228 if (isis->debugs & DEBUG_EVENTS)
229 zlog_debug("Router has no SystemID");
230 }
231
20bd27e2
EDP
232 return NB_OK;
233}
234
235/*
236 * XPath: /frr-isisd:isis/instance/dynamic-hostname
237 */
238static int isis_instance_dynamic_hostname_modify(enum nb_event event,
239 const struct lyd_node *dnode,
240 union nb_resource *resource)
241{
242 /* TODO: implement me. */
243 return NB_OK;
244}
245
246/*
247 * XPath: /frr-isisd:isis/instance/attached
248 */
249static int isis_instance_attached_create(enum nb_event event,
250 const struct lyd_node *dnode,
251 union nb_resource *resource)
252{
253 /* TODO: implement me. */
254 return NB_OK;
255}
256
257static int isis_instance_attached_delete(enum nb_event event,
258 const struct lyd_node *dnode)
259{
260 /* TODO: implement me. */
261 return NB_OK;
262}
263
264/*
265 * XPath: /frr-isisd:isis/instance/overload
266 */
267static int isis_instance_overload_create(enum nb_event event,
268 const struct lyd_node *dnode,
269 union nb_resource *resource)
270{
271 /* TODO: implement me. */
272 return NB_OK;
273}
274
275static int isis_instance_overload_delete(enum nb_event event,
276 const struct lyd_node *dnode)
277{
278 /* TODO: implement me. */
279 return NB_OK;
280}
281
282/*
283 * XPath: /frr-isisd:isis/instance/metric-style
284 */
285static int isis_instance_metric_style_modify(enum nb_event event,
286 const struct lyd_node *dnode,
287 union nb_resource *resource)
288{
289 /* TODO: implement me. */
290 return NB_OK;
291}
292
293/*
294 * XPath: /frr-isisd:isis/instance/purge-originator
295 */
296static int isis_instance_purge_originator_create(enum nb_event event,
297 const struct lyd_node *dnode,
298 union nb_resource *resource)
299{
300 /* TODO: implement me. */
301 return NB_OK;
302}
303
304static int isis_instance_purge_originator_delete(enum nb_event event,
305 const struct lyd_node *dnode)
306{
307 /* TODO: implement me. */
308 return NB_OK;
309}
310
311/*
312 * XPath: /frr-isisd:isis/instance/lsp/mtu
313 */
314static int isis_instance_lsp_mtu_modify(enum nb_event event,
315 const struct lyd_node *dnode,
316 union nb_resource *resource)
317{
318 /* TODO: implement me. */
319 return NB_OK;
320}
321
322/*
323 * XPath: /frr-isisd:isis/instance/lsp/refresh-interval/level-1
324 */
325static int
326isis_instance_lsp_refresh_interval_level_1_modify(enum nb_event event,
327 const struct lyd_node *dnode,
328 union nb_resource *resource)
329{
330 /* TODO: implement me. */
331 return NB_OK;
332}
333
334/*
335 * XPath: /frr-isisd:isis/instance/lsp/refresh-interval/level-2
336 */
337static int
338isis_instance_lsp_refresh_interval_level_2_modify(enum nb_event event,
339 const struct lyd_node *dnode,
340 union nb_resource *resource)
341{
342 /* TODO: implement me. */
343 return NB_OK;
344}
345
346/*
347 * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-1
348 */
349static int
350isis_instance_lsp_maximum_lifetime_level_1_modify(enum nb_event event,
351 const struct lyd_node *dnode,
352 union nb_resource *resource)
353{
354 /* TODO: implement me. */
355 return NB_OK;
356}
357
358/*
359 * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-2
360 */
361static int
362isis_instance_lsp_maximum_lifetime_level_2_modify(enum nb_event event,
363 const struct lyd_node *dnode,
364 union nb_resource *resource)
365{
366 /* TODO: implement me. */
367 return NB_OK;
368}
369
370/*
371 * XPath: /frr-isisd:isis/instance/lsp/generation-interval/level-1
372 */
373static int isis_instance_lsp_generation_interval_level_1_modify(
374 enum nb_event event, const struct lyd_node *dnode,
375 union nb_resource *resource)
376{
377 /* TODO: implement me. */
378 return NB_OK;
379}
380
381/*
382 * XPath: /frr-isisd:isis/instance/lsp/generation-interval/level-2
383 */
384static int isis_instance_lsp_generation_interval_level_2_modify(
385 enum nb_event event, const struct lyd_node *dnode,
386 union nb_resource *resource)
387{
388 /* TODO: implement me. */
389 return NB_OK;
390}
391
392/*
393 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay
394 */
395static int
396isis_instance_spf_ietf_backoff_delay_create(enum nb_event event,
397 const struct lyd_node *dnode,
398 union nb_resource *resource)
399{
400 /* TODO: implement me. */
401 return NB_OK;
402}
403
404static int
405isis_instance_spf_ietf_backoff_delay_delete(enum nb_event event,
406 const struct lyd_node *dnode)
407{
408 /* TODO: implement me. */
409 return NB_OK;
410}
411
412/*
413 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/init-delay
414 */
415static int isis_instance_spf_ietf_backoff_delay_init_delay_modify(
416 enum nb_event event, const struct lyd_node *dnode,
417 union nb_resource *resource)
418{
419 /* TODO: implement me. */
420 return NB_OK;
421}
422
423/*
424 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/short-delay
425 */
426static int isis_instance_spf_ietf_backoff_delay_short_delay_modify(
427 enum nb_event event, const struct lyd_node *dnode,
428 union nb_resource *resource)
429{
430 /* TODO: implement me. */
431 return NB_OK;
432}
433
434/*
435 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/long-delay
436 */
437static int isis_instance_spf_ietf_backoff_delay_long_delay_modify(
438 enum nb_event event, const struct lyd_node *dnode,
439 union nb_resource *resource)
440{
441 /* TODO: implement me. */
442 return NB_OK;
443}
444
445/*
446 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/hold-down
447 */
448static int isis_instance_spf_ietf_backoff_delay_hold_down_modify(
449 enum nb_event event, const struct lyd_node *dnode,
450 union nb_resource *resource)
451{
452 /* TODO: implement me. */
453 return NB_OK;
454}
455
456/*
457 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/time-to-learn
458 */
459static int isis_instance_spf_ietf_backoff_delay_time_to_learn_modify(
460 enum nb_event event, const struct lyd_node *dnode,
461 union nb_resource *resource)
462{
463 /* TODO: implement me. */
464 return NB_OK;
465}
466
467/*
468 * XPath: /frr-isisd:isis/instance/spf/minimum-interval/level-1
469 */
470static int
471isis_instance_spf_minimum_interval_level_1_modify(enum nb_event event,
472 const struct lyd_node *dnode,
473 union nb_resource *resource)
474{
475 /* TODO: implement me. */
476 return NB_OK;
477}
478
479/*
480 * XPath: /frr-isisd:isis/instance/spf/minimum-interval/level-2
481 */
482static int
483isis_instance_spf_minimum_interval_level_2_modify(enum nb_event event,
484 const struct lyd_node *dnode,
485 union nb_resource *resource)
486{
487 /* TODO: implement me. */
488 return NB_OK;
489}
490
491/*
492 * XPath: /frr-isisd:isis/instance/area-password
493 */
494static int isis_instance_area_password_create(enum nb_event event,
495 const struct lyd_node *dnode,
496 union nb_resource *resource)
497{
498 /* TODO: implement me. */
499 return NB_OK;
500}
501
502static int isis_instance_area_password_delete(enum nb_event event,
503 const struct lyd_node *dnode)
504{
505 /* TODO: implement me. */
506 return NB_OK;
507}
508
509/*
510 * XPath: /frr-isisd:isis/instance/area-password/password
511 */
512static int
513isis_instance_area_password_password_modify(enum nb_event event,
514 const struct lyd_node *dnode,
515 union nb_resource *resource)
516{
517 /* TODO: implement me. */
518 return NB_OK;
519}
520
521/*
522 * XPath: /frr-isisd:isis/instance/area-password/password-type
523 */
524static int
525isis_instance_area_password_password_type_modify(enum nb_event event,
526 const struct lyd_node *dnode,
527 union nb_resource *resource)
528{
529 /* TODO: implement me. */
530 return NB_OK;
531}
532
533/*
534 * XPath: /frr-isisd:isis/instance/area-password/authenticate-snp
535 */
536static int isis_instance_area_password_authenticate_snp_modify(
537 enum nb_event event, const struct lyd_node *dnode,
538 union nb_resource *resource)
539{
540 /* TODO: implement me. */
541 return NB_OK;
542}
543
544/*
545 * XPath: /frr-isisd:isis/instance/domain-password
546 */
547static int isis_instance_domain_password_create(enum nb_event event,
548 const struct lyd_node *dnode,
549 union nb_resource *resource)
550{
551 /* TODO: implement me. */
552 return NB_OK;
553}
554
555static int isis_instance_domain_password_delete(enum nb_event event,
556 const struct lyd_node *dnode)
557{
558 /* TODO: implement me. */
559 return NB_OK;
560}
561
562/*
563 * XPath: /frr-isisd:isis/instance/domain-password/password
564 */
565static int
566isis_instance_domain_password_password_modify(enum nb_event event,
567 const struct lyd_node *dnode,
568 union nb_resource *resource)
569{
570 /* TODO: implement me. */
571 return NB_OK;
572}
573
574/*
575 * XPath: /frr-isisd:isis/instance/domain-password/password-type
576 */
577static int
578isis_instance_domain_password_password_type_modify(enum nb_event event,
579 const struct lyd_node *dnode,
580 union nb_resource *resource)
581{
582 /* TODO: implement me. */
583 return NB_OK;
584}
585
586/*
587 * XPath: /frr-isisd:isis/instance/domain-password/authenticate-snp
588 */
589static int isis_instance_domain_password_authenticate_snp_modify(
590 enum nb_event event, const struct lyd_node *dnode,
591 union nb_resource *resource)
592{
593 /* TODO: implement me. */
594 return NB_OK;
595}
596
597/*
598 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4
599 */
600static int isis_instance_default_information_originate_ipv4_create(
601 enum nb_event event, const struct lyd_node *dnode,
602 union nb_resource *resource)
603{
604 /* TODO: implement me. */
605 return NB_OK;
606}
607
608static int isis_instance_default_information_originate_ipv4_delete(
609 enum nb_event event, const struct lyd_node *dnode)
610{
611 /* TODO: implement me. */
612 return NB_OK;
613}
614
615/*
616 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/always
617 */
618static int isis_instance_default_information_originate_ipv4_always_create(
619 enum nb_event event, const struct lyd_node *dnode,
620 union nb_resource *resource)
621{
622 /* TODO: implement me. */
623 return NB_OK;
624}
625
626static int isis_instance_default_information_originate_ipv4_always_delete(
627 enum nb_event event, const struct lyd_node *dnode)
628{
629 /* TODO: implement me. */
630 return NB_OK;
631}
632
633/*
634 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/route-map
635 */
636static int isis_instance_default_information_originate_ipv4_route_map_modify(
637 enum nb_event event, const struct lyd_node *dnode,
638 union nb_resource *resource)
639{
640 /* TODO: implement me. */
641 return NB_OK;
642}
643
644static int isis_instance_default_information_originate_ipv4_route_map_delete(
645 enum nb_event event, const struct lyd_node *dnode)
646{
647 /* TODO: implement me. */
648 return NB_OK;
649}
650
651/*
652 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/metric
653 */
654static int isis_instance_default_information_originate_ipv4_metric_modify(
655 enum nb_event event, const struct lyd_node *dnode,
656 union nb_resource *resource)
657{
658 /* TODO: implement me. */
659 return NB_OK;
660}
661
662static int isis_instance_default_information_originate_ipv4_metric_delete(
663 enum nb_event event, const struct lyd_node *dnode)
664{
665 /* TODO: implement me. */
666 return NB_OK;
667}
668
669/*
670 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6
671 */
672static int isis_instance_default_information_originate_ipv6_create(
673 enum nb_event event, const struct lyd_node *dnode,
674 union nb_resource *resource)
675{
676 /* TODO: implement me. */
677 return NB_OK;
678}
679
680static int isis_instance_default_information_originate_ipv6_delete(
681 enum nb_event event, const struct lyd_node *dnode)
682{
683 /* TODO: implement me. */
684 return NB_OK;
685}
686
687/*
688 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/always
689 */
690static int isis_instance_default_information_originate_ipv6_always_create(
691 enum nb_event event, const struct lyd_node *dnode,
692 union nb_resource *resource)
693{
694 /* TODO: implement me. */
695 return NB_OK;
696}
697
698static int isis_instance_default_information_originate_ipv6_always_delete(
699 enum nb_event event, const struct lyd_node *dnode)
700{
701 /* TODO: implement me. */
702 return NB_OK;
703}
704
705/*
706 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/route-map
707 */
708static int isis_instance_default_information_originate_ipv6_route_map_modify(
709 enum nb_event event, const struct lyd_node *dnode,
710 union nb_resource *resource)
711{
712 /* TODO: implement me. */
713 return NB_OK;
714}
715
716static int isis_instance_default_information_originate_ipv6_route_map_delete(
717 enum nb_event event, const struct lyd_node *dnode)
718{
719 /* TODO: implement me. */
720 return NB_OK;
721}
722
723/*
724 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/metric
725 */
726static int isis_instance_default_information_originate_ipv6_metric_modify(
727 enum nb_event event, const struct lyd_node *dnode,
728 union nb_resource *resource)
729{
730 /* TODO: implement me. */
731 return NB_OK;
732}
733
734static int isis_instance_default_information_originate_ipv6_metric_delete(
735 enum nb_event event, const struct lyd_node *dnode)
736{
737 /* TODO: implement me. */
738 return NB_OK;
739}
740
741/*
742 * XPath: /frr-isisd:isis/instance/redistribute/ipv4
743 */
744static int isis_instance_redistribute_ipv4_create(enum nb_event event,
745 const struct lyd_node *dnode,
746 union nb_resource *resource)
747{
748 /* TODO: implement me. */
749 return NB_OK;
750}
751
752static int isis_instance_redistribute_ipv4_delete(enum nb_event event,
753 const struct lyd_node *dnode)
754{
755 /* TODO: implement me. */
756 return NB_OK;
757}
758
759/*
760 * XPath: /frr-isisd:isis/instance/redistribute/ipv4/route-map
761 */
762static int
763isis_instance_redistribute_ipv4_route_map_modify(enum nb_event event,
764 const struct lyd_node *dnode,
765 union nb_resource *resource)
766{
767 /* TODO: implement me. */
768 return NB_OK;
769}
770
771static int
772isis_instance_redistribute_ipv4_route_map_delete(enum nb_event event,
773 const struct lyd_node *dnode)
774{
775 /* TODO: implement me. */
776 return NB_OK;
777}
778
779/*
780 * XPath: /frr-isisd:isis/instance/redistribute/ipv4/metric
781 */
782static int
783isis_instance_redistribute_ipv4_metric_modify(enum nb_event event,
784 const struct lyd_node *dnode,
785 union nb_resource *resource)
786{
787 /* TODO: implement me. */
788 return NB_OK;
789}
790
791static int
792isis_instance_redistribute_ipv4_metric_delete(enum nb_event event,
793 const struct lyd_node *dnode)
794{
795 /* TODO: implement me. */
796 return NB_OK;
797}
798
799/*
800 * XPath: /frr-isisd:isis/instance/redistribute/ipv6
801 */
802static int isis_instance_redistribute_ipv6_create(enum nb_event event,
803 const struct lyd_node *dnode,
804 union nb_resource *resource)
805{
806 /* TODO: implement me. */
807 return NB_OK;
808}
809
810static int isis_instance_redistribute_ipv6_delete(enum nb_event event,
811 const struct lyd_node *dnode)
812{
813 /* TODO: implement me. */
814 return NB_OK;
815}
816
817/*
818 * XPath: /frr-isisd:isis/instance/redistribute/ipv6/route-map
819 */
820static int
821isis_instance_redistribute_ipv6_route_map_modify(enum nb_event event,
822 const struct lyd_node *dnode,
823 union nb_resource *resource)
824{
825 /* TODO: implement me. */
826 return NB_OK;
827}
828
829static int
830isis_instance_redistribute_ipv6_route_map_delete(enum nb_event event,
831 const struct lyd_node *dnode)
832{
833 /* TODO: implement me. */
834 return NB_OK;
835}
836
837/*
838 * XPath: /frr-isisd:isis/instance/redistribute/ipv6/metric
839 */
840static int
841isis_instance_redistribute_ipv6_metric_modify(enum nb_event event,
842 const struct lyd_node *dnode,
843 union nb_resource *resource)
844{
845 /* TODO: implement me. */
846 return NB_OK;
847}
848
849static int
850isis_instance_redistribute_ipv6_metric_delete(enum nb_event event,
851 const struct lyd_node *dnode)
852{
853 /* TODO: implement me. */
854 return NB_OK;
855}
856
857/*
858 * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-multicast
859 */
860static int
861isis_instance_multi_topology_ipv4_multicast_create(enum nb_event event,
862 const struct lyd_node *dnode,
863 union nb_resource *resource)
864{
865 /* TODO: implement me. */
866 return NB_OK;
867}
868
869static int
870isis_instance_multi_topology_ipv4_multicast_delete(enum nb_event event,
871 const struct lyd_node *dnode)
872{
873 /* TODO: implement me. */
874 return NB_OK;
875}
876
877/*
878 * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-multicast/overload
879 */
880static int isis_instance_multi_topology_ipv4_multicast_overload_create(
881 enum nb_event event, const struct lyd_node *dnode,
882 union nb_resource *resource)
883{
884 /* TODO: implement me. */
885 return NB_OK;
886}
887
888static int isis_instance_multi_topology_ipv4_multicast_overload_delete(
889 enum nb_event event, const struct lyd_node *dnode)
890{
891 /* TODO: implement me. */
892 return NB_OK;
893}
894
895/*
896 * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-management
897 */
898static int isis_instance_multi_topology_ipv4_management_create(
899 enum nb_event event, const struct lyd_node *dnode,
900 union nb_resource *resource)
901{
902 /* TODO: implement me. */
903 return NB_OK;
904}
905
906static int isis_instance_multi_topology_ipv4_management_delete(
907 enum nb_event event, const struct lyd_node *dnode)
908{
909 /* TODO: implement me. */
910 return NB_OK;
911}
912
913/*
914 * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-management/overload
915 */
916static int isis_instance_multi_topology_ipv4_management_overload_create(
917 enum nb_event event, const struct lyd_node *dnode,
918 union nb_resource *resource)
919{
920 /* TODO: implement me. */
921 return NB_OK;
922}
923
924static int isis_instance_multi_topology_ipv4_management_overload_delete(
925 enum nb_event event, const struct lyd_node *dnode)
926{
927 /* TODO: implement me. */
928 return NB_OK;
929}
930
931/*
932 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-unicast
933 */
934static int
935isis_instance_multi_topology_ipv6_unicast_create(enum nb_event event,
936 const struct lyd_node *dnode,
937 union nb_resource *resource)
938{
939 /* TODO: implement me. */
940 return NB_OK;
941}
942
943static int
944isis_instance_multi_topology_ipv6_unicast_delete(enum nb_event event,
945 const struct lyd_node *dnode)
946{
947 /* TODO: implement me. */
948 return NB_OK;
949}
950
951/*
952 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-unicast/overload
953 */
954static int isis_instance_multi_topology_ipv6_unicast_overload_create(
955 enum nb_event event, const struct lyd_node *dnode,
956 union nb_resource *resource)
957{
958 /* TODO: implement me. */
959 return NB_OK;
960}
961
962static int isis_instance_multi_topology_ipv6_unicast_overload_delete(
963 enum nb_event event, const struct lyd_node *dnode)
964{
965 /* TODO: implement me. */
966 return NB_OK;
967}
968
969/*
970 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-multicast
971 */
972static int
973isis_instance_multi_topology_ipv6_multicast_create(enum nb_event event,
974 const struct lyd_node *dnode,
975 union nb_resource *resource)
976{
977 /* TODO: implement me. */
978 return NB_OK;
979}
980
981static int
982isis_instance_multi_topology_ipv6_multicast_delete(enum nb_event event,
983 const struct lyd_node *dnode)
984{
985 /* TODO: implement me. */
986 return NB_OK;
987}
988
989/*
990 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-multicast/overload
991 */
992static int isis_instance_multi_topology_ipv6_multicast_overload_create(
993 enum nb_event event, const struct lyd_node *dnode,
994 union nb_resource *resource)
995{
996 /* TODO: implement me. */
997 return NB_OK;
998}
999
1000static int isis_instance_multi_topology_ipv6_multicast_overload_delete(
1001 enum nb_event event, const struct lyd_node *dnode)
1002{
1003 /* TODO: implement me. */
1004 return NB_OK;
1005}
1006
1007/*
1008 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-management
1009 */
1010static int isis_instance_multi_topology_ipv6_management_create(
1011 enum nb_event event, const struct lyd_node *dnode,
1012 union nb_resource *resource)
1013{
1014 /* TODO: implement me. */
1015 return NB_OK;
1016}
1017
1018static int isis_instance_multi_topology_ipv6_management_delete(
1019 enum nb_event event, const struct lyd_node *dnode)
1020{
1021 /* TODO: implement me. */
1022 return NB_OK;
1023}
1024
1025/*
1026 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-management/overload
1027 */
1028static int isis_instance_multi_topology_ipv6_management_overload_create(
1029 enum nb_event event, const struct lyd_node *dnode,
1030 union nb_resource *resource)
1031{
1032 /* TODO: implement me. */
1033 return NB_OK;
1034}
1035
1036static int isis_instance_multi_topology_ipv6_management_overload_delete(
1037 enum nb_event event, const struct lyd_node *dnode)
1038{
1039 /* TODO: implement me. */
1040 return NB_OK;
1041}
1042
1043/*
1044 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-dstsrc
1045 */
1046static int
1047isis_instance_multi_topology_ipv6_dstsrc_create(enum nb_event event,
1048 const struct lyd_node *dnode,
1049 union nb_resource *resource)
1050{
1051 /* TODO: implement me. */
1052 return NB_OK;
1053}
1054
1055static int
1056isis_instance_multi_topology_ipv6_dstsrc_delete(enum nb_event event,
1057 const struct lyd_node *dnode)
1058{
1059 /* TODO: implement me. */
1060 return NB_OK;
1061}
1062
1063/*
1064 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-dstsrc/overload
1065 */
1066static int isis_instance_multi_topology_ipv6_dstsrc_overload_create(
1067 enum nb_event event, const struct lyd_node *dnode,
1068 union nb_resource *resource)
1069{
1070 /* TODO: implement me. */
1071 return NB_OK;
1072}
1073
1074static int isis_instance_multi_topology_ipv6_dstsrc_overload_delete(
1075 enum nb_event event, const struct lyd_node *dnode)
1076{
1077 /* TODO: implement me. */
1078 return NB_OK;
1079}
1080
1081/*
1082 * XPath: /frr-isisd:isis/instance/log-adjacency-changes
1083 */
1084static int
1085isis_instance_log_adjacency_changes_create(enum nb_event event,
1086 const struct lyd_node *dnode,
1087 union nb_resource *resource)
1088{
1089 /* TODO: implement me. */
1090 return NB_OK;
1091}
1092
1093static int
1094isis_instance_log_adjacency_changes_delete(enum nb_event event,
1095 const struct lyd_node *dnode)
1096{
1097 /* TODO: implement me. */
1098 return NB_OK;
1099}
1100
1101/*
1102 * XPath: /frr-isisd:isis/mpls-te
1103 */
1104static int isis_mpls_te_create(enum nb_event event,
1105 const struct lyd_node *dnode,
1106 union nb_resource *resource)
1107{
1108 /* TODO: implement me. */
1109 return NB_OK;
1110}
1111
1112static int isis_mpls_te_delete(enum nb_event event,
1113 const struct lyd_node *dnode)
1114{
1115 /* TODO: implement me. */
1116 return NB_OK;
1117}
1118
1119/*
1120 * XPath: /frr-isisd:isis/mpls-te/router-address
1121 */
1122static int isis_mpls_te_router_address_modify(enum nb_event event,
1123 const struct lyd_node *dnode,
1124 union nb_resource *resource)
1125{
1126 /* TODO: implement me. */
1127 return NB_OK;
1128}
1129
1130static int isis_mpls_te_router_address_delete(enum nb_event event,
1131 const struct lyd_node *dnode)
1132{
1133 /* TODO: implement me. */
1134 return NB_OK;
1135}
1136
1137/*
1138 * XPath: /frr-interface:lib/interface/frr-isisd:isis
1139 */
1140static int lib_interface_isis_create(enum nb_event event,
1141 const struct lyd_node *dnode,
1142 union nb_resource *resource)
1143{
aaf2fd21
EDP
1144 struct isis_area *area;
1145 struct interface *ifp;
1146 struct isis_circuit *circuit;
1147 const char *area_tag = yang_dnode_get_string(dnode, "./area-tag");
1148
1149 if (event != NB_EV_APPLY)
1150 return NB_OK;
1151
1152 area = isis_area_lookup(area_tag);
1153 /* The area should have already be created. We are
1154 * setting the priority of the global isis area creation
1155 * slightly lower, so it should be executed first, but I
1156 * cannot rely on that so here I have to check.
1157 */
1158 if (!area) {
1159 flog_err(
1160 EC_LIB_NB_CB_CONFIG_APPLY,
1161 "%s: attempt to create circuit for area %s before the area has been created",
1162 __func__, area_tag);
1163 abort();
1164 }
1165
1166 ifp = yang_dnode_get_entry(dnode, true);
1167 circuit = isis_circuit_create(area, ifp);
1168 assert(circuit->state == C_STATE_CONF || circuit->state == C_STATE_UP);
1169 yang_dnode_set_entry(dnode, circuit);
1170
20bd27e2
EDP
1171 return NB_OK;
1172}
1173
1174static int lib_interface_isis_delete(enum nb_event event,
1175 const struct lyd_node *dnode)
1176{
aaf2fd21
EDP
1177 struct isis_circuit *circuit;
1178
1179 if (event != NB_EV_APPLY)
1180 return NB_OK;
1181
1182 circuit = yang_dnode_get_entry(dnode, true);
1183 if (!circuit)
1184 return NB_ERR_INCONSISTENCY;
1185 /* delete circuit through csm changes */
1186 switch (circuit->state) {
1187 case C_STATE_UP:
1188 isis_csm_state_change(IF_DOWN_FROM_Z, circuit,
1189 circuit->interface);
1190 isis_csm_state_change(ISIS_DISABLE, circuit, circuit->area);
1191 break;
1192 case C_STATE_CONF:
1193 isis_csm_state_change(ISIS_DISABLE, circuit, circuit->area);
1194 break;
1195 case C_STATE_INIT:
1196 isis_csm_state_change(IF_DOWN_FROM_Z, circuit,
1197 circuit->interface);
1198 break;
1199 }
1200
20bd27e2
EDP
1201 return NB_OK;
1202}
1203
1204/*
1205 * XPath: /frr-interface:lib/interface/frr-isisd:isis/area-tag
1206 */
1207static int lib_interface_isis_area_tag_modify(enum nb_event event,
1208 const struct lyd_node *dnode,
1209 union nb_resource *resource)
1210{
aaf2fd21
EDP
1211 struct isis_circuit *circuit;
1212 struct interface *ifp;
1213 struct vrf *vrf;
1214 const char *area_tag, *ifname, *vrfname;
1215
1216 if (event == NB_EV_VALIDATE) {
1217 /* libyang doesn't like relative paths across module boundaries
1218 */
1219 ifname = yang_dnode_get_string(dnode->parent->parent, "./name");
1220 vrfname = yang_dnode_get_string(dnode->parent->parent, "./vrf");
1221 vrf = vrf_lookup_by_name(vrfname);
1222 assert(vrf);
1223 ifp = if_lookup_by_name(ifname, vrf->vrf_id);
1224 if (!ifp)
1225 return NB_OK;
1226 circuit = circuit_lookup_by_ifp(ifp, isis->init_circ_list);
1227 area_tag = yang_dnode_get_string(dnode, NULL);
1228 if (circuit && circuit->area && circuit->area->area_tag
1229 && strcmp(circuit->area->area_tag, area_tag)) {
1230 flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE,
1231 "ISIS circuit is already defined on %s",
1232 circuit->area->area_tag);
1233 return NB_ERR_VALIDATION;
1234 }
1235 }
1236
20bd27e2
EDP
1237 return NB_OK;
1238}
1239
1240/*
1241 * XPath: /frr-interface:lib/interface/frr-isisd:isis/circuit-type
1242 */
1243static int lib_interface_isis_circuit_type_modify(enum nb_event event,
1244 const struct lyd_node *dnode,
1245 union nb_resource *resource)
1246{
aaf2fd21
EDP
1247 int circ_type = yang_dnode_get_enum(dnode, NULL);
1248 struct isis_circuit *circuit;
1249 struct interface *ifp;
1250 struct vrf *vrf;
1251 const char *ifname, *vrfname;
1252
1253 switch (event) {
1254 case NB_EV_VALIDATE:
1255 /* libyang doesn't like relative paths across module boundaries
1256 */
1257 ifname = yang_dnode_get_string(dnode->parent->parent, "./name");
1258 vrfname = yang_dnode_get_string(dnode->parent->parent, "./vrf");
1259 vrf = vrf_lookup_by_name(vrfname);
1260 assert(vrf);
1261 ifp = if_lookup_by_name(ifname, vrf->vrf_id);
1262 if (!ifp)
1263 break;
1264 circuit = circuit_lookup_by_ifp(ifp, isis->init_circ_list);
1265 if (circuit && circuit->state == C_STATE_UP
1266 && circuit->area->is_type != IS_LEVEL_1_AND_2
1267 && circuit->area->is_type != circ_type) {
1268 flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE,
1269 "Invalid circuit level for area %s",
1270 circuit->area->area_tag);
1271 return NB_ERR_VALIDATION;
1272 }
1273 break;
1274 case NB_EV_PREPARE:
1275 case NB_EV_ABORT:
1276 break;
1277 case NB_EV_APPLY:
1278 circuit = yang_dnode_get_entry(dnode, true);
1279 isis_circuit_is_type_set(circuit, circ_type);
1280 break;
1281 }
1282
20bd27e2
EDP
1283 return NB_OK;
1284}
1285
1286/*
1287 * XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv4-routing
1288 */
1289static int lib_interface_isis_ipv4_routing_create(enum nb_event event,
1290 const struct lyd_node *dnode,
1291 union nb_resource *resource)
1292{
aaf2fd21
EDP
1293 bool ipv6;
1294 struct isis_circuit *circuit;
1295
1296 if (event != NB_EV_APPLY)
1297 return NB_OK;
1298
1299 circuit = yang_dnode_get_entry(dnode, true);
1300 ipv6 = yang_dnode_exists(dnode, "../ipv6-routing");
1301 isis_circuit_af_set(circuit, true, ipv6);
1302
20bd27e2
EDP
1303 return NB_OK;
1304}
1305
1306static int lib_interface_isis_ipv4_routing_delete(enum nb_event event,
1307 const struct lyd_node *dnode)
1308{
aaf2fd21
EDP
1309 bool ipv6;
1310 struct isis_circuit *circuit;
1311
1312 if (event != NB_EV_APPLY)
1313 return NB_OK;
1314
1315 circuit = yang_dnode_get_entry(dnode, true);
1316 if (circuit && circuit->area) {
1317 ipv6 = yang_dnode_exists(dnode, "../ipv6-routing");
1318 isis_circuit_af_set(circuit, false, ipv6);
1319 }
1320
20bd27e2
EDP
1321 return NB_OK;
1322}
1323
1324/*
1325 * XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv6-routing
1326 */
1327static int lib_interface_isis_ipv6_routing_create(enum nb_event event,
1328 const struct lyd_node *dnode,
1329 union nb_resource *resource)
1330{
aaf2fd21
EDP
1331 bool ipv4;
1332 struct isis_circuit *circuit;
1333
1334 if (event != NB_EV_APPLY)
1335 return NB_OK;
1336
1337 circuit = yang_dnode_get_entry(dnode, true);
1338 ipv4 = yang_dnode_exists(dnode, "../ipv6-routing");
1339 isis_circuit_af_set(circuit, ipv4, true);
1340
20bd27e2
EDP
1341 return NB_OK;
1342}
1343
1344static int lib_interface_isis_ipv6_routing_delete(enum nb_event event,
1345 const struct lyd_node *dnode)
1346{
aaf2fd21
EDP
1347 bool ipv4;
1348 struct isis_circuit *circuit;
1349
1350 if (event != NB_EV_APPLY)
1351 return NB_OK;
1352
1353 circuit = yang_dnode_get_entry(dnode, true);
1354 if (circuit->area) {
1355 ipv4 = yang_dnode_exists(dnode, "../ipv4-routing");
1356 isis_circuit_af_set(circuit, ipv4, false);
1357 }
1358
20bd27e2
EDP
1359 return NB_OK;
1360}
1361
1362/*
1363 * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-1
1364 */
1365static int
1366lib_interface_isis_csnp_interval_level_1_modify(enum nb_event event,
1367 const struct lyd_node *dnode,
1368 union nb_resource *resource)
1369{
1370 /* TODO: implement me. */
1371 return NB_OK;
1372}
1373
1374/*
1375 * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-2
1376 */
1377static int
1378lib_interface_isis_csnp_interval_level_2_modify(enum nb_event event,
1379 const struct lyd_node *dnode,
1380 union nb_resource *resource)
1381{
1382 /* TODO: implement me. */
1383 return NB_OK;
1384}
1385
1386/*
1387 * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-1
1388 */
1389static int
1390lib_interface_isis_psnp_interval_level_1_modify(enum nb_event event,
1391 const struct lyd_node *dnode,
1392 union nb_resource *resource)
1393{
1394 /* TODO: implement me. */
1395 return NB_OK;
1396}
1397
1398/*
1399 * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-2
1400 */
1401static int
1402lib_interface_isis_psnp_interval_level_2_modify(enum nb_event event,
1403 const struct lyd_node *dnode,
1404 union nb_resource *resource)
1405{
1406 /* TODO: implement me. */
1407 return NB_OK;
1408}
1409
1410/*
1411 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/padding
1412 */
1413static int lib_interface_isis_hello_padding_modify(enum nb_event event,
1414 const struct lyd_node *dnode,
1415 union nb_resource *resource)
1416{
1417 /* TODO: implement me. */
1418 return NB_OK;
1419}
1420
1421/*
1422 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-1
1423 */
1424static int
1425lib_interface_isis_hello_interval_level_1_modify(enum nb_event event,
1426 const struct lyd_node *dnode,
1427 union nb_resource *resource)
1428{
1429 /* TODO: implement me. */
1430 return NB_OK;
1431}
1432
1433/*
1434 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-2
1435 */
1436static int
1437lib_interface_isis_hello_interval_level_2_modify(enum nb_event event,
1438 const struct lyd_node *dnode,
1439 union nb_resource *resource)
1440{
1441 /* TODO: implement me. */
1442 return NB_OK;
1443}
1444
1445/*
1446 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-1
1447 */
1448static int
1449lib_interface_isis_hello_multiplier_level_1_modify(enum nb_event event,
1450 const struct lyd_node *dnode,
1451 union nb_resource *resource)
1452{
1453 /* TODO: implement me. */
1454 return NB_OK;
1455}
1456
1457/*
1458 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-2
1459 */
1460static int
1461lib_interface_isis_hello_multiplier_level_2_modify(enum nb_event event,
1462 const struct lyd_node *dnode,
1463 union nb_resource *resource)
1464{
1465 /* TODO: implement me. */
1466 return NB_OK;
1467}
1468
1469/*
1470 * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric/level-1
1471 */
1472static int
1473lib_interface_isis_metric_level_1_modify(enum nb_event event,
1474 const struct lyd_node *dnode,
1475 union nb_resource *resource)
1476{
1477 /* TODO: implement me. */
1478 return NB_OK;
1479}
1480
1481/*
1482 * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric/level-2
1483 */
1484static int
1485lib_interface_isis_metric_level_2_modify(enum nb_event event,
1486 const struct lyd_node *dnode,
1487 union nb_resource *resource)
1488{
1489 /* TODO: implement me. */
1490 return NB_OK;
1491}
1492
1493/*
1494 * XPath: /frr-interface:lib/interface/frr-isisd:isis/priority/level-1
1495 */
1496static int
1497lib_interface_isis_priority_level_1_modify(enum nb_event event,
1498 const struct lyd_node *dnode,
1499 union nb_resource *resource)
1500{
1501 /* TODO: implement me. */
1502 return NB_OK;
1503}
1504
1505/*
1506 * XPath: /frr-interface:lib/interface/frr-isisd:isis/priority/level-2
1507 */
1508static int
1509lib_interface_isis_priority_level_2_modify(enum nb_event event,
1510 const struct lyd_node *dnode,
1511 union nb_resource *resource)
1512{
1513 /* TODO: implement me. */
1514 return NB_OK;
1515}
1516
1517/*
1518 * XPath: /frr-interface:lib/interface/frr-isisd:isis/network-type
1519 */
1520static int lib_interface_isis_network_type_modify(enum nb_event event,
1521 const struct lyd_node *dnode,
1522 union nb_resource *resource)
1523{
1524 /* TODO: implement me. */
1525 return NB_OK;
1526}
1527
1528static int lib_interface_isis_network_type_delete(enum nb_event event,
1529 const struct lyd_node *dnode)
1530{
1531 /* TODO: implement me. */
1532 return NB_OK;
1533}
1534
1535/*
1536 * XPath: /frr-interface:lib/interface/frr-isisd:isis/passive
1537 */
1538static int lib_interface_isis_passive_create(enum nb_event event,
1539 const struct lyd_node *dnode,
1540 union nb_resource *resource)
1541{
1542 /* TODO: implement me. */
1543 return NB_OK;
1544}
1545
1546static int lib_interface_isis_passive_delete(enum nb_event event,
1547 const struct lyd_node *dnode)
1548{
1549 /* TODO: implement me. */
1550 return NB_OK;
1551}
1552
1553/*
1554 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password
1555 */
1556static int lib_interface_isis_password_create(enum nb_event event,
1557 const struct lyd_node *dnode,
1558 union nb_resource *resource)
1559{
1560 /* TODO: implement me. */
1561 return NB_OK;
1562}
1563
1564static int lib_interface_isis_password_delete(enum nb_event event,
1565 const struct lyd_node *dnode)
1566{
1567 /* TODO: implement me. */
1568 return NB_OK;
1569}
1570
1571/*
1572 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password/password
1573 */
1574static int
1575lib_interface_isis_password_password_modify(enum nb_event event,
1576 const struct lyd_node *dnode,
1577 union nb_resource *resource)
1578{
1579 /* TODO: implement me. */
1580 return NB_OK;
1581}
1582
1583/*
1584 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password/password-type
1585 */
1586static int
1587lib_interface_isis_password_password_type_modify(enum nb_event event,
1588 const struct lyd_node *dnode,
1589 union nb_resource *resource)
1590{
1591 /* TODO: implement me. */
1592 return NB_OK;
1593}
1594
1595/*
1596 * XPath:
1597 * /frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake
1598 */
1599static int lib_interface_isis_disable_three_way_handshake_create(
1600 enum nb_event event, const struct lyd_node *dnode,
1601 union nb_resource *resource)
1602{
1603 /* TODO: implement me. */
1604 return NB_OK;
1605}
1606
1607static int lib_interface_isis_disable_three_way_handshake_delete(
1608 enum nb_event event, const struct lyd_node *dnode)
1609{
1610 /* TODO: implement me. */
1611 return NB_OK;
1612}
1613
1614/*
1615 * XPath:
1616 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast
1617 */
1618static int lib_interface_isis_multi_topology_ipv4_unicast_modify(
1619 enum nb_event event, const struct lyd_node *dnode,
1620 union nb_resource *resource)
1621{
1622 /* TODO: implement me. */
1623 return NB_OK;
1624}
1625
1626/*
1627 * XPath:
1628 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-multicast
1629 */
1630static int lib_interface_isis_multi_topology_ipv4_multicast_modify(
1631 enum nb_event event, const struct lyd_node *dnode,
1632 union nb_resource *resource)
1633{
1634 /* TODO: implement me. */
1635 return NB_OK;
1636}
1637
1638/*
1639 * XPath:
1640 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-management
1641 */
1642static int lib_interface_isis_multi_topology_ipv4_management_modify(
1643 enum nb_event event, const struct lyd_node *dnode,
1644 union nb_resource *resource)
1645{
1646 /* TODO: implement me. */
1647 return NB_OK;
1648}
1649
1650/*
1651 * XPath:
1652 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-unicast
1653 */
1654static int lib_interface_isis_multi_topology_ipv6_unicast_modify(
1655 enum nb_event event, const struct lyd_node *dnode,
1656 union nb_resource *resource)
1657{
1658 /* TODO: implement me. */
1659 return NB_OK;
1660}
1661
1662/*
1663 * XPath:
1664 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-multicast
1665 */
1666static int lib_interface_isis_multi_topology_ipv6_multicast_modify(
1667 enum nb_event event, const struct lyd_node *dnode,
1668 union nb_resource *resource)
1669{
1670 /* TODO: implement me. */
1671 return NB_OK;
1672}
1673
1674/*
1675 * XPath:
1676 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-management
1677 */
1678static int lib_interface_isis_multi_topology_ipv6_management_modify(
1679 enum nb_event event, const struct lyd_node *dnode,
1680 union nb_resource *resource)
1681{
1682 /* TODO: implement me. */
1683 return NB_OK;
1684}
1685
1686/*
1687 * XPath: /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-dstsrc
1688 */
1689static int lib_interface_isis_multi_topology_ipv6_dstsrc_modify(
1690 enum nb_event event, const struct lyd_node *dnode,
1691 union nb_resource *resource)
1692{
1693 /* TODO: implement me. */
1694 return NB_OK;
1695}
1696
1697/* clang-format off */
1698const struct frr_yang_module_info frr_isisd_info = {
1699 .name = "frr-isisd",
1700 .nodes = {
1701 {
1702 .xpath = "/frr-isisd:isis/instance",
1703 .cbs.create = isis_instance_create,
1704 .cbs.delete = isis_instance_delete,
aaf2fd21
EDP
1705 .cbs.cli_show = cli_show_router_isis,
1706 .priority = NB_DFLT_PRIORITY - 1,
20bd27e2
EDP
1707 },
1708 {
1709 .xpath = "/frr-isisd:isis/instance/is-type",
1710 .cbs.modify = isis_instance_is_type_modify,
1711 },
1712 {
1713 .xpath = "/frr-isisd:isis/instance/area-address",
1714 .cbs.create = isis_instance_area_address_create,
1715 .cbs.delete = isis_instance_area_address_delete,
f084ea55 1716 .cbs.cli_show = cli_show_isis_area_address,
20bd27e2
EDP
1717 },
1718 {
1719 .xpath = "/frr-isisd:isis/instance/dynamic-hostname",
1720 .cbs.modify = isis_instance_dynamic_hostname_modify,
1721 },
1722 {
1723 .xpath = "/frr-isisd:isis/instance/attached",
1724 .cbs.create = isis_instance_attached_create,
1725 .cbs.delete = isis_instance_attached_delete,
1726 },
1727 {
1728 .xpath = "/frr-isisd:isis/instance/overload",
1729 .cbs.create = isis_instance_overload_create,
1730 .cbs.delete = isis_instance_overload_delete,
1731 },
1732 {
1733 .xpath = "/frr-isisd:isis/instance/metric-style",
1734 .cbs.modify = isis_instance_metric_style_modify,
1735 },
1736 {
1737 .xpath = "/frr-isisd:isis/instance/purge-originator",
1738 .cbs.create = isis_instance_purge_originator_create,
1739 .cbs.delete = isis_instance_purge_originator_delete,
1740 },
1741 {
1742 .xpath = "/frr-isisd:isis/instance/lsp/mtu",
1743 .cbs.modify = isis_instance_lsp_mtu_modify,
1744 },
1745 {
1746 .xpath = "/frr-isisd:isis/instance/lsp/refresh-interval/level-1",
1747 .cbs.modify = isis_instance_lsp_refresh_interval_level_1_modify,
1748 },
1749 {
1750 .xpath = "/frr-isisd:isis/instance/lsp/refresh-interval/level-2",
1751 .cbs.modify = isis_instance_lsp_refresh_interval_level_2_modify,
1752 },
1753 {
1754 .xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-1",
1755 .cbs.modify = isis_instance_lsp_maximum_lifetime_level_1_modify,
1756 },
1757 {
1758 .xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-2",
1759 .cbs.modify = isis_instance_lsp_maximum_lifetime_level_2_modify,
1760 },
1761 {
1762 .xpath = "/frr-isisd:isis/instance/lsp/generation-interval/level-1",
1763 .cbs.modify = isis_instance_lsp_generation_interval_level_1_modify,
1764 },
1765 {
1766 .xpath = "/frr-isisd:isis/instance/lsp/generation-interval/level-2",
1767 .cbs.modify = isis_instance_lsp_generation_interval_level_2_modify,
1768 },
1769 {
1770 .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay",
1771 .cbs.create = isis_instance_spf_ietf_backoff_delay_create,
1772 .cbs.delete = isis_instance_spf_ietf_backoff_delay_delete,
1773 },
1774 {
1775 .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/init-delay",
1776 .cbs.modify = isis_instance_spf_ietf_backoff_delay_init_delay_modify,
1777 },
1778 {
1779 .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/short-delay",
1780 .cbs.modify = isis_instance_spf_ietf_backoff_delay_short_delay_modify,
1781 },
1782 {
1783 .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/long-delay",
1784 .cbs.modify = isis_instance_spf_ietf_backoff_delay_long_delay_modify,
1785 },
1786 {
1787 .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/hold-down",
1788 .cbs.modify = isis_instance_spf_ietf_backoff_delay_hold_down_modify,
1789 },
1790 {
1791 .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/time-to-learn",
1792 .cbs.modify = isis_instance_spf_ietf_backoff_delay_time_to_learn_modify,
1793 },
1794 {
1795 .xpath = "/frr-isisd:isis/instance/spf/minimum-interval/level-1",
1796 .cbs.modify = isis_instance_spf_minimum_interval_level_1_modify,
1797 },
1798 {
1799 .xpath = "/frr-isisd:isis/instance/spf/minimum-interval/level-2",
1800 .cbs.modify = isis_instance_spf_minimum_interval_level_2_modify,
1801 },
1802 {
1803 .xpath = "/frr-isisd:isis/instance/area-password",
1804 .cbs.create = isis_instance_area_password_create,
1805 .cbs.delete = isis_instance_area_password_delete,
1806 },
1807 {
1808 .xpath = "/frr-isisd:isis/instance/area-password/password",
1809 .cbs.modify = isis_instance_area_password_password_modify,
1810 },
1811 {
1812 .xpath = "/frr-isisd:isis/instance/area-password/password-type",
1813 .cbs.modify = isis_instance_area_password_password_type_modify,
1814 },
1815 {
1816 .xpath = "/frr-isisd:isis/instance/area-password/authenticate-snp",
1817 .cbs.modify = isis_instance_area_password_authenticate_snp_modify,
1818 },
1819 {
1820 .xpath = "/frr-isisd:isis/instance/domain-password",
1821 .cbs.create = isis_instance_domain_password_create,
1822 .cbs.delete = isis_instance_domain_password_delete,
1823 },
1824 {
1825 .xpath = "/frr-isisd:isis/instance/domain-password/password",
1826 .cbs.modify = isis_instance_domain_password_password_modify,
1827 },
1828 {
1829 .xpath = "/frr-isisd:isis/instance/domain-password/password-type",
1830 .cbs.modify = isis_instance_domain_password_password_type_modify,
1831 },
1832 {
1833 .xpath = "/frr-isisd:isis/instance/domain-password/authenticate-snp",
1834 .cbs.modify = isis_instance_domain_password_authenticate_snp_modify,
1835 },
1836 {
1837 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4",
1838 .cbs.create = isis_instance_default_information_originate_ipv4_create,
1839 .cbs.delete = isis_instance_default_information_originate_ipv4_delete,
1840 },
1841 {
1842 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4/always",
1843 .cbs.create = isis_instance_default_information_originate_ipv4_always_create,
1844 .cbs.delete = isis_instance_default_information_originate_ipv4_always_delete,
1845 },
1846 {
1847 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4/route-map",
1848 .cbs.modify = isis_instance_default_information_originate_ipv4_route_map_modify,
1849 .cbs.delete = isis_instance_default_information_originate_ipv4_route_map_delete,
1850 },
1851 {
1852 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4/metric",
1853 .cbs.modify = isis_instance_default_information_originate_ipv4_metric_modify,
1854 .cbs.delete = isis_instance_default_information_originate_ipv4_metric_delete,
1855 },
1856 {
1857 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6",
1858 .cbs.create = isis_instance_default_information_originate_ipv6_create,
1859 .cbs.delete = isis_instance_default_information_originate_ipv6_delete,
1860 },
1861 {
1862 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6/always",
1863 .cbs.create = isis_instance_default_information_originate_ipv6_always_create,
1864 .cbs.delete = isis_instance_default_information_originate_ipv6_always_delete,
1865 },
1866 {
1867 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6/route-map",
1868 .cbs.modify = isis_instance_default_information_originate_ipv6_route_map_modify,
1869 .cbs.delete = isis_instance_default_information_originate_ipv6_route_map_delete,
1870 },
1871 {
1872 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6/metric",
1873 .cbs.modify = isis_instance_default_information_originate_ipv6_metric_modify,
1874 .cbs.delete = isis_instance_default_information_originate_ipv6_metric_delete,
1875 },
1876 {
1877 .xpath = "/frr-isisd:isis/instance/redistribute/ipv4",
1878 .cbs.create = isis_instance_redistribute_ipv4_create,
1879 .cbs.delete = isis_instance_redistribute_ipv4_delete,
1880 },
1881 {
1882 .xpath = "/frr-isisd:isis/instance/redistribute/ipv4/route-map",
1883 .cbs.modify = isis_instance_redistribute_ipv4_route_map_modify,
1884 .cbs.delete = isis_instance_redistribute_ipv4_route_map_delete,
1885 },
1886 {
1887 .xpath = "/frr-isisd:isis/instance/redistribute/ipv4/metric",
1888 .cbs.modify = isis_instance_redistribute_ipv4_metric_modify,
1889 .cbs.delete = isis_instance_redistribute_ipv4_metric_delete,
1890 },
1891 {
1892 .xpath = "/frr-isisd:isis/instance/redistribute/ipv6",
1893 .cbs.create = isis_instance_redistribute_ipv6_create,
1894 .cbs.delete = isis_instance_redistribute_ipv6_delete,
1895 },
1896 {
1897 .xpath = "/frr-isisd:isis/instance/redistribute/ipv6/route-map",
1898 .cbs.modify = isis_instance_redistribute_ipv6_route_map_modify,
1899 .cbs.delete = isis_instance_redistribute_ipv6_route_map_delete,
1900 },
1901 {
1902 .xpath = "/frr-isisd:isis/instance/redistribute/ipv6/metric",
1903 .cbs.modify = isis_instance_redistribute_ipv6_metric_modify,
1904 .cbs.delete = isis_instance_redistribute_ipv6_metric_delete,
1905 },
1906 {
1907 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-multicast",
1908 .cbs.create = isis_instance_multi_topology_ipv4_multicast_create,
1909 .cbs.delete = isis_instance_multi_topology_ipv4_multicast_delete,
1910 },
1911 {
1912 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-multicast/overload",
1913 .cbs.create = isis_instance_multi_topology_ipv4_multicast_overload_create,
1914 .cbs.delete = isis_instance_multi_topology_ipv4_multicast_overload_delete,
1915 },
1916 {
1917 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-management",
1918 .cbs.create = isis_instance_multi_topology_ipv4_management_create,
1919 .cbs.delete = isis_instance_multi_topology_ipv4_management_delete,
1920 },
1921 {
1922 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-management/overload",
1923 .cbs.create = isis_instance_multi_topology_ipv4_management_overload_create,
1924 .cbs.delete = isis_instance_multi_topology_ipv4_management_overload_delete,
1925 },
1926 {
1927 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-unicast",
1928 .cbs.create = isis_instance_multi_topology_ipv6_unicast_create,
1929 .cbs.delete = isis_instance_multi_topology_ipv6_unicast_delete,
1930 },
1931 {
1932 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-unicast/overload",
1933 .cbs.create = isis_instance_multi_topology_ipv6_unicast_overload_create,
1934 .cbs.delete = isis_instance_multi_topology_ipv6_unicast_overload_delete,
1935 },
1936 {
1937 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-multicast",
1938 .cbs.create = isis_instance_multi_topology_ipv6_multicast_create,
1939 .cbs.delete = isis_instance_multi_topology_ipv6_multicast_delete,
1940 },
1941 {
1942 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-multicast/overload",
1943 .cbs.create = isis_instance_multi_topology_ipv6_multicast_overload_create,
1944 .cbs.delete = isis_instance_multi_topology_ipv6_multicast_overload_delete,
1945 },
1946 {
1947 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-management",
1948 .cbs.create = isis_instance_multi_topology_ipv6_management_create,
1949 .cbs.delete = isis_instance_multi_topology_ipv6_management_delete,
1950 },
1951 {
1952 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-management/overload",
1953 .cbs.create = isis_instance_multi_topology_ipv6_management_overload_create,
1954 .cbs.delete = isis_instance_multi_topology_ipv6_management_overload_delete,
1955 },
1956 {
1957 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-dstsrc",
1958 .cbs.create = isis_instance_multi_topology_ipv6_dstsrc_create,
1959 .cbs.delete = isis_instance_multi_topology_ipv6_dstsrc_delete,
1960 },
1961 {
1962 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-dstsrc/overload",
1963 .cbs.create = isis_instance_multi_topology_ipv6_dstsrc_overload_create,
1964 .cbs.delete = isis_instance_multi_topology_ipv6_dstsrc_overload_delete,
1965 },
1966 {
1967 .xpath = "/frr-isisd:isis/instance/log-adjacency-changes",
1968 .cbs.create = isis_instance_log_adjacency_changes_create,
1969 .cbs.delete = isis_instance_log_adjacency_changes_delete,
1970 },
1971 {
1972 .xpath = "/frr-isisd:isis/mpls-te",
1973 .cbs.create = isis_mpls_te_create,
1974 .cbs.delete = isis_mpls_te_delete,
1975 },
1976 {
1977 .xpath = "/frr-isisd:isis/mpls-te/router-address",
1978 .cbs.modify = isis_mpls_te_router_address_modify,
1979 .cbs.delete = isis_mpls_te_router_address_delete,
1980 },
1981 {
1982 .xpath = "/frr-interface:lib/interface/frr-isisd:isis",
1983 .cbs.create = lib_interface_isis_create,
1984 .cbs.delete = lib_interface_isis_delete,
1985 },
1986 {
1987 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/area-tag",
1988 .cbs.modify = lib_interface_isis_area_tag_modify,
1989 },
1990 {
1991 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/circuit-type",
1992 .cbs.modify = lib_interface_isis_circuit_type_modify,
1993 },
1994 {
1995 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/ipv4-routing",
1996 .cbs.create = lib_interface_isis_ipv4_routing_create,
1997 .cbs.delete = lib_interface_isis_ipv4_routing_delete,
aaf2fd21 1998 .cbs.cli_show = cli_show_ip_isis_ipv4,
20bd27e2
EDP
1999 },
2000 {
2001 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/ipv6-routing",
2002 .cbs.create = lib_interface_isis_ipv6_routing_create,
2003 .cbs.delete = lib_interface_isis_ipv6_routing_delete,
aaf2fd21 2004 .cbs.cli_show = cli_show_ip_isis_ipv6,
20bd27e2
EDP
2005 },
2006 {
2007 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-1",
2008 .cbs.modify = lib_interface_isis_csnp_interval_level_1_modify,
2009 },
2010 {
2011 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-2",
2012 .cbs.modify = lib_interface_isis_csnp_interval_level_2_modify,
2013 },
2014 {
2015 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-1",
2016 .cbs.modify = lib_interface_isis_psnp_interval_level_1_modify,
2017 },
2018 {
2019 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-2",
2020 .cbs.modify = lib_interface_isis_psnp_interval_level_2_modify,
2021 },
2022 {
2023 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/padding",
2024 .cbs.modify = lib_interface_isis_hello_padding_modify,
2025 },
2026 {
2027 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-1",
2028 .cbs.modify = lib_interface_isis_hello_interval_level_1_modify,
2029 },
2030 {
2031 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-2",
2032 .cbs.modify = lib_interface_isis_hello_interval_level_2_modify,
2033 },
2034 {
2035 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-1",
2036 .cbs.modify = lib_interface_isis_hello_multiplier_level_1_modify,
2037 },
2038 {
2039 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-2",
2040 .cbs.modify = lib_interface_isis_hello_multiplier_level_2_modify,
2041 },
2042 {
2043 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/metric/level-1",
2044 .cbs.modify = lib_interface_isis_metric_level_1_modify,
2045 },
2046 {
2047 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/metric/level-2",
2048 .cbs.modify = lib_interface_isis_metric_level_2_modify,
2049 },
2050 {
2051 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/priority/level-1",
2052 .cbs.modify = lib_interface_isis_priority_level_1_modify,
2053 },
2054 {
2055 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/priority/level-2",
2056 .cbs.modify = lib_interface_isis_priority_level_2_modify,
2057 },
2058 {
2059 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/network-type",
2060 .cbs.modify = lib_interface_isis_network_type_modify,
2061 .cbs.delete = lib_interface_isis_network_type_delete,
2062 },
2063 {
2064 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/passive",
2065 .cbs.create = lib_interface_isis_passive_create,
2066 .cbs.delete = lib_interface_isis_passive_delete,
2067 },
2068 {
2069 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/password",
2070 .cbs.create = lib_interface_isis_password_create,
2071 .cbs.delete = lib_interface_isis_password_delete,
2072 },
2073 {
2074 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/password/password",
2075 .cbs.modify = lib_interface_isis_password_password_modify,
2076 },
2077 {
2078 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/password/password-type",
2079 .cbs.modify = lib_interface_isis_password_password_type_modify,
2080 },
2081 {
2082 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake",
2083 .cbs.create = lib_interface_isis_disable_three_way_handshake_create,
2084 .cbs.delete = lib_interface_isis_disable_three_way_handshake_delete,
2085 },
2086 {
2087 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast",
2088 .cbs.modify = lib_interface_isis_multi_topology_ipv4_unicast_modify,
2089 },
2090 {
2091 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-multicast",
2092 .cbs.modify = lib_interface_isis_multi_topology_ipv4_multicast_modify,
2093 },
2094 {
2095 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-management",
2096 .cbs.modify = lib_interface_isis_multi_topology_ipv4_management_modify,
2097 },
2098 {
2099 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-unicast",
2100 .cbs.modify = lib_interface_isis_multi_topology_ipv6_unicast_modify,
2101 },
2102 {
2103 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-multicast",
2104 .cbs.modify = lib_interface_isis_multi_topology_ipv6_multicast_modify,
2105 },
2106 {
2107 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-management",
2108 .cbs.modify = lib_interface_isis_multi_topology_ipv6_management_modify,
2109 },
2110 {
2111 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-dstsrc",
2112 .cbs.modify = lib_interface_isis_multi_topology_ipv6_dstsrc_modify,
2113 },
2114 {
2115 .xpath = NULL,
2116 },
2117 }
2118};