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