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