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