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