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