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_DESTROY
, 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_DESTROY
,
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
;
140 /* area will be created if it is not present. make sure the yang model
141 * is synced with FRR and call the appropriate NB cb.
143 area
= isis_area_lookup(tag
);
145 snprintf(temp_xpath
, XPATH_MAXLEN
,
146 "/frr-isisd:isis/instance[area-tag='%s']", tag
);
147 nb_cli_enqueue_change(vty
, temp_xpath
, NB_OP_CREATE
, tag
);
148 snprintf(temp_xpath
, XPATH_MAXLEN
,
149 "/frr-isisd:isis/instance[area-tag='%s']/is-type",
151 nb_cli_enqueue_change(
152 vty
, temp_xpath
, NB_OP_MODIFY
,
153 listcount(isis
->area_list
) == 0 ? "level-1-2" : NULL
);
154 nb_cli_enqueue_change(vty
, "./frr-isisd:isis", NB_OP_CREATE
,
156 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/area-tag",
158 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/ipv4-routing",
159 NB_OP_MODIFY
, "true");
160 nb_cli_enqueue_change(
161 vty
, "./frr-isisd:isis/circuit-type", NB_OP_MODIFY
,
162 listcount(isis
->area_list
) == 0 ? "level-1-2"
165 /* area exists, circuit type defaults to its area's is_type */
166 switch (area
->is_type
) {
168 circ_type
= "level-1";
171 circ_type
= "level-2";
173 case IS_LEVEL_1_AND_2
:
174 circ_type
= "level-1-2";
177 /* just to silence compiler warnings */
178 return CMD_WARNING_CONFIG_FAILED
;
180 nb_cli_enqueue_change(vty
, "./frr-isisd:isis", NB_OP_CREATE
,
182 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/area-tag",
184 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/ipv4-routing",
185 NB_OP_MODIFY
, "true");
186 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/circuit-type",
187 NB_OP_MODIFY
, circ_type
);
190 /* check if the interface is a loopback and if so set it as passive */
191 ifp
= nb_running_get_entry(NULL
, VTY_CURR_XPATH
, false);
192 if (ifp
&& if_is_loopback(ifp
))
193 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/passive",
194 NB_OP_MODIFY
, "true");
196 return nb_cli_apply_changes(vty
, NULL
);
199 DEFPY(ip6_router_isis
, ip6_router_isis_cmd
, "ipv6 router isis WORD$tag",
200 "Interface Internet Protocol config commands\n"
201 "IP router interface commands\n"
202 "IS-IS routing protocol\n"
203 "Routing process tag\n")
205 char temp_xpath
[XPATH_MAXLEN
];
206 const char *circ_type
;
207 struct isis_area
*area
;
208 struct interface
*ifp
;
210 /* area will be created if it is not present. make sure the yang model
211 * is synced with FRR and call the appropriate NB cb.
213 area
= isis_area_lookup(tag
);
215 snprintf(temp_xpath
, XPATH_MAXLEN
,
216 "/frr-isisd:isis/instance[area-tag='%s']", tag
);
217 nb_cli_enqueue_change(vty
, temp_xpath
, NB_OP_CREATE
, tag
);
218 snprintf(temp_xpath
, XPATH_MAXLEN
,
219 "/frr-isisd:isis/instance[area-tag='%s']/is-type",
221 nb_cli_enqueue_change(
222 vty
, temp_xpath
, NB_OP_MODIFY
,
223 listcount(isis
->area_list
) == 0 ? "level-1-2" : NULL
);
224 nb_cli_enqueue_change(vty
, "./frr-isisd:isis", NB_OP_CREATE
,
226 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/area-tag",
228 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/ipv6-routing",
229 NB_OP_MODIFY
, "true");
230 nb_cli_enqueue_change(
231 vty
, "./frr-isisd:isis/circuit-type", NB_OP_MODIFY
,
232 listcount(isis
->area_list
) == 0 ? "level-1-2"
235 /* area exists, circuit type defaults to its area's is_type */
236 switch (area
->is_type
) {
238 circ_type
= "level-1";
241 circ_type
= "level-2";
243 case IS_LEVEL_1_AND_2
:
244 circ_type
= "level-1-2";
247 /* just to silence compiler warnings */
248 return CMD_WARNING_CONFIG_FAILED
;
250 nb_cli_enqueue_change(vty
, "./frr-isisd:isis", NB_OP_CREATE
,
252 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/area-tag",
254 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/ipv6-routing",
255 NB_OP_MODIFY
, "true");
256 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/circuit-type",
257 NB_OP_MODIFY
, circ_type
);
260 /* check if the interface is a loopback and if so set it as passive */
261 ifp
= nb_running_get_entry(NULL
, VTY_CURR_XPATH
, false);
262 if (ifp
&& if_is_loopback(ifp
))
263 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/passive",
264 NB_OP_MODIFY
, "true");
266 return nb_cli_apply_changes(vty
, NULL
);
269 DEFPY(no_ip_router_isis
, no_ip_router_isis_cmd
,
270 "no <ip|ipv6>$ip router isis [WORD]$tag",
272 "Interface Internet Protocol config commands\n"
273 "IP router interface commands\n"
274 "IP router interface commands\n"
275 "IS-IS routing protocol\n"
276 "Routing process tag\n")
278 const struct lyd_node
*dnode
;
280 dnode
= yang_dnode_get(vty
->candidate_config
->dnode
,
281 "%s/frr-isisd:isis", VTY_CURR_XPATH
);
286 * If both ipv4 and ipv6 are off delete the interface isis container.
288 if (strmatch(ip
, "ipv6")) {
289 if (!yang_dnode_get_bool(dnode
, "./ipv4-routing"))
290 nb_cli_enqueue_change(vty
, "./frr-isisd:isis",
291 NB_OP_DESTROY
, NULL
);
293 nb_cli_enqueue_change(vty
,
294 "./frr-isisd:isis/ipv6-routing",
295 NB_OP_MODIFY
, "false");
297 if (!yang_dnode_get_bool(dnode
, "./ipv6-routing"))
298 nb_cli_enqueue_change(vty
, "./frr-isisd:isis",
299 NB_OP_DESTROY
, NULL
);
301 nb_cli_enqueue_change(vty
,
302 "./frr-isisd:isis/ipv4-routing",
303 NB_OP_MODIFY
, "false");
306 return nb_cli_apply_changes(vty
, NULL
);
309 void cli_show_ip_isis_ipv4(struct vty
*vty
, struct lyd_node
*dnode
,
312 if (!yang_dnode_get_bool(dnode
, NULL
))
314 vty_out(vty
, " ip router isis %s\n",
315 yang_dnode_get_string(dnode
, "../area-tag"));
318 void cli_show_ip_isis_ipv6(struct vty
*vty
, struct lyd_node
*dnode
,
321 if (!yang_dnode_get_bool(dnode
, NULL
))
323 vty_out(vty
, " ipv6 router isis %s\n",
324 yang_dnode_get_string(dnode
, "../area-tag"));
328 * XPath: /frr-isisd:isis/instance/area-address
330 DEFPY(net
, net_cmd
, "[no] net WORD",
331 "Remove an existing Network Entity Title for this process\n"
332 "A Network Entity Title for this process (OSI only)\n"
333 "XX.XXXX. ... .XXX.XX Network entity title (NET)\n")
335 nb_cli_enqueue_change(vty
, "./area-address",
336 no
? NB_OP_DESTROY
: NB_OP_CREATE
, net
);
338 return nb_cli_apply_changes(vty
, NULL
);
341 void cli_show_isis_area_address(struct vty
*vty
, struct lyd_node
*dnode
,
344 vty_out(vty
, " net %s\n", yang_dnode_get_string(dnode
, NULL
));
348 * XPath: /frr-isisd:isis/instance/is-type
350 DEFPY(is_type
, is_type_cmd
, "is-type <level-1|level-1-2|level-2-only>$level",
351 "IS Level for this routing process (OSI only)\n"
352 "Act as a station router only\n"
353 "Act as both a station router and an area router\n"
354 "Act as an area router only\n")
356 nb_cli_enqueue_change(vty
, "./is-type", NB_OP_MODIFY
,
357 strmatch(level
, "level-2-only") ? "level-2"
360 return nb_cli_apply_changes(vty
, NULL
);
363 DEFPY(no_is_type
, no_is_type_cmd
,
364 "no is-type [<level-1|level-1-2|level-2-only>]",
366 "IS Level for this routing process (OSI only)\n"
367 "Act as a station router only\n"
368 "Act as both a station router and an area router\n"
369 "Act as an area router only\n")
371 const char *value
= NULL
;
372 struct isis_area
*area
;
374 area
= nb_running_get_entry(NULL
, VTY_CURR_XPATH
, false);
377 * Put the is-type back to defaults:
378 * - level-1-2 on first area
379 * - level-1 for the rest
381 if (area
&& listgetdata(listhead(isis
->area_list
)) == area
)
385 nb_cli_enqueue_change(vty
, "./is-type", NB_OP_MODIFY
, value
);
387 return nb_cli_apply_changes(vty
, NULL
);
390 void cli_show_isis_is_type(struct vty
*vty
, struct lyd_node
*dnode
,
393 int is_type
= yang_dnode_get_enum(dnode
, NULL
);
397 vty_out(vty
, " is-type level-1\n");
400 vty_out(vty
, " is-type level-2-only\n");
402 case IS_LEVEL_1_AND_2
:
403 vty_out(vty
, " is-type level-1-2\n");
409 * XPath: /frr-isisd:isis/instance/dynamic-hostname
411 DEFPY(dynamic_hostname
, dynamic_hostname_cmd
, "[no] hostname dynamic",
413 "Dynamic hostname for IS-IS\n"
414 "Dynamic hostname\n")
416 nb_cli_enqueue_change(vty
, "./dynamic-hostname", NB_OP_MODIFY
,
417 no
? "false" : "true");
419 return nb_cli_apply_changes(vty
, NULL
);
422 void cli_show_isis_dynamic_hostname(struct vty
*vty
, struct lyd_node
*dnode
,
425 if (!yang_dnode_get_bool(dnode
, NULL
))
428 vty_out(vty
, " hostname dynamic\n");
432 * XPath: /frr-isisd:isis/instance/overload
434 DEFPY(set_overload_bit
, set_overload_bit_cmd
, "[no] set-overload-bit",
435 "Reset overload bit to accept transit traffic\n"
436 "Set overload bit to avoid any transit traffic\n")
438 nb_cli_enqueue_change(vty
, "./overload", NB_OP_MODIFY
,
439 no
? "false" : "true");
441 return nb_cli_apply_changes(vty
, NULL
);
444 void cli_show_isis_overload(struct vty
*vty
, struct lyd_node
*dnode
,
447 if (!yang_dnode_get_bool(dnode
, NULL
))
449 vty_out(vty
, " set-overload-bit\n");
453 * XPath: /frr-isisd:isis/instance/attached
455 DEFPY(set_attached_bit
, set_attached_bit_cmd
, "[no] set-attached-bit",
456 "Reset attached bit\n"
457 "Set attached bit to identify as L1/L2 router for inter-area traffic\n")
459 nb_cli_enqueue_change(vty
, "./attached", NB_OP_MODIFY
,
460 no
? "false" : "true");
462 return nb_cli_apply_changes(vty
, NULL
);
465 void cli_show_isis_attached(struct vty
*vty
, struct lyd_node
*dnode
,
468 if (!yang_dnode_get_bool(dnode
, NULL
))
470 vty_out(vty
, " set-attached-bit\n");
474 * XPath: /frr-isisd:isis/instance/metric-style
476 DEFPY(metric_style
, metric_style_cmd
,
477 "metric-style <narrow|transition|wide>$style",
478 "Use old-style (ISO 10589) or new-style packet formats\n"
479 "Use old style of TLVs with narrow metric\n"
480 "Send and accept both styles of TLVs during transition\n"
481 "Use new style of TLVs to carry wider metric\n")
483 nb_cli_enqueue_change(vty
, "./metric-style", NB_OP_MODIFY
, style
);
485 return nb_cli_apply_changes(vty
, NULL
);
488 DEFPY(no_metric_style
, no_metric_style_cmd
,
489 "no metric-style [narrow|transition|wide]",
491 "Use old-style (ISO 10589) or new-style packet formats\n"
492 "Use old style of TLVs with narrow metric\n"
493 "Send and accept both styles of TLVs during transition\n"
494 "Use new style of TLVs to carry wider metric\n")
496 nb_cli_enqueue_change(vty
, "./metric-style", NB_OP_MODIFY
, "narrow");
498 return nb_cli_apply_changes(vty
, NULL
);
501 void cli_show_isis_metric_style(struct vty
*vty
, struct lyd_node
*dnode
,
504 int metric
= yang_dnode_get_enum(dnode
, NULL
);
507 case ISIS_NARROW_METRIC
:
508 vty_out(vty
, " metric-style narrow\n");
510 case ISIS_WIDE_METRIC
:
511 vty_out(vty
, " metric-style wide\n");
513 case ISIS_TRANSITION_METRIC
:
514 vty_out(vty
, " metric-style transition\n");
520 * XPath: /frr-isisd:isis/instance/area-password
522 DEFPY(area_passwd
, area_passwd_cmd
,
523 "area-password <clear|md5>$pwd_type WORD$pwd [authenticate snp <send-only|validate>$snp]",
524 "Configure the authentication password for an area\n"
525 "Clear-text authentication type\n"
526 "MD5 authentication type\n"
527 "Level-wide password\n"
530 "Send but do not check PDUs on receiving\n"
531 "Send and check PDUs on receiving\n")
533 nb_cli_enqueue_change(vty
, "./area-password", NB_OP_CREATE
, NULL
);
534 nb_cli_enqueue_change(vty
, "./area-password/password", NB_OP_MODIFY
,
536 nb_cli_enqueue_change(vty
, "./area-password/password-type",
537 NB_OP_MODIFY
, pwd_type
);
538 nb_cli_enqueue_change(vty
, "./area-password/authenticate-snp",
539 NB_OP_MODIFY
, snp
? snp
: "none");
541 return nb_cli_apply_changes(vty
, NULL
);
544 void cli_show_isis_area_pwd(struct vty
*vty
, struct lyd_node
*dnode
,
549 vty_out(vty
, " area-password %s %s",
550 yang_dnode_get_string(dnode
, "./password-type"),
551 yang_dnode_get_string(dnode
, "./password"));
552 snp
= yang_dnode_get_string(dnode
, "./authenticate-snp");
553 if (!strmatch("none", snp
))
554 vty_out(vty
, " authenticate snp %s", snp
);
559 * XPath: /frr-isisd:isis/instance/domain-password
561 DEFPY(domain_passwd
, domain_passwd_cmd
,
562 "domain-password <clear|md5>$pwd_type WORD$pwd [authenticate snp <send-only|validate>$snp]",
563 "Set the authentication password for a routing domain\n"
564 "Clear-text authentication type\n"
565 "MD5 authentication type\n"
566 "Level-wide password\n"
569 "Send but do not check PDUs on receiving\n"
570 "Send and check PDUs on receiving\n")
572 nb_cli_enqueue_change(vty
, "./domain-password", NB_OP_CREATE
, NULL
);
573 nb_cli_enqueue_change(vty
, "./domain-password/password", NB_OP_MODIFY
,
575 nb_cli_enqueue_change(vty
, "./domain-password/password-type",
576 NB_OP_MODIFY
, pwd_type
);
577 nb_cli_enqueue_change(vty
, "./domain-password/authenticate-snp",
578 NB_OP_MODIFY
, snp
? snp
: "none");
580 return nb_cli_apply_changes(vty
, NULL
);
583 DEFPY(no_area_passwd
, no_area_passwd_cmd
,
584 "no <area-password|domain-password>$cmd",
586 "Configure the authentication password for an area\n"
587 "Set the authentication password for a routing domain\n")
589 nb_cli_enqueue_change(vty
, ".", NB_OP_DESTROY
, NULL
);
591 return nb_cli_apply_changes(vty
, "./%s", cmd
);
594 void cli_show_isis_domain_pwd(struct vty
*vty
, struct lyd_node
*dnode
,
599 vty_out(vty
, " domain-password %s %s",
600 yang_dnode_get_string(dnode
, "./password-type"),
601 yang_dnode_get_string(dnode
, "./password"));
602 snp
= yang_dnode_get_string(dnode
, "./authenticate-snp");
603 if (!strmatch("none", snp
))
604 vty_out(vty
, " authenticate snp %s", snp
);
609 * XPath: /frr-isisd:isis/instance/lsp/generation-interval
611 DEFPY(lsp_gen_interval
, lsp_gen_interval_cmd
,
612 "lsp-gen-interval [level-1|level-2]$level (1-120)$val",
613 "Minimum interval between regenerating same LSP\n"
614 "Set interval for level 1 only\n"
615 "Set interval for level 2 only\n"
616 "Minimum interval in seconds\n")
618 if (!level
|| strmatch(level
, "level-1"))
619 nb_cli_enqueue_change(vty
, "./lsp/generation-interval/level-1",
620 NB_OP_MODIFY
, val_str
);
621 if (!level
|| strmatch(level
, "level-2"))
622 nb_cli_enqueue_change(vty
, "./lsp/generation-interval/level-2",
623 NB_OP_MODIFY
, val_str
);
625 return nb_cli_apply_changes(vty
, NULL
);
628 DEFPY(no_lsp_gen_interval
, no_lsp_gen_interval_cmd
,
629 "no lsp-gen-interval [level-1|level-2]$level [(1-120)]",
631 "Minimum interval between regenerating same LSP\n"
632 "Set interval for level 1 only\n"
633 "Set interval for level 2 only\n"
634 "Minimum interval in seconds\n")
636 if (!level
|| strmatch(level
, "level-1"))
637 nb_cli_enqueue_change(vty
, "./lsp/generation-interval/level-1",
639 if (!level
|| strmatch(level
, "level-2"))
640 nb_cli_enqueue_change(vty
, "./lsp/generation-interval/level-2",
643 return nb_cli_apply_changes(vty
, NULL
);
646 void cli_show_isis_lsp_gen_interval(struct vty
*vty
, struct lyd_node
*dnode
,
649 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
650 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
652 if (strmatch(l1
, l2
))
653 vty_out(vty
, " lsp-gen-interval %s\n", l1
);
655 vty_out(vty
, " lsp-gen-interval level-1 %s\n", l1
);
656 vty_out(vty
, " lsp-gen-interval level-2 %s\n", l2
);
661 * XPath: /frr-isisd:isis/instance/lsp/refresh-interval
663 DEFPY(lsp_refresh_interval
, lsp_refresh_interval_cmd
,
664 "lsp-refresh-interval [level-1|level-2]$level (1-65235)$val",
665 "LSP refresh interval\n"
666 "LSP refresh interval for Level 1 only\n"
667 "LSP refresh interval for Level 2 only\n"
668 "LSP refresh interval in seconds\n")
670 if (!level
|| strmatch(level
, "level-1"))
671 nb_cli_enqueue_change(vty
, "./lsp/refresh-interval/level-1",
672 NB_OP_MODIFY
, val_str
);
673 if (!level
|| strmatch(level
, "level-2"))
674 nb_cli_enqueue_change(vty
, "./lsp/refresh-interval/level-2",
675 NB_OP_MODIFY
, val_str
);
677 return nb_cli_apply_changes(vty
, NULL
);
680 DEFPY(no_lsp_refresh_interval
, no_lsp_refresh_interval_cmd
,
681 "no lsp-refresh-interval [level-1|level-2]$level [(1-65235)]",
683 "LSP refresh interval\n"
684 "LSP refresh interval for Level 1 only\n"
685 "LSP refresh interval for Level 2 only\n"
686 "LSP refresh interval in seconds\n")
688 if (!level
|| strmatch(level
, "level-1"))
689 nb_cli_enqueue_change(vty
, "./lsp/refresh-interval/level-1",
691 if (!level
|| strmatch(level
, "level-2"))
692 nb_cli_enqueue_change(vty
, "./lsp/refresh-interval/level-2",
695 return nb_cli_apply_changes(vty
, NULL
);
698 void cli_show_isis_lsp_ref_interval(struct vty
*vty
, struct lyd_node
*dnode
,
701 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
702 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
704 if (strmatch(l1
, l2
))
705 vty_out(vty
, " lsp-refresh-interval %s\n", l1
);
707 vty_out(vty
, " lsp-refresh-interval level-1 %s\n", l1
);
708 vty_out(vty
, " lsp-refresh-interval level-2 %s\n", l2
);
713 * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime
715 DEFPY(max_lsp_lifetime
, max_lsp_lifetime_cmd
,
716 "max-lsp-lifetime [level-1|level-2]$level (350-65535)$val",
717 "Maximum LSP lifetime\n"
718 "Maximum LSP lifetime for Level 1 only\n"
719 "Maximum LSP lifetime for Level 2 only\n"
720 "LSP lifetime in seconds\n")
722 if (!level
|| strmatch(level
, "level-1"))
723 nb_cli_enqueue_change(vty
, "./lsp/maximum-lifetime/level-1",
724 NB_OP_MODIFY
, val_str
);
725 if (!level
|| strmatch(level
, "level-2"))
726 nb_cli_enqueue_change(vty
, "./lsp/maximum-lifetime/level-2",
727 NB_OP_MODIFY
, val_str
);
729 return nb_cli_apply_changes(vty
, NULL
);
732 DEFPY(no_max_lsp_lifetime
, no_max_lsp_lifetime_cmd
,
733 "no max-lsp-lifetime [level-1|level-2]$level [(350-65535)]",
735 "Maximum LSP lifetime\n"
736 "Maximum LSP lifetime for Level 1 only\n"
737 "Maximum LSP lifetime for Level 2 only\n"
738 "LSP lifetime in seconds\n")
740 if (!level
|| strmatch(level
, "level-1"))
741 nb_cli_enqueue_change(vty
, "./lsp/maximum-lifetime/level-1",
743 if (!level
|| strmatch(level
, "level-2"))
744 nb_cli_enqueue_change(vty
, "./lsp/maximum-lifetime/level-2",
747 return nb_cli_apply_changes(vty
, NULL
);
750 void cli_show_isis_lsp_max_lifetime(struct vty
*vty
, struct lyd_node
*dnode
,
753 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
754 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
756 if (strmatch(l1
, l2
))
757 vty_out(vty
, " max-lsp-lifetime %s\n", l1
);
759 vty_out(vty
, " max-lsp-lifetime level-1 %s\n", l1
);
760 vty_out(vty
, " max-lsp-lifetime level-2 %s\n", l2
);
765 * XPath: /frr-isisd:isis/instance/lsp/mtu
767 DEFPY(area_lsp_mtu
, area_lsp_mtu_cmd
, "lsp-mtu (128-4352)$val",
768 "Configure the maximum size of generated LSPs\n"
769 "Maximum size of generated LSPs\n")
771 nb_cli_enqueue_change(vty
, "./lsp/mtu", NB_OP_MODIFY
, val_str
);
773 return nb_cli_apply_changes(vty
, NULL
);
776 DEFPY(no_area_lsp_mtu
, no_area_lsp_mtu_cmd
, "no lsp-mtu [(128-4352)]",
778 "Configure the maximum size of generated LSPs\n"
779 "Maximum size of generated LSPs\n")
781 nb_cli_enqueue_change(vty
, "./lsp/mtu", NB_OP_MODIFY
, NULL
);
783 return nb_cli_apply_changes(vty
, NULL
);
786 void cli_show_isis_lsp_mtu(struct vty
*vty
, struct lyd_node
*dnode
,
789 vty_out(vty
, " lsp-mtu %s\n", yang_dnode_get_string(dnode
, NULL
));
793 * XPath: /frr-isisd:isis/instance/spf/minimum-interval
795 DEFPY(spf_interval
, spf_interval_cmd
,
796 "spf-interval [level-1|level-2]$level (1-120)$val",
797 "Minimum interval between SPF calculations\n"
798 "Set interval for level 1 only\n"
799 "Set interval for level 2 only\n"
800 "Minimum interval between consecutive SPFs in seconds\n")
802 if (!level
|| strmatch(level
, "level-1"))
803 nb_cli_enqueue_change(vty
, "./spf/minimum-interval/level-1",
804 NB_OP_MODIFY
, val_str
);
805 if (!level
|| strmatch(level
, "level-2"))
806 nb_cli_enqueue_change(vty
, "./spf/minimum-interval/level-2",
807 NB_OP_MODIFY
, val_str
);
809 return nb_cli_apply_changes(vty
, NULL
);
812 DEFPY(no_spf_interval
, no_spf_interval_cmd
,
813 "no spf-interval [level-1|level-2]$level [(1-120)]",
815 "Minimum interval between SPF calculations\n"
816 "Set interval for level 1 only\n"
817 "Set interval for level 2 only\n"
818 "Minimum interval between consecutive SPFs in seconds\n")
820 if (!level
|| strmatch(level
, "level-1"))
821 nb_cli_enqueue_change(vty
, "./spf/minimum-interval/level-1",
823 if (!level
|| strmatch(level
, "level-2"))
824 nb_cli_enqueue_change(vty
, "./spf/minimum-interval/level-2",
827 return nb_cli_apply_changes(vty
, NULL
);
830 void cli_show_isis_spf_min_interval(struct vty
*vty
, struct lyd_node
*dnode
,
833 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
834 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
836 if (strmatch(l1
, l2
))
837 vty_out(vty
, " spf-interval %s\n", l1
);
839 vty_out(vty
, " spf-interval level-1 %s\n", l1
);
840 vty_out(vty
, " spf-interval level-2 %s\n", l2
);
845 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay
847 DEFPY(spf_delay_ietf
, spf_delay_ietf_cmd
,
848 "spf-delay-ietf init-delay (0-60000) short-delay (0-60000) long-delay (0-60000) holddown (0-60000) time-to-learn (0-60000)",
849 "IETF SPF delay algorithm\n"
850 "Delay used while in QUIET state\n"
851 "Delay used while in QUIET state in milliseconds\n"
852 "Delay used while in SHORT_WAIT state\n"
853 "Delay used while in SHORT_WAIT state in milliseconds\n"
854 "Delay used while in LONG_WAIT\n"
855 "Delay used while in LONG_WAIT state in milliseconds\n"
856 "Time with no received IGP events before considering IGP stable\n"
857 "Time with no received IGP events before considering IGP stable (in milliseconds)\n"
858 "Maximum duration needed to learn all the events related to a single failure\n"
859 "Maximum duration needed to learn all the events related to a single failure (in milliseconds)\n")
861 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay", NB_OP_CREATE
,
863 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/init-delay",
864 NB_OP_MODIFY
, init_delay_str
);
865 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/short-delay",
866 NB_OP_MODIFY
, short_delay_str
);
867 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/long-delay",
868 NB_OP_MODIFY
, long_delay_str
);
869 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/hold-down",
870 NB_OP_MODIFY
, holddown_str
);
871 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/time-to-learn",
872 NB_OP_MODIFY
, time_to_learn_str
);
874 return nb_cli_apply_changes(vty
, NULL
);
877 DEFPY(no_spf_delay_ietf
, no_spf_delay_ietf_cmd
,
878 "no spf-delay-ietf [init-delay (0-60000) short-delay (0-60000) long-delay (0-60000) holddown (0-60000) time-to-learn (0-60000)]",
880 "IETF SPF delay algorithm\n"
881 "Delay used while in QUIET state\n"
882 "Delay used while in QUIET state in milliseconds\n"
883 "Delay used while in SHORT_WAIT state\n"
884 "Delay used while in SHORT_WAIT state in milliseconds\n"
885 "Delay used while in LONG_WAIT\n"
886 "Delay used while in LONG_WAIT state in milliseconds\n"
887 "Time with no received IGP events before considering IGP stable\n"
888 "Time with no received IGP events before considering IGP stable (in milliseconds)\n"
889 "Maximum duration needed to learn all the events related to a single failure\n"
890 "Maximum duration needed to learn all the events related to a single failure (in milliseconds)\n")
892 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay", NB_OP_DESTROY
,
895 return nb_cli_apply_changes(vty
, NULL
);
898 void cli_show_isis_spf_ietf_backoff(struct vty
*vty
, struct lyd_node
*dnode
,
902 " spf-delay-ietf init-delay %s short-delay %s long-delay %s holddown %s time-to-learn %s\n",
903 yang_dnode_get_string(dnode
, "./init-delay"),
904 yang_dnode_get_string(dnode
, "./short-delay"),
905 yang_dnode_get_string(dnode
, "./long-delay"),
906 yang_dnode_get_string(dnode
, "./hold-down"),
907 yang_dnode_get_string(dnode
, "./time-to-learn"));
911 * XPath: /frr-isisd:isis/instance/purge-originator
913 DEFPY(area_purge_originator
, area_purge_originator_cmd
, "[no] purge-originator",
914 NO_STR
"Use the RFC 6232 purge-originator\n")
916 nb_cli_enqueue_change(vty
, "./purge-originator", NB_OP_MODIFY
,
917 no
? "false" : "true");
919 return nb_cli_apply_changes(vty
, NULL
);
922 void cli_show_isis_purge_origin(struct vty
*vty
, struct lyd_node
*dnode
,
925 if (!yang_dnode_get_bool(dnode
, NULL
))
927 vty_out(vty
, " purge-originator\n");
931 * XPath: /frr-isisd:isis/mpls-te
933 DEFPY(isis_mpls_te_on
, isis_mpls_te_on_cmd
, "mpls-te on",
934 MPLS_TE_STR
"Enable the MPLS-TE functionality\n")
936 nb_cli_enqueue_change(vty
, "/frr-isisd:isis/mpls-te", NB_OP_CREATE
,
939 return nb_cli_apply_changes(vty
, NULL
);
942 DEFPY(no_isis_mpls_te_on
, no_isis_mpls_te_on_cmd
, "no mpls-te [on]",
944 "Disable the MPLS-TE functionality\n"
945 "Enable the MPLS-TE functionality\n")
947 nb_cli_enqueue_change(vty
, "/frr-isisd:isis/mpls-te", NB_OP_DESTROY
,
950 return nb_cli_apply_changes(vty
, NULL
);
953 void cli_show_isis_mpls_te(struct vty
*vty
, struct lyd_node
*dnode
,
956 vty_out(vty
, " mpls-te on\n");
960 * XPath: /frr-isisd:isis/mpls-te/router-address
962 DEFPY(isis_mpls_te_router_addr
, isis_mpls_te_router_addr_cmd
,
963 "mpls-te router-address A.B.C.D",
965 "Stable IP address of the advertising router\n"
966 "MPLS-TE router address in IPv4 address format\n")
968 nb_cli_enqueue_change(vty
, "/frr-isisd:isis/mpls-te/router-address",
969 NB_OP_MODIFY
, router_address_str
);
971 return nb_cli_apply_changes(vty
, NULL
);
974 void cli_show_isis_mpls_te_router_addr(struct vty
*vty
, struct lyd_node
*dnode
,
977 vty_out(vty
, " mpls-te router-address %s\n",
978 yang_dnode_get_string(dnode
, NULL
));
981 DEFPY(isis_mpls_te_inter_as
, isis_mpls_te_inter_as_cmd
,
982 "[no] mpls-te inter-as [level-1|level-1-2|level-2-only]",
984 "Configure MPLS-TE Inter-AS support\n"
985 "AREA native mode self originate INTER-AS LSP with L1 only flooding scope\n"
986 "AREA native mode self originate INTER-AS LSP with L1 and L2 flooding scope\n"
987 "AS native mode self originate INTER-AS LSP with L2 only flooding scope\n")
989 vty_out(vty
, "MPLS-TE Inter-AS is not yet supported.");
994 * XPath: /frr-isisd:isis/instance/default-information-originate
996 DEFPY(isis_default_originate
, isis_default_originate_cmd
,
997 "[no] default-information originate <ipv4|ipv6>$ip"
998 " <level-1|level-2>$level [always]$always"
999 " [{metric (0-16777215)$metric|route-map WORD$rmap}]",
1001 "Control distribution of default information\n"
1002 "Distribute a default route\n"
1003 "Distribute default route for IPv4\n"
1004 "Distribute default route for IPv6\n"
1005 "Distribute default route into level-1\n"
1006 "Distribute default route into level-2\n"
1007 "Always advertise default route\n"
1008 "Metric for default route\n"
1009 "ISIS default metric\n"
1010 "Route map reference\n"
1011 "Pointer to route-map entries\n")
1014 nb_cli_enqueue_change(vty
, ".", NB_OP_DESTROY
, NULL
);
1016 nb_cli_enqueue_change(vty
, ".", NB_OP_CREATE
, NULL
);
1017 nb_cli_enqueue_change(vty
, "./always", NB_OP_MODIFY
,
1018 always
? "true" : "false");
1019 nb_cli_enqueue_change(vty
, "./route-map",
1020 rmap
? NB_OP_MODIFY
: NB_OP_DESTROY
,
1021 rmap
? rmap
: NULL
);
1022 nb_cli_enqueue_change(vty
, "./metric", NB_OP_MODIFY
,
1023 metric_str
? metric_str
: NULL
);
1024 if (strmatch(ip
, "ipv6") && !always
) {
1026 "Zebra doesn't implement default-originate for IPv6 yet\n");
1028 "so use with care or use default-originate always.\n");
1032 return nb_cli_apply_changes(
1033 vty
, "./default-information-originate/%s[level='%s']", ip
,
1037 static void vty_print_def_origin(struct vty
*vty
, struct lyd_node
*dnode
,
1038 const char *family
, const char *level
,
1041 vty_out(vty
, " default-information originate %s %s", family
, level
);
1042 if (yang_dnode_get_bool(dnode
, "./always"))
1043 vty_out(vty
, " always");
1045 if (yang_dnode_exists(dnode
, "./route-map"))
1046 vty_out(vty
, " route-map %s",
1047 yang_dnode_get_string(dnode
, "./route-map"));
1048 if (show_defaults
|| !yang_dnode_is_default(dnode
, "./metric"))
1049 vty_out(vty
, " metric %s",
1050 yang_dnode_get_string(dnode
, "./metric"));
1055 void cli_show_isis_def_origin_ipv4(struct vty
*vty
, struct lyd_node
*dnode
,
1058 const char *level
= yang_dnode_get_string(dnode
, "./level");
1060 vty_print_def_origin(vty
, dnode
, "ipv4", level
, show_defaults
);
1063 void cli_show_isis_def_origin_ipv6(struct vty
*vty
, struct lyd_node
*dnode
,
1066 const char *level
= yang_dnode_get_string(dnode
, "./level");
1068 vty_print_def_origin(vty
, dnode
, "ipv6", level
, show_defaults
);
1072 * XPath: /frr-isisd:isis/instance/redistribute
1074 DEFPY(isis_redistribute
, isis_redistribute_cmd
,
1075 "[no] redistribute <ipv4|ipv6>$ip " PROTO_REDIST_STR
1077 " <level-1|level-2>$level"
1078 " [{metric (0-16777215)|route-map WORD}]",
1080 "Redistribute IPv4 routes\n"
1081 "Redistribute IPv6 routes\n" PROTO_REDIST_HELP
1082 "Redistribute into level-1\n"
1083 "Redistribute into level-2\n"
1084 "Metric for redistributed routes\n"
1085 "ISIS default metric\n"
1086 "Route map reference\n"
1087 "Pointer to route-map entries\n")
1090 nb_cli_enqueue_change(vty
, ".", NB_OP_DESTROY
, NULL
);
1092 nb_cli_enqueue_change(vty
, ".", NB_OP_CREATE
, NULL
);
1093 nb_cli_enqueue_change(vty
, "./route-map",
1094 route_map
? NB_OP_MODIFY
: NB_OP_DESTROY
,
1095 route_map
? route_map
: NULL
);
1096 nb_cli_enqueue_change(vty
, "./metric", NB_OP_MODIFY
,
1097 metric_str
? metric_str
: NULL
);
1100 return nb_cli_apply_changes(
1101 vty
, "./redistribute/%s[protocol='%s'][level='%s']", ip
, proto
,
1105 static void vty_print_redistribute(struct vty
*vty
, struct lyd_node
*dnode
,
1106 bool show_defaults
, const char *family
)
1108 const char *level
= yang_dnode_get_string(dnode
, "./level");
1109 const char *protocol
= yang_dnode_get_string(dnode
, "./protocol");
1111 vty_out(vty
, " redistribute %s %s %s", family
, protocol
, level
);
1112 if (show_defaults
|| !yang_dnode_is_default(dnode
, "./metric"))
1113 vty_out(vty
, " metric %s",
1114 yang_dnode_get_string(dnode
, "./metric"));
1115 if (yang_dnode_exists(dnode
, "./route-map"))
1116 vty_out(vty
, " route-map %s",
1117 yang_dnode_get_string(dnode
, "./route-map"));
1121 void cli_show_isis_redistribute_ipv4(struct vty
*vty
, struct lyd_node
*dnode
,
1124 vty_print_redistribute(vty
, dnode
, show_defaults
, "ipv4");
1126 void cli_show_isis_redistribute_ipv6(struct vty
*vty
, struct lyd_node
*dnode
,
1129 vty_print_redistribute(vty
, dnode
, show_defaults
, "ipv6");
1133 * XPath: /frr-isisd:isis/instance/multi-topology
1135 DEFPY(isis_topology
, isis_topology_cmd
,
1143 "|ipv6-dstsrc>$topology "
1144 "[overload]$overload",
1146 "Configure IS-IS topologies\n"
1147 "IPv4 unicast topology\n"
1148 "IPv4 management topology\n"
1149 "IPv6 unicast topology\n"
1150 "IPv4 multicast topology\n"
1151 "IPv6 multicast topology\n"
1152 "IPv6 management topology\n"
1153 "IPv6 dst-src topology\n"
1154 "Set overload bit for topology\n")
1156 char base_xpath
[XPATH_MAXLEN
];
1158 /* Since IPv4-unicast is not configurable it is not present in the
1159 * YANG model, so we need to validate it here
1161 if (strmatch(topology
, "ipv4-unicast")) {
1162 vty_out(vty
, "Cannot configure IPv4 unicast topology\n");
1163 return CMD_WARNING_CONFIG_FAILED
;
1166 if (strmatch(topology
, "ipv4-mgmt"))
1167 snprintf(base_xpath
, XPATH_MAXLEN
,
1168 "./multi-topology/ipv4-management");
1169 else if (strmatch(topology
, "ipv6-mgmt"))
1170 snprintf(base_xpath
, XPATH_MAXLEN
,
1171 "./multi-topology/ipv6-management");
1173 snprintf(base_xpath
, XPATH_MAXLEN
, "./multi-topology/%s",
1177 nb_cli_enqueue_change(vty
, ".", NB_OP_DESTROY
, NULL
);
1179 nb_cli_enqueue_change(vty
, ".", NB_OP_CREATE
, NULL
);
1180 nb_cli_enqueue_change(vty
, "./overload", NB_OP_MODIFY
,
1181 overload
? "true" : "false");
1184 return nb_cli_apply_changes(vty
, base_xpath
);
1187 void cli_show_isis_mt_ipv4_multicast(struct vty
*vty
, struct lyd_node
*dnode
,
1190 vty_out(vty
, " topology ipv4-multicast");
1191 if (yang_dnode_get_bool(dnode
, "./overload"))
1192 vty_out(vty
, " overload");
1196 void cli_show_isis_mt_ipv4_mgmt(struct vty
*vty
, struct lyd_node
*dnode
,
1199 vty_out(vty
, " topology ipv4-mgmt");
1200 if (yang_dnode_get_bool(dnode
, "./overload"))
1201 vty_out(vty
, " overload");
1205 void cli_show_isis_mt_ipv6_unicast(struct vty
*vty
, struct lyd_node
*dnode
,
1208 vty_out(vty
, " topology ipv6-unicast");
1209 if (yang_dnode_get_bool(dnode
, "./overload"))
1210 vty_out(vty
, " overload");
1214 void cli_show_isis_mt_ipv6_multicast(struct vty
*vty
, struct lyd_node
*dnode
,
1217 vty_out(vty
, " topology ipv6-multicast");
1218 if (yang_dnode_get_bool(dnode
, "./overload"))
1219 vty_out(vty
, " overload");
1223 void cli_show_isis_mt_ipv6_mgmt(struct vty
*vty
, struct lyd_node
*dnode
,
1226 vty_out(vty
, " topology ipv6-mgmt");
1227 if (yang_dnode_get_bool(dnode
, "./overload"))
1228 vty_out(vty
, " overload");
1232 void cli_show_isis_mt_ipv6_dstsrc(struct vty
*vty
, struct lyd_node
*dnode
,
1235 vty_out(vty
, " topology ipv6-dstsrc");
1236 if (yang_dnode_get_bool(dnode
, "./overload"))
1237 vty_out(vty
, " overload");
1242 * XPath: /frr-interface:lib/interface/frr-isisd:isis/passive
1244 DEFPY(isis_passive
, isis_passive_cmd
, "[no] isis passive",
1246 "IS-IS routing protocol\n"
1247 "Configure the passive mode for interface\n")
1249 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/passive", NB_OP_MODIFY
,
1250 no
? "false" : "true");
1252 return nb_cli_apply_changes(vty
, NULL
);
1255 void cli_show_ip_isis_passive(struct vty
*vty
, struct lyd_node
*dnode
,
1258 if (!yang_dnode_get_bool(dnode
, NULL
))
1259 vty_out(vty
, " no");
1260 vty_out(vty
, " isis passive\n");
1264 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password
1267 DEFPY(isis_passwd
, isis_passwd_cmd
, "isis password <md5|clear>$type WORD$pwd",
1268 "IS-IS routing protocol\n"
1269 "Configure the authentication password for a circuit\n"
1270 "HMAC-MD5 authentication\n"
1271 "Cleartext password\n"
1272 "Circuit password\n")
1274 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/password", NB_OP_CREATE
,
1276 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/password/password",
1278 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/password/password-type",
1279 NB_OP_MODIFY
, type
);
1281 return nb_cli_apply_changes(vty
, NULL
);
1284 DEFPY(no_isis_passwd
, no_isis_passwd_cmd
, "no isis password [<md5|clear> WORD]",
1286 "IS-IS routing protocol\n"
1287 "Configure the authentication password for a circuit\n"
1288 "HMAC-MD5 authentication\n"
1289 "Cleartext password\n"
1290 "Circuit password\n")
1292 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/password", NB_OP_DESTROY
,
1295 return nb_cli_apply_changes(vty
, NULL
);
1298 void cli_show_ip_isis_password(struct vty
*vty
, struct lyd_node
*dnode
,
1301 vty_out(vty
, " isis password %s %s\n",
1302 yang_dnode_get_string(dnode
, "./password-type"),
1303 yang_dnode_get_string(dnode
, "./password"));
1307 * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric
1309 DEFPY(isis_metric
, isis_metric_cmd
,
1310 "isis metric [level-1|level-2]$level (0-16777215)$met",
1311 "IS-IS routing protocol\n"
1312 "Set default metric for circuit\n"
1313 "Specify metric for level-1 routing\n"
1314 "Specify metric for level-2 routing\n"
1315 "Default metric value\n")
1317 if (!level
|| strmatch(level
, "level-1"))
1318 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/metric/level-1",
1319 NB_OP_MODIFY
, met_str
);
1320 if (!level
|| strmatch(level
, "level-2"))
1321 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/metric/level-2",
1322 NB_OP_MODIFY
, met_str
);
1324 return nb_cli_apply_changes(vty
, NULL
);
1327 DEFPY(no_isis_metric
, no_isis_metric_cmd
,
1328 "no isis metric [level-1|level-2]$level [(0-16777215)]",
1330 "IS-IS routing protocol\n"
1331 "Set default metric for circuit\n"
1332 "Specify metric for level-1 routing\n"
1333 "Specify metric for level-2 routing\n"
1334 "Default metric value\n")
1336 if (!level
|| strmatch(level
, "level-1"))
1337 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/metric/level-1",
1338 NB_OP_MODIFY
, NULL
);
1339 if (!level
|| strmatch(level
, "level-2"))
1340 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/metric/level-2",
1341 NB_OP_MODIFY
, NULL
);
1343 return nb_cli_apply_changes(vty
, NULL
);
1346 void cli_show_ip_isis_metric(struct vty
*vty
, struct lyd_node
*dnode
,
1349 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1350 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1352 if (strmatch(l1
, l2
))
1353 vty_out(vty
, " isis metric %s\n", l1
);
1355 vty_out(vty
, " isis metric %s level-1\n", l1
);
1356 vty_out(vty
, " isis metric %s level-2\n", l2
);
1361 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/interval
1363 DEFPY(isis_hello_interval
, isis_hello_interval_cmd
,
1364 "isis hello-interval [level-1|level-2]$level (1-600)$intv",
1365 "IS-IS routing protocol\n"
1366 "Set Hello interval\n"
1367 "Specify hello-interval for level-1 IIHs\n"
1368 "Specify hello-interval for level-2 IIHs\n"
1369 "Holdtime 1 seconds, interval depends on multiplier\n")
1371 if (!level
|| strmatch(level
, "level-1"))
1372 nb_cli_enqueue_change(vty
,
1373 "./frr-isisd:isis/hello/interval/level-1",
1374 NB_OP_MODIFY
, intv_str
);
1375 if (!level
|| strmatch(level
, "level-2"))
1376 nb_cli_enqueue_change(vty
,
1377 "./frr-isisd:isis/hello/interval/level-2",
1378 NB_OP_MODIFY
, intv_str
);
1380 return nb_cli_apply_changes(vty
, NULL
);
1383 DEFPY(no_isis_hello_interval
, no_isis_hello_interval_cmd
,
1384 "no isis hello-interval [level-1|level-2]$level [(1-600)]",
1386 "IS-IS routing protocol\n"
1387 "Set Hello interval\n"
1388 "Specify hello-interval for level-1 IIHs\n"
1389 "Specify hello-interval for level-2 IIHs\n"
1390 "Holdtime 1 second, interval depends on multiplier\n")
1392 if (!level
|| strmatch(level
, "level-1"))
1393 nb_cli_enqueue_change(vty
,
1394 "./frr-isisd:isis/hello/interval/level-1",
1395 NB_OP_MODIFY
, NULL
);
1396 if (!level
|| strmatch(level
, "level-2"))
1397 nb_cli_enqueue_change(vty
,
1398 "./frr-isisd:isis/hello/interval/level-2",
1399 NB_OP_MODIFY
, NULL
);
1401 return nb_cli_apply_changes(vty
, NULL
);
1404 void cli_show_ip_isis_hello_interval(struct vty
*vty
, struct lyd_node
*dnode
,
1407 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1408 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1410 if (strmatch(l1
, l2
))
1411 vty_out(vty
, " isis hello-interval %s\n", l1
);
1413 vty_out(vty
, " isis hello-interval %s level-1\n", l1
);
1414 vty_out(vty
, " isis hello-interval %s level-2\n", l2
);
1419 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/multiplier
1421 DEFPY(isis_hello_multiplier
, isis_hello_multiplier_cmd
,
1422 "isis hello-multiplier [level-1|level-2]$level (2-100)$mult",
1423 "IS-IS routing protocol\n"
1424 "Set multiplier for Hello holding time\n"
1425 "Specify hello multiplier for level-1 IIHs\n"
1426 "Specify hello multiplier for level-2 IIHs\n"
1427 "Hello multiplier value\n")
1429 if (!level
|| strmatch(level
, "level-1"))
1430 nb_cli_enqueue_change(
1431 vty
, "./frr-isisd:isis/hello/multiplier/level-1",
1432 NB_OP_MODIFY
, mult_str
);
1433 if (!level
|| strmatch(level
, "level-2"))
1434 nb_cli_enqueue_change(
1435 vty
, "./frr-isisd:isis/hello/multiplier/level-2",
1436 NB_OP_MODIFY
, mult_str
);
1438 return nb_cli_apply_changes(vty
, NULL
);
1441 DEFPY(no_isis_hello_multiplier
, no_isis_hello_multiplier_cmd
,
1442 "no isis hello-multiplier [level-1|level-2]$level [(2-100)]",
1444 "IS-IS routing protocol\n"
1445 "Set multiplier for Hello holding time\n"
1446 "Specify hello multiplier for level-1 IIHs\n"
1447 "Specify hello multiplier for level-2 IIHs\n"
1448 "Hello multiplier value\n")
1450 if (!level
|| strmatch(level
, "level-1"))
1451 nb_cli_enqueue_change(
1452 vty
, "./frr-isisd:isis/hello/multiplier/level-1",
1453 NB_OP_MODIFY
, NULL
);
1454 if (!level
|| strmatch(level
, "level-2"))
1455 nb_cli_enqueue_change(
1456 vty
, "./frr-isisd:isis/hello/multiplier/level-2",
1457 NB_OP_MODIFY
, NULL
);
1459 return nb_cli_apply_changes(vty
, NULL
);
1462 void cli_show_ip_isis_hello_multi(struct vty
*vty
, struct lyd_node
*dnode
,
1465 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1466 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1468 if (strmatch(l1
, l2
))
1469 vty_out(vty
, " isis hello-multiplier %s\n", l1
);
1471 vty_out(vty
, " isis hello-multiplier %s level-1\n", l1
);
1472 vty_out(vty
, " isis hello-multiplier %s level-2\n", l2
);
1478 * /frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake
1480 DEFPY(isis_threeway_adj
, isis_threeway_adj_cmd
, "[no] isis three-way-handshake",
1483 "Enable/Disable three-way handshake\n")
1485 nb_cli_enqueue_change(vty
,
1486 "./frr-isisd:isis/disable-three-way-handshake",
1487 NB_OP_MODIFY
, no
? "true" : "false");
1489 return nb_cli_apply_changes(vty
, NULL
);
1492 void cli_show_ip_isis_threeway_shake(struct vty
*vty
, struct lyd_node
*dnode
,
1495 if (yang_dnode_get_bool(dnode
, NULL
))
1496 vty_out(vty
, " no");
1497 vty_out(vty
, " isis three-way-handshake\n");
1501 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/padding
1503 DEFPY(isis_hello_padding
, isis_hello_padding_cmd
, "[no] isis hello padding",
1505 "IS-IS routing protocol\n"
1506 "Add padding to IS-IS hello packets\n"
1507 "Pad hello packets\n")
1509 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/hello/padding",
1510 NB_OP_MODIFY
, no
? "false" : "true");
1512 return nb_cli_apply_changes(vty
, NULL
);
1515 void cli_show_ip_isis_hello_padding(struct vty
*vty
, struct lyd_node
*dnode
,
1518 if (!yang_dnode_get_bool(dnode
, NULL
))
1519 vty_out(vty
, " no");
1521 vty_out(vty
, " isis hello padding\n");
1525 * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval
1527 DEFPY(csnp_interval
, csnp_interval_cmd
,
1528 "isis csnp-interval (1-600)$intv [level-1|level-2]$level",
1529 "IS-IS routing protocol\n"
1530 "Set CSNP interval in seconds\n"
1531 "CSNP interval value\n"
1532 "Specify interval for level-1 CSNPs\n"
1533 "Specify interval for level-2 CSNPs\n")
1535 if (!level
|| strmatch(level
, "level-1"))
1536 nb_cli_enqueue_change(vty
,
1537 "./frr-isisd:isis/csnp-interval/level-1",
1538 NB_OP_MODIFY
, intv_str
);
1539 if (!level
|| strmatch(level
, "level-2"))
1540 nb_cli_enqueue_change(vty
,
1541 "./frr-isisd:isis/csnp-interval/level-2",
1542 NB_OP_MODIFY
, intv_str
);
1544 return nb_cli_apply_changes(vty
, NULL
);
1547 DEFPY(no_csnp_interval
, no_csnp_interval_cmd
,
1548 "no isis csnp-interval [(1-600)] [level-1|level-2]$level",
1550 "IS-IS routing protocol\n"
1551 "Set CSNP interval in seconds\n"
1552 "CSNP interval value\n"
1553 "Specify interval for level-1 CSNPs\n"
1554 "Specify interval for level-2 CSNPs\n")
1556 if (!level
|| strmatch(level
, "level-1"))
1557 nb_cli_enqueue_change(vty
,
1558 "./frr-isisd:isis/csnp-interval/level-1",
1559 NB_OP_MODIFY
, NULL
);
1560 if (!level
|| strmatch(level
, "level-2"))
1561 nb_cli_enqueue_change(vty
,
1562 "./frr-isisd:isis/csnp-interval/level-2",
1563 NB_OP_MODIFY
, NULL
);
1565 return nb_cli_apply_changes(vty
, NULL
);
1568 void cli_show_ip_isis_csnp_interval(struct vty
*vty
, struct lyd_node
*dnode
,
1571 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1572 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1574 if (strmatch(l1
, l2
))
1575 vty_out(vty
, " isis csnp-interval %s\n", l1
);
1577 vty_out(vty
, " isis csnp-interval %s level-1\n", l1
);
1578 vty_out(vty
, " isis csnp-interval %s level-2\n", l2
);
1583 * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval
1585 DEFPY(psnp_interval
, psnp_interval_cmd
,
1586 "isis psnp-interval (1-120)$intv [level-1|level-2]$level",
1587 "IS-IS routing protocol\n"
1588 "Set PSNP interval in seconds\n"
1589 "PSNP interval value\n"
1590 "Specify interval for level-1 PSNPs\n"
1591 "Specify interval for level-2 PSNPs\n")
1593 if (!level
|| strmatch(level
, "level-1"))
1594 nb_cli_enqueue_change(vty
,
1595 "./frr-isisd:isis/psnp-interval/level-1",
1596 NB_OP_MODIFY
, intv_str
);
1597 if (!level
|| strmatch(level
, "level-2"))
1598 nb_cli_enqueue_change(vty
,
1599 "./frr-isisd:isis/psnp-interval/level-2",
1600 NB_OP_MODIFY
, intv_str
);
1602 return nb_cli_apply_changes(vty
, NULL
);
1605 DEFPY(no_psnp_interval
, no_psnp_interval_cmd
,
1606 "no isis psnp-interval [(1-120)] [level-1|level-2]$level",
1608 "IS-IS routing protocol\n"
1609 "Set PSNP interval in seconds\n"
1610 "PSNP interval value\n"
1611 "Specify interval for level-1 PSNPs\n"
1612 "Specify interval for level-2 PSNPs\n")
1614 if (!level
|| strmatch(level
, "level-1"))
1615 nb_cli_enqueue_change(vty
,
1616 "./frr-isisd:isis/psnp-interval/level-1",
1617 NB_OP_MODIFY
, NULL
);
1618 if (!level
|| strmatch(level
, "level-2"))
1619 nb_cli_enqueue_change(vty
,
1620 "./frr-isisd:isis/psnp-interval/level-2",
1621 NB_OP_MODIFY
, NULL
);
1623 return nb_cli_apply_changes(vty
, NULL
);
1626 void cli_show_ip_isis_psnp_interval(struct vty
*vty
, struct lyd_node
*dnode
,
1629 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1630 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1632 if (strmatch(l1
, l2
))
1633 vty_out(vty
, " isis psnp-interval %s\n", l1
);
1635 vty_out(vty
, " isis psnp-interval %s level-1\n", l1
);
1636 vty_out(vty
, " isis psnp-interval %s level-2\n", l2
);
1641 * XPath: /frr-interface:lib/interface/frr-isisd:isis/multi-topology
1643 DEFPY(circuit_topology
, circuit_topology_cmd
,
1644 "[no] isis topology"
1654 "IS-IS routing protocol\n"
1655 "Configure interface IS-IS topologies\n"
1656 "IPv4 unicast topology\n"
1657 "IPv4 management topology\n"
1658 "IPv6 unicast topology\n"
1659 "IPv4 multicast topology\n"
1660 "IPv6 multicast topology\n"
1661 "IPv6 management topology\n"
1662 "IPv6 dst-src topology\n")
1664 nb_cli_enqueue_change(vty
, ".", NB_OP_MODIFY
, no
? "false" : "true");
1666 if (strmatch(topology
, "ipv4-mgmt"))
1667 return nb_cli_apply_changes(
1668 vty
, "./frr-isisd:isis/multi-topology/ipv4-management");
1669 else if (strmatch(topology
, "ipv6-mgmt"))
1670 return nb_cli_apply_changes(
1671 vty
, "./frr-isisd:isis/multi-topology/ipv6-management");
1673 return nb_cli_apply_changes(
1674 vty
, "./frr-isisd:isis/multi-topology/%s", topology
);
1677 void cli_show_ip_isis_mt_ipv4_unicast(struct vty
*vty
, struct lyd_node
*dnode
,
1680 if (!yang_dnode_get_bool(dnode
, NULL
))
1681 vty_out(vty
, " no");
1682 vty_out(vty
, " isis topology ipv4-unicast\n");
1685 void cli_show_ip_isis_mt_ipv4_multicast(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-multicast\n");
1693 void cli_show_ip_isis_mt_ipv4_mgmt(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-mgmt\n");
1701 void cli_show_ip_isis_mt_ipv6_unicast(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 ipv6-unicast\n");
1709 void cli_show_ip_isis_mt_ipv6_multicast(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-multicast\n");
1717 void cli_show_ip_isis_mt_ipv6_mgmt(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-mgmt\n");
1725 void cli_show_ip_isis_mt_ipv6_dstsrc(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-dstsrc\n");
1734 * XPath: /frr-interface:lib/interface/frr-isisd:isis/circuit-type
1736 DEFPY(isis_circuit_type
, isis_circuit_type_cmd
,
1737 "isis circuit-type <level-1|level-1-2|level-2-only>$type",
1738 "IS-IS routing protocol\n"
1739 "Configure circuit type for interface\n"
1740 "Level-1 only adjacencies are formed\n"
1741 "Level-1-2 adjacencies are formed\n"
1742 "Level-2 only adjacencies are formed\n")
1744 nb_cli_enqueue_change(
1745 vty
, "./frr-isisd:isis/circuit-type", NB_OP_MODIFY
,
1746 strmatch(type
, "level-2-only") ? "level-2" : type
);
1748 return nb_cli_apply_changes(vty
, NULL
);
1751 DEFPY(no_isis_circuit_type
, no_isis_circuit_type_cmd
,
1752 "no isis circuit-type [level-1|level-1-2|level-2-only]",
1754 "IS-IS routing protocol\n"
1755 "Configure circuit type for interface\n"
1756 "Level-1 only adjacencies are formed\n"
1757 "Level-1-2 adjacencies are formed\n"
1758 "Level-2 only adjacencies are formed\n")
1760 struct interface
*ifp
;
1761 struct isis_circuit
*circuit
;
1763 const char *circ_type
;
1766 * Default value depends on whether the circuit is part of an area,
1767 * and the is-type of the area if there is one. So we need to do this
1770 ifp
= nb_running_get_entry(NULL
, VTY_CURR_XPATH
, false);
1774 circuit
= circuit_scan_by_ifp(ifp
);
1778 if (circuit
->state
== C_STATE_UP
)
1779 is_type
= circuit
->area
->is_type
;
1785 circ_type
= "level-1";
1788 circ_type
= "level-2";
1790 case IS_LEVEL_1_AND_2
:
1791 circ_type
= "level-1-2";
1794 return CMD_ERR_NO_MATCH
;
1796 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/circuit-type",
1797 NB_OP_MODIFY
, circ_type
);
1799 return nb_cli_apply_changes(vty
, NULL
);
1802 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/circuit-type",
1803 NB_OP_MODIFY
, NULL
);
1805 return nb_cli_apply_changes(vty
, NULL
);
1808 void cli_show_ip_isis_circ_type(struct vty
*vty
, struct lyd_node
*dnode
,
1811 int level
= yang_dnode_get_enum(dnode
, NULL
);
1815 vty_out(vty
, " isis circuit-type level-1\n");
1818 vty_out(vty
, " isis circuit-type level-2-only\n");
1820 case IS_LEVEL_1_AND_2
:
1821 vty_out(vty
, " isis circuit-type level-1-2\n");
1827 * XPath: /frr-interface:lib/interface/frr-isisd:isis/network-type
1829 DEFPY(isis_network
, isis_network_cmd
, "[no] isis network point-to-point",
1831 "IS-IS routing protocol\n"
1832 "Set network type\n"
1833 "point-to-point network type\n")
1835 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/network-type",
1837 no
? "broadcast" : "point-to-point");
1839 return nb_cli_apply_changes(vty
, NULL
);
1842 void cli_show_ip_isis_network_type(struct vty
*vty
, struct lyd_node
*dnode
,
1845 if (yang_dnode_get_enum(dnode
, NULL
) != CIRCUIT_T_P2P
)
1846 vty_out(vty
, " no");
1848 vty_out(vty
, " isis network point-to-point\n");
1852 * XPath: /frr-interface:lib/interface/frr-isisd:isis/priority
1854 DEFPY(isis_priority
, isis_priority_cmd
,
1855 "isis priority (0-127)$prio [level-1|level-2]$level",
1856 "IS-IS routing protocol\n"
1857 "Set priority for Designated Router election\n"
1859 "Specify priority for level-1 routing\n"
1860 "Specify priority for level-2 routing\n")
1862 if (!level
|| strmatch(level
, "level-1"))
1863 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/priority/level-1",
1864 NB_OP_MODIFY
, prio_str
);
1865 if (!level
|| strmatch(level
, "level-2"))
1866 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/priority/level-2",
1867 NB_OP_MODIFY
, prio_str
);
1869 return nb_cli_apply_changes(vty
, NULL
);
1872 DEFPY(no_isis_priority
, no_isis_priority_cmd
,
1873 "no isis priority [(0-127)] [level-1|level-2]$level",
1875 "IS-IS routing protocol\n"
1876 "Set priority for Designated Router election\n"
1878 "Specify priority for level-1 routing\n"
1879 "Specify priority for level-2 routing\n")
1881 if (!level
|| strmatch(level
, "level-1"))
1882 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/priority/level-1",
1883 NB_OP_MODIFY
, NULL
);
1884 if (!level
|| strmatch(level
, "level-2"))
1885 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/priority/level-2",
1886 NB_OP_MODIFY
, NULL
);
1888 return nb_cli_apply_changes(vty
, NULL
);
1891 void cli_show_ip_isis_priority(struct vty
*vty
, struct lyd_node
*dnode
,
1894 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1895 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1897 if (strmatch(l1
, l2
))
1898 vty_out(vty
, " isis priority %s\n", l1
);
1900 vty_out(vty
, " isis priority %s level-1\n", l1
);
1901 vty_out(vty
, " isis priority %s level-2\n", l2
);
1906 * XPath: /frr-isisd:isis/instance/log-adjacency-changes
1908 DEFPY(log_adj_changes
, log_adj_changes_cmd
, "[no] log-adjacency-changes",
1909 NO_STR
"Log changes in adjacency state\n")
1911 nb_cli_enqueue_change(vty
, "./log-adjacency-changes", NB_OP_MODIFY
,
1912 no
? "false" : "true");
1914 return nb_cli_apply_changes(vty
, NULL
);
1917 void cli_show_isis_log_adjacency(struct vty
*vty
, struct lyd_node
*dnode
,
1920 if (!yang_dnode_get_bool(dnode
, NULL
))
1921 vty_out(vty
, " no");
1922 vty_out(vty
, " log-adjacency-changes\n");
1925 void isis_cli_init(void)
1927 install_element(CONFIG_NODE
, &router_isis_cmd
);
1928 install_element(CONFIG_NODE
, &no_router_isis_cmd
);
1930 install_element(INTERFACE_NODE
, &ip_router_isis_cmd
);
1931 install_element(INTERFACE_NODE
, &ip6_router_isis_cmd
);
1932 install_element(INTERFACE_NODE
, &no_ip_router_isis_cmd
);
1934 install_element(ISIS_NODE
, &net_cmd
);
1936 install_element(ISIS_NODE
, &is_type_cmd
);
1937 install_element(ISIS_NODE
, &no_is_type_cmd
);
1939 install_element(ISIS_NODE
, &dynamic_hostname_cmd
);
1941 install_element(ISIS_NODE
, &set_overload_bit_cmd
);
1942 install_element(ISIS_NODE
, &set_attached_bit_cmd
);
1944 install_element(ISIS_NODE
, &metric_style_cmd
);
1945 install_element(ISIS_NODE
, &no_metric_style_cmd
);
1947 install_element(ISIS_NODE
, &area_passwd_cmd
);
1948 install_element(ISIS_NODE
, &domain_passwd_cmd
);
1949 install_element(ISIS_NODE
, &no_area_passwd_cmd
);
1951 install_element(ISIS_NODE
, &lsp_gen_interval_cmd
);
1952 install_element(ISIS_NODE
, &no_lsp_gen_interval_cmd
);
1953 install_element(ISIS_NODE
, &lsp_refresh_interval_cmd
);
1954 install_element(ISIS_NODE
, &no_lsp_refresh_interval_cmd
);
1955 install_element(ISIS_NODE
, &max_lsp_lifetime_cmd
);
1956 install_element(ISIS_NODE
, &no_max_lsp_lifetime_cmd
);
1957 install_element(ISIS_NODE
, &area_lsp_mtu_cmd
);
1958 install_element(ISIS_NODE
, &no_area_lsp_mtu_cmd
);
1960 install_element(ISIS_NODE
, &spf_interval_cmd
);
1961 install_element(ISIS_NODE
, &no_spf_interval_cmd
);
1962 install_element(ISIS_NODE
, &spf_delay_ietf_cmd
);
1963 install_element(ISIS_NODE
, &no_spf_delay_ietf_cmd
);
1965 install_element(ISIS_NODE
, &area_purge_originator_cmd
);
1967 install_element(ISIS_NODE
, &isis_mpls_te_on_cmd
);
1968 install_element(ISIS_NODE
, &no_isis_mpls_te_on_cmd
);
1969 install_element(ISIS_NODE
, &isis_mpls_te_router_addr_cmd
);
1970 install_element(ISIS_NODE
, &isis_mpls_te_inter_as_cmd
);
1972 install_element(ISIS_NODE
, &isis_default_originate_cmd
);
1973 install_element(ISIS_NODE
, &isis_redistribute_cmd
);
1975 install_element(ISIS_NODE
, &isis_topology_cmd
);
1977 install_element(INTERFACE_NODE
, &isis_passive_cmd
);
1979 install_element(INTERFACE_NODE
, &isis_passwd_cmd
);
1980 install_element(INTERFACE_NODE
, &no_isis_passwd_cmd
);
1982 install_element(INTERFACE_NODE
, &isis_metric_cmd
);
1983 install_element(INTERFACE_NODE
, &no_isis_metric_cmd
);
1985 install_element(INTERFACE_NODE
, &isis_hello_interval_cmd
);
1986 install_element(INTERFACE_NODE
, &no_isis_hello_interval_cmd
);
1988 install_element(INTERFACE_NODE
, &isis_hello_multiplier_cmd
);
1989 install_element(INTERFACE_NODE
, &no_isis_hello_multiplier_cmd
);
1991 install_element(INTERFACE_NODE
, &isis_threeway_adj_cmd
);
1993 install_element(INTERFACE_NODE
, &isis_hello_padding_cmd
);
1995 install_element(INTERFACE_NODE
, &csnp_interval_cmd
);
1996 install_element(INTERFACE_NODE
, &no_csnp_interval_cmd
);
1998 install_element(INTERFACE_NODE
, &psnp_interval_cmd
);
1999 install_element(INTERFACE_NODE
, &no_psnp_interval_cmd
);
2001 install_element(INTERFACE_NODE
, &circuit_topology_cmd
);
2003 install_element(INTERFACE_NODE
, &isis_circuit_type_cmd
);
2004 install_element(INTERFACE_NODE
, &no_isis_circuit_type_cmd
);
2006 install_element(INTERFACE_NODE
, &isis_network_cmd
);
2008 install_element(INTERFACE_NODE
, &isis_priority_cmd
);
2009 install_element(INTERFACE_NODE
, &no_isis_priority_cmd
);
2011 install_element(ISIS_NODE
, &log_adj_changes_cmd
);
2014 #endif /* ifndef FABRICD */