2 * Copyright (C) 2001,2002 Sampo Saaristo
3 * Tampere University of Technology
4 * Institute of Communications Engineering
5 * Copyright (C) 2018 Volta Networks
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)
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
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
24 #include "northbound.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"
51 * XPath: /frr-isisd:isis/instance
53 static int isis_instance_create(enum nb_event event
,
54 const struct lyd_node
*dnode
,
55 union nb_resource
*resource
)
57 struct isis_area
*area
;
60 if (event
!= NB_EV_APPLY
)
63 area_tag
= yang_dnode_get_string(dnode
, "./area-tag");
64 area
= isis_area_lookup(area_tag
);
66 return NB_ERR_INCONSISTENCY
;
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
);
75 static int isis_instance_delete(enum nb_event event
,
76 const struct lyd_node
*dnode
)
80 if (event
!= NB_EV_APPLY
)
83 area_tag
= yang_dnode_get_string(dnode
, "./area-tag");
84 isis_area_destroy(area_tag
);
90 * XPath: /frr-isisd:isis/instance/is-type
92 static int isis_instance_is_type_modify(enum nb_event event
,
93 const struct lyd_node
*dnode
,
94 union nb_resource
*resource
)
96 struct isis_area
*area
;
99 if (event
!= NB_EV_APPLY
)
102 area
= yang_dnode_get_entry(dnode
, true);
103 type
= yang_dnode_get_enum(dnode
, NULL
);
104 isis_area_is_type_set(area
, type
);
110 * XPath: /frr-isisd:isis/instance/area-address
112 static int isis_instance_area_address_create(enum nb_event event
,
113 const struct lyd_node
*dnode
,
114 union nb_resource
*resource
)
116 struct isis_area
*area
;
117 struct area_addr addr
, *addrr
= NULL
, *addrp
= NULL
;
118 struct listnode
*node
;
120 const char *net_title
= yang_dnode_get_string(dnode
, NULL
);
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) {
128 EC_LIB_NB_CB_CONFIG_VALIDATE
,
129 "nsel byte (last byte) in area address must be 0");
130 return NB_ERR_VALIDATION
;
132 if (isis
->sysid_set
) {
133 /* Check that the SystemID portions match */
134 if (memcmp(isis
->sysid
, GETSYSID((&addr
)),
137 EC_LIB_NB_CB_CONFIG_VALIDATE
,
138 "System ID must not change when defining additional area addresses");
139 return NB_ERR_VALIDATION
;
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
;
150 XFREE(MTYPE_ISIS_AREA_ADDR
, resource
->ptr
);
153 area
= yang_dnode_get_entry(dnode
, true);
154 addrr
= resource
->ptr
;
156 if (isis
->sysid_set
== 0) {
158 * First area address - get the SystemID for this router
160 memcpy(isis
->sysid
, GETSYSID(addrr
), ISIS_SYS_ID_LEN
);
163 /* check that we don't already have this address */
164 for (ALL_LIST_ELEMENTS_RO(area
->area_addrs
, node
,
166 if ((addrp
->addr_len
+ ISIS_SYS_ID_LEN
168 != (addrr
->addr_len
))
170 if (!memcmp(addrp
->area_addr
, addrr
->area_addr
,
172 XFREE(MTYPE_ISIS_AREA_ADDR
, addrr
);
173 return NB_OK
; /* silent fail */
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
);
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
);
196 static int isis_instance_area_address_delete(enum nb_event event
,
197 const struct lyd_node
*dnode
)
199 struct area_addr addr
, *addrp
= NULL
;
200 struct listnode
*node
;
202 struct isis_area
*area
;
203 const char *net_title
;
205 if (event
!= NB_EV_APPLY
)
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
))
218 return NB_ERR_INCONSISTENCY
;
220 listnode_delete(area
->area_addrs
, addrp
);
221 XFREE(MTYPE_ISIS_AREA_ADDR
, addrp
);
223 * Last area address - reset the SystemID for this router
225 if (listcount(area
->area_addrs
) == 0) {
226 memset(isis
->sysid
, 0, ISIS_SYS_ID_LEN
);
228 if (isis
->debugs
& DEBUG_EVENTS
)
229 zlog_debug("Router has no SystemID");
236 * XPath: /frr-isisd:isis/instance/dynamic-hostname
238 static int isis_instance_dynamic_hostname_modify(enum nb_event event
,
239 const struct lyd_node
*dnode
,
240 union nb_resource
*resource
)
242 struct isis_area
*area
;
244 if (event
!= NB_EV_APPLY
)
247 area
= yang_dnode_get_entry(dnode
, true);
248 isis_area_dynhostname_set(area
, yang_dnode_get_bool(dnode
, NULL
));
254 * XPath: /frr-isisd:isis/instance/attached
256 static int isis_instance_attached_create(enum nb_event event
,
257 const struct lyd_node
*dnode
,
258 union nb_resource
*resource
)
260 struct isis_area
*area
;
262 if (event
!= NB_EV_APPLY
)
265 area
= yang_dnode_get_entry(dnode
, true);
266 isis_area_attached_bit_set(area
, true);
271 static int isis_instance_attached_delete(enum nb_event event
,
272 const struct lyd_node
*dnode
)
274 struct isis_area
*area
;
276 if (event
!= NB_EV_APPLY
)
279 area
= yang_dnode_get_entry(dnode
, true);
280 isis_area_attached_bit_set(area
, false);
286 * XPath: /frr-isisd:isis/instance/overload
288 static int isis_instance_overload_create(enum nb_event event
,
289 const struct lyd_node
*dnode
,
290 union nb_resource
*resource
)
292 struct isis_area
*area
;
294 if (event
!= NB_EV_APPLY
)
297 area
= yang_dnode_get_entry(dnode
, true);
298 isis_area_overload_bit_set(area
, true);
303 static int isis_instance_overload_delete(enum nb_event event
,
304 const struct lyd_node
*dnode
)
306 struct isis_area
*area
;
308 if (event
!= NB_EV_APPLY
)
311 area
= yang_dnode_get_entry(dnode
, true);
312 isis_area_overload_bit_set(area
, false);
318 * XPath: /frr-isisd:isis/instance/metric-style
320 static int isis_instance_metric_style_modify(enum nb_event event
,
321 const struct lyd_node
*dnode
,
322 union nb_resource
*resource
)
324 struct isis_area
*area
;
325 bool old_metric
, new_metric
;
326 enum isis_metric_style metric_style
= yang_dnode_get_enum(dnode
, NULL
);
328 if (event
!= NB_EV_APPLY
)
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
);
340 * XPath: /frr-isisd:isis/instance/purge-originator
342 static int isis_instance_purge_originator_create(enum nb_event event
,
343 const struct lyd_node
*dnode
,
344 union nb_resource
*resource
)
346 /* TODO: implement me. */
350 static int isis_instance_purge_originator_delete(enum nb_event event
,
351 const struct lyd_node
*dnode
)
353 /* TODO: implement me. */
358 * XPath: /frr-isisd:isis/instance/lsp/mtu
360 static int isis_instance_lsp_mtu_modify(enum nb_event event
,
361 const struct lyd_node
*dnode
,
362 union nb_resource
*resource
)
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
;
371 area
= yang_dnode_get_entry(dnode
, false);
374 for (ALL_LIST_ELEMENTS_RO(area
->circuit_list
, node
, circuit
)) {
375 if (circuit
->state
!= C_STATE_INIT
376 && circuit
->state
!= C_STATE_UP
)
378 if (lsp_mtu
> isis_circuit_pdu_size(circuit
)) {
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
;
392 area
= yang_dnode_get_entry(dnode
, true);
393 isis_area_lsp_mtu_set(area
, lsp_mtu
);
401 * XPath: /frr-isisd:isis/instance/lsp/refresh-interval/level-1
404 isis_instance_lsp_refresh_interval_level_1_modify(enum nb_event event
,
405 const struct lyd_node
*dnode
,
406 union nb_resource
*resource
)
408 struct isis_area
*area
;
411 if (event
!= NB_EV_APPLY
)
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
);
422 * XPath: /frr-isisd:isis/instance/lsp/refresh-interval/level-2
425 isis_instance_lsp_refresh_interval_level_2_modify(enum nb_event event
,
426 const struct lyd_node
*dnode
,
427 union nb_resource
*resource
)
429 struct isis_area
*area
;
432 if (event
!= NB_EV_APPLY
)
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
);
443 * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-1
446 isis_instance_lsp_maximum_lifetime_level_1_modify(enum nb_event event
,
447 const struct lyd_node
*dnode
,
448 union nb_resource
*resource
)
450 struct isis_area
*area
;
453 if (event
!= NB_EV_APPLY
)
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
);
464 * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime/level-2
467 isis_instance_lsp_maximum_lifetime_level_2_modify(enum nb_event event
,
468 const struct lyd_node
*dnode
,
469 union nb_resource
*resource
)
471 struct isis_area
*area
;
474 if (event
!= NB_EV_APPLY
)
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
);
485 * XPath: /frr-isisd:isis/instance/lsp/generation-interval/level-1
487 static int isis_instance_lsp_generation_interval_level_1_modify(
488 enum nb_event event
, const struct lyd_node
*dnode
,
489 union nb_resource
*resource
)
491 struct isis_area
*area
;
494 if (event
!= NB_EV_APPLY
)
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
;
505 * XPath: /frr-isisd:isis/instance/lsp/generation-interval/level-2
507 static int isis_instance_lsp_generation_interval_level_2_modify(
508 enum nb_event event
, const struct lyd_node
*dnode
,
509 union nb_resource
*resource
)
511 struct isis_area
*area
;
514 if (event
!= NB_EV_APPLY
)
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
;
525 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay
528 isis_instance_spf_ietf_backoff_delay_create(enum nb_event event
,
529 const struct lyd_node
*dnode
,
530 union nb_resource
*resource
)
532 /* TODO: implement me. */
537 isis_instance_spf_ietf_backoff_delay_delete(enum nb_event event
,
538 const struct lyd_node
*dnode
)
540 /* TODO: implement me. */
545 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/init-delay
547 static 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
)
551 /* TODO: implement me. */
556 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/short-delay
558 static 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
)
562 /* TODO: implement me. */
567 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/long-delay
569 static 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
)
573 /* TODO: implement me. */
578 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/hold-down
580 static 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
)
584 /* TODO: implement me. */
589 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay/time-to-learn
591 static 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
)
595 /* TODO: implement me. */
600 * XPath: /frr-isisd:isis/instance/spf/minimum-interval/level-1
603 isis_instance_spf_minimum_interval_level_1_modify(enum nb_event event
,
604 const struct lyd_node
*dnode
,
605 union nb_resource
*resource
)
607 struct isis_area
*area
;
609 if (event
!= NB_EV_APPLY
)
612 area
= yang_dnode_get_entry(dnode
, true);
613 area
->min_spf_interval
[0] = yang_dnode_get_uint16(dnode
, NULL
);
619 * XPath: /frr-isisd:isis/instance/spf/minimum-interval/level-2
622 isis_instance_spf_minimum_interval_level_2_modify(enum nb_event event
,
623 const struct lyd_node
*dnode
,
624 union nb_resource
*resource
)
626 struct isis_area
*area
;
628 if (event
!= NB_EV_APPLY
)
631 area
= yang_dnode_get_entry(dnode
, true);
632 area
->min_spf_interval
[1] = yang_dnode_get_uint16(dnode
, NULL
);
638 * XPath: /frr-isisd:isis/instance/area-password
640 static void area_password_apply_finish(const struct lyd_node
*dnode
)
642 const char *password
= yang_dnode_get_string(dnode
, "./password");
643 struct isis_area
*area
= yang_dnode_get_entry(dnode
, true);
644 int pass_type
= yang_dnode_get_enum(dnode
, "./password-type");
645 uint8_t snp_auth
= yang_dnode_get_enum(dnode
, "./authenticate-snp");
648 case ISIS_PASSWD_TYPE_CLEARTXT
:
649 isis_area_passwd_cleartext_set(area
, IS_LEVEL_1
, password
,
652 case ISIS_PASSWD_TYPE_HMAC_MD5
:
653 isis_area_passwd_hmac_md5_set(area
, IS_LEVEL_1
, password
,
659 static int isis_instance_area_password_create(enum nb_event event
,
660 const struct lyd_node
*dnode
,
661 union nb_resource
*resource
)
663 /* actual setting is done in apply_finish */
667 static int isis_instance_area_password_delete(enum nb_event event
,
668 const struct lyd_node
*dnode
)
670 struct isis_area
*area
;
672 if (event
!= NB_EV_APPLY
)
675 area
= yang_dnode_get_entry(dnode
, true);
676 isis_area_passwd_unset(area
, IS_LEVEL_1
);
682 * XPath: /frr-isisd:isis/instance/area-password/password
685 isis_instance_area_password_password_modify(enum nb_event event
,
686 const struct lyd_node
*dnode
,
687 union nb_resource
*resource
)
689 /* actual setting is done in apply_finish */
694 * XPath: /frr-isisd:isis/instance/area-password/password-type
697 isis_instance_area_password_password_type_modify(enum nb_event event
,
698 const struct lyd_node
*dnode
,
699 union nb_resource
*resource
)
701 /* actual setting is done in apply_finish */
706 * XPath: /frr-isisd:isis/instance/area-password/authenticate-snp
708 static int isis_instance_area_password_authenticate_snp_modify(
709 enum nb_event event
, const struct lyd_node
*dnode
,
710 union nb_resource
*resource
)
712 /* actual setting is done in apply_finish */
717 * XPath: /frr-isisd:isis/instance/domain-password
719 static void domain_password_apply_finish(const struct lyd_node
*dnode
)
721 const char *password
= yang_dnode_get_string(dnode
, "./password");
722 struct isis_area
*area
= yang_dnode_get_entry(dnode
, true);
723 int pass_type
= yang_dnode_get_enum(dnode
, "./password-type");
724 uint8_t snp_auth
= yang_dnode_get_enum(dnode
, "./authenticate-snp");
727 case ISIS_PASSWD_TYPE_CLEARTXT
:
728 isis_area_passwd_cleartext_set(area
, IS_LEVEL_2
, password
,
731 case ISIS_PASSWD_TYPE_HMAC_MD5
:
732 isis_area_passwd_hmac_md5_set(area
, IS_LEVEL_2
, password
,
738 static int isis_instance_domain_password_create(enum nb_event event
,
739 const struct lyd_node
*dnode
,
740 union nb_resource
*resource
)
742 /* actual setting is done in apply_finish */
746 static int isis_instance_domain_password_delete(enum nb_event event
,
747 const struct lyd_node
*dnode
)
749 struct isis_area
*area
;
751 if (event
!= NB_EV_APPLY
)
754 area
= yang_dnode_get_entry(dnode
, true);
755 isis_area_passwd_unset(area
, IS_LEVEL_2
);
761 * XPath: /frr-isisd:isis/instance/domain-password/password
764 isis_instance_domain_password_password_modify(enum nb_event event
,
765 const struct lyd_node
*dnode
,
766 union nb_resource
*resource
)
768 /* actual setting is done in apply_finish */
773 * XPath: /frr-isisd:isis/instance/domain-password/password-type
776 isis_instance_domain_password_password_type_modify(enum nb_event event
,
777 const struct lyd_node
*dnode
,
778 union nb_resource
*resource
)
780 /* actual setting is done in apply_finish */
785 * XPath: /frr-isisd:isis/instance/domain-password/authenticate-snp
787 static int isis_instance_domain_password_authenticate_snp_modify(
788 enum nb_event event
, const struct lyd_node
*dnode
,
789 union nb_resource
*resource
)
791 /* actual setting is done in apply_finish */
796 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4
798 static int isis_instance_default_information_originate_ipv4_create(
799 enum nb_event event
, const struct lyd_node
*dnode
,
800 union nb_resource
*resource
)
802 /* TODO: implement me. */
806 static int isis_instance_default_information_originate_ipv4_delete(
807 enum nb_event event
, const struct lyd_node
*dnode
)
809 /* TODO: implement me. */
814 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/always
816 static int isis_instance_default_information_originate_ipv4_always_create(
817 enum nb_event event
, const struct lyd_node
*dnode
,
818 union nb_resource
*resource
)
820 /* TODO: implement me. */
824 static int isis_instance_default_information_originate_ipv4_always_delete(
825 enum nb_event event
, const struct lyd_node
*dnode
)
827 /* TODO: implement me. */
832 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/route-map
834 static int isis_instance_default_information_originate_ipv4_route_map_modify(
835 enum nb_event event
, const struct lyd_node
*dnode
,
836 union nb_resource
*resource
)
838 /* TODO: implement me. */
842 static int isis_instance_default_information_originate_ipv4_route_map_delete(
843 enum nb_event event
, const struct lyd_node
*dnode
)
845 /* TODO: implement me. */
850 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv4/metric
852 static int isis_instance_default_information_originate_ipv4_metric_modify(
853 enum nb_event event
, const struct lyd_node
*dnode
,
854 union nb_resource
*resource
)
856 /* TODO: implement me. */
860 static int isis_instance_default_information_originate_ipv4_metric_delete(
861 enum nb_event event
, const struct lyd_node
*dnode
)
863 /* TODO: implement me. */
868 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6
870 static int isis_instance_default_information_originate_ipv6_create(
871 enum nb_event event
, const struct lyd_node
*dnode
,
872 union nb_resource
*resource
)
874 /* TODO: implement me. */
878 static int isis_instance_default_information_originate_ipv6_delete(
879 enum nb_event event
, const struct lyd_node
*dnode
)
881 /* TODO: implement me. */
886 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/always
888 static int isis_instance_default_information_originate_ipv6_always_create(
889 enum nb_event event
, const struct lyd_node
*dnode
,
890 union nb_resource
*resource
)
892 /* TODO: implement me. */
896 static int isis_instance_default_information_originate_ipv6_always_delete(
897 enum nb_event event
, const struct lyd_node
*dnode
)
899 /* TODO: implement me. */
904 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/route-map
906 static int isis_instance_default_information_originate_ipv6_route_map_modify(
907 enum nb_event event
, const struct lyd_node
*dnode
,
908 union nb_resource
*resource
)
910 /* TODO: implement me. */
914 static int isis_instance_default_information_originate_ipv6_route_map_delete(
915 enum nb_event event
, const struct lyd_node
*dnode
)
917 /* TODO: implement me. */
922 * XPath: /frr-isisd:isis/instance/default-information-originate/ipv6/metric
924 static int isis_instance_default_information_originate_ipv6_metric_modify(
925 enum nb_event event
, const struct lyd_node
*dnode
,
926 union nb_resource
*resource
)
928 /* TODO: implement me. */
932 static int isis_instance_default_information_originate_ipv6_metric_delete(
933 enum nb_event event
, const struct lyd_node
*dnode
)
935 /* TODO: implement me. */
940 * XPath: /frr-isisd:isis/instance/redistribute/ipv4
942 static int isis_instance_redistribute_ipv4_create(enum nb_event event
,
943 const struct lyd_node
*dnode
,
944 union nb_resource
*resource
)
946 /* TODO: implement me. */
950 static int isis_instance_redistribute_ipv4_delete(enum nb_event event
,
951 const struct lyd_node
*dnode
)
953 /* TODO: implement me. */
958 * XPath: /frr-isisd:isis/instance/redistribute/ipv4/route-map
961 isis_instance_redistribute_ipv4_route_map_modify(enum nb_event event
,
962 const struct lyd_node
*dnode
,
963 union nb_resource
*resource
)
965 /* TODO: implement me. */
970 isis_instance_redistribute_ipv4_route_map_delete(enum nb_event event
,
971 const struct lyd_node
*dnode
)
973 /* TODO: implement me. */
978 * XPath: /frr-isisd:isis/instance/redistribute/ipv4/metric
981 isis_instance_redistribute_ipv4_metric_modify(enum nb_event event
,
982 const struct lyd_node
*dnode
,
983 union nb_resource
*resource
)
985 /* TODO: implement me. */
990 isis_instance_redistribute_ipv4_metric_delete(enum nb_event event
,
991 const struct lyd_node
*dnode
)
993 /* TODO: implement me. */
998 * XPath: /frr-isisd:isis/instance/redistribute/ipv6
1000 static int isis_instance_redistribute_ipv6_create(enum nb_event event
,
1001 const struct lyd_node
*dnode
,
1002 union nb_resource
*resource
)
1004 /* TODO: implement me. */
1008 static int isis_instance_redistribute_ipv6_delete(enum nb_event event
,
1009 const struct lyd_node
*dnode
)
1011 /* TODO: implement me. */
1016 * XPath: /frr-isisd:isis/instance/redistribute/ipv6/route-map
1019 isis_instance_redistribute_ipv6_route_map_modify(enum nb_event event
,
1020 const struct lyd_node
*dnode
,
1021 union nb_resource
*resource
)
1023 /* TODO: implement me. */
1028 isis_instance_redistribute_ipv6_route_map_delete(enum nb_event event
,
1029 const struct lyd_node
*dnode
)
1031 /* TODO: implement me. */
1036 * XPath: /frr-isisd:isis/instance/redistribute/ipv6/metric
1039 isis_instance_redistribute_ipv6_metric_modify(enum nb_event event
,
1040 const struct lyd_node
*dnode
,
1041 union nb_resource
*resource
)
1043 /* TODO: implement me. */
1048 isis_instance_redistribute_ipv6_metric_delete(enum nb_event event
,
1049 const struct lyd_node
*dnode
)
1051 /* TODO: implement me. */
1056 * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-multicast
1059 isis_instance_multi_topology_ipv4_multicast_create(enum nb_event event
,
1060 const struct lyd_node
*dnode
,
1061 union nb_resource
*resource
)
1063 /* TODO: implement me. */
1068 isis_instance_multi_topology_ipv4_multicast_delete(enum nb_event event
,
1069 const struct lyd_node
*dnode
)
1071 /* TODO: implement me. */
1076 * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-multicast/overload
1078 static int isis_instance_multi_topology_ipv4_multicast_overload_create(
1079 enum nb_event event
, const struct lyd_node
*dnode
,
1080 union nb_resource
*resource
)
1082 /* TODO: implement me. */
1086 static int isis_instance_multi_topology_ipv4_multicast_overload_delete(
1087 enum nb_event event
, const struct lyd_node
*dnode
)
1089 /* TODO: implement me. */
1094 * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-management
1096 static int isis_instance_multi_topology_ipv4_management_create(
1097 enum nb_event event
, const struct lyd_node
*dnode
,
1098 union nb_resource
*resource
)
1100 /* TODO: implement me. */
1104 static int isis_instance_multi_topology_ipv4_management_delete(
1105 enum nb_event event
, const struct lyd_node
*dnode
)
1107 /* TODO: implement me. */
1112 * XPath: /frr-isisd:isis/instance/multi-topology/ipv4-management/overload
1114 static int isis_instance_multi_topology_ipv4_management_overload_create(
1115 enum nb_event event
, const struct lyd_node
*dnode
,
1116 union nb_resource
*resource
)
1118 /* TODO: implement me. */
1122 static int isis_instance_multi_topology_ipv4_management_overload_delete(
1123 enum nb_event event
, const struct lyd_node
*dnode
)
1125 /* TODO: implement me. */
1130 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-unicast
1133 isis_instance_multi_topology_ipv6_unicast_create(enum nb_event event
,
1134 const struct lyd_node
*dnode
,
1135 union nb_resource
*resource
)
1137 /* TODO: implement me. */
1142 isis_instance_multi_topology_ipv6_unicast_delete(enum nb_event event
,
1143 const struct lyd_node
*dnode
)
1145 /* TODO: implement me. */
1150 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-unicast/overload
1152 static int isis_instance_multi_topology_ipv6_unicast_overload_create(
1153 enum nb_event event
, const struct lyd_node
*dnode
,
1154 union nb_resource
*resource
)
1156 /* TODO: implement me. */
1160 static int isis_instance_multi_topology_ipv6_unicast_overload_delete(
1161 enum nb_event event
, const struct lyd_node
*dnode
)
1163 /* TODO: implement me. */
1168 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-multicast
1171 isis_instance_multi_topology_ipv6_multicast_create(enum nb_event event
,
1172 const struct lyd_node
*dnode
,
1173 union nb_resource
*resource
)
1175 /* TODO: implement me. */
1180 isis_instance_multi_topology_ipv6_multicast_delete(enum nb_event event
,
1181 const struct lyd_node
*dnode
)
1183 /* TODO: implement me. */
1188 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-multicast/overload
1190 static int isis_instance_multi_topology_ipv6_multicast_overload_create(
1191 enum nb_event event
, const struct lyd_node
*dnode
,
1192 union nb_resource
*resource
)
1194 /* TODO: implement me. */
1198 static int isis_instance_multi_topology_ipv6_multicast_overload_delete(
1199 enum nb_event event
, const struct lyd_node
*dnode
)
1201 /* TODO: implement me. */
1206 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-management
1208 static int isis_instance_multi_topology_ipv6_management_create(
1209 enum nb_event event
, const struct lyd_node
*dnode
,
1210 union nb_resource
*resource
)
1212 /* TODO: implement me. */
1216 static int isis_instance_multi_topology_ipv6_management_delete(
1217 enum nb_event event
, const struct lyd_node
*dnode
)
1219 /* TODO: implement me. */
1224 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-management/overload
1226 static int isis_instance_multi_topology_ipv6_management_overload_create(
1227 enum nb_event event
, const struct lyd_node
*dnode
,
1228 union nb_resource
*resource
)
1230 /* TODO: implement me. */
1234 static int isis_instance_multi_topology_ipv6_management_overload_delete(
1235 enum nb_event event
, const struct lyd_node
*dnode
)
1237 /* TODO: implement me. */
1242 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-dstsrc
1245 isis_instance_multi_topology_ipv6_dstsrc_create(enum nb_event event
,
1246 const struct lyd_node
*dnode
,
1247 union nb_resource
*resource
)
1249 /* TODO: implement me. */
1254 isis_instance_multi_topology_ipv6_dstsrc_delete(enum nb_event event
,
1255 const struct lyd_node
*dnode
)
1257 /* TODO: implement me. */
1262 * XPath: /frr-isisd:isis/instance/multi-topology/ipv6-dstsrc/overload
1264 static int isis_instance_multi_topology_ipv6_dstsrc_overload_create(
1265 enum nb_event event
, const struct lyd_node
*dnode
,
1266 union nb_resource
*resource
)
1268 /* TODO: implement me. */
1272 static int isis_instance_multi_topology_ipv6_dstsrc_overload_delete(
1273 enum nb_event event
, const struct lyd_node
*dnode
)
1275 /* TODO: implement me. */
1280 * XPath: /frr-isisd:isis/instance/log-adjacency-changes
1283 isis_instance_log_adjacency_changes_create(enum nb_event event
,
1284 const struct lyd_node
*dnode
,
1285 union nb_resource
*resource
)
1287 /* TODO: implement me. */
1292 isis_instance_log_adjacency_changes_delete(enum nb_event event
,
1293 const struct lyd_node
*dnode
)
1295 /* TODO: implement me. */
1300 * XPath: /frr-isisd:isis/mpls-te
1302 static int isis_mpls_te_create(enum nb_event event
,
1303 const struct lyd_node
*dnode
,
1304 union nb_resource
*resource
)
1306 /* TODO: implement me. */
1310 static int isis_mpls_te_delete(enum nb_event event
,
1311 const struct lyd_node
*dnode
)
1313 /* TODO: implement me. */
1318 * XPath: /frr-isisd:isis/mpls-te/router-address
1320 static int isis_mpls_te_router_address_modify(enum nb_event event
,
1321 const struct lyd_node
*dnode
,
1322 union nb_resource
*resource
)
1324 /* TODO: implement me. */
1328 static int isis_mpls_te_router_address_delete(enum nb_event event
,
1329 const struct lyd_node
*dnode
)
1331 /* TODO: implement me. */
1336 * XPath: /frr-interface:lib/interface/frr-isisd:isis
1338 static int lib_interface_isis_create(enum nb_event event
,
1339 const struct lyd_node
*dnode
,
1340 union nb_resource
*resource
)
1342 struct isis_area
*area
;
1343 struct interface
*ifp
;
1344 struct isis_circuit
*circuit
;
1345 const char *area_tag
= yang_dnode_get_string(dnode
, "./area-tag");
1347 if (event
!= NB_EV_APPLY
)
1350 area
= isis_area_lookup(area_tag
);
1351 /* The area should have already be created. We are
1352 * setting the priority of the global isis area creation
1353 * slightly lower, so it should be executed first, but I
1354 * cannot rely on that so here I have to check.
1358 EC_LIB_NB_CB_CONFIG_APPLY
,
1359 "%s: attempt to create circuit for area %s before the area has been created",
1360 __func__
, area_tag
);
1364 ifp
= yang_dnode_get_entry(dnode
, true);
1365 circuit
= isis_circuit_create(area
, ifp
);
1366 assert(circuit
->state
== C_STATE_CONF
|| circuit
->state
== C_STATE_UP
);
1367 yang_dnode_set_entry(dnode
, circuit
);
1372 static int lib_interface_isis_delete(enum nb_event event
,
1373 const struct lyd_node
*dnode
)
1375 struct isis_circuit
*circuit
;
1377 if (event
!= NB_EV_APPLY
)
1380 circuit
= yang_dnode_get_entry(dnode
, true);
1382 return NB_ERR_INCONSISTENCY
;
1383 /* delete circuit through csm changes */
1384 switch (circuit
->state
) {
1386 isis_csm_state_change(IF_DOWN_FROM_Z
, circuit
,
1387 circuit
->interface
);
1388 isis_csm_state_change(ISIS_DISABLE
, circuit
, circuit
->area
);
1391 isis_csm_state_change(ISIS_DISABLE
, circuit
, circuit
->area
);
1394 isis_csm_state_change(IF_DOWN_FROM_Z
, circuit
,
1395 circuit
->interface
);
1403 * XPath: /frr-interface:lib/interface/frr-isisd:isis/area-tag
1405 static int lib_interface_isis_area_tag_modify(enum nb_event event
,
1406 const struct lyd_node
*dnode
,
1407 union nb_resource
*resource
)
1409 struct isis_circuit
*circuit
;
1410 struct interface
*ifp
;
1412 const char *area_tag
, *ifname
, *vrfname
;
1414 if (event
== NB_EV_VALIDATE
) {
1415 /* libyang doesn't like relative paths across module boundaries
1417 ifname
= yang_dnode_get_string(dnode
->parent
->parent
, "./name");
1418 vrfname
= yang_dnode_get_string(dnode
->parent
->parent
, "./vrf");
1419 vrf
= vrf_lookup_by_name(vrfname
);
1421 ifp
= if_lookup_by_name(ifname
, vrf
->vrf_id
);
1424 circuit
= circuit_lookup_by_ifp(ifp
, isis
->init_circ_list
);
1425 area_tag
= yang_dnode_get_string(dnode
, NULL
);
1426 if (circuit
&& circuit
->area
&& circuit
->area
->area_tag
1427 && strcmp(circuit
->area
->area_tag
, area_tag
)) {
1428 flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE
,
1429 "ISIS circuit is already defined on %s",
1430 circuit
->area
->area_tag
);
1431 return NB_ERR_VALIDATION
;
1439 * XPath: /frr-interface:lib/interface/frr-isisd:isis/circuit-type
1441 static int lib_interface_isis_circuit_type_modify(enum nb_event event
,
1442 const struct lyd_node
*dnode
,
1443 union nb_resource
*resource
)
1445 int circ_type
= yang_dnode_get_enum(dnode
, NULL
);
1446 struct isis_circuit
*circuit
;
1447 struct interface
*ifp
;
1449 const char *ifname
, *vrfname
;
1452 case NB_EV_VALIDATE
:
1453 /* libyang doesn't like relative paths across module boundaries
1455 ifname
= yang_dnode_get_string(dnode
->parent
->parent
, "./name");
1456 vrfname
= yang_dnode_get_string(dnode
->parent
->parent
, "./vrf");
1457 vrf
= vrf_lookup_by_name(vrfname
);
1459 ifp
= if_lookup_by_name(ifname
, vrf
->vrf_id
);
1462 circuit
= circuit_lookup_by_ifp(ifp
, isis
->init_circ_list
);
1463 if (circuit
&& circuit
->state
== C_STATE_UP
1464 && circuit
->area
->is_type
!= IS_LEVEL_1_AND_2
1465 && circuit
->area
->is_type
!= circ_type
) {
1466 flog_warn(EC_LIB_NB_CB_CONFIG_VALIDATE
,
1467 "Invalid circuit level for area %s",
1468 circuit
->area
->area_tag
);
1469 return NB_ERR_VALIDATION
;
1476 circuit
= yang_dnode_get_entry(dnode
, true);
1477 isis_circuit_is_type_set(circuit
, circ_type
);
1485 * XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv4-routing
1487 static int lib_interface_isis_ipv4_routing_create(enum nb_event event
,
1488 const struct lyd_node
*dnode
,
1489 union nb_resource
*resource
)
1492 struct isis_circuit
*circuit
;
1494 if (event
!= NB_EV_APPLY
)
1497 circuit
= yang_dnode_get_entry(dnode
, true);
1498 ipv6
= yang_dnode_exists(dnode
, "../ipv6-routing");
1499 isis_circuit_af_set(circuit
, true, ipv6
);
1504 static int lib_interface_isis_ipv4_routing_delete(enum nb_event event
,
1505 const struct lyd_node
*dnode
)
1508 struct isis_circuit
*circuit
;
1510 if (event
!= NB_EV_APPLY
)
1513 circuit
= yang_dnode_get_entry(dnode
, true);
1514 if (circuit
&& circuit
->area
) {
1515 ipv6
= yang_dnode_exists(dnode
, "../ipv6-routing");
1516 isis_circuit_af_set(circuit
, false, ipv6
);
1523 * XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv6-routing
1525 static int lib_interface_isis_ipv6_routing_create(enum nb_event event
,
1526 const struct lyd_node
*dnode
,
1527 union nb_resource
*resource
)
1530 struct isis_circuit
*circuit
;
1532 if (event
!= NB_EV_APPLY
)
1535 circuit
= yang_dnode_get_entry(dnode
, true);
1536 ipv4
= yang_dnode_exists(dnode
, "../ipv6-routing");
1537 isis_circuit_af_set(circuit
, ipv4
, true);
1542 static int lib_interface_isis_ipv6_routing_delete(enum nb_event event
,
1543 const struct lyd_node
*dnode
)
1546 struct isis_circuit
*circuit
;
1548 if (event
!= NB_EV_APPLY
)
1551 circuit
= yang_dnode_get_entry(dnode
, true);
1552 if (circuit
->area
) {
1553 ipv4
= yang_dnode_exists(dnode
, "../ipv4-routing");
1554 isis_circuit_af_set(circuit
, ipv4
, false);
1561 * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-1
1564 lib_interface_isis_csnp_interval_level_1_modify(enum nb_event event
,
1565 const struct lyd_node
*dnode
,
1566 union nb_resource
*resource
)
1568 /* TODO: implement me. */
1573 * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-2
1576 lib_interface_isis_csnp_interval_level_2_modify(enum nb_event event
,
1577 const struct lyd_node
*dnode
,
1578 union nb_resource
*resource
)
1580 /* TODO: implement me. */
1585 * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-1
1588 lib_interface_isis_psnp_interval_level_1_modify(enum nb_event event
,
1589 const struct lyd_node
*dnode
,
1590 union nb_resource
*resource
)
1592 /* TODO: implement me. */
1597 * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-2
1600 lib_interface_isis_psnp_interval_level_2_modify(enum nb_event event
,
1601 const struct lyd_node
*dnode
,
1602 union nb_resource
*resource
)
1604 /* TODO: implement me. */
1609 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/padding
1611 static int lib_interface_isis_hello_padding_modify(enum nb_event event
,
1612 const struct lyd_node
*dnode
,
1613 union nb_resource
*resource
)
1615 /* TODO: implement me. */
1620 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-1
1623 lib_interface_isis_hello_interval_level_1_modify(enum nb_event event
,
1624 const struct lyd_node
*dnode
,
1625 union nb_resource
*resource
)
1627 /* TODO: implement me. */
1632 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-2
1635 lib_interface_isis_hello_interval_level_2_modify(enum nb_event event
,
1636 const struct lyd_node
*dnode
,
1637 union nb_resource
*resource
)
1639 /* TODO: implement me. */
1644 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-1
1647 lib_interface_isis_hello_multiplier_level_1_modify(enum nb_event event
,
1648 const struct lyd_node
*dnode
,
1649 union nb_resource
*resource
)
1651 /* TODO: implement me. */
1656 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-2
1659 lib_interface_isis_hello_multiplier_level_2_modify(enum nb_event event
,
1660 const struct lyd_node
*dnode
,
1661 union nb_resource
*resource
)
1663 /* TODO: implement me. */
1668 * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric/level-1
1671 lib_interface_isis_metric_level_1_modify(enum nb_event event
,
1672 const struct lyd_node
*dnode
,
1673 union nb_resource
*resource
)
1675 /* TODO: implement me. */
1680 * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric/level-2
1683 lib_interface_isis_metric_level_2_modify(enum nb_event event
,
1684 const struct lyd_node
*dnode
,
1685 union nb_resource
*resource
)
1687 /* TODO: implement me. */
1692 * XPath: /frr-interface:lib/interface/frr-isisd:isis/priority/level-1
1695 lib_interface_isis_priority_level_1_modify(enum nb_event event
,
1696 const struct lyd_node
*dnode
,
1697 union nb_resource
*resource
)
1699 /* TODO: implement me. */
1704 * XPath: /frr-interface:lib/interface/frr-isisd:isis/priority/level-2
1707 lib_interface_isis_priority_level_2_modify(enum nb_event event
,
1708 const struct lyd_node
*dnode
,
1709 union nb_resource
*resource
)
1711 /* TODO: implement me. */
1716 * XPath: /frr-interface:lib/interface/frr-isisd:isis/network-type
1718 static int lib_interface_isis_network_type_modify(enum nb_event event
,
1719 const struct lyd_node
*dnode
,
1720 union nb_resource
*resource
)
1722 /* TODO: implement me. */
1726 static int lib_interface_isis_network_type_delete(enum nb_event event
,
1727 const struct lyd_node
*dnode
)
1729 /* TODO: implement me. */
1734 * XPath: /frr-interface:lib/interface/frr-isisd:isis/passive
1736 static int lib_interface_isis_passive_create(enum nb_event event
,
1737 const struct lyd_node
*dnode
,
1738 union nb_resource
*resource
)
1740 /* TODO: implement me. */
1744 static int lib_interface_isis_passive_delete(enum nb_event event
,
1745 const struct lyd_node
*dnode
)
1747 /* TODO: implement me. */
1752 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password
1754 static int lib_interface_isis_password_create(enum nb_event event
,
1755 const struct lyd_node
*dnode
,
1756 union nb_resource
*resource
)
1758 /* TODO: implement me. */
1762 static int lib_interface_isis_password_delete(enum nb_event event
,
1763 const struct lyd_node
*dnode
)
1765 /* TODO: implement me. */
1770 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password/password
1773 lib_interface_isis_password_password_modify(enum nb_event event
,
1774 const struct lyd_node
*dnode
,
1775 union nb_resource
*resource
)
1777 /* TODO: implement me. */
1782 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password/password-type
1785 lib_interface_isis_password_password_type_modify(enum nb_event event
,
1786 const struct lyd_node
*dnode
,
1787 union nb_resource
*resource
)
1789 /* TODO: implement me. */
1795 * /frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake
1797 static int lib_interface_isis_disable_three_way_handshake_create(
1798 enum nb_event event
, const struct lyd_node
*dnode
,
1799 union nb_resource
*resource
)
1801 /* TODO: implement me. */
1805 static int lib_interface_isis_disable_three_way_handshake_delete(
1806 enum nb_event event
, const struct lyd_node
*dnode
)
1808 /* TODO: implement me. */
1814 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast
1816 static int lib_interface_isis_multi_topology_ipv4_unicast_modify(
1817 enum nb_event event
, const struct lyd_node
*dnode
,
1818 union nb_resource
*resource
)
1820 /* TODO: implement me. */
1826 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-multicast
1828 static int lib_interface_isis_multi_topology_ipv4_multicast_modify(
1829 enum nb_event event
, const struct lyd_node
*dnode
,
1830 union nb_resource
*resource
)
1832 /* TODO: implement me. */
1838 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-management
1840 static int lib_interface_isis_multi_topology_ipv4_management_modify(
1841 enum nb_event event
, const struct lyd_node
*dnode
,
1842 union nb_resource
*resource
)
1844 /* TODO: implement me. */
1850 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-unicast
1852 static int lib_interface_isis_multi_topology_ipv6_unicast_modify(
1853 enum nb_event event
, const struct lyd_node
*dnode
,
1854 union nb_resource
*resource
)
1856 /* TODO: implement me. */
1862 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-multicast
1864 static int lib_interface_isis_multi_topology_ipv6_multicast_modify(
1865 enum nb_event event
, const struct lyd_node
*dnode
,
1866 union nb_resource
*resource
)
1868 /* TODO: implement me. */
1874 * /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-management
1876 static int lib_interface_isis_multi_topology_ipv6_management_modify(
1877 enum nb_event event
, const struct lyd_node
*dnode
,
1878 union nb_resource
*resource
)
1880 /* TODO: implement me. */
1885 * XPath: /frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-dstsrc
1887 static int lib_interface_isis_multi_topology_ipv6_dstsrc_modify(
1888 enum nb_event event
, const struct lyd_node
*dnode
,
1889 union nb_resource
*resource
)
1891 /* TODO: implement me. */
1895 /* clang-format off */
1896 const struct frr_yang_module_info frr_isisd_info
= {
1897 .name
= "frr-isisd",
1900 .xpath
= "/frr-isisd:isis/instance",
1901 .cbs
.create
= isis_instance_create
,
1902 .cbs
.delete = isis_instance_delete
,
1903 .cbs
.cli_show
= cli_show_router_isis
,
1904 .priority
= NB_DFLT_PRIORITY
- 1,
1907 .xpath
= "/frr-isisd:isis/instance/is-type",
1908 .cbs
.modify
= isis_instance_is_type_modify
,
1909 .cbs
.cli_show
= cli_show_isis_is_type
,
1912 .xpath
= "/frr-isisd:isis/instance/area-address",
1913 .cbs
.create
= isis_instance_area_address_create
,
1914 .cbs
.delete = isis_instance_area_address_delete
,
1915 .cbs
.cli_show
= cli_show_isis_area_address
,
1918 .xpath
= "/frr-isisd:isis/instance/dynamic-hostname",
1919 .cbs
.modify
= isis_instance_dynamic_hostname_modify
,
1920 .cbs
.cli_show
= cli_show_isis_dynamic_hostname
,
1923 .xpath
= "/frr-isisd:isis/instance/attached",
1924 .cbs
.create
= isis_instance_attached_create
,
1925 .cbs
.delete = isis_instance_attached_delete
,
1926 .cbs
.cli_show
= cli_show_isis_attached
,
1929 .xpath
= "/frr-isisd:isis/instance/overload",
1930 .cbs
.create
= isis_instance_overload_create
,
1931 .cbs
.delete = isis_instance_overload_delete
,
1932 .cbs
.cli_show
= cli_show_isis_overload
,
1935 .xpath
= "/frr-isisd:isis/instance/metric-style",
1936 .cbs
.modify
= isis_instance_metric_style_modify
,
1937 .cbs
.cli_show
= cli_show_isis_metric_style
,
1940 .xpath
= "/frr-isisd:isis/instance/purge-originator",
1941 .cbs
.create
= isis_instance_purge_originator_create
,
1942 .cbs
.delete = isis_instance_purge_originator_delete
,
1945 .xpath
= "/frr-isisd:isis/instance/lsp/mtu",
1946 .cbs
.modify
= isis_instance_lsp_mtu_modify
,
1947 .cbs
.cli_show
= cli_show_isis_lsp_mtu
,
1950 .xpath
= "/frr-isisd:isis/instance/lsp/refresh-interval",
1951 .cbs
.cli_show
= cli_show_isis_lsp_ref_interval
,
1954 .xpath
= "/frr-isisd:isis/instance/lsp/refresh-interval/level-1",
1955 .cbs
.modify
= isis_instance_lsp_refresh_interval_level_1_modify
,
1958 .xpath
= "/frr-isisd:isis/instance/lsp/refresh-interval/level-2",
1959 .cbs
.modify
= isis_instance_lsp_refresh_interval_level_2_modify
,
1962 .xpath
= "/frr-isisd:isis/instance/lsp/maximum-lifetime",
1963 .cbs
.cli_show
= cli_show_isis_lsp_max_lifetime
,
1966 .xpath
= "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-1",
1967 .cbs
.modify
= isis_instance_lsp_maximum_lifetime_level_1_modify
,
1970 .xpath
= "/frr-isisd:isis/instance/lsp/maximum-lifetime/level-2",
1971 .cbs
.modify
= isis_instance_lsp_maximum_lifetime_level_2_modify
,
1974 .xpath
= "/frr-isisd:isis/instance/lsp/generation-interval",
1975 .cbs
.cli_show
= cli_show_isis_lsp_gen_interval
,
1978 .xpath
= "/frr-isisd:isis/instance/lsp/generation-interval/level-1",
1979 .cbs
.modify
= isis_instance_lsp_generation_interval_level_1_modify
,
1982 .xpath
= "/frr-isisd:isis/instance/lsp/generation-interval/level-2",
1983 .cbs
.modify
= isis_instance_lsp_generation_interval_level_2_modify
,
1986 .xpath
= "/frr-isisd:isis/instance/spf/ietf-backoff-delay",
1987 .cbs
.create
= isis_instance_spf_ietf_backoff_delay_create
,
1988 .cbs
.delete = isis_instance_spf_ietf_backoff_delay_delete
,
1991 .xpath
= "/frr-isisd:isis/instance/spf/ietf-backoff-delay/init-delay",
1992 .cbs
.modify
= isis_instance_spf_ietf_backoff_delay_init_delay_modify
,
1995 .xpath
= "/frr-isisd:isis/instance/spf/ietf-backoff-delay/short-delay",
1996 .cbs
.modify
= isis_instance_spf_ietf_backoff_delay_short_delay_modify
,
1999 .xpath
= "/frr-isisd:isis/instance/spf/ietf-backoff-delay/long-delay",
2000 .cbs
.modify
= isis_instance_spf_ietf_backoff_delay_long_delay_modify
,
2003 .xpath
= "/frr-isisd:isis/instance/spf/ietf-backoff-delay/hold-down",
2004 .cbs
.modify
= isis_instance_spf_ietf_backoff_delay_hold_down_modify
,
2007 .xpath
= "/frr-isisd:isis/instance/spf/ietf-backoff-delay/time-to-learn",
2008 .cbs
.modify
= isis_instance_spf_ietf_backoff_delay_time_to_learn_modify
,
2011 .xpath
= "/frr-isisd:isis/instance/spf/minimum-interval",
2012 .cbs
.cli_show
= cli_show_isis_spf_min_interval
,
2015 .xpath
= "/frr-isisd:isis/instance/spf/minimum-interval/level-1",
2016 .cbs
.modify
= isis_instance_spf_minimum_interval_level_1_modify
,
2019 .xpath
= "/frr-isisd:isis/instance/spf/minimum-interval/level-2",
2020 .cbs
.modify
= isis_instance_spf_minimum_interval_level_2_modify
,
2023 .xpath
= "/frr-isisd:isis/instance/area-password",
2024 .cbs
.create
= isis_instance_area_password_create
,
2025 .cbs
.delete = isis_instance_area_password_delete
,
2026 .cbs
.apply_finish
= area_password_apply_finish
,
2027 .cbs
.cli_show
= cli_show_isis_area_pwd
,
2030 .xpath
= "/frr-isisd:isis/instance/area-password/password",
2031 .cbs
.modify
= isis_instance_area_password_password_modify
,
2034 .xpath
= "/frr-isisd:isis/instance/area-password/password-type",
2035 .cbs
.modify
= isis_instance_area_password_password_type_modify
,
2038 .xpath
= "/frr-isisd:isis/instance/area-password/authenticate-snp",
2039 .cbs
.modify
= isis_instance_area_password_authenticate_snp_modify
,
2042 .xpath
= "/frr-isisd:isis/instance/domain-password",
2043 .cbs
.create
= isis_instance_domain_password_create
,
2044 .cbs
.delete = isis_instance_domain_password_delete
,
2045 .cbs
.apply_finish
= domain_password_apply_finish
,
2046 .cbs
.cli_show
= cli_show_isis_domain_pwd
,
2049 .xpath
= "/frr-isisd:isis/instance/domain-password/password",
2050 .cbs
.modify
= isis_instance_domain_password_password_modify
,
2053 .xpath
= "/frr-isisd:isis/instance/domain-password/password-type",
2054 .cbs
.modify
= isis_instance_domain_password_password_type_modify
,
2057 .xpath
= "/frr-isisd:isis/instance/domain-password/authenticate-snp",
2058 .cbs
.modify
= isis_instance_domain_password_authenticate_snp_modify
,
2061 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv4",
2062 .cbs
.create
= isis_instance_default_information_originate_ipv4_create
,
2063 .cbs
.delete = isis_instance_default_information_originate_ipv4_delete
,
2066 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv4/always",
2067 .cbs
.create
= isis_instance_default_information_originate_ipv4_always_create
,
2068 .cbs
.delete = isis_instance_default_information_originate_ipv4_always_delete
,
2071 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv4/route-map",
2072 .cbs
.modify
= isis_instance_default_information_originate_ipv4_route_map_modify
,
2073 .cbs
.delete = isis_instance_default_information_originate_ipv4_route_map_delete
,
2076 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv4/metric",
2077 .cbs
.modify
= isis_instance_default_information_originate_ipv4_metric_modify
,
2078 .cbs
.delete = isis_instance_default_information_originate_ipv4_metric_delete
,
2081 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv6",
2082 .cbs
.create
= isis_instance_default_information_originate_ipv6_create
,
2083 .cbs
.delete = isis_instance_default_information_originate_ipv6_delete
,
2086 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv6/always",
2087 .cbs
.create
= isis_instance_default_information_originate_ipv6_always_create
,
2088 .cbs
.delete = isis_instance_default_information_originate_ipv6_always_delete
,
2091 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv6/route-map",
2092 .cbs
.modify
= isis_instance_default_information_originate_ipv6_route_map_modify
,
2093 .cbs
.delete = isis_instance_default_information_originate_ipv6_route_map_delete
,
2096 .xpath
= "/frr-isisd:isis/instance/default-information-originate/ipv6/metric",
2097 .cbs
.modify
= isis_instance_default_information_originate_ipv6_metric_modify
,
2098 .cbs
.delete = isis_instance_default_information_originate_ipv6_metric_delete
,
2101 .xpath
= "/frr-isisd:isis/instance/redistribute/ipv4",
2102 .cbs
.create
= isis_instance_redistribute_ipv4_create
,
2103 .cbs
.delete = isis_instance_redistribute_ipv4_delete
,
2106 .xpath
= "/frr-isisd:isis/instance/redistribute/ipv4/route-map",
2107 .cbs
.modify
= isis_instance_redistribute_ipv4_route_map_modify
,
2108 .cbs
.delete = isis_instance_redistribute_ipv4_route_map_delete
,
2111 .xpath
= "/frr-isisd:isis/instance/redistribute/ipv4/metric",
2112 .cbs
.modify
= isis_instance_redistribute_ipv4_metric_modify
,
2113 .cbs
.delete = isis_instance_redistribute_ipv4_metric_delete
,
2116 .xpath
= "/frr-isisd:isis/instance/redistribute/ipv6",
2117 .cbs
.create
= isis_instance_redistribute_ipv6_create
,
2118 .cbs
.delete = isis_instance_redistribute_ipv6_delete
,
2121 .xpath
= "/frr-isisd:isis/instance/redistribute/ipv6/route-map",
2122 .cbs
.modify
= isis_instance_redistribute_ipv6_route_map_modify
,
2123 .cbs
.delete = isis_instance_redistribute_ipv6_route_map_delete
,
2126 .xpath
= "/frr-isisd:isis/instance/redistribute/ipv6/metric",
2127 .cbs
.modify
= isis_instance_redistribute_ipv6_metric_modify
,
2128 .cbs
.delete = isis_instance_redistribute_ipv6_metric_delete
,
2131 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv4-multicast",
2132 .cbs
.create
= isis_instance_multi_topology_ipv4_multicast_create
,
2133 .cbs
.delete = isis_instance_multi_topology_ipv4_multicast_delete
,
2136 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv4-multicast/overload",
2137 .cbs
.create
= isis_instance_multi_topology_ipv4_multicast_overload_create
,
2138 .cbs
.delete = isis_instance_multi_topology_ipv4_multicast_overload_delete
,
2141 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv4-management",
2142 .cbs
.create
= isis_instance_multi_topology_ipv4_management_create
,
2143 .cbs
.delete = isis_instance_multi_topology_ipv4_management_delete
,
2146 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv4-management/overload",
2147 .cbs
.create
= isis_instance_multi_topology_ipv4_management_overload_create
,
2148 .cbs
.delete = isis_instance_multi_topology_ipv4_management_overload_delete
,
2151 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-unicast",
2152 .cbs
.create
= isis_instance_multi_topology_ipv6_unicast_create
,
2153 .cbs
.delete = isis_instance_multi_topology_ipv6_unicast_delete
,
2156 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-unicast/overload",
2157 .cbs
.create
= isis_instance_multi_topology_ipv6_unicast_overload_create
,
2158 .cbs
.delete = isis_instance_multi_topology_ipv6_unicast_overload_delete
,
2161 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-multicast",
2162 .cbs
.create
= isis_instance_multi_topology_ipv6_multicast_create
,
2163 .cbs
.delete = isis_instance_multi_topology_ipv6_multicast_delete
,
2166 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-multicast/overload",
2167 .cbs
.create
= isis_instance_multi_topology_ipv6_multicast_overload_create
,
2168 .cbs
.delete = isis_instance_multi_topology_ipv6_multicast_overload_delete
,
2171 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-management",
2172 .cbs
.create
= isis_instance_multi_topology_ipv6_management_create
,
2173 .cbs
.delete = isis_instance_multi_topology_ipv6_management_delete
,
2176 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-management/overload",
2177 .cbs
.create
= isis_instance_multi_topology_ipv6_management_overload_create
,
2178 .cbs
.delete = isis_instance_multi_topology_ipv6_management_overload_delete
,
2181 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-dstsrc",
2182 .cbs
.create
= isis_instance_multi_topology_ipv6_dstsrc_create
,
2183 .cbs
.delete = isis_instance_multi_topology_ipv6_dstsrc_delete
,
2186 .xpath
= "/frr-isisd:isis/instance/multi-topology/ipv6-dstsrc/overload",
2187 .cbs
.create
= isis_instance_multi_topology_ipv6_dstsrc_overload_create
,
2188 .cbs
.delete = isis_instance_multi_topology_ipv6_dstsrc_overload_delete
,
2191 .xpath
= "/frr-isisd:isis/instance/log-adjacency-changes",
2192 .cbs
.create
= isis_instance_log_adjacency_changes_create
,
2193 .cbs
.delete = isis_instance_log_adjacency_changes_delete
,
2196 .xpath
= "/frr-isisd:isis/mpls-te",
2197 .cbs
.create
= isis_mpls_te_create
,
2198 .cbs
.delete = isis_mpls_te_delete
,
2201 .xpath
= "/frr-isisd:isis/mpls-te/router-address",
2202 .cbs
.modify
= isis_mpls_te_router_address_modify
,
2203 .cbs
.delete = isis_mpls_te_router_address_delete
,
2206 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis",
2207 .cbs
.create
= lib_interface_isis_create
,
2208 .cbs
.delete = lib_interface_isis_delete
,
2211 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/area-tag",
2212 .cbs
.modify
= lib_interface_isis_area_tag_modify
,
2215 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/circuit-type",
2216 .cbs
.modify
= lib_interface_isis_circuit_type_modify
,
2219 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/ipv4-routing",
2220 .cbs
.create
= lib_interface_isis_ipv4_routing_create
,
2221 .cbs
.delete = lib_interface_isis_ipv4_routing_delete
,
2222 .cbs
.cli_show
= cli_show_ip_isis_ipv4
,
2225 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/ipv6-routing",
2226 .cbs
.create
= lib_interface_isis_ipv6_routing_create
,
2227 .cbs
.delete = lib_interface_isis_ipv6_routing_delete
,
2228 .cbs
.cli_show
= cli_show_ip_isis_ipv6
,
2231 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-1",
2232 .cbs
.modify
= lib_interface_isis_csnp_interval_level_1_modify
,
2235 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/csnp-interval/level-2",
2236 .cbs
.modify
= lib_interface_isis_csnp_interval_level_2_modify
,
2239 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-1",
2240 .cbs
.modify
= lib_interface_isis_psnp_interval_level_1_modify
,
2243 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/psnp-interval/level-2",
2244 .cbs
.modify
= lib_interface_isis_psnp_interval_level_2_modify
,
2247 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/hello/padding",
2248 .cbs
.modify
= lib_interface_isis_hello_padding_modify
,
2251 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-1",
2252 .cbs
.modify
= lib_interface_isis_hello_interval_level_1_modify
,
2255 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/hello/interval/level-2",
2256 .cbs
.modify
= lib_interface_isis_hello_interval_level_2_modify
,
2259 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-1",
2260 .cbs
.modify
= lib_interface_isis_hello_multiplier_level_1_modify
,
2263 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/hello/multiplier/level-2",
2264 .cbs
.modify
= lib_interface_isis_hello_multiplier_level_2_modify
,
2267 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/metric/level-1",
2268 .cbs
.modify
= lib_interface_isis_metric_level_1_modify
,
2271 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/metric/level-2",
2272 .cbs
.modify
= lib_interface_isis_metric_level_2_modify
,
2275 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/priority/level-1",
2276 .cbs
.modify
= lib_interface_isis_priority_level_1_modify
,
2279 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/priority/level-2",
2280 .cbs
.modify
= lib_interface_isis_priority_level_2_modify
,
2283 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/network-type",
2284 .cbs
.modify
= lib_interface_isis_network_type_modify
,
2285 .cbs
.delete = lib_interface_isis_network_type_delete
,
2288 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/passive",
2289 .cbs
.create
= lib_interface_isis_passive_create
,
2290 .cbs
.delete = lib_interface_isis_passive_delete
,
2293 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/password",
2294 .cbs
.create
= lib_interface_isis_password_create
,
2295 .cbs
.delete = lib_interface_isis_password_delete
,
2298 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/password/password",
2299 .cbs
.modify
= lib_interface_isis_password_password_modify
,
2302 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/password/password-type",
2303 .cbs
.modify
= lib_interface_isis_password_password_type_modify
,
2306 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake",
2307 .cbs
.create
= lib_interface_isis_disable_three_way_handshake_create
,
2308 .cbs
.delete = lib_interface_isis_disable_three_way_handshake_delete
,
2311 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-unicast",
2312 .cbs
.modify
= lib_interface_isis_multi_topology_ipv4_unicast_modify
,
2315 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-multicast",
2316 .cbs
.modify
= lib_interface_isis_multi_topology_ipv4_multicast_modify
,
2319 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv4-management",
2320 .cbs
.modify
= lib_interface_isis_multi_topology_ipv4_management_modify
,
2323 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-unicast",
2324 .cbs
.modify
= lib_interface_isis_multi_topology_ipv6_unicast_modify
,
2327 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-multicast",
2328 .cbs
.modify
= lib_interface_isis_multi_topology_ipv6_multicast_modify
,
2331 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-management",
2332 .cbs
.modify
= lib_interface_isis_multi_topology_ipv6_management_modify
,
2335 .xpath
= "/frr-interface:lib/interface/frr-isisd:isis/multi-topology/ipv6-dstsrc",
2336 .cbs
.modify
= lib_interface_isis_multi_topology_ipv6_dstsrc_modify
,