]> git.proxmox.com Git - mirror_frr.git/blob - isisd/isis_northbound.c
isisd: retrofit the 'lsp-refresh-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 struct isis_area *area;
377 uint16_t refr_int;
378
379 if (event != NB_EV_APPLY)
380 return NB_OK;
381
382 refr_int = yang_dnode_get_uint16(dnode, NULL);
383 area = yang_dnode_get_entry(dnode, true);
384 isis_area_lsp_refresh_set(area, IS_LEVEL_1, refr_int);
385
386 return NB_OK;
387 }
388
389 /*
390 * XPath: /frr-isisd:isis/instance/lsp/refresh-interval/level-2
391 */
392 static int
393 isis_instance_lsp_refresh_interval_level_2_modify(enum nb_event event,
394 const struct lyd_node *dnode,
395 union nb_resource *resource)
396 {
397 struct isis_area *area;
398 uint16_t refr_int;
399
400 if (event != NB_EV_APPLY)
401 return NB_OK;
402
403 refr_int = yang_dnode_get_uint16(dnode, NULL);
404 area = yang_dnode_get_entry(dnode, true);
405 isis_area_lsp_refresh_set(area, IS_LEVEL_2, refr_int);
406
407 return NB_OK;
408 }
409
410 /*
411 * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-1
412 */
413 static int
414 isis_instance_lsp_maximum_lifetime_level_1_modify(enum nb_event event,
415 const struct lyd_node *dnode,
416 union nb_resource *resource)
417 {
418 /* TODO: implement me. */
419 return NB_OK;
420 }
421
422 /*
423 * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-2
424 */
425 static int
426 isis_instance_lsp_maximum_lifetime_level_2_modify(enum nb_event event,
427 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/lsp/generation-interval/level-1
436 */
437 static int isis_instance_lsp_generation_interval_level_1_modify(
438 enum nb_event event, const struct lyd_node *dnode,
439 union nb_resource *resource)
440 {
441 struct isis_area *area;
442 uint16_t gen_int;
443
444 if (event != NB_EV_APPLY)
445 return NB_OK;
446
447 gen_int = yang_dnode_get_uint16(dnode, NULL);
448 area = yang_dnode_get_entry(dnode, true);
449 area->lsp_gen_interval[0] = gen_int;
450
451 return NB_OK;
452 }
453
454 /*
455 * XPath: /frr-isisd:isis/instance/lsp/generation-interval/level-2
456 */
457 static int isis_instance_lsp_generation_interval_level_2_modify(
458 enum nb_event event, const struct lyd_node *dnode,
459 union nb_resource *resource)
460 {
461 struct isis_area *area;
462 uint16_t gen_int;
463
464 if (event != NB_EV_APPLY)
465 return NB_OK;
466
467 gen_int = yang_dnode_get_uint16(dnode, NULL);
468 area = yang_dnode_get_entry(dnode, true);
469 area->lsp_gen_interval[1] = gen_int;
470
471 return NB_OK;
472 }
473
474 /*
475 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay
476 */
477 static int
478 isis_instance_spf_ietf_backoff_delay_create(enum nb_event event,
479 const struct lyd_node *dnode,
480 union nb_resource *resource)
481 {
482 /* TODO: implement me. */
483 return NB_OK;
484 }
485
486 static int
487 isis_instance_spf_ietf_backoff_delay_delete(enum nb_event event,
488 const struct lyd_node *dnode)
489 {
490 /* TODO: implement me. */
491 return NB_OK;
492 }
493
494 /*
495 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/init-delay
496 */
497 static int isis_instance_spf_ietf_backoff_delay_init_delay_modify(
498 enum nb_event event, const struct lyd_node *dnode,
499 union nb_resource *resource)
500 {
501 /* TODO: implement me. */
502 return NB_OK;
503 }
504
505 /*
506 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/short-delay
507 */
508 static int isis_instance_spf_ietf_backoff_delay_short_delay_modify(
509 enum nb_event event, const struct lyd_node *dnode,
510 union nb_resource *resource)
511 {
512 /* TODO: implement me. */
513 return NB_OK;
514 }
515
516 /*
517 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/long-delay
518 */
519 static int isis_instance_spf_ietf_backoff_delay_long_delay_modify(
520 enum nb_event event, const struct lyd_node *dnode,
521 union nb_resource *resource)
522 {
523 /* TODO: implement me. */
524 return NB_OK;
525 }
526
527 /*
528 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/hold-down
529 */
530 static int isis_instance_spf_ietf_backoff_delay_hold_down_modify(
531 enum nb_event event, const struct lyd_node *dnode,
532 union nb_resource *resource)
533 {
534 /* TODO: implement me. */
535 return NB_OK;
536 }
537
538 /*
539 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/time-to-learn
540 */
541 static int isis_instance_spf_ietf_backoff_delay_time_to_learn_modify(
542 enum nb_event event, const struct lyd_node *dnode,
543 union nb_resource *resource)
544 {
545 /* TODO: implement me. */
546 return NB_OK;
547 }
548
549 /*
550 * XPath: /frr-isisd:isis/instance/spf/minimum-interval/level-1
551 */
552 static int
553 isis_instance_spf_minimum_interval_level_1_modify(enum nb_event event,
554 const struct lyd_node *dnode,
555 union nb_resource *resource)
556 {
557 /* TODO: implement me. */
558 return NB_OK;
559 }
560
561 /*
562 * XPath: /frr-isisd:isis/instance/spf/minimum-interval/level-2
563 */
564 static int
565 isis_instance_spf_minimum_interval_level_2_modify(enum nb_event event,
566 const struct lyd_node *dnode,
567 union nb_resource *resource)
568 {
569 /* TODO: implement me. */
570 return NB_OK;
571 }
572
573 /*
574 * XPath: /frr-isisd:isis/instance/area-password
575 */
576 static void area_password_apply_finish(const struct lyd_node *dnode)
577 {
578 const char *password = yang_dnode_get_string(dnode, "./password");
579 struct isis_area *area = yang_dnode_get_entry(dnode, true);
580 int pass_type = yang_dnode_get_enum(dnode, "./password-type");
581 uint8_t snp_auth = yang_dnode_get_enum(dnode, "./authenticate-snp");
582
583 switch (pass_type) {
584 case ISIS_PASSWD_TYPE_CLEARTXT:
585 isis_area_passwd_cleartext_set(area, IS_LEVEL_1, password,
586 snp_auth);
587 break;
588 case ISIS_PASSWD_TYPE_HMAC_MD5:
589 isis_area_passwd_hmac_md5_set(area, IS_LEVEL_1, password,
590 snp_auth);
591 break;
592 }
593 }
594
595 static int isis_instance_area_password_create(enum nb_event event,
596 const struct lyd_node *dnode,
597 union nb_resource *resource)
598 {
599 /* actual setting is done in apply_finish */
600 return NB_OK;
601 }
602
603 static int isis_instance_area_password_delete(enum nb_event event,
604 const struct lyd_node *dnode)
605 {
606 struct isis_area *area;
607
608 if (event != NB_EV_APPLY)
609 return NB_OK;
610
611 area = yang_dnode_get_entry(dnode, true);
612 isis_area_passwd_unset(area, IS_LEVEL_1);
613
614 return NB_OK;
615 }
616
617 /*
618 * XPath: /frr-isisd:isis/instance/area-password/password
619 */
620 static int
621 isis_instance_area_password_password_modify(enum nb_event event,
622 const struct lyd_node *dnode,
623 union nb_resource *resource)
624 {
625 /* actual setting is done in apply_finish */
626 return NB_OK;
627 }
628
629 /*
630 * XPath: /frr-isisd:isis/instance/area-password/password-type
631 */
632 static int
633 isis_instance_area_password_password_type_modify(enum nb_event event,
634 const struct lyd_node *dnode,
635 union nb_resource *resource)
636 {
637 /* actual setting is done in apply_finish */
638 return NB_OK;
639 }
640
641 /*
642 * XPath: /frr-isisd:isis/instance/area-password/authenticate-snp
643 */
644 static int isis_instance_area_password_authenticate_snp_modify(
645 enum nb_event event, const struct lyd_node *dnode,
646 union nb_resource *resource)
647 {
648 /* actual setting is done in apply_finish */
649 return NB_OK;
650 }
651
652 /*
653 * XPath: /frr-isisd:isis/instance/domain-password
654 */
655 static void domain_password_apply_finish(const struct lyd_node *dnode)
656 {
657 const char *password = yang_dnode_get_string(dnode, "./password");
658 struct isis_area *area = yang_dnode_get_entry(dnode, true);
659 int pass_type = yang_dnode_get_enum(dnode, "./password-type");
660 uint8_t snp_auth = yang_dnode_get_enum(dnode, "./authenticate-snp");
661
662 switch (pass_type) {
663 case ISIS_PASSWD_TYPE_CLEARTXT:
664 isis_area_passwd_cleartext_set(area, IS_LEVEL_2, password,
665 snp_auth);
666 break;
667 case ISIS_PASSWD_TYPE_HMAC_MD5:
668 isis_area_passwd_hmac_md5_set(area, IS_LEVEL_2, password,
669 snp_auth);
670 break;
671 }
672 }
673
674 static int isis_instance_domain_password_create(enum nb_event event,
675 const struct lyd_node *dnode,
676 union nb_resource *resource)
677 {
678 /* actual setting is done in apply_finish */
679 return NB_OK;
680 }
681
682 static int isis_instance_domain_password_delete(enum nb_event event,
683 const struct lyd_node *dnode)
684 {
685 struct isis_area *area;
686
687 if (event != NB_EV_APPLY)
688 return NB_OK;
689
690 area = yang_dnode_get_entry(dnode, true);
691 isis_area_passwd_unset(area, IS_LEVEL_2);
692
693 return NB_OK;
694 }
695
696 /*
697 * XPath: /frr-isisd:isis/instance/domain-password/password
698 */
699 static int
700 isis_instance_domain_password_password_modify(enum nb_event event,
701 const struct lyd_node *dnode,
702 union nb_resource *resource)
703 {
704 /* actual setting is done in apply_finish */
705 return NB_OK;
706 }
707
708 /*
709 * XPath: /frr-isisd:isis/instance/domain-password/password-type
710 */
711 static int
712 isis_instance_domain_password_password_type_modify(enum nb_event event,
713 const struct lyd_node *dnode,
714 union nb_resource *resource)
715 {
716 /* actual setting is done in apply_finish */
717 return NB_OK;
718 }
719
720 /*
721 * XPath: /frr-isisd:isis/instance/domain-password/authenticate-snp
722 */
723 static int isis_instance_domain_password_authenticate_snp_modify(
724 enum nb_event event, const struct lyd_node *dnode,
725 union nb_resource *resource)
726 {
727 /* actual setting is done in apply_finish */
728 return NB_OK;
729 }
730
731 /*
732 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4
733 */
734 static int isis_instance_default_information_originate_ipv4_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_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/always
751 */
752 static int isis_instance_default_information_originate_ipv4_always_create(
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_always_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/route-map
769 */
770 static int isis_instance_default_information_originate_ipv4_route_map_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_route_map_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/ipv4/metric
787 */
788 static int isis_instance_default_information_originate_ipv4_metric_modify(
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_ipv4_metric_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
805 */
806 static int isis_instance_default_information_originate_ipv6_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_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/always
823 */
824 static int isis_instance_default_information_originate_ipv6_always_create(
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_always_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/route-map
841 */
842 static int isis_instance_default_information_originate_ipv6_route_map_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_route_map_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/default-information-originate/ipv6/metric
859 */
860 static int isis_instance_default_information_originate_ipv6_metric_modify(
861 enum nb_event event, 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_default_information_originate_ipv6_metric_delete(
869 enum nb_event event, 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
877 */
878 static int isis_instance_redistribute_ipv4_create(enum nb_event event,
879 const struct lyd_node *dnode,
880 union nb_resource *resource)
881 {
882 /* TODO: implement me. */
883 return NB_OK;
884 }
885
886 static int isis_instance_redistribute_ipv4_delete(enum nb_event event,
887 const struct lyd_node *dnode)
888 {
889 /* TODO: implement me. */
890 return NB_OK;
891 }
892
893 /*
894 * XPath: /frr-isisd:isis/instance/redistribute/ipv4/route-map
895 */
896 static int
897 isis_instance_redistribute_ipv4_route_map_modify(enum nb_event event,
898 const struct lyd_node *dnode,
899 union nb_resource *resource)
900 {
901 /* TODO: implement me. */
902 return NB_OK;
903 }
904
905 static int
906 isis_instance_redistribute_ipv4_route_map_delete(enum nb_event event,
907 const struct lyd_node *dnode)
908 {
909 /* TODO: implement me. */
910 return NB_OK;
911 }
912
913 /*
914 * XPath: /frr-isisd:isis/instance/redistribute/ipv4/metric
915 */
916 static int
917 isis_instance_redistribute_ipv4_metric_modify(enum nb_event event,
918 const struct lyd_node *dnode,
919 union nb_resource *resource)
920 {
921 /* TODO: implement me. */
922 return NB_OK;
923 }
924
925 static int
926 isis_instance_redistribute_ipv4_metric_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
935 */
936 static int isis_instance_redistribute_ipv6_create(enum nb_event event,
937 const struct lyd_node *dnode,
938 union nb_resource *resource)
939 {
940 /* TODO: implement me. */
941 return NB_OK;
942 }
943
944 static int isis_instance_redistribute_ipv6_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/redistribute/ipv6/route-map
953 */
954 static int
955 isis_instance_redistribute_ipv6_route_map_modify(enum nb_event event,
956 const struct lyd_node *dnode,
957 union nb_resource *resource)
958 {
959 /* TODO: implement me. */
960 return NB_OK;
961 }
962
963 static int
964 isis_instance_redistribute_ipv6_route_map_delete(enum nb_event event,
965 const struct lyd_node *dnode)
966 {
967 /* TODO: implement me. */
968 return NB_OK;
969 }
970
971 /*
972 * XPath: /frr-isisd:isis/instance/redistribute/ipv6/metric
973 */
974 static int
975 isis_instance_redistribute_ipv6_metric_modify(enum nb_event event,
976 const struct lyd_node *dnode,
977 union nb_resource *resource)
978 {
979 /* TODO: implement me. */
980 return NB_OK;
981 }
982
983 static int
984 isis_instance_redistribute_ipv6_metric_delete(enum nb_event event,
985 const struct lyd_node *dnode)
986 {
987 /* TODO: implement me. */
988 return NB_OK;
989 }
990
991 /*
992 * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-multicast
993 */
994 static int
995 isis_instance_multi_topology_ipv4_multicast_create(enum nb_event event,
996 const struct lyd_node *dnode,
997 union nb_resource *resource)
998 {
999 /* TODO: implement me. */
1000 return NB_OK;
1001 }
1002
1003 static int
1004 isis_instance_multi_topology_ipv4_multicast_delete(enum nb_event event,
1005 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-multicast/overload
1013 */
1014 static int isis_instance_multi_topology_ipv4_multicast_overload_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_multicast_overload_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
1031 */
1032 static int isis_instance_multi_topology_ipv4_management_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_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/ipv4-management/overload
1049 */
1050 static int isis_instance_multi_topology_ipv4_management_overload_create(
1051 enum nb_event event, const struct lyd_node *dnode,
1052 union nb_resource *resource)
1053 {
1054 /* TODO: implement me. */
1055 return NB_OK;
1056 }
1057
1058 static int isis_instance_multi_topology_ipv4_management_overload_delete(
1059 enum nb_event event, const struct lyd_node *dnode)
1060 {
1061 /* TODO: implement me. */
1062 return NB_OK;
1063 }
1064
1065 /*
1066 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-unicast
1067 */
1068 static int
1069 isis_instance_multi_topology_ipv6_unicast_create(enum nb_event event,
1070 const struct lyd_node *dnode,
1071 union nb_resource *resource)
1072 {
1073 /* TODO: implement me. */
1074 return NB_OK;
1075 }
1076
1077 static int
1078 isis_instance_multi_topology_ipv6_unicast_delete(enum nb_event event,
1079 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-unicast/overload
1087 */
1088 static int isis_instance_multi_topology_ipv6_unicast_overload_create(
1089 enum nb_event event, const struct lyd_node *dnode,
1090 union nb_resource *resource)
1091 {
1092 /* TODO: implement me. */
1093 return NB_OK;
1094 }
1095
1096 static int isis_instance_multi_topology_ipv6_unicast_overload_delete(
1097 enum nb_event event, const struct lyd_node *dnode)
1098 {
1099 /* TODO: implement me. */
1100 return NB_OK;
1101 }
1102
1103 /*
1104 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-multicast
1105 */
1106 static int
1107 isis_instance_multi_topology_ipv6_multicast_create(enum nb_event event,
1108 const struct lyd_node *dnode,
1109 union nb_resource *resource)
1110 {
1111 /* TODO: implement me. */
1112 return NB_OK;
1113 }
1114
1115 static int
1116 isis_instance_multi_topology_ipv6_multicast_delete(enum nb_event event,
1117 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-multicast/overload
1125 */
1126 static int isis_instance_multi_topology_ipv6_multicast_overload_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_multicast_overload_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
1143 */
1144 static int isis_instance_multi_topology_ipv6_management_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_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-management/overload
1161 */
1162 static int isis_instance_multi_topology_ipv6_management_overload_create(
1163 enum nb_event event, const struct lyd_node *dnode,
1164 union nb_resource *resource)
1165 {
1166 /* TODO: implement me. */
1167 return NB_OK;
1168 }
1169
1170 static int isis_instance_multi_topology_ipv6_management_overload_delete(
1171 enum nb_event event, const struct lyd_node *dnode)
1172 {
1173 /* TODO: implement me. */
1174 return NB_OK;
1175 }
1176
1177 /*
1178 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-dstsrc
1179 */
1180 static int
1181 isis_instance_multi_topology_ipv6_dstsrc_create(enum nb_event event,
1182 const struct lyd_node *dnode,
1183 union nb_resource *resource)
1184 {
1185 /* TODO: implement me. */
1186 return NB_OK;
1187 }
1188
1189 static int
1190 isis_instance_multi_topology_ipv6_dstsrc_delete(enum nb_event event,
1191 const struct lyd_node *dnode)
1192 {
1193 /* TODO: implement me. */
1194 return NB_OK;
1195 }
1196
1197 /*
1198 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-dstsrc/overload
1199 */
1200 static int isis_instance_multi_topology_ipv6_dstsrc_overload_create(
1201 enum nb_event event, const struct lyd_node *dnode,
1202 union nb_resource *resource)
1203 {
1204 /* TODO: implement me. */
1205 return NB_OK;
1206 }
1207
1208 static int isis_instance_multi_topology_ipv6_dstsrc_overload_delete(
1209 enum nb_event event, const struct lyd_node *dnode)
1210 {
1211 /* TODO: implement me. */
1212 return NB_OK;
1213 }
1214
1215 /*
1216 * XPath: /frr-isisd:isis/instance/log-adjacency-changes
1217 */
1218 static int
1219 isis_instance_log_adjacency_changes_create(enum nb_event event,
1220 const struct lyd_node *dnode,
1221 union nb_resource *resource)
1222 {
1223 /* TODO: implement me. */
1224 return NB_OK;
1225 }
1226
1227 static int
1228 isis_instance_log_adjacency_changes_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
1237 */
1238 static int isis_mpls_te_create(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_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-isisd:isis/mpls-te/router-address
1255 */
1256 static int isis_mpls_te_router_address_modify(enum nb_event event,
1257 const struct lyd_node *dnode,
1258 union nb_resource *resource)
1259 {
1260 /* TODO: implement me. */
1261 return NB_OK;
1262 }
1263
1264 static int isis_mpls_te_router_address_delete(enum nb_event event,
1265 const struct lyd_node *dnode)
1266 {
1267 /* TODO: implement me. */
1268 return NB_OK;
1269 }
1270
1271 /*
1272 * XPath: /frr-interface:lib/interface/frr-isisd:isis
1273 */
1274 static int lib_interface_isis_create(enum nb_event event,
1275 const struct lyd_node *dnode,
1276 union nb_resource *resource)
1277 {
1278 struct isis_area *area;
1279 struct interface *ifp;
1280 struct isis_circuit *circuit;
1281 const char *area_tag = yang_dnode_get_string(dnode, "./area-tag");
1282
1283 if (event != NB_EV_APPLY)
1284 return NB_OK;
1285
1286 area = isis_area_lookup(area_tag);
1287 /* The area should have already be created. We are
1288 * setting the priority of the global isis area creation
1289 * slightly lower, so it should be executed first, but I
1290 * cannot rely on that so here I have to check.
1291 */
1292 if (!area) {
1293 flog_err(
1294 EC_LIB_NB_CB_CONFIG_APPLY,
1295 "%s: attempt to create circuit for area %s before the area has been created",
1296 __func__, area_tag);
1297 abort();
1298 }
1299
1300 ifp = yang_dnode_get_entry(dnode, true);
1301 circuit = isis_circuit_create(area, ifp);
1302 assert(circuit->state == C_STATE_CONF || circuit->state == C_STATE_UP);
1303 yang_dnode_set_entry(dnode, circuit);
1304
1305 return NB_OK;
1306 }
1307
1308 static int lib_interface_isis_delete(enum nb_event event,
1309 const struct lyd_node *dnode)
1310 {
1311 struct isis_circuit *circuit;
1312
1313 if (event != NB_EV_APPLY)
1314 return NB_OK;
1315
1316 circuit = yang_dnode_get_entry(dnode, true);
1317 if (!circuit)
1318 return NB_ERR_INCONSISTENCY;
1319 /* delete circuit through csm changes */
1320 switch (circuit->state) {
1321 case C_STATE_UP:
1322 isis_csm_state_change(IF_DOWN_FROM_Z, circuit,
1323 circuit->interface);
1324 isis_csm_state_change(ISIS_DISABLE, circuit, circuit->area);
1325 break;
1326 case C_STATE_CONF:
1327 isis_csm_state_change(ISIS_DISABLE, circuit, circuit->area);
1328 break;
1329 case C_STATE_INIT:
1330 isis_csm_state_change(IF_DOWN_FROM_Z, circuit,
1331 circuit->interface);
1332 break;
1333 }
1334
1335 return NB_OK;
1336 }
1337
1338 /*
1339 * XPath: /frr-interface:lib/interface/frr-isisd:isis/area-tag
1340 */
1341 static int lib_interface_isis_area_tag_modify(enum nb_event event,
1342 const struct lyd_node *dnode,
1343 union nb_resource *resource)
1344 {
1345 struct isis_circuit *circuit;
1346 struct interface *ifp;
1347 struct vrf *vrf;
1348 const char *area_tag, *ifname, *vrfname;
1349
1350 if (event == NB_EV_VALIDATE) {
1351 /* libyang doesn't like relative paths across module boundaries
1352 */
1353 ifname = yang_dnode_get_string(dnode->parent->parent, "./name");
1354 vrfname = yang_dnode_get_string(dnode->parent->parent, "./vrf");
1355 vrf = vrf_lookup_by_name(vrfname);
1356 assert(vrf);
1357 ifp = if_lookup_by_name(ifname, vrf->vrf_id);
1358 if (!ifp)
1359 return NB_OK;
1360 circuit = circuit_lookup_by_ifp(ifp, isis->init_circ_list);
1361 area_tag = yang_dnode_get_string(dnode, NULL);
1362 if (circuit && circuit->area && circuit->area->area_tag
1363 && strcmp(circuit->area->area_tag, area_tag)) {
1364 flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE,
1365 "ISIS circuit is already defined on %s",
1366 circuit->area->area_tag);
1367 return NB_ERR_VALIDATION;
1368 }
1369 }
1370
1371 return NB_OK;
1372 }
1373
1374 /*
1375 * XPath: /frr-interface:lib/interface/frr-isisd:isis/circuit-type
1376 */
1377 static int lib_interface_isis_circuit_type_modify(enum nb_event event,
1378 const struct lyd_node *dnode,
1379 union nb_resource *resource)
1380 {
1381 int circ_type = yang_dnode_get_enum(dnode, NULL);
1382 struct isis_circuit *circuit;
1383 struct interface *ifp;
1384 struct vrf *vrf;
1385 const char *ifname, *vrfname;
1386
1387 switch (event) {
1388 case NB_EV_VALIDATE:
1389 /* libyang doesn't like relative paths across module boundaries
1390 */
1391 ifname = yang_dnode_get_string(dnode->parent->parent, "./name");
1392 vrfname = yang_dnode_get_string(dnode->parent->parent, "./vrf");
1393 vrf = vrf_lookup_by_name(vrfname);
1394 assert(vrf);
1395 ifp = if_lookup_by_name(ifname, vrf->vrf_id);
1396 if (!ifp)
1397 break;
1398 circuit = circuit_lookup_by_ifp(ifp, isis->init_circ_list);
1399 if (circuit && circuit->state == C_STATE_UP
1400 && circuit->area->is_type != IS_LEVEL_1_AND_2
1401 && circuit->area->is_type != circ_type) {
1402 flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE,
1403 "Invalid circuit level for area %s",
1404 circuit->area->area_tag);
1405 return NB_ERR_VALIDATION;
1406 }
1407 break;
1408 case NB_EV_PREPARE:
1409 case NB_EV_ABORT:
1410 break;
1411 case NB_EV_APPLY:
1412 circuit = yang_dnode_get_entry(dnode, true);
1413 isis_circuit_is_type_set(circuit, circ_type);
1414 break;
1415 }
1416
1417 return NB_OK;
1418 }
1419
1420 /*
1421 * XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv4-routing
1422 */
1423 static int lib_interface_isis_ipv4_routing_create(enum nb_event event,
1424 const struct lyd_node *dnode,
1425 union nb_resource *resource)
1426 {
1427 bool ipv6;
1428 struct isis_circuit *circuit;
1429
1430 if (event != NB_EV_APPLY)
1431 return NB_OK;
1432
1433 circuit = yang_dnode_get_entry(dnode, true);
1434 ipv6 = yang_dnode_exists(dnode, "../ipv6-routing");
1435 isis_circuit_af_set(circuit, true, ipv6);
1436
1437 return NB_OK;
1438 }
1439
1440 static int lib_interface_isis_ipv4_routing_delete(enum nb_event event,
1441 const struct lyd_node *dnode)
1442 {
1443 bool ipv6;
1444 struct isis_circuit *circuit;
1445
1446 if (event != NB_EV_APPLY)
1447 return NB_OK;
1448
1449 circuit = yang_dnode_get_entry(dnode, true);
1450 if (circuit && circuit->area) {
1451 ipv6 = yang_dnode_exists(dnode, "../ipv6-routing");
1452 isis_circuit_af_set(circuit, false, ipv6);
1453 }
1454
1455 return NB_OK;
1456 }
1457
1458 /*
1459 * XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv6-routing
1460 */
1461 static int lib_interface_isis_ipv6_routing_create(enum nb_event event,
1462 const struct lyd_node *dnode,
1463 union nb_resource *resource)
1464 {
1465 bool ipv4;
1466 struct isis_circuit *circuit;
1467
1468 if (event != NB_EV_APPLY)
1469 return NB_OK;
1470
1471 circuit = yang_dnode_get_entry(dnode, true);
1472 ipv4 = yang_dnode_exists(dnode, "../ipv6-routing");
1473 isis_circuit_af_set(circuit, ipv4, true);
1474
1475 return NB_OK;
1476 }
1477
1478 static int lib_interface_isis_ipv6_routing_delete(enum nb_event event,
1479 const struct lyd_node *dnode)
1480 {
1481 bool ipv4;
1482 struct isis_circuit *circuit;
1483
1484 if (event != NB_EV_APPLY)
1485 return NB_OK;
1486
1487 circuit = yang_dnode_get_entry(dnode, true);
1488 if (circuit->area) {
1489 ipv4 = yang_dnode_exists(dnode, "../ipv4-routing");
1490 isis_circuit_af_set(circuit, ipv4, false);
1491 }
1492
1493 return NB_OK;
1494 }
1495
1496 /*
1497 * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-1
1498 */
1499 static int
1500 lib_interface_isis_csnp_interval_level_1_modify(enum nb_event event,
1501 const struct lyd_node *dnode,
1502 union nb_resource *resource)
1503 {
1504 /* TODO: implement me. */
1505 return NB_OK;
1506 }
1507
1508 /*
1509 * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-2
1510 */
1511 static int
1512 lib_interface_isis_csnp_interval_level_2_modify(enum nb_event event,
1513 const struct lyd_node *dnode,
1514 union nb_resource *resource)
1515 {
1516 /* TODO: implement me. */
1517 return NB_OK;
1518 }
1519
1520 /*
1521 * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-1
1522 */
1523 static int
1524 lib_interface_isis_psnp_interval_level_1_modify(enum nb_event event,
1525 const struct lyd_node *dnode,
1526 union nb_resource *resource)
1527 {
1528 /* TODO: implement me. */
1529 return NB_OK;
1530 }
1531
1532 /*
1533 * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-2
1534 */
1535 static int
1536 lib_interface_isis_psnp_interval_level_2_modify(enum nb_event event,
1537 const struct lyd_node *dnode,
1538 union nb_resource *resource)
1539 {
1540 /* TODO: implement me. */
1541 return NB_OK;
1542 }
1543
1544 /*
1545 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/padding
1546 */
1547 static int lib_interface_isis_hello_padding_modify(enum nb_event event,
1548 const struct lyd_node *dnode,
1549 union nb_resource *resource)
1550 {
1551 /* TODO: implement me. */
1552 return NB_OK;
1553 }
1554
1555 /*
1556 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-1
1557 */
1558 static int
1559 lib_interface_isis_hello_interval_level_1_modify(enum nb_event event,
1560 const struct lyd_node *dnode,
1561 union nb_resource *resource)
1562 {
1563 /* TODO: implement me. */
1564 return NB_OK;
1565 }
1566
1567 /*
1568 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-2
1569 */
1570 static int
1571 lib_interface_isis_hello_interval_level_2_modify(enum nb_event event,
1572 const struct lyd_node *dnode,
1573 union nb_resource *resource)
1574 {
1575 /* TODO: implement me. */
1576 return NB_OK;
1577 }
1578
1579 /*
1580 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-1
1581 */
1582 static int
1583 lib_interface_isis_hello_multiplier_level_1_modify(enum nb_event event,
1584 const struct lyd_node *dnode,
1585 union nb_resource *resource)
1586 {
1587 /* TODO: implement me. */
1588 return NB_OK;
1589 }
1590
1591 /*
1592 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-2
1593 */
1594 static int
1595 lib_interface_isis_hello_multiplier_level_2_modify(enum nb_event event,
1596 const struct lyd_node *dnode,
1597 union nb_resource *resource)
1598 {
1599 /* TODO: implement me. */
1600 return NB_OK;
1601 }
1602
1603 /*
1604 * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric/level-1
1605 */
1606 static int
1607 lib_interface_isis_metric_level_1_modify(enum nb_event event,
1608 const struct lyd_node *dnode,
1609 union nb_resource *resource)
1610 {
1611 /* TODO: implement me. */
1612 return NB_OK;
1613 }
1614
1615 /*
1616 * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric/level-2
1617 */
1618 static int
1619 lib_interface_isis_metric_level_2_modify(enum nb_event event,
1620 const struct lyd_node *dnode,
1621 union nb_resource *resource)
1622 {
1623 /* TODO: implement me. */
1624 return NB_OK;
1625 }
1626
1627 /*
1628 * XPath: /frr-interface:lib/interface/frr-isisd:isis/priority/level-1
1629 */
1630 static int
1631 lib_interface_isis_priority_level_1_modify(enum nb_event event,
1632 const struct lyd_node *dnode,
1633 union nb_resource *resource)
1634 {
1635 /* TODO: implement me. */
1636 return NB_OK;
1637 }
1638
1639 /*
1640 * XPath: /frr-interface:lib/interface/frr-isisd:isis/priority/level-2
1641 */
1642 static int
1643 lib_interface_isis_priority_level_2_modify(enum nb_event event,
1644 const struct lyd_node *dnode,
1645 union nb_resource *resource)
1646 {
1647 /* TODO: implement me. */
1648 return NB_OK;
1649 }
1650
1651 /*
1652 * XPath: /frr-interface:lib/interface/frr-isisd:isis/network-type
1653 */
1654 static int lib_interface_isis_network_type_modify(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_network_type_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/passive
1671 */
1672 static int lib_interface_isis_passive_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_passive_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
1689 */
1690 static int lib_interface_isis_password_create(enum nb_event event,
1691 const struct lyd_node *dnode,
1692 union nb_resource *resource)
1693 {
1694 /* TODO: implement me. */
1695 return NB_OK;
1696 }
1697
1698 static int lib_interface_isis_password_delete(enum nb_event event,
1699 const struct lyd_node *dnode)
1700 {
1701 /* TODO: implement me. */
1702 return NB_OK;
1703 }
1704
1705 /*
1706 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password/password
1707 */
1708 static int
1709 lib_interface_isis_password_password_modify(enum nb_event event,
1710 const struct lyd_node *dnode,
1711 union nb_resource *resource)
1712 {
1713 /* TODO: implement me. */
1714 return NB_OK;
1715 }
1716
1717 /*
1718 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password/password-type
1719 */
1720 static int
1721 lib_interface_isis_password_password_type_modify(enum nb_event event,
1722 const struct lyd_node *dnode,
1723 union nb_resource *resource)
1724 {
1725 /* TODO: implement me. */
1726 return NB_OK;
1727 }
1728
1729 /*
1730 * XPath:
1731 * /frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake
1732 */
1733 static int lib_interface_isis_disable_three_way_handshake_create(
1734 enum nb_event event, const struct lyd_node *dnode,
1735 union nb_resource *resource)
1736 {
1737 /* TODO: implement me. */
1738 return NB_OK;
1739 }
1740
1741 static int lib_interface_isis_disable_three_way_handshake_delete(
1742 enum nb_event event, const struct lyd_node *dnode)
1743 {
1744 /* TODO: implement me. */
1745 return NB_OK;
1746 }
1747
1748 /*
1749 * XPath:
1750 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast
1751 */
1752 static int lib_interface_isis_multi_topology_ipv4_unicast_modify(
1753 enum nb_event event, const struct lyd_node *dnode,
1754 union nb_resource *resource)
1755 {
1756 /* TODO: implement me. */
1757 return NB_OK;
1758 }
1759
1760 /*
1761 * XPath:
1762 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-multicast
1763 */
1764 static int lib_interface_isis_multi_topology_ipv4_multicast_modify(
1765 enum nb_event event, const struct lyd_node *dnode,
1766 union nb_resource *resource)
1767 {
1768 /* TODO: implement me. */
1769 return NB_OK;
1770 }
1771
1772 /*
1773 * XPath:
1774 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-management
1775 */
1776 static int lib_interface_isis_multi_topology_ipv4_management_modify(
1777 enum nb_event event, const struct lyd_node *dnode,
1778 union nb_resource *resource)
1779 {
1780 /* TODO: implement me. */
1781 return NB_OK;
1782 }
1783
1784 /*
1785 * XPath:
1786 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-unicast
1787 */
1788 static int lib_interface_isis_multi_topology_ipv6_unicast_modify(
1789 enum nb_event event, const struct lyd_node *dnode,
1790 union nb_resource *resource)
1791 {
1792 /* TODO: implement me. */
1793 return NB_OK;
1794 }
1795
1796 /*
1797 * XPath:
1798 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-multicast
1799 */
1800 static int lib_interface_isis_multi_topology_ipv6_multicast_modify(
1801 enum nb_event event, const struct lyd_node *dnode,
1802 union nb_resource *resource)
1803 {
1804 /* TODO: implement me. */
1805 return NB_OK;
1806 }
1807
1808 /*
1809 * XPath:
1810 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-management
1811 */
1812 static int lib_interface_isis_multi_topology_ipv6_management_modify(
1813 enum nb_event event, const struct lyd_node *dnode,
1814 union nb_resource *resource)
1815 {
1816 /* TODO: implement me. */
1817 return NB_OK;
1818 }
1819
1820 /*
1821 * XPath: /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-dstsrc
1822 */
1823 static int lib_interface_isis_multi_topology_ipv6_dstsrc_modify(
1824 enum nb_event event, const struct lyd_node *dnode,
1825 union nb_resource *resource)
1826 {
1827 /* TODO: implement me. */
1828 return NB_OK;
1829 }
1830
1831 /* clang-format off */
1832 const struct frr_yang_module_info frr_isisd_info = {
1833 .name = "frr-isisd",
1834 .nodes = {
1835 {
1836 .xpath = "/frr-isisd:isis/instance",
1837 .cbs.create = isis_instance_create,
1838 .cbs.delete = isis_instance_delete,
1839 .cbs.cli_show = cli_show_router_isis,
1840 .priority = NB_DFLT_PRIORITY - 1,
1841 },
1842 {
1843 .xpath = "/frr-isisd:isis/instance/is-type",
1844 .cbs.modify = isis_instance_is_type_modify,
1845 .cbs.cli_show = cli_show_isis_is_type,
1846 },
1847 {
1848 .xpath = "/frr-isisd:isis/instance/area-address",
1849 .cbs.create = isis_instance_area_address_create,
1850 .cbs.delete = isis_instance_area_address_delete,
1851 .cbs.cli_show = cli_show_isis_area_address,
1852 },
1853 {
1854 .xpath = "/frr-isisd:isis/instance/dynamic-hostname",
1855 .cbs.modify = isis_instance_dynamic_hostname_modify,
1856 .cbs.cli_show = cli_show_isis_dynamic_hostname,
1857 },
1858 {
1859 .xpath = "/frr-isisd:isis/instance/attached",
1860 .cbs.create = isis_instance_attached_create,
1861 .cbs.delete = isis_instance_attached_delete,
1862 .cbs.cli_show = cli_show_isis_attached,
1863 },
1864 {
1865 .xpath = "/frr-isisd:isis/instance/overload",
1866 .cbs.create = isis_instance_overload_create,
1867 .cbs.delete = isis_instance_overload_delete,
1868 .cbs.cli_show = cli_show_isis_overload,
1869 },
1870 {
1871 .xpath = "/frr-isisd:isis/instance/metric-style",
1872 .cbs.modify = isis_instance_metric_style_modify,
1873 .cbs.cli_show = cli_show_isis_metric_style,
1874 },
1875 {
1876 .xpath = "/frr-isisd:isis/instance/purge-originator",
1877 .cbs.create = isis_instance_purge_originator_create,
1878 .cbs.delete = isis_instance_purge_originator_delete,
1879 },
1880 {
1881 .xpath = "/frr-isisd:isis/instance/lsp/mtu",
1882 .cbs.modify = isis_instance_lsp_mtu_modify,
1883 },
1884 {
1885 .xpath = "/frr-isisd:isis/instance/lsp/refresh-interval",
1886 .cbs.cli_show = cli_show_isis_lsp_ref_interval,
1887 },
1888 {
1889 .xpath = "/frr-isisd:isis/instance/lsp/refresh-interval/level-1",
1890 .cbs.modify = isis_instance_lsp_refresh_interval_level_1_modify,
1891 },
1892 {
1893 .xpath = "/frr-isisd:isis/instance/lsp/refresh-interval/level-2",
1894 .cbs.modify = isis_instance_lsp_refresh_interval_level_2_modify,
1895 },
1896 {
1897 .xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-1",
1898 .cbs.modify = isis_instance_lsp_maximum_lifetime_level_1_modify,
1899 },
1900 {
1901 .xpath = "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-2",
1902 .cbs.modify = isis_instance_lsp_maximum_lifetime_level_2_modify,
1903 },
1904 {
1905 .xpath = "/frr-isisd:isis/instance/lsp/generation-interval",
1906 .cbs.cli_show = cli_show_isis_lsp_gen_interval,
1907 },
1908 {
1909 .xpath = "/frr-isisd:isis/instance/lsp/generation-interval/level-1",
1910 .cbs.modify = isis_instance_lsp_generation_interval_level_1_modify,
1911 },
1912 {
1913 .xpath = "/frr-isisd:isis/instance/lsp/generation-interval/level-2",
1914 .cbs.modify = isis_instance_lsp_generation_interval_level_2_modify,
1915 },
1916 {
1917 .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay",
1918 .cbs.create = isis_instance_spf_ietf_backoff_delay_create,
1919 .cbs.delete = isis_instance_spf_ietf_backoff_delay_delete,
1920 },
1921 {
1922 .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/init-delay",
1923 .cbs.modify = isis_instance_spf_ietf_backoff_delay_init_delay_modify,
1924 },
1925 {
1926 .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/short-delay",
1927 .cbs.modify = isis_instance_spf_ietf_backoff_delay_short_delay_modify,
1928 },
1929 {
1930 .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/long-delay",
1931 .cbs.modify = isis_instance_spf_ietf_backoff_delay_long_delay_modify,
1932 },
1933 {
1934 .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/hold-down",
1935 .cbs.modify = isis_instance_spf_ietf_backoff_delay_hold_down_modify,
1936 },
1937 {
1938 .xpath = "/frr-isisd:isis/instance/spf/ietf-backoff-delay/time-to-learn",
1939 .cbs.modify = isis_instance_spf_ietf_backoff_delay_time_to_learn_modify,
1940 },
1941 {
1942 .xpath = "/frr-isisd:isis/instance/spf/minimum-interval/level-1",
1943 .cbs.modify = isis_instance_spf_minimum_interval_level_1_modify,
1944 },
1945 {
1946 .xpath = "/frr-isisd:isis/instance/spf/minimum-interval/level-2",
1947 .cbs.modify = isis_instance_spf_minimum_interval_level_2_modify,
1948 },
1949 {
1950 .xpath = "/frr-isisd:isis/instance/area-password",
1951 .cbs.create = isis_instance_area_password_create,
1952 .cbs.delete = isis_instance_area_password_delete,
1953 .cbs.apply_finish = area_password_apply_finish,
1954 .cbs.cli_show = cli_show_isis_area_pwd,
1955 },
1956 {
1957 .xpath = "/frr-isisd:isis/instance/area-password/password",
1958 .cbs.modify = isis_instance_area_password_password_modify,
1959 },
1960 {
1961 .xpath = "/frr-isisd:isis/instance/area-password/password-type",
1962 .cbs.modify = isis_instance_area_password_password_type_modify,
1963 },
1964 {
1965 .xpath = "/frr-isisd:isis/instance/area-password/authenticate-snp",
1966 .cbs.modify = isis_instance_area_password_authenticate_snp_modify,
1967 },
1968 {
1969 .xpath = "/frr-isisd:isis/instance/domain-password",
1970 .cbs.create = isis_instance_domain_password_create,
1971 .cbs.delete = isis_instance_domain_password_delete,
1972 .cbs.apply_finish = domain_password_apply_finish,
1973 .cbs.cli_show = cli_show_isis_domain_pwd,
1974 },
1975 {
1976 .xpath = "/frr-isisd:isis/instance/domain-password/password",
1977 .cbs.modify = isis_instance_domain_password_password_modify,
1978 },
1979 {
1980 .xpath = "/frr-isisd:isis/instance/domain-password/password-type",
1981 .cbs.modify = isis_instance_domain_password_password_type_modify,
1982 },
1983 {
1984 .xpath = "/frr-isisd:isis/instance/domain-password/authenticate-snp",
1985 .cbs.modify = isis_instance_domain_password_authenticate_snp_modify,
1986 },
1987 {
1988 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4",
1989 .cbs.create = isis_instance_default_information_originate_ipv4_create,
1990 .cbs.delete = isis_instance_default_information_originate_ipv4_delete,
1991 },
1992 {
1993 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4/always",
1994 .cbs.create = isis_instance_default_information_originate_ipv4_always_create,
1995 .cbs.delete = isis_instance_default_information_originate_ipv4_always_delete,
1996 },
1997 {
1998 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4/route-map",
1999 .cbs.modify = isis_instance_default_information_originate_ipv4_route_map_modify,
2000 .cbs.delete = isis_instance_default_information_originate_ipv4_route_map_delete,
2001 },
2002 {
2003 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv4/metric",
2004 .cbs.modify = isis_instance_default_information_originate_ipv4_metric_modify,
2005 .cbs.delete = isis_instance_default_information_originate_ipv4_metric_delete,
2006 },
2007 {
2008 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6",
2009 .cbs.create = isis_instance_default_information_originate_ipv6_create,
2010 .cbs.delete = isis_instance_default_information_originate_ipv6_delete,
2011 },
2012 {
2013 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6/always",
2014 .cbs.create = isis_instance_default_information_originate_ipv6_always_create,
2015 .cbs.delete = isis_instance_default_information_originate_ipv6_always_delete,
2016 },
2017 {
2018 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6/route-map",
2019 .cbs.modify = isis_instance_default_information_originate_ipv6_route_map_modify,
2020 .cbs.delete = isis_instance_default_information_originate_ipv6_route_map_delete,
2021 },
2022 {
2023 .xpath = "/frr-isisd:isis/instance/default-information-originate/ipv6/metric",
2024 .cbs.modify = isis_instance_default_information_originate_ipv6_metric_modify,
2025 .cbs.delete = isis_instance_default_information_originate_ipv6_metric_delete,
2026 },
2027 {
2028 .xpath = "/frr-isisd:isis/instance/redistribute/ipv4",
2029 .cbs.create = isis_instance_redistribute_ipv4_create,
2030 .cbs.delete = isis_instance_redistribute_ipv4_delete,
2031 },
2032 {
2033 .xpath = "/frr-isisd:isis/instance/redistribute/ipv4/route-map",
2034 .cbs.modify = isis_instance_redistribute_ipv4_route_map_modify,
2035 .cbs.delete = isis_instance_redistribute_ipv4_route_map_delete,
2036 },
2037 {
2038 .xpath = "/frr-isisd:isis/instance/redistribute/ipv4/metric",
2039 .cbs.modify = isis_instance_redistribute_ipv4_metric_modify,
2040 .cbs.delete = isis_instance_redistribute_ipv4_metric_delete,
2041 },
2042 {
2043 .xpath = "/frr-isisd:isis/instance/redistribute/ipv6",
2044 .cbs.create = isis_instance_redistribute_ipv6_create,
2045 .cbs.delete = isis_instance_redistribute_ipv6_delete,
2046 },
2047 {
2048 .xpath = "/frr-isisd:isis/instance/redistribute/ipv6/route-map",
2049 .cbs.modify = isis_instance_redistribute_ipv6_route_map_modify,
2050 .cbs.delete = isis_instance_redistribute_ipv6_route_map_delete,
2051 },
2052 {
2053 .xpath = "/frr-isisd:isis/instance/redistribute/ipv6/metric",
2054 .cbs.modify = isis_instance_redistribute_ipv6_metric_modify,
2055 .cbs.delete = isis_instance_redistribute_ipv6_metric_delete,
2056 },
2057 {
2058 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-multicast",
2059 .cbs.create = isis_instance_multi_topology_ipv4_multicast_create,
2060 .cbs.delete = isis_instance_multi_topology_ipv4_multicast_delete,
2061 },
2062 {
2063 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-multicast/overload",
2064 .cbs.create = isis_instance_multi_topology_ipv4_multicast_overload_create,
2065 .cbs.delete = isis_instance_multi_topology_ipv4_multicast_overload_delete,
2066 },
2067 {
2068 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-management",
2069 .cbs.create = isis_instance_multi_topology_ipv4_management_create,
2070 .cbs.delete = isis_instance_multi_topology_ipv4_management_delete,
2071 },
2072 {
2073 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv4-management/overload",
2074 .cbs.create = isis_instance_multi_topology_ipv4_management_overload_create,
2075 .cbs.delete = isis_instance_multi_topology_ipv4_management_overload_delete,
2076 },
2077 {
2078 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-unicast",
2079 .cbs.create = isis_instance_multi_topology_ipv6_unicast_create,
2080 .cbs.delete = isis_instance_multi_topology_ipv6_unicast_delete,
2081 },
2082 {
2083 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-unicast/overload",
2084 .cbs.create = isis_instance_multi_topology_ipv6_unicast_overload_create,
2085 .cbs.delete = isis_instance_multi_topology_ipv6_unicast_overload_delete,
2086 },
2087 {
2088 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-multicast",
2089 .cbs.create = isis_instance_multi_topology_ipv6_multicast_create,
2090 .cbs.delete = isis_instance_multi_topology_ipv6_multicast_delete,
2091 },
2092 {
2093 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-multicast/overload",
2094 .cbs.create = isis_instance_multi_topology_ipv6_multicast_overload_create,
2095 .cbs.delete = isis_instance_multi_topology_ipv6_multicast_overload_delete,
2096 },
2097 {
2098 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-management",
2099 .cbs.create = isis_instance_multi_topology_ipv6_management_create,
2100 .cbs.delete = isis_instance_multi_topology_ipv6_management_delete,
2101 },
2102 {
2103 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-management/overload",
2104 .cbs.create = isis_instance_multi_topology_ipv6_management_overload_create,
2105 .cbs.delete = isis_instance_multi_topology_ipv6_management_overload_delete,
2106 },
2107 {
2108 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-dstsrc",
2109 .cbs.create = isis_instance_multi_topology_ipv6_dstsrc_create,
2110 .cbs.delete = isis_instance_multi_topology_ipv6_dstsrc_delete,
2111 },
2112 {
2113 .xpath = "/frr-isisd:isis/instance/multi-topology/ipv6-dstsrc/overload",
2114 .cbs.create = isis_instance_multi_topology_ipv6_dstsrc_overload_create,
2115 .cbs.delete = isis_instance_multi_topology_ipv6_dstsrc_overload_delete,
2116 },
2117 {
2118 .xpath = "/frr-isisd:isis/instance/log-adjacency-changes",
2119 .cbs.create = isis_instance_log_adjacency_changes_create,
2120 .cbs.delete = isis_instance_log_adjacency_changes_delete,
2121 },
2122 {
2123 .xpath = "/frr-isisd:isis/mpls-te",
2124 .cbs.create = isis_mpls_te_create,
2125 .cbs.delete = isis_mpls_te_delete,
2126 },
2127 {
2128 .xpath = "/frr-isisd:isis/mpls-te/router-address",
2129 .cbs.modify = isis_mpls_te_router_address_modify,
2130 .cbs.delete = isis_mpls_te_router_address_delete,
2131 },
2132 {
2133 .xpath = "/frr-interface:lib/interface/frr-isisd:isis",
2134 .cbs.create = lib_interface_isis_create,
2135 .cbs.delete = lib_interface_isis_delete,
2136 },
2137 {
2138 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/area-tag",
2139 .cbs.modify = lib_interface_isis_area_tag_modify,
2140 },
2141 {
2142 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/circuit-type",
2143 .cbs.modify = lib_interface_isis_circuit_type_modify,
2144 },
2145 {
2146 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/ipv4-routing",
2147 .cbs.create = lib_interface_isis_ipv4_routing_create,
2148 .cbs.delete = lib_interface_isis_ipv4_routing_delete,
2149 .cbs.cli_show = cli_show_ip_isis_ipv4,
2150 },
2151 {
2152 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/ipv6-routing",
2153 .cbs.create = lib_interface_isis_ipv6_routing_create,
2154 .cbs.delete = lib_interface_isis_ipv6_routing_delete,
2155 .cbs.cli_show = cli_show_ip_isis_ipv6,
2156 },
2157 {
2158 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-1",
2159 .cbs.modify = lib_interface_isis_csnp_interval_level_1_modify,
2160 },
2161 {
2162 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-2",
2163 .cbs.modify = lib_interface_isis_csnp_interval_level_2_modify,
2164 },
2165 {
2166 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-1",
2167 .cbs.modify = lib_interface_isis_psnp_interval_level_1_modify,
2168 },
2169 {
2170 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-2",
2171 .cbs.modify = lib_interface_isis_psnp_interval_level_2_modify,
2172 },
2173 {
2174 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/padding",
2175 .cbs.modify = lib_interface_isis_hello_padding_modify,
2176 },
2177 {
2178 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-1",
2179 .cbs.modify = lib_interface_isis_hello_interval_level_1_modify,
2180 },
2181 {
2182 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-2",
2183 .cbs.modify = lib_interface_isis_hello_interval_level_2_modify,
2184 },
2185 {
2186 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-1",
2187 .cbs.modify = lib_interface_isis_hello_multiplier_level_1_modify,
2188 },
2189 {
2190 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-2",
2191 .cbs.modify = lib_interface_isis_hello_multiplier_level_2_modify,
2192 },
2193 {
2194 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/metric/level-1",
2195 .cbs.modify = lib_interface_isis_metric_level_1_modify,
2196 },
2197 {
2198 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/metric/level-2",
2199 .cbs.modify = lib_interface_isis_metric_level_2_modify,
2200 },
2201 {
2202 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/priority/level-1",
2203 .cbs.modify = lib_interface_isis_priority_level_1_modify,
2204 },
2205 {
2206 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/priority/level-2",
2207 .cbs.modify = lib_interface_isis_priority_level_2_modify,
2208 },
2209 {
2210 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/network-type",
2211 .cbs.modify = lib_interface_isis_network_type_modify,
2212 .cbs.delete = lib_interface_isis_network_type_delete,
2213 },
2214 {
2215 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/passive",
2216 .cbs.create = lib_interface_isis_passive_create,
2217 .cbs.delete = lib_interface_isis_passive_delete,
2218 },
2219 {
2220 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/password",
2221 .cbs.create = lib_interface_isis_password_create,
2222 .cbs.delete = lib_interface_isis_password_delete,
2223 },
2224 {
2225 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/password/password",
2226 .cbs.modify = lib_interface_isis_password_password_modify,
2227 },
2228 {
2229 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/password/password-type",
2230 .cbs.modify = lib_interface_isis_password_password_type_modify,
2231 },
2232 {
2233 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake",
2234 .cbs.create = lib_interface_isis_disable_three_way_handshake_create,
2235 .cbs.delete = lib_interface_isis_disable_three_way_handshake_delete,
2236 },
2237 {
2238 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast",
2239 .cbs.modify = lib_interface_isis_multi_topology_ipv4_unicast_modify,
2240 },
2241 {
2242 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-multicast",
2243 .cbs.modify = lib_interface_isis_multi_topology_ipv4_multicast_modify,
2244 },
2245 {
2246 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-management",
2247 .cbs.modify = lib_interface_isis_multi_topology_ipv4_management_modify,
2248 },
2249 {
2250 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-unicast",
2251 .cbs.modify = lib_interface_isis_multi_topology_ipv6_unicast_modify,
2252 },
2253 {
2254 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-multicast",
2255 .cbs.modify = lib_interface_isis_multi_topology_ipv6_multicast_modify,
2256 },
2257 {
2258 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-management",
2259 .cbs.modify = lib_interface_isis_multi_topology_ipv6_management_modify,
2260 },
2261 {
2262 .xpath = "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-dstsrc",
2263 .cbs.modify = lib_interface_isis_multi_topology_ipv6_dstsrc_modify,
2264 },
2265 {
2266 .xpath = NULL,
2267 },
2268 }
2269 };