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