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
30 #include "northbound_cli.h"
33 #include "lib/linklist.h"
34 #include "isisd/isisd.h"
35 #include "isisd/isis_cli.h"
36 #include "isisd/isis_misc.h"
37 #include "isisd/isis_circuit.h"
38 #include "isisd/isis_csm.h"
40 #ifndef VTYSH_EXTRACT_PL
41 #include "isisd/isis_cli_clippy.c"
47 * XPath: /frr-isisd:isis/instance
49 DEFPY_NOSH(router_isis
, router_isis_cmd
, "router isis WORD$tag",
52 "ISO Routing area tag\n")
55 char base_xpath
[XPATH_MAXLEN
];
57 snprintf(base_xpath
, XPATH_MAXLEN
,
58 "/frr-isisd:isis/instance[area-tag='%s']", tag
);
59 nb_cli_enqueue_change(vty
, ".", NB_OP_CREATE
, NULL
);
60 /* default value in yang for is-type is level-1, but in FRR
61 * the first instance is assigned is-type level-1-2. We
62 * need to make sure to set it in the yang model so that it
63 * is consistent with what FRR sees.
65 if (listcount(isis
->area_list
) == 0)
66 nb_cli_enqueue_change(vty
, "./is-type", NB_OP_MODIFY
,
68 ret
= nb_cli_apply_changes(vty
, base_xpath
);
69 if (ret
== CMD_SUCCESS
)
70 VTY_PUSH_XPATH(ISIS_NODE
, base_xpath
);
75 DEFPY(no_router_isis
, no_router_isis_cmd
, "no router isis WORD$tag",
78 "ISO Routing area tag\n")
80 char temp_xpath
[XPATH_MAXLEN
];
81 struct listnode
*node
, *nnode
;
82 struct isis_circuit
*circuit
= NULL
;
83 struct isis_area
*area
= NULL
;
85 if (!yang_dnode_exists(vty
->candidate_config
->dnode
,
86 "/frr-isisd:isis/instance[area-tag='%s']",
88 vty_out(vty
, "ISIS area %s not found.\n", tag
);
89 return CMD_ERR_NOTHING_TODO
;
92 nb_cli_enqueue_change(vty
, ".", NB_OP_DELETE
, NULL
);
93 area
= isis_area_lookup(tag
);
94 if (area
&& area
->circuit_list
&& listcount(area
->circuit_list
)) {
95 for (ALL_LIST_ELEMENTS(area
->circuit_list
, node
, nnode
,
97 /* add callbacks to delete each of the circuits listed
99 const char *vrf_name
=
100 vrf_lookup_by_id(circuit
->interface
->vrf_id
)
103 temp_xpath
, XPATH_MAXLEN
,
104 "/frr-interface:lib/interface[name='%s'][vrf='%s']/frr-isisd:isis",
105 circuit
->interface
->name
, vrf_name
);
106 nb_cli_enqueue_change(vty
, temp_xpath
, NB_OP_DELETE
,
111 return nb_cli_apply_changes(
112 vty
, "/frr-isisd:isis/instance[area-tag='%s']", tag
);
115 void cli_show_router_isis(struct vty
*vty
, struct lyd_node
*dnode
,
119 vty_out(vty
, "router isis %s\n",
120 yang_dnode_get_string(dnode
, "./area-tag"));
124 * XPath: /frr-interface:lib/interface/frr-isisd:isis/
125 * XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv4-routing
126 * XPath: /frr-interface:lib/interface/frr-isisd:isis/ipv6-routing
127 * XPath: /frr-isisd:isis/instance
129 DEFPY(ip_router_isis
, ip_router_isis_cmd
, "ip router isis WORD$tag",
130 "Interface Internet Protocol config commands\n"
131 "IP router interface commands\n"
132 "IS-IS routing protocol\n"
133 "Routing process tag\n")
135 char temp_xpath
[XPATH_MAXLEN
];
136 const char *circ_type
;
137 struct isis_area
*area
;
138 struct interface
*ifp
;
139 const struct lyd_node
*dnode
=
140 yang_dnode_get(running_config
->dnode
, VTY_CURR_XPATH
);
142 /* area will be created if it is not present. make sure the yang model
143 * is synced with FRR and call the appropriate NB cb.
145 area
= isis_area_lookup(tag
);
147 snprintf(temp_xpath
, XPATH_MAXLEN
,
148 "/frr-isisd:isis/instance[area-tag='%s']", tag
);
149 nb_cli_enqueue_change(vty
, temp_xpath
, NB_OP_CREATE
, tag
);
150 snprintf(temp_xpath
, XPATH_MAXLEN
,
151 "/frr-isisd:isis/instance[area-tag='%s']/is-type",
153 nb_cli_enqueue_change(
154 vty
, temp_xpath
, NB_OP_MODIFY
,
155 listcount(isis
->area_list
) == 0 ? "level-1-2" : NULL
);
156 nb_cli_enqueue_change(vty
, "./frr-isisd:isis", NB_OP_CREATE
,
158 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/area-tag",
160 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/ipv4-routing",
161 NB_OP_MODIFY
, "true");
162 nb_cli_enqueue_change(
163 vty
, "./frr-isisd:isis/circuit-type", NB_OP_MODIFY
,
164 listcount(isis
->area_list
) == 0 ? "level-1-2"
167 /* area exists, circuit type defaults to its area's is_type */
168 switch (area
->is_type
) {
170 circ_type
= "level-1";
173 circ_type
= "level-2";
175 case IS_LEVEL_1_AND_2
:
176 circ_type
= "level-1-2";
179 /* just to silence compiler warnings */
180 return CMD_WARNING_CONFIG_FAILED
;
182 nb_cli_enqueue_change(vty
, "./frr-isisd:isis", NB_OP_CREATE
,
184 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/area-tag",
186 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/ipv4-routing",
187 NB_OP_MODIFY
, "true");
188 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/circuit-type",
189 NB_OP_MODIFY
, circ_type
);
192 /* check if the interface is a loopback and if so set it as passive */
193 ifp
= yang_dnode_get_entry(dnode
, false);
194 if (ifp
&& if_is_loopback(ifp
))
195 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/passive",
196 NB_OP_MODIFY
, "true");
198 return nb_cli_apply_changes(vty
, NULL
);
201 DEFPY(ip6_router_isis
, ip6_router_isis_cmd
, "ipv6 router isis WORD$tag",
202 "Interface Internet Protocol config commands\n"
203 "IP router interface commands\n"
204 "IS-IS routing protocol\n"
205 "Routing process tag\n")
207 char temp_xpath
[XPATH_MAXLEN
];
208 const char *circ_type
;
209 struct isis_area
*area
;
210 struct interface
*ifp
;
211 const struct lyd_node
*dnode
=
212 yang_dnode_get(running_config
->dnode
, VTY_CURR_XPATH
);
214 /* area will be created if it is not present. make sure the yang model
215 * is synced with FRR and call the appropriate NB cb.
217 area
= isis_area_lookup(tag
);
219 snprintf(temp_xpath
, XPATH_MAXLEN
,
220 "/frr-isisd:isis/instance[area-tag='%s']", tag
);
221 nb_cli_enqueue_change(vty
, temp_xpath
, NB_OP_CREATE
, tag
);
222 snprintf(temp_xpath
, XPATH_MAXLEN
,
223 "/frr-isisd:isis/instance[area-tag='%s']/is-type",
225 nb_cli_enqueue_change(
226 vty
, temp_xpath
, NB_OP_MODIFY
,
227 listcount(isis
->area_list
) == 0 ? "level-1-2" : NULL
);
228 nb_cli_enqueue_change(vty
, "./frr-isisd:isis", NB_OP_CREATE
,
230 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/area-tag",
232 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/ipv6-routing",
233 NB_OP_MODIFY
, "true");
234 nb_cli_enqueue_change(
235 vty
, "./frr-isisd:isis/circuit-type", NB_OP_MODIFY
,
236 listcount(isis
->area_list
) == 0 ? "level-1-2"
239 /* area exists, circuit type defaults to its area's is_type */
240 switch (area
->is_type
) {
242 circ_type
= "level-1";
245 circ_type
= "level-2";
247 case IS_LEVEL_1_AND_2
:
248 circ_type
= "level-1-2";
251 /* just to silence compiler warnings */
252 return CMD_WARNING_CONFIG_FAILED
;
254 nb_cli_enqueue_change(vty
, "./frr-isisd:isis", NB_OP_CREATE
,
256 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/area-tag",
258 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/ipv6-routing",
259 NB_OP_MODIFY
, "true");
260 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/circuit-type",
261 NB_OP_MODIFY
, circ_type
);
264 /* check if the interface is a loopback and if so set it as passive */
265 ifp
= yang_dnode_get_entry(dnode
, false);
266 if (ifp
&& if_is_loopback(ifp
))
267 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/passive",
268 NB_OP_MODIFY
, "true");
270 return nb_cli_apply_changes(vty
, NULL
);
273 DEFPY(no_ip_router_isis
, no_ip_router_isis_cmd
,
274 "no <ip|ipv6>$ip router isis [WORD]$tag",
276 "Interface Internet Protocol config commands\n"
277 "IP router interface commands\n"
278 "IP router interface commands\n"
279 "IS-IS routing protocol\n"
280 "Routing process tag\n")
282 const struct lyd_node
*dnode
=
283 yang_dnode_get(running_config
->dnode
, VTY_CURR_XPATH
);
285 /* if both ipv4 and ipv6 are off delete the interface isis container too
287 if (!strncmp(ip
, "ipv6", strlen("ipv6"))) {
289 && !yang_dnode_get_bool(dnode
,
290 "./frr-isisd:isis/ipv4-routing"))
291 nb_cli_enqueue_change(vty
, "./frr-isisd:isis",
294 nb_cli_enqueue_change(vty
,
295 "./frr-isisd:isis/ipv6-routing",
296 NB_OP_MODIFY
, "false");
297 } else { /* no ipv4 */
299 && !yang_dnode_get_bool(dnode
,
300 "./frr-isisd:isis/ipv6-routing"))
301 nb_cli_enqueue_change(vty
, "./frr-isisd:isis",
304 nb_cli_enqueue_change(vty
,
305 "./frr-isisd:isis/ipv4-routing",
306 NB_OP_MODIFY
, "false");
309 return nb_cli_apply_changes(vty
, NULL
);
312 void cli_show_ip_isis_ipv4(struct vty
*vty
, struct lyd_node
*dnode
,
315 if (!yang_dnode_get_bool(dnode
, NULL
))
317 vty_out(vty
, " ip router isis %s\n",
318 yang_dnode_get_string(dnode
, "../area-tag"));
321 void cli_show_ip_isis_ipv6(struct vty
*vty
, struct lyd_node
*dnode
,
324 if (!yang_dnode_get_bool(dnode
, NULL
))
326 vty_out(vty
, " ipv6 router isis %s\n",
327 yang_dnode_get_string(dnode
, "../area-tag"));
331 * XPath: /frr-isisd:isis/instance/area-address
333 DEFPY(net
, net_cmd
, "[no] net WORD",
334 "Remove an existing Network Entity Title for this process\n"
335 "A Network Entity Title for this process (OSI only)\n"
336 "XX.XXXX. ... .XXX.XX Network entity title (NET)\n")
338 nb_cli_enqueue_change(vty
, "./area-address",
339 no
? NB_OP_DELETE
: NB_OP_CREATE
, net
);
341 return nb_cli_apply_changes(vty
, NULL
);
344 void cli_show_isis_area_address(struct vty
*vty
, struct lyd_node
*dnode
,
347 vty_out(vty
, " net %s\n", yang_dnode_get_string(dnode
, NULL
));
351 * XPath: /frr-isisd:isis/instance/is-type
353 DEFPY(is_type
, is_type_cmd
, "is-type <level-1|level-1-2|level-2-only>$level",
354 "IS Level for this routing process (OSI only)\n"
355 "Act as a station router only\n"
356 "Act as both a station router and an area router\n"
357 "Act as an area router only\n")
359 nb_cli_enqueue_change(vty
, "./is-type", NB_OP_MODIFY
,
360 strmatch(level
, "level-2-only") ? "level-2"
363 return nb_cli_apply_changes(vty
, NULL
);
366 DEFPY(no_is_type
, no_is_type_cmd
,
367 "no is-type [<level-1|level-1-2|level-2-only>]",
369 "IS Level for this routing process (OSI only)\n"
370 "Act as a station router only\n"
371 "Act as both a station router and an area router\n"
372 "Act as an area router only\n")
374 const char *value
= NULL
;
375 const struct lyd_node
*dnode
=
376 yang_dnode_get(running_config
->dnode
, VTY_CURR_XPATH
);
377 struct isis_area
*area
= yang_dnode_get_entry(dnode
, false);
380 * Put the is-type back to defaults:
381 * - level-1-2 on first area
382 * - level-1 for the rest
384 if (area
&& listgetdata(listhead(isis
->area_list
)) == area
)
388 nb_cli_enqueue_change(vty
, "./is-type", NB_OP_MODIFY
, value
);
390 return nb_cli_apply_changes(vty
, NULL
);
393 void cli_show_isis_is_type(struct vty
*vty
, struct lyd_node
*dnode
,
396 int is_type
= yang_dnode_get_enum(dnode
, NULL
);
400 vty_out(vty
, " is-type level-1\n");
403 vty_out(vty
, " is-type level-2-only\n");
405 case IS_LEVEL_1_AND_2
:
406 vty_out(vty
, " is-type level-1-2\n");
412 * XPath: /frr-isisd:isis/instance/dynamic-hostname
414 DEFPY(dynamic_hostname
, dynamic_hostname_cmd
, "[no] hostname dynamic",
416 "Dynamic hostname for IS-IS\n"
417 "Dynamic hostname\n")
419 nb_cli_enqueue_change(vty
, "./dynamic-hostname", NB_OP_MODIFY
,
420 no
? "false" : "true");
422 return nb_cli_apply_changes(vty
, NULL
);
425 void cli_show_isis_dynamic_hostname(struct vty
*vty
, struct lyd_node
*dnode
,
428 if (!yang_dnode_get_bool(dnode
, NULL
))
431 vty_out(vty
, " hostname dynamic\n");
435 * XPath: /frr-isisd:isis/instance/overload
437 DEFPY(set_overload_bit
, set_overload_bit_cmd
, "[no] set-overload-bit",
438 "Reset overload bit to accept transit traffic\n"
439 "Set overload bit to avoid any transit traffic\n")
441 nb_cli_enqueue_change(vty
, "./overload", NB_OP_MODIFY
,
442 no
? "false" : "true");
444 return nb_cli_apply_changes(vty
, NULL
);
447 void cli_show_isis_overload(struct vty
*vty
, struct lyd_node
*dnode
,
450 if (!yang_dnode_get_bool(dnode
, NULL
))
452 vty_out(vty
, " set-overload-bit\n");
456 * XPath: /frr-isisd:isis/instance/attached
458 DEFPY(set_attached_bit
, set_attached_bit_cmd
, "[no] set-attached-bit",
459 "Reset attached bit\n"
460 "Set attached bit to identify as L1/L2 router for inter-area traffic\n")
462 nb_cli_enqueue_change(vty
, "./attached", NB_OP_MODIFY
,
463 no
? "false" : "true");
465 return nb_cli_apply_changes(vty
, NULL
);
468 void cli_show_isis_attached(struct vty
*vty
, struct lyd_node
*dnode
,
471 if (!yang_dnode_get_bool(dnode
, NULL
))
473 vty_out(vty
, " set-attached-bit\n");
477 * XPath: /frr-isisd:isis/instance/metric-style
479 DEFPY(metric_style
, metric_style_cmd
,
480 "metric-style <narrow|transition|wide>$style",
481 "Use old-style (ISO 10589) or new-style packet formats\n"
482 "Use old style of TLVs with narrow metric\n"
483 "Send and accept both styles of TLVs during transition\n"
484 "Use new style of TLVs to carry wider metric\n")
486 nb_cli_enqueue_change(vty
, "./metric-style", NB_OP_MODIFY
, style
);
488 return nb_cli_apply_changes(vty
, NULL
);
491 DEFPY(no_metric_style
, no_metric_style_cmd
,
492 "no metric-style [narrow|transition|wide]",
494 "Use old-style (ISO 10589) or new-style packet formats\n"
495 "Use old style of TLVs with narrow metric\n"
496 "Send and accept both styles of TLVs during transition\n"
497 "Use new style of TLVs to carry wider metric\n")
499 nb_cli_enqueue_change(vty
, "./metric-style", NB_OP_MODIFY
, "narrow");
501 return nb_cli_apply_changes(vty
, NULL
);
504 void cli_show_isis_metric_style(struct vty
*vty
, struct lyd_node
*dnode
,
507 int metric
= yang_dnode_get_enum(dnode
, NULL
);
510 case ISIS_NARROW_METRIC
:
511 vty_out(vty
, " metric-style narrow\n");
513 case ISIS_WIDE_METRIC
:
514 vty_out(vty
, " metric-style wide\n");
516 case ISIS_TRANSITION_METRIC
:
517 vty_out(vty
, " metric-style transition\n");
523 * XPath: /frr-isisd:isis/instance/area-password
525 DEFPY(area_passwd
, area_passwd_cmd
,
526 "area-password <clear|md5>$pwd_type WORD$pwd [authenticate snp <send-only|validate>$snp]",
527 "Configure the authentication password for an area\n"
528 "Clear-text authentication type\n"
529 "MD5 authentication type\n"
530 "Level-wide password\n"
533 "Send but do not check PDUs on receiving\n"
534 "Send and check PDUs on receiving\n")
536 nb_cli_enqueue_change(vty
, "./area-password", NB_OP_CREATE
, NULL
);
537 nb_cli_enqueue_change(vty
, "./area-password/password", NB_OP_MODIFY
,
539 nb_cli_enqueue_change(vty
, "./area-password/password-type",
540 NB_OP_MODIFY
, pwd_type
);
541 nb_cli_enqueue_change(vty
, "./area-password/authenticate-snp",
542 NB_OP_MODIFY
, snp
? snp
: "none");
544 return nb_cli_apply_changes(vty
, NULL
);
547 void cli_show_isis_area_pwd(struct vty
*vty
, struct lyd_node
*dnode
,
552 vty_out(vty
, " area-password %s %s",
553 yang_dnode_get_string(dnode
, "./password-type"),
554 yang_dnode_get_string(dnode
, "./password"));
555 snp
= yang_dnode_get_string(dnode
, "./authenticate-snp");
556 if (!strmatch("none", snp
))
557 vty_out(vty
, " authenticate snp %s", snp
);
562 * XPath: /frr-isisd:isis/instance/domain-password
564 DEFPY(domain_passwd
, domain_passwd_cmd
,
565 "domain-password <clear|md5>$pwd_type WORD$pwd [authenticate snp <send-only|validate>$snp]",
566 "Set the authentication password for a routing domain\n"
567 "Clear-text authentication type\n"
568 "MD5 authentication type\n"
569 "Level-wide password\n"
572 "Send but do not check PDUs on receiving\n"
573 "Send and check PDUs on receiving\n")
575 nb_cli_enqueue_change(vty
, "./domain-password", NB_OP_CREATE
, NULL
);
576 nb_cli_enqueue_change(vty
, "./domain-password/password", NB_OP_MODIFY
,
578 nb_cli_enqueue_change(vty
, "./domain-password/password-type",
579 NB_OP_MODIFY
, pwd_type
);
580 nb_cli_enqueue_change(vty
, "./domain-password/authenticate-snp",
581 NB_OP_MODIFY
, snp
? snp
: "none");
583 return nb_cli_apply_changes(vty
, NULL
);
586 DEFPY(no_area_passwd
, no_area_passwd_cmd
,
587 "no <area-password|domain-password>$cmd",
589 "Configure the authentication password for an area\n"
590 "Set the authentication password for a routing domain\n")
592 nb_cli_enqueue_change(vty
, ".", NB_OP_DELETE
, NULL
);
594 return nb_cli_apply_changes(vty
, "./%s", cmd
);
597 void cli_show_isis_domain_pwd(struct vty
*vty
, struct lyd_node
*dnode
,
602 vty_out(vty
, " domain-password %s %s",
603 yang_dnode_get_string(dnode
, "./password-type"),
604 yang_dnode_get_string(dnode
, "./password"));
605 snp
= yang_dnode_get_string(dnode
, "./authenticate-snp");
606 if (!strmatch("none", snp
))
607 vty_out(vty
, " authenticate snp %s", snp
);
612 * XPath: /frr-isisd:isis/instance/lsp/generation-interval
614 DEFPY(lsp_gen_interval
, lsp_gen_interval_cmd
,
615 "lsp-gen-interval [level-1|level-2]$level (1-120)$val",
616 "Minimum interval between regenerating same LSP\n"
617 "Set interval for level 1 only\n"
618 "Set interval for level 2 only\n"
619 "Minimum interval in seconds\n")
621 if (!level
|| strmatch(level
, "level-1"))
622 nb_cli_enqueue_change(vty
, "./lsp/generation-interval/level-1",
623 NB_OP_MODIFY
, val_str
);
624 if (!level
|| strmatch(level
, "level-2"))
625 nb_cli_enqueue_change(vty
, "./lsp/generation-interval/level-2",
626 NB_OP_MODIFY
, val_str
);
628 return nb_cli_apply_changes(vty
, NULL
);
631 DEFPY(no_lsp_gen_interval
, no_lsp_gen_interval_cmd
,
632 "no lsp-gen-interval [level-1|level-2]$level [(1-120)]",
634 "Minimum interval between regenerating same LSP\n"
635 "Set interval for level 1 only\n"
636 "Set interval for level 2 only\n"
637 "Minimum interval in seconds\n")
639 if (!level
|| strmatch(level
, "level-1"))
640 nb_cli_enqueue_change(vty
, "./lsp/generation-interval/level-1",
642 if (!level
|| strmatch(level
, "level-2"))
643 nb_cli_enqueue_change(vty
, "./lsp/generation-interval/level-2",
646 return nb_cli_apply_changes(vty
, NULL
);
649 void cli_show_isis_lsp_gen_interval(struct vty
*vty
, struct lyd_node
*dnode
,
652 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
653 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
655 if (strmatch(l1
, l2
))
656 vty_out(vty
, " lsp-gen-interval %s\n", l1
);
658 vty_out(vty
, " lsp-gen-interval level-1 %s\n", l1
);
659 vty_out(vty
, " lsp-gen-interval level-2 %s\n", l2
);
664 * XPath: /frr-isisd:isis/instance/lsp/refresh-interval
666 DEFPY(lsp_refresh_interval
, lsp_refresh_interval_cmd
,
667 "lsp-refresh-interval [level-1|level-2]$level (1-65235)$val",
668 "LSP refresh interval\n"
669 "LSP refresh interval for Level 1 only\n"
670 "LSP refresh interval for Level 2 only\n"
671 "LSP refresh interval in seconds\n")
673 if (!level
|| strmatch(level
, "level-1"))
674 nb_cli_enqueue_change(vty
, "./lsp/refresh-interval/level-1",
675 NB_OP_MODIFY
, val_str
);
676 if (!level
|| strmatch(level
, "level-2"))
677 nb_cli_enqueue_change(vty
, "./lsp/refresh-interval/level-2",
678 NB_OP_MODIFY
, val_str
);
680 return nb_cli_apply_changes(vty
, NULL
);
683 DEFPY(no_lsp_refresh_interval
, no_lsp_refresh_interval_cmd
,
684 "no lsp-refresh-interval [level-1|level-2]$level [(1-65235)]",
686 "LSP refresh interval\n"
687 "LSP refresh interval for Level 1 only\n"
688 "LSP refresh interval for Level 2 only\n"
689 "LSP refresh interval in seconds\n")
691 if (!level
|| strmatch(level
, "level-1"))
692 nb_cli_enqueue_change(vty
, "./lsp/refresh-interval/level-1",
694 if (!level
|| strmatch(level
, "level-2"))
695 nb_cli_enqueue_change(vty
, "./lsp/refresh-interval/level-2",
698 return nb_cli_apply_changes(vty
, NULL
);
701 void cli_show_isis_lsp_ref_interval(struct vty
*vty
, struct lyd_node
*dnode
,
704 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
705 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
707 if (strmatch(l1
, l2
))
708 vty_out(vty
, " lsp-refresh-interval %s\n", l1
);
710 vty_out(vty
, " lsp-refresh-interval level-1 %s\n", l1
);
711 vty_out(vty
, " lsp-refresh-interval level-2 %s\n", l2
);
716 * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime
718 DEFPY(max_lsp_lifetime
, max_lsp_lifetime_cmd
,
719 "max-lsp-lifetime [level-1|level-2]$level (350-65535)$val",
720 "Maximum LSP lifetime\n"
721 "Maximum LSP lifetime for Level 1 only\n"
722 "Maximum LSP lifetime for Level 2 only\n"
723 "LSP lifetime in seconds\n")
725 if (!level
|| strmatch(level
, "level-1"))
726 nb_cli_enqueue_change(vty
, "./lsp/maximum-lifetime/level-1",
727 NB_OP_MODIFY
, val_str
);
728 if (!level
|| strmatch(level
, "level-2"))
729 nb_cli_enqueue_change(vty
, "./lsp/maximum-lifetime/level-2",
730 NB_OP_MODIFY
, val_str
);
732 return nb_cli_apply_changes(vty
, NULL
);
735 DEFPY(no_max_lsp_lifetime
, no_max_lsp_lifetime_cmd
,
736 "no max-lsp-lifetime [level-1|level-2]$level [(350-65535)]",
738 "Maximum LSP lifetime\n"
739 "Maximum LSP lifetime for Level 1 only\n"
740 "Maximum LSP lifetime for Level 2 only\n"
741 "LSP lifetime in seconds\n")
743 if (!level
|| strmatch(level
, "level-1"))
744 nb_cli_enqueue_change(vty
, "./lsp/maximum-lifetime/level-1",
746 if (!level
|| strmatch(level
, "level-2"))
747 nb_cli_enqueue_change(vty
, "./lsp/maximum-lifetime/level-2",
750 return nb_cli_apply_changes(vty
, NULL
);
753 void cli_show_isis_lsp_max_lifetime(struct vty
*vty
, struct lyd_node
*dnode
,
756 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
757 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
759 if (strmatch(l1
, l2
))
760 vty_out(vty
, " max-lsp-lifetime %s\n", l1
);
762 vty_out(vty
, " max-lsp-lifetime level-1 %s\n", l1
);
763 vty_out(vty
, " max-lsp-lifetime level-2 %s\n", l2
);
768 * XPath: /frr-isisd:isis/instance/lsp/mtu
770 DEFPY(area_lsp_mtu
, area_lsp_mtu_cmd
, "lsp-mtu (128-4352)$val",
771 "Configure the maximum size of generated LSPs\n"
772 "Maximum size of generated LSPs\n")
774 nb_cli_enqueue_change(vty
, "./lsp/mtu", NB_OP_MODIFY
, val_str
);
776 return nb_cli_apply_changes(vty
, NULL
);
779 DEFPY(no_area_lsp_mtu
, no_area_lsp_mtu_cmd
, "no lsp-mtu [(128-4352)]",
781 "Configure the maximum size of generated LSPs\n"
782 "Maximum size of generated LSPs\n")
784 nb_cli_enqueue_change(vty
, "./lsp/mtu", NB_OP_MODIFY
, NULL
);
786 return nb_cli_apply_changes(vty
, NULL
);
789 void cli_show_isis_lsp_mtu(struct vty
*vty
, struct lyd_node
*dnode
,
792 vty_out(vty
, " lsp-mtu %s\n", yang_dnode_get_string(dnode
, NULL
));
796 * XPath: /frr-isisd:isis/instance/spf/minimum-interval
798 DEFPY(spf_interval
, spf_interval_cmd
,
799 "spf-interval [level-1|level-2]$level (1-120)$val",
800 "Minimum interval between SPF calculations\n"
801 "Set interval for level 1 only\n"
802 "Set interval for level 2 only\n"
803 "Minimum interval between consecutive SPFs in seconds\n")
805 if (!level
|| strmatch(level
, "level-1"))
806 nb_cli_enqueue_change(vty
, "./spf/minimum-interval/level-1",
807 NB_OP_MODIFY
, val_str
);
808 if (!level
|| strmatch(level
, "level-2"))
809 nb_cli_enqueue_change(vty
, "./spf/minimum-interval/level-2",
810 NB_OP_MODIFY
, val_str
);
812 return nb_cli_apply_changes(vty
, NULL
);
815 DEFPY(no_spf_interval
, no_spf_interval_cmd
,
816 "no spf-interval [level-1|level-2]$level [(1-120)]",
818 "Minimum interval between SPF calculations\n"
819 "Set interval for level 1 only\n"
820 "Set interval for level 2 only\n"
821 "Minimum interval between consecutive SPFs in seconds\n")
823 if (!level
|| strmatch(level
, "level-1"))
824 nb_cli_enqueue_change(vty
, "./spf/minimum-interval/level-1",
826 if (!level
|| strmatch(level
, "level-2"))
827 nb_cli_enqueue_change(vty
, "./spf/minimum-interval/level-2",
830 return nb_cli_apply_changes(vty
, NULL
);
833 void cli_show_isis_spf_min_interval(struct vty
*vty
, struct lyd_node
*dnode
,
836 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
837 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
839 if (strmatch(l1
, l2
))
840 vty_out(vty
, " spf-interval %s\n", l1
);
842 vty_out(vty
, " spf-interval level-1 %s\n", l1
);
843 vty_out(vty
, " spf-interval level-2 %s\n", l2
);
848 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay
850 DEFPY(spf_delay_ietf
, spf_delay_ietf_cmd
,
851 "spf-delay-ietf init-delay (0-60000) short-delay (0-60000) long-delay (0-60000) holddown (0-60000) time-to-learn (0-60000)",
852 "IETF SPF delay algorithm\n"
853 "Delay used while in QUIET state\n"
854 "Delay used while in QUIET state in milliseconds\n"
855 "Delay used while in SHORT_WAIT state\n"
856 "Delay used while in SHORT_WAIT state in milliseconds\n"
857 "Delay used while in LONG_WAIT\n"
858 "Delay used while in LONG_WAIT state in milliseconds\n"
859 "Time with no received IGP events before considering IGP stable\n"
860 "Time with no received IGP events before considering IGP stable (in milliseconds)\n"
861 "Maximum duration needed to learn all the events related to a single failure\n"
862 "Maximum duration needed to learn all the events related to a single failure (in milliseconds)\n")
864 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay", NB_OP_CREATE
,
866 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/init-delay",
867 NB_OP_MODIFY
, init_delay_str
);
868 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/short-delay",
869 NB_OP_MODIFY
, short_delay_str
);
870 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/long-delay",
871 NB_OP_MODIFY
, long_delay_str
);
872 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/hold-down",
873 NB_OP_MODIFY
, holddown_str
);
874 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/time-to-learn",
875 NB_OP_MODIFY
, time_to_learn_str
);
877 return nb_cli_apply_changes(vty
, NULL
);
880 DEFPY(no_spf_delay_ietf
, no_spf_delay_ietf_cmd
,
881 "no spf-delay-ietf [init-delay (0-60000) short-delay (0-60000) long-delay (0-60000) holddown (0-60000) time-to-learn (0-60000)]",
883 "IETF SPF delay algorithm\n"
884 "Delay used while in QUIET state\n"
885 "Delay used while in QUIET state in milliseconds\n"
886 "Delay used while in SHORT_WAIT state\n"
887 "Delay used while in SHORT_WAIT state in milliseconds\n"
888 "Delay used while in LONG_WAIT\n"
889 "Delay used while in LONG_WAIT state in milliseconds\n"
890 "Time with no received IGP events before considering IGP stable\n"
891 "Time with no received IGP events before considering IGP stable (in milliseconds)\n"
892 "Maximum duration needed to learn all the events related to a single failure\n"
893 "Maximum duration needed to learn all the events related to a single failure (in milliseconds)\n")
895 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay", NB_OP_DELETE
,
898 return nb_cli_apply_changes(vty
, NULL
);
901 void cli_show_isis_spf_ietf_backoff(struct vty
*vty
, struct lyd_node
*dnode
,
905 " spf-delay-ietf init-delay %s short-delay %s long-delay %s holddown %s time-to-learn %s\n",
906 yang_dnode_get_string(dnode
, "./init-delay"),
907 yang_dnode_get_string(dnode
, "./short-delay"),
908 yang_dnode_get_string(dnode
, "./long-delay"),
909 yang_dnode_get_string(dnode
, "./hold-down"),
910 yang_dnode_get_string(dnode
, "./time-to-learn"));
914 * XPath: /frr-isisd:isis/instance/purge-originator
916 DEFPY(area_purge_originator
, area_purge_originator_cmd
, "[no] purge-originator",
917 NO_STR
"Use the RFC 6232 purge-originator\n")
919 nb_cli_enqueue_change(vty
, "./purge-originator", NB_OP_MODIFY
,
920 no
? "false" : "true");
922 return nb_cli_apply_changes(vty
, NULL
);
925 void cli_show_isis_purge_origin(struct vty
*vty
, struct lyd_node
*dnode
,
928 if (!yang_dnode_get_bool(dnode
, NULL
))
930 vty_out(vty
, " purge-originator\n");
934 * XPath: /frr-isisd:isis/mpls-te
936 DEFPY(isis_mpls_te_on
, isis_mpls_te_on_cmd
, "mpls-te on",
937 MPLS_TE_STR
"Enable the MPLS-TE functionality\n")
939 nb_cli_enqueue_change(vty
, "/frr-isisd:isis/mpls-te", NB_OP_CREATE
,
942 return nb_cli_apply_changes(vty
, NULL
);
945 DEFPY(no_isis_mpls_te_on
, no_isis_mpls_te_on_cmd
, "no mpls-te [on]",
947 "Disable the MPLS-TE functionality\n"
948 "Enable the MPLS-TE functionality\n")
950 nb_cli_enqueue_change(vty
, "/frr-isisd:isis/mpls-te", NB_OP_DELETE
,
953 return nb_cli_apply_changes(vty
, NULL
);
956 void cli_show_isis_mpls_te(struct vty
*vty
, struct lyd_node
*dnode
,
959 vty_out(vty
, " mpls-te on\n");
963 * XPath: /frr-isisd:isis/mpls-te/router-address
965 DEFPY(isis_mpls_te_router_addr
, isis_mpls_te_router_addr_cmd
,
966 "mpls-te router-address A.B.C.D",
968 "Stable IP address of the advertising router\n"
969 "MPLS-TE router address in IPv4 address format\n")
971 nb_cli_enqueue_change(vty
, "/frr-isisd:isis/mpls-te/router-address",
972 NB_OP_MODIFY
, router_address_str
);
974 return nb_cli_apply_changes(vty
, NULL
);
977 void cli_show_isis_mpls_te_router_addr(struct vty
*vty
, struct lyd_node
*dnode
,
980 vty_out(vty
, " mpls-te router-address %s\n",
981 yang_dnode_get_string(dnode
, NULL
));
984 DEFPY(isis_mpls_te_inter_as
, isis_mpls_te_inter_as_cmd
,
985 "[no] mpls-te inter-as [level-1|level-1-2|level-2-only]",
987 "Configure MPLS-TE Inter-AS support\n"
988 "AREA native mode self originate INTER-AS LSP with L1 only flooding scope\n"
989 "AREA native mode self originate INTER-AS LSP with L1 and L2 flooding scope\n"
990 "AS native mode self originate INTER-AS LSP with L2 only flooding scope\n")
992 vty_out(vty
, "MPLS-TE Inter-AS is not yet supported.");
997 * XPath: /frr-isisd:isis/instance/default-information-originate
999 DEFPY(isis_default_originate
, isis_default_originate_cmd
,
1000 "[no] default-information originate <ipv4|ipv6>$ip"
1001 " <level-1|level-2>$level [always]$always"
1002 " [<metric (0-16777215)$metric|route-map WORD$rmap>]",
1004 "Control distribution of default information\n"
1005 "Distribute a default route\n"
1006 "Distribute default route for IPv4\n"
1007 "Distribute default route for IPv6\n"
1008 "Distribute default route into level-1\n"
1009 "Distribute default route into level-2\n"
1010 "Always advertise default route\n"
1011 "Metric for default route\n"
1012 "ISIS default metric\n"
1013 "Route map reference\n"
1014 "Pointer to route-map entries\n")
1017 nb_cli_enqueue_change(vty
, ".", NB_OP_DELETE
, NULL
);
1019 nb_cli_enqueue_change(vty
, ".", NB_OP_CREATE
, NULL
);
1020 nb_cli_enqueue_change(vty
, "./always", NB_OP_MODIFY
,
1021 always
? "true" : "false");
1022 nb_cli_enqueue_change(vty
, "./route-map",
1023 rmap
? NB_OP_MODIFY
: NB_OP_DELETE
,
1024 rmap
? rmap
: NULL
);
1025 nb_cli_enqueue_change(vty
, "./metric",
1026 metric
? NB_OP_MODIFY
: NB_OP_DELETE
,
1027 metric
? metric_str
: NULL
);
1028 if (strmatch(ip
, "ipv6") && !always
) {
1030 "Zebra doesn't implement default-originate for IPv6 yet\n");
1032 "so use with care or use default-originate always.\n");
1036 return nb_cli_apply_changes(
1037 vty
, "./default-information-originate/%s[level='%s']", ip
,
1041 static void vty_print_def_origin(struct vty
*vty
, struct lyd_node
*dnode
,
1042 const char *family
, const char *level
,
1047 vty_out(vty
, " default-information originate %s %s", family
, level
);
1048 if (yang_dnode_get_bool(dnode
, "./always"))
1049 vty_out(vty
, " always");
1051 if (yang_dnode_exists(dnode
, "./route-map"))
1052 vty_out(vty
, " route-map %s",
1053 yang_dnode_get_string(dnode
, "./route-map"));
1054 else if (yang_dnode_exists(dnode
, "./metric")) {
1055 metric
= yang_dnode_get_string(dnode
, "./metric");
1056 if (show_defaults
|| !yang_dnode_is_default(dnode
, "./metric"))
1057 vty_out(vty
, " metric %s", metric
);
1062 void cli_show_isis_def_origin_ipv4(struct vty
*vty
, struct lyd_node
*dnode
,
1065 const char *level
= yang_dnode_get_string(dnode
, "./level");
1067 vty_print_def_origin(vty
, dnode
, "ipv4", level
, show_defaults
);
1070 void cli_show_isis_def_origin_ipv6(struct vty
*vty
, struct lyd_node
*dnode
,
1073 const char *level
= yang_dnode_get_string(dnode
, "./level");
1075 vty_print_def_origin(vty
, dnode
, "ipv6", level
, show_defaults
);
1079 * XPath: /frr-isisd:isis/instance/redistribute
1081 DEFPY(isis_redistribute
, isis_redistribute_cmd
,
1082 "[no] redistribute <ipv4|ipv6>$ip " PROTO_REDIST_STR
1084 " <level-1|level-2>$level"
1085 " [<metric (0-16777215)|route-map WORD>]",
1087 "Redistribute IPv4 routes\n"
1088 "Redistribute IPv6 routes\n" PROTO_REDIST_HELP
1089 "Redistribute into level-1\n"
1090 "Redistribute into level-2\n"
1091 "Metric for redistributed routes\n"
1092 "ISIS default metric\n"
1093 "Route map reference\n"
1094 "Pointer to route-map entries\n")
1097 nb_cli_enqueue_change(vty
, ".", NB_OP_DELETE
, NULL
);
1099 nb_cli_enqueue_change(vty
, ".", NB_OP_CREATE
, NULL
);
1100 nb_cli_enqueue_change(vty
, "./route-map",
1101 route_map
? NB_OP_MODIFY
: NB_OP_DELETE
,
1102 route_map
? route_map
: NULL
);
1103 nb_cli_enqueue_change(vty
, "./metric",
1104 metric
? NB_OP_MODIFY
: NB_OP_DELETE
,
1105 metric
? metric_str
: NULL
);
1108 return nb_cli_apply_changes(
1109 vty
, "./redistribute/%s[protocol='%s'][level='%s']", ip
, proto
,
1113 static void vty_print_redistribute(struct vty
*vty
, struct lyd_node
*dnode
,
1116 const char *level
= yang_dnode_get_string(dnode
, "./level");
1117 const char *protocol
= yang_dnode_get_string(dnode
, "./protocol");
1119 vty_out(vty
, " redistribute %s %s %s", family
, protocol
, level
);
1120 if (yang_dnode_exists(dnode
, "./metric"))
1121 vty_out(vty
, " metric %s",
1122 yang_dnode_get_string(dnode
, "./metric"));
1123 else if (yang_dnode_exists(dnode
, "./route-map"))
1124 vty_out(vty
, " route-map %s",
1125 yang_dnode_get_string(dnode
, "./route-map"));
1129 void cli_show_isis_redistribute_ipv4(struct vty
*vty
, struct lyd_node
*dnode
,
1132 vty_print_redistribute(vty
, dnode
, "ipv4");
1134 void cli_show_isis_redistribute_ipv6(struct vty
*vty
, struct lyd_node
*dnode
,
1137 vty_print_redistribute(vty
, dnode
, "ipv6");
1141 * XPath: /frr-isisd:isis/instance/multi-topology
1143 DEFPY(isis_topology
, isis_topology_cmd
,
1151 "|ipv6-dstsrc>$topology "
1152 "[overload]$overload",
1154 "Configure IS-IS topologies\n"
1155 "IPv4 unicast topology\n"
1156 "IPv4 management topology\n"
1157 "IPv6 unicast topology\n"
1158 "IPv4 multicast topology\n"
1159 "IPv6 multicast topology\n"
1160 "IPv6 management topology\n"
1161 "IPv6 dst-src topology\n"
1162 "Set overload bit for topology\n")
1164 char base_xpath
[XPATH_MAXLEN
];
1166 /* Since IPv4-unicast is not configurable it is not present in the
1167 * YANG model, so we need to validate it here
1169 if (strmatch(topology
, "ipv4-unicast")) {
1170 vty_out(vty
, "Cannot configure IPv4 unicast topology\n");
1171 return CMD_WARNING_CONFIG_FAILED
;
1174 if (strmatch(topology
, "ipv4-mgmt"))
1175 snprintf(base_xpath
, XPATH_MAXLEN
,
1176 "./multi-topology/ipv4-management");
1177 else if (strmatch(topology
, "ipv6-mgmt"))
1178 snprintf(base_xpath
, XPATH_MAXLEN
,
1179 "./multi-topology/ipv6-management");
1181 snprintf(base_xpath
, XPATH_MAXLEN
, "./multi-topology/%s",
1185 nb_cli_enqueue_change(vty
, ".", NB_OP_DELETE
, NULL
);
1187 nb_cli_enqueue_change(vty
, ".", NB_OP_CREATE
, NULL
);
1188 nb_cli_enqueue_change(vty
, "./overload", NB_OP_MODIFY
,
1189 overload
? "true" : "false");
1192 return nb_cli_apply_changes(vty
, base_xpath
);
1195 void cli_show_isis_mt_ipv4_multicast(struct vty
*vty
, struct lyd_node
*dnode
,
1198 vty_out(vty
, " topology ipv4-multicast");
1199 if (yang_dnode_get_bool(dnode
, "./overload"))
1200 vty_out(vty
, " overload");
1204 void cli_show_isis_mt_ipv4_mgmt(struct vty
*vty
, struct lyd_node
*dnode
,
1207 vty_out(vty
, " topology ipv4-mgmt");
1208 if (yang_dnode_get_bool(dnode
, "./overload"))
1209 vty_out(vty
, " overload");
1213 void cli_show_isis_mt_ipv6_unicast(struct vty
*vty
, struct lyd_node
*dnode
,
1216 vty_out(vty
, " topology ipv6-unicast");
1217 if (yang_dnode_get_bool(dnode
, "./overload"))
1218 vty_out(vty
, " overload");
1222 void cli_show_isis_mt_ipv6_multicast(struct vty
*vty
, struct lyd_node
*dnode
,
1225 vty_out(vty
, " topology ipv6-multicast");
1226 if (yang_dnode_get_bool(dnode
, "./overload"))
1227 vty_out(vty
, " overload");
1231 void cli_show_isis_mt_ipv6_mgmt(struct vty
*vty
, struct lyd_node
*dnode
,
1234 vty_out(vty
, " topology ipv6-mgmt");
1235 if (yang_dnode_get_bool(dnode
, "./overload"))
1236 vty_out(vty
, " overload");
1240 void cli_show_isis_mt_ipv6_dstsrc(struct vty
*vty
, struct lyd_node
*dnode
,
1243 vty_out(vty
, " topology ipv6-dstsrc");
1244 if (yang_dnode_get_bool(dnode
, "./overload"))
1245 vty_out(vty
, " overload");
1250 * XPath: /frr-interface:lib/interface/frr-isisd:isis/passive
1252 DEFPY(isis_passive
, isis_passive_cmd
, "[no] isis passive",
1254 "IS-IS routing protocol\n"
1255 "Configure the passive mode for interface\n")
1257 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/passive", NB_OP_MODIFY
,
1258 no
? "false" : "true");
1260 return nb_cli_apply_changes(vty
, NULL
);
1263 void cli_show_ip_isis_passive(struct vty
*vty
, struct lyd_node
*dnode
,
1266 if (!yang_dnode_get_bool(dnode
, NULL
))
1267 vty_out(vty
, " no");
1268 vty_out(vty
, " isis passive\n");
1272 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password
1275 DEFPY(isis_passwd
, isis_passwd_cmd
, "isis password <md5|clear>$type WORD$pwd",
1276 "IS-IS routing protocol\n"
1277 "Configure the authentication password for a circuit\n"
1278 "HMAC-MD5 authentication\n"
1279 "Cleartext password\n"
1280 "Circuit password\n")
1282 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/password", NB_OP_CREATE
,
1284 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/password/password",
1286 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/password/password-type",
1287 NB_OP_MODIFY
, type
);
1289 return nb_cli_apply_changes(vty
, NULL
);
1292 DEFPY(no_isis_passwd
, no_isis_passwd_cmd
, "no isis password [<md5|clear> WORD]",
1294 "IS-IS routing protocol\n"
1295 "Configure the authentication password for a circuit\n"
1296 "HMAC-MD5 authentication\n"
1297 "Cleartext password\n"
1298 "Circuit password\n")
1300 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/password", NB_OP_DELETE
,
1303 return nb_cli_apply_changes(vty
, NULL
);
1306 void cli_show_ip_isis_password(struct vty
*vty
, struct lyd_node
*dnode
,
1309 vty_out(vty
, " isis password %s %s\n",
1310 yang_dnode_get_string(dnode
, "./password-type"),
1311 yang_dnode_get_string(dnode
, "./password"));
1315 * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric
1317 DEFPY(isis_metric
, isis_metric_cmd
,
1318 "isis metric [level-1|level-2]$level (0-16777215)$met",
1319 "IS-IS routing protocol\n"
1320 "Set default metric for circuit\n"
1321 "Specify metric for level-1 routing\n"
1322 "Specify metric for level-2 routing\n"
1323 "Default metric value\n")
1325 if (!level
|| strmatch(level
, "level-1"))
1326 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/metric/level-1",
1327 NB_OP_MODIFY
, met_str
);
1328 if (!level
|| strmatch(level
, "level-2"))
1329 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/metric/level-2",
1330 NB_OP_MODIFY
, met_str
);
1332 return nb_cli_apply_changes(vty
, NULL
);
1335 DEFPY(no_isis_metric
, no_isis_metric_cmd
,
1336 "no isis metric [level-1|level-2]$level [(0-16777215)]",
1338 "IS-IS routing protocol\n"
1339 "Set default metric for circuit\n"
1340 "Specify metric for level-1 routing\n"
1341 "Specify metric for level-2 routing\n"
1342 "Default metric value\n")
1344 if (!level
|| strmatch(level
, "level-1"))
1345 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/metric/level-1",
1346 NB_OP_MODIFY
, NULL
);
1347 if (!level
|| strmatch(level
, "level-2"))
1348 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/metric/level-2",
1349 NB_OP_MODIFY
, NULL
);
1351 return nb_cli_apply_changes(vty
, NULL
);
1354 void cli_show_ip_isis_metric(struct vty
*vty
, struct lyd_node
*dnode
,
1357 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1358 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1360 if (strmatch(l1
, l2
))
1361 vty_out(vty
, " isis metric %s\n", l1
);
1363 vty_out(vty
, " isis metric %s level-1\n", l1
);
1364 vty_out(vty
, " isis metric %s level-2\n", l2
);
1369 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/interval
1371 DEFPY(isis_hello_interval
, isis_hello_interval_cmd
,
1372 "isis hello-interval [level-1|level-2]$level (1-600)$intv",
1373 "IS-IS routing protocol\n"
1374 "Set Hello interval\n"
1375 "Specify hello-interval for level-1 IIHs\n"
1376 "Specify hello-interval for level-2 IIHs\n"
1377 "Holdtime 1 seconds, interval depends on multiplier\n")
1379 if (!level
|| strmatch(level
, "level-1"))
1380 nb_cli_enqueue_change(vty
,
1381 "./frr-isisd:isis/hello/interval/level-1",
1382 NB_OP_MODIFY
, intv_str
);
1383 if (!level
|| strmatch(level
, "level-2"))
1384 nb_cli_enqueue_change(vty
,
1385 "./frr-isisd:isis/hello/interval/level-2",
1386 NB_OP_MODIFY
, intv_str
);
1388 return nb_cli_apply_changes(vty
, NULL
);
1391 DEFPY(no_isis_hello_interval
, no_isis_hello_interval_cmd
,
1392 "no isis hello-interval [level-1|level-2]$level [(1-600)]",
1394 "IS-IS routing protocol\n"
1395 "Set Hello interval\n"
1396 "Specify hello-interval for level-1 IIHs\n"
1397 "Specify hello-interval for level-2 IIHs\n"
1398 "Holdtime 1 second, interval depends on multiplier\n")
1400 if (!level
|| strmatch(level
, "level-1"))
1401 nb_cli_enqueue_change(vty
,
1402 "./frr-isisd:isis/hello/interval/level-1",
1403 NB_OP_MODIFY
, NULL
);
1404 if (!level
|| strmatch(level
, "level-2"))
1405 nb_cli_enqueue_change(vty
,
1406 "./frr-isisd:isis/hello/interval/level-2",
1407 NB_OP_MODIFY
, NULL
);
1409 return nb_cli_apply_changes(vty
, NULL
);
1412 void cli_show_ip_isis_hello_interval(struct vty
*vty
, struct lyd_node
*dnode
,
1415 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1416 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1418 if (strmatch(l1
, l2
))
1419 vty_out(vty
, " isis hello-interval %s\n", l1
);
1421 vty_out(vty
, " isis hello-interval %s level-1\n", l1
);
1422 vty_out(vty
, " isis hello-interval %s level-2\n", l2
);
1427 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/multiplier
1429 DEFPY(isis_hello_multiplier
, isis_hello_multiplier_cmd
,
1430 "isis hello-multiplier [level-1|level-2]$level (2-100)$mult",
1431 "IS-IS routing protocol\n"
1432 "Set multiplier for Hello holding time\n"
1433 "Specify hello multiplier for level-1 IIHs\n"
1434 "Specify hello multiplier for level-2 IIHs\n"
1435 "Hello multiplier value\n")
1437 if (!level
|| strmatch(level
, "level-1"))
1438 nb_cli_enqueue_change(
1439 vty
, "./frr-isisd:isis/hello/multiplier/level-1",
1440 NB_OP_MODIFY
, mult_str
);
1441 if (!level
|| strmatch(level
, "level-2"))
1442 nb_cli_enqueue_change(
1443 vty
, "./frr-isisd:isis/hello/multiplier/level-2",
1444 NB_OP_MODIFY
, mult_str
);
1446 return nb_cli_apply_changes(vty
, NULL
);
1449 DEFPY(no_isis_hello_multiplier
, no_isis_hello_multiplier_cmd
,
1450 "no isis hello-multiplier [level-1|level-2]$level [(2-100)]",
1452 "IS-IS routing protocol\n"
1453 "Set multiplier for Hello holding time\n"
1454 "Specify hello multiplier for level-1 IIHs\n"
1455 "Specify hello multiplier for level-2 IIHs\n"
1456 "Hello multiplier value\n")
1458 if (!level
|| strmatch(level
, "level-1"))
1459 nb_cli_enqueue_change(
1460 vty
, "./frr-isisd:isis/hello/multiplier/level-1",
1461 NB_OP_MODIFY
, NULL
);
1462 if (!level
|| strmatch(level
, "level-2"))
1463 nb_cli_enqueue_change(
1464 vty
, "./frr-isisd:isis/hello/multiplier/level-2",
1465 NB_OP_MODIFY
, NULL
);
1467 return nb_cli_apply_changes(vty
, NULL
);
1470 void cli_show_ip_isis_hello_multi(struct vty
*vty
, struct lyd_node
*dnode
,
1473 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1474 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1476 if (strmatch(l1
, l2
))
1477 vty_out(vty
, " isis hello-multiplier %s\n", l1
);
1479 vty_out(vty
, " isis hello-multiplier %s level-1\n", l1
);
1480 vty_out(vty
, " isis hello-multiplier %s level-2\n", l2
);
1486 * /frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake
1488 DEFPY(isis_threeway_adj
, isis_threeway_adj_cmd
, "[no] isis three-way-handshake",
1491 "Enable/Disable three-way handshake\n")
1493 nb_cli_enqueue_change(vty
,
1494 "./frr-isisd:isis/disable-three-way-handshake",
1495 NB_OP_MODIFY
, no
? "true" : "false");
1497 return nb_cli_apply_changes(vty
, NULL
);
1500 void cli_show_ip_isis_threeway_shake(struct vty
*vty
, struct lyd_node
*dnode
,
1503 if (yang_dnode_get_bool(dnode
, NULL
))
1504 vty_out(vty
, " no");
1505 vty_out(vty
, " isis three-way-handshake\n");
1509 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/padding
1511 DEFPY(isis_hello_padding
, isis_hello_padding_cmd
, "[no] isis hello padding",
1513 "IS-IS routing protocol\n"
1514 "Add padding to IS-IS hello packets\n"
1515 "Pad hello packets\n")
1517 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/hello/padding",
1518 NB_OP_MODIFY
, no
? "false" : "true");
1520 return nb_cli_apply_changes(vty
, NULL
);
1523 void cli_show_ip_isis_hello_padding(struct vty
*vty
, struct lyd_node
*dnode
,
1526 if (!yang_dnode_get_bool(dnode
, NULL
))
1527 vty_out(vty
, " no");
1529 vty_out(vty
, " isis hello padding\n");
1533 * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval
1535 DEFPY(csnp_interval
, csnp_interval_cmd
,
1536 "isis csnp-interval (1-600)$intv [level-1|level-2]$level",
1537 "IS-IS routing protocol\n"
1538 "Set CSNP interval in seconds\n"
1539 "CSNP interval value\n"
1540 "Specify interval for level-1 CSNPs\n"
1541 "Specify interval for level-2 CSNPs\n")
1543 if (!level
|| strmatch(level
, "level-1"))
1544 nb_cli_enqueue_change(vty
,
1545 "./frr-isisd:isis/csnp-interval/level-1",
1546 NB_OP_MODIFY
, intv_str
);
1547 if (!level
|| strmatch(level
, "level-2"))
1548 nb_cli_enqueue_change(vty
,
1549 "./frr-isisd:isis/csnp-interval/level-2",
1550 NB_OP_MODIFY
, intv_str
);
1552 return nb_cli_apply_changes(vty
, NULL
);
1555 DEFPY(no_csnp_interval
, no_csnp_interval_cmd
,
1556 "no isis csnp-interval [(1-600)] [level-1|level-2]$level",
1558 "IS-IS routing protocol\n"
1559 "Set CSNP interval in seconds\n"
1560 "CSNP interval value\n"
1561 "Specify interval for level-1 CSNPs\n"
1562 "Specify interval for level-2 CSNPs\n")
1564 if (!level
|| strmatch(level
, "level-1"))
1565 nb_cli_enqueue_change(vty
,
1566 "./frr-isisd:isis/csnp-interval/level-1",
1567 NB_OP_MODIFY
, NULL
);
1568 if (!level
|| strmatch(level
, "level-2"))
1569 nb_cli_enqueue_change(vty
,
1570 "./frr-isisd:isis/csnp-interval/level-2",
1571 NB_OP_MODIFY
, NULL
);
1573 return nb_cli_apply_changes(vty
, NULL
);
1576 void cli_show_ip_isis_csnp_interval(struct vty
*vty
, struct lyd_node
*dnode
,
1579 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1580 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1582 if (strmatch(l1
, l2
))
1583 vty_out(vty
, " isis csnp-interval %s\n", l1
);
1585 vty_out(vty
, " isis csnp-interval %s level-1\n", l1
);
1586 vty_out(vty
, " isis csnp-interval %s level-2\n", l2
);
1591 * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval
1593 DEFPY(psnp_interval
, psnp_interval_cmd
,
1594 "isis psnp-interval (1-120)$intv [level-1|level-2]$level",
1595 "IS-IS routing protocol\n"
1596 "Set PSNP interval in seconds\n"
1597 "PSNP interval value\n"
1598 "Specify interval for level-1 PSNPs\n"
1599 "Specify interval for level-2 PSNPs\n")
1601 if (!level
|| strmatch(level
, "level-1"))
1602 nb_cli_enqueue_change(vty
,
1603 "./frr-isisd:isis/psnp-interval/level-1",
1604 NB_OP_MODIFY
, intv_str
);
1605 if (!level
|| strmatch(level
, "level-2"))
1606 nb_cli_enqueue_change(vty
,
1607 "./frr-isisd:isis/psnp-interval/level-2",
1608 NB_OP_MODIFY
, intv_str
);
1610 return nb_cli_apply_changes(vty
, NULL
);
1613 DEFPY(no_psnp_interval
, no_psnp_interval_cmd
,
1614 "no isis psnp-interval [(1-120)] [level-1|level-2]$level",
1616 "IS-IS routing protocol\n"
1617 "Set PSNP interval in seconds\n"
1618 "PSNP interval value\n"
1619 "Specify interval for level-1 PSNPs\n"
1620 "Specify interval for level-2 PSNPs\n")
1622 if (!level
|| strmatch(level
, "level-1"))
1623 nb_cli_enqueue_change(vty
,
1624 "./frr-isisd:isis/psnp-interval/level-1",
1625 NB_OP_MODIFY
, NULL
);
1626 if (!level
|| strmatch(level
, "level-2"))
1627 nb_cli_enqueue_change(vty
,
1628 "./frr-isisd:isis/psnp-interval/level-2",
1629 NB_OP_MODIFY
, NULL
);
1631 return nb_cli_apply_changes(vty
, NULL
);
1634 void cli_show_ip_isis_psnp_interval(struct vty
*vty
, struct lyd_node
*dnode
,
1637 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1638 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1640 if (strmatch(l1
, l2
))
1641 vty_out(vty
, " isis psnp-interval %s\n", l1
);
1643 vty_out(vty
, " isis psnp-interval %s level-1\n", l1
);
1644 vty_out(vty
, " isis psnp-interval %s level-2\n", l2
);
1649 * XPath: /frr-interface:lib/interface/frr-isisd:isis/multi-topology
1651 DEFPY(circuit_topology
, circuit_topology_cmd
,
1652 "[no] isis topology"
1662 "IS-IS routing protocol\n"
1663 "Configure interface IS-IS topologies\n"
1664 "IPv4 unicast topology\n"
1665 "IPv4 management topology\n"
1666 "IPv6 unicast topology\n"
1667 "IPv4 multicast topology\n"
1668 "IPv6 multicast topology\n"
1669 "IPv6 management topology\n"
1670 "IPv6 dst-src topology\n")
1672 nb_cli_enqueue_change(vty
, ".", NB_OP_MODIFY
, no
? "false" : "true");
1674 if (strmatch(topology
, "ipv4-mgmt"))
1675 return nb_cli_apply_changes(
1676 vty
, "./frr-isisd:isis/multi-topology/ipv4-management");
1677 else if (strmatch(topology
, "ipv6-mgmt"))
1678 return nb_cli_apply_changes(
1679 vty
, "./frr-isisd:isis/multi-topology/ipv6-management");
1681 return nb_cli_apply_changes(
1682 vty
, "./frr-isisd:isis/multi-topology/%s", topology
);
1685 void cli_show_ip_isis_mt_ipv4_unicast(struct vty
*vty
, struct lyd_node
*dnode
,
1688 if (!yang_dnode_get_bool(dnode
, NULL
))
1689 vty_out(vty
, " no");
1690 vty_out(vty
, " isis topology ipv4-unicast\n");
1693 void cli_show_ip_isis_mt_ipv4_multicast(struct vty
*vty
, struct lyd_node
*dnode
,
1696 if (!yang_dnode_get_bool(dnode
, NULL
))
1697 vty_out(vty
, " no");
1698 vty_out(vty
, " isis topology ipv4-multicast\n");
1701 void cli_show_ip_isis_mt_ipv4_mgmt(struct vty
*vty
, struct lyd_node
*dnode
,
1704 if (!yang_dnode_get_bool(dnode
, NULL
))
1705 vty_out(vty
, " no");
1706 vty_out(vty
, " isis topology ipv4-mgmt\n");
1709 void cli_show_ip_isis_mt_ipv6_unicast(struct vty
*vty
, struct lyd_node
*dnode
,
1712 if (!yang_dnode_get_bool(dnode
, NULL
))
1713 vty_out(vty
, " no");
1714 vty_out(vty
, " isis topology ipv6-unicast\n");
1717 void cli_show_ip_isis_mt_ipv6_multicast(struct vty
*vty
, struct lyd_node
*dnode
,
1720 if (!yang_dnode_get_bool(dnode
, NULL
))
1721 vty_out(vty
, " no");
1722 vty_out(vty
, " isis topology ipv6-multicast\n");
1725 void cli_show_ip_isis_mt_ipv6_mgmt(struct vty
*vty
, struct lyd_node
*dnode
,
1728 if (!yang_dnode_get_bool(dnode
, NULL
))
1729 vty_out(vty
, " no");
1730 vty_out(vty
, " isis topology ipv6-mgmt\n");
1733 void cli_show_ip_isis_mt_ipv6_dstsrc(struct vty
*vty
, struct lyd_node
*dnode
,
1736 if (!yang_dnode_get_bool(dnode
, NULL
))
1737 vty_out(vty
, " no");
1738 vty_out(vty
, " isis topology ipv6-dstsrc\n");
1742 * XPath: /frr-interface:lib/interface/frr-isisd:isis/circuit-type
1744 DEFPY(isis_circuit_type
, isis_circuit_type_cmd
,
1745 "isis circuit-type <level-1|level-1-2|level-2-only>$type",
1746 "IS-IS routing protocol\n"
1747 "Configure circuit type for interface\n"
1748 "Level-1 only adjacencies are formed\n"
1749 "Level-1-2 adjacencies are formed\n"
1750 "Level-2 only adjacencies are formed\n")
1752 nb_cli_enqueue_change(
1753 vty
, "./frr-isisd:isis/circuit-type", NB_OP_MODIFY
,
1754 strmatch(type
, "level-2-only") ? "level-2" : type
);
1756 return nb_cli_apply_changes(vty
, NULL
);
1759 DEFPY(no_isis_circuit_type
, no_isis_circuit_type_cmd
,
1760 "no isis circuit-type [level-1|level-1-2|level-2-only]",
1762 "IS-IS routing protocol\n"
1763 "Configure circuit type for interface\n"
1764 "Level-1 only adjacencies are formed\n"
1765 "Level-1-2 adjacencies are formed\n"
1766 "Level-2 only adjacencies are formed\n")
1768 const struct lyd_node
*dnode
;
1769 struct interface
*ifp
;
1770 struct isis_circuit
*circuit
;
1772 const char *circ_type
;
1775 * Default value depends on whether the circuit is part of an area,
1776 * and the is-type of the area if there is one. So we need to do this
1779 dnode
= yang_dnode_get(running_config
->dnode
, VTY_CURR_XPATH
);
1780 ifp
= yang_dnode_get_entry(dnode
, false);
1784 circuit
= circuit_scan_by_ifp(ifp
);
1788 if (circuit
->state
== C_STATE_UP
)
1789 is_type
= circuit
->area
->is_type
;
1795 circ_type
= "level-1";
1798 circ_type
= "level-2";
1800 case IS_LEVEL_1_AND_2
:
1801 circ_type
= "level-1-2";
1804 return CMD_ERR_NO_MATCH
;
1806 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/circuit-type",
1807 NB_OP_MODIFY
, circ_type
);
1809 return nb_cli_apply_changes(vty
, NULL
);
1812 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/circuit-type",
1813 NB_OP_MODIFY
, NULL
);
1815 return nb_cli_apply_changes(vty
, NULL
);
1818 void cli_show_ip_isis_circ_type(struct vty
*vty
, struct lyd_node
*dnode
,
1821 int level
= yang_dnode_get_enum(dnode
, NULL
);
1825 vty_out(vty
, " isis circuit-type level-1\n");
1828 vty_out(vty
, " isis circuit-type level-2-only\n");
1830 case IS_LEVEL_1_AND_2
:
1831 vty_out(vty
, " isis circuit-type level-1-2\n");
1837 * XPath: /frr-interface:lib/interface/frr-isisd:isis/network-type
1839 DEFPY(isis_network
, isis_network_cmd
, "[no] isis network point-to-point",
1841 "IS-IS routing protocol\n"
1842 "Set network type\n"
1843 "point-to-point network type\n")
1845 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/network-type",
1847 no
? "broadcast" : "point-to-point");
1849 return nb_cli_apply_changes(vty
, NULL
);
1852 void cli_show_ip_isis_network_type(struct vty
*vty
, struct lyd_node
*dnode
,
1855 if (yang_dnode_get_enum(dnode
, NULL
) != CIRCUIT_T_P2P
)
1856 vty_out(vty
, " no");
1858 vty_out(vty
, " isis network point-to-point\n");
1862 * XPath: /frr-interface:lib/interface/frr-isisd:isis/priority
1864 DEFPY(isis_priority
, isis_priority_cmd
,
1865 "isis priority (0-127)$prio [level-1|level-2]$level",
1866 "IS-IS routing protocol\n"
1867 "Set priority for Designated Router election\n"
1869 "Specify priority for level-1 routing\n"
1870 "Specify priority for level-2 routing\n")
1872 if (!level
|| strmatch(level
, "level-1"))
1873 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/priority/level-1",
1874 NB_OP_MODIFY
, prio_str
);
1875 if (!level
|| strmatch(level
, "level-2"))
1876 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/priority/level-2",
1877 NB_OP_MODIFY
, prio_str
);
1879 return nb_cli_apply_changes(vty
, NULL
);
1882 DEFPY(no_isis_priority
, no_isis_priority_cmd
,
1883 "no isis priority [(0-127)] [level-1|level-2]$level",
1885 "IS-IS routing protocol\n"
1886 "Set priority for Designated Router election\n"
1888 "Specify priority for level-1 routing\n"
1889 "Specify priority for level-2 routing\n")
1891 if (!level
|| strmatch(level
, "level-1"))
1892 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/priority/level-1",
1893 NB_OP_MODIFY
, NULL
);
1894 if (!level
|| strmatch(level
, "level-2"))
1895 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/priority/level-2",
1896 NB_OP_MODIFY
, NULL
);
1898 return nb_cli_apply_changes(vty
, NULL
);
1901 void cli_show_ip_isis_priority(struct vty
*vty
, struct lyd_node
*dnode
,
1904 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1905 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1907 if (strmatch(l1
, l2
))
1908 vty_out(vty
, " isis priority %s\n", l1
);
1910 vty_out(vty
, " isis priority %s level-1\n", l1
);
1911 vty_out(vty
, " isis priority %s level-2\n", l2
);
1916 * XPath: /frr-isisd:isis/instance/log-adjacency-changes
1918 DEFPY(log_adj_changes
, log_adj_changes_cmd
, "[no] log-adjacency-changes",
1919 NO_STR
"Log changes in adjacency state\n")
1921 nb_cli_enqueue_change(vty
, "./log-adjacency-changes", NB_OP_MODIFY
,
1922 no
? "false" : "true");
1924 return nb_cli_apply_changes(vty
, NULL
);
1927 void cli_show_isis_log_adjacency(struct vty
*vty
, struct lyd_node
*dnode
,
1930 if (!yang_dnode_get_bool(dnode
, NULL
))
1931 vty_out(vty
, " no");
1932 vty_out(vty
, " log-adjacency-changes\n");
1935 void isis_cli_init(void)
1937 install_element(CONFIG_NODE
, &router_isis_cmd
);
1938 install_element(CONFIG_NODE
, &no_router_isis_cmd
);
1940 install_element(INTERFACE_NODE
, &ip_router_isis_cmd
);
1941 install_element(INTERFACE_NODE
, &ip6_router_isis_cmd
);
1942 install_element(INTERFACE_NODE
, &no_ip_router_isis_cmd
);
1944 install_element(ISIS_NODE
, &net_cmd
);
1946 install_element(ISIS_NODE
, &is_type_cmd
);
1947 install_element(ISIS_NODE
, &no_is_type_cmd
);
1949 install_element(ISIS_NODE
, &dynamic_hostname_cmd
);
1951 install_element(ISIS_NODE
, &set_overload_bit_cmd
);
1952 install_element(ISIS_NODE
, &set_attached_bit_cmd
);
1954 install_element(ISIS_NODE
, &metric_style_cmd
);
1955 install_element(ISIS_NODE
, &no_metric_style_cmd
);
1957 install_element(ISIS_NODE
, &area_passwd_cmd
);
1958 install_element(ISIS_NODE
, &domain_passwd_cmd
);
1959 install_element(ISIS_NODE
, &no_area_passwd_cmd
);
1961 install_element(ISIS_NODE
, &lsp_gen_interval_cmd
);
1962 install_element(ISIS_NODE
, &no_lsp_gen_interval_cmd
);
1963 install_element(ISIS_NODE
, &lsp_refresh_interval_cmd
);
1964 install_element(ISIS_NODE
, &no_lsp_refresh_interval_cmd
);
1965 install_element(ISIS_NODE
, &max_lsp_lifetime_cmd
);
1966 install_element(ISIS_NODE
, &no_max_lsp_lifetime_cmd
);
1967 install_element(ISIS_NODE
, &area_lsp_mtu_cmd
);
1968 install_element(ISIS_NODE
, &no_area_lsp_mtu_cmd
);
1970 install_element(ISIS_NODE
, &spf_interval_cmd
);
1971 install_element(ISIS_NODE
, &no_spf_interval_cmd
);
1972 install_element(ISIS_NODE
, &spf_delay_ietf_cmd
);
1973 install_element(ISIS_NODE
, &no_spf_delay_ietf_cmd
);
1975 install_element(ISIS_NODE
, &area_purge_originator_cmd
);
1977 install_element(ISIS_NODE
, &isis_mpls_te_on_cmd
);
1978 install_element(ISIS_NODE
, &no_isis_mpls_te_on_cmd
);
1979 install_element(ISIS_NODE
, &isis_mpls_te_router_addr_cmd
);
1980 install_element(ISIS_NODE
, &isis_mpls_te_inter_as_cmd
);
1982 install_element(ISIS_NODE
, &isis_default_originate_cmd
);
1983 install_element(ISIS_NODE
, &isis_redistribute_cmd
);
1985 install_element(ISIS_NODE
, &isis_topology_cmd
);
1987 install_element(INTERFACE_NODE
, &isis_passive_cmd
);
1989 install_element(INTERFACE_NODE
, &isis_passwd_cmd
);
1990 install_element(INTERFACE_NODE
, &no_isis_passwd_cmd
);
1992 install_element(INTERFACE_NODE
, &isis_metric_cmd
);
1993 install_element(INTERFACE_NODE
, &no_isis_metric_cmd
);
1995 install_element(INTERFACE_NODE
, &isis_hello_interval_cmd
);
1996 install_element(INTERFACE_NODE
, &no_isis_hello_interval_cmd
);
1998 install_element(INTERFACE_NODE
, &isis_hello_multiplier_cmd
);
1999 install_element(INTERFACE_NODE
, &no_isis_hello_multiplier_cmd
);
2001 install_element(INTERFACE_NODE
, &isis_threeway_adj_cmd
);
2003 install_element(INTERFACE_NODE
, &isis_hello_padding_cmd
);
2005 install_element(INTERFACE_NODE
, &csnp_interval_cmd
);
2006 install_element(INTERFACE_NODE
, &no_csnp_interval_cmd
);
2008 install_element(INTERFACE_NODE
, &psnp_interval_cmd
);
2009 install_element(INTERFACE_NODE
, &no_psnp_interval_cmd
);
2011 install_element(INTERFACE_NODE
, &circuit_topology_cmd
);
2013 install_element(INTERFACE_NODE
, &isis_circuit_type_cmd
);
2014 install_element(INTERFACE_NODE
, &no_isis_circuit_type_cmd
);
2016 install_element(INTERFACE_NODE
, &isis_network_cmd
);
2018 install_element(INTERFACE_NODE
, &isis_priority_cmd
);
2019 install_element(INTERFACE_NODE
, &no_isis_priority_cmd
);
2021 install_element(ISIS_NODE
, &log_adj_changes_cmd
);
2024 #endif /* ifndef FABRICD */