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 nb_cli_enqueue_change(vty
, "./frr-isisd:isis", NB_OP_CREATE
,
181 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/area-tag",
183 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/ipv4-routing",
184 NB_OP_MODIFY
, "true");
185 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/circuit-type",
186 NB_OP_MODIFY
, circ_type
);
189 /* check if the interface is a loopback and if so set it as passive */
190 ifp
= yang_dnode_get_entry(dnode
, false);
191 if (ifp
&& if_is_loopback(ifp
))
192 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/passive",
193 NB_OP_MODIFY
, "true");
195 return nb_cli_apply_changes(vty
, NULL
);
198 DEFPY(ip6_router_isis
, ip6_router_isis_cmd
, "ipv6 router isis WORD$tag",
199 "Interface Internet Protocol config commands\n"
200 "IP router interface commands\n"
201 "IS-IS routing protocol\n"
202 "Routing process tag\n")
204 char temp_xpath
[XPATH_MAXLEN
];
205 const char *circ_type
;
206 struct isis_area
*area
;
207 struct interface
*ifp
;
208 const struct lyd_node
*dnode
=
209 yang_dnode_get(running_config
->dnode
, VTY_CURR_XPATH
);
211 /* area will be created if it is not present. make sure the yang model
212 * is synced with FRR and call the appropriate NB cb.
214 area
= isis_area_lookup(tag
);
216 snprintf(temp_xpath
, XPATH_MAXLEN
,
217 "/frr-isisd:isis/instance[area-tag='%s']", tag
);
218 nb_cli_enqueue_change(vty
, temp_xpath
, NB_OP_CREATE
, tag
);
219 snprintf(temp_xpath
, XPATH_MAXLEN
,
220 "/frr-isisd:isis/instance[area-tag='%s']/is-type",
222 nb_cli_enqueue_change(
223 vty
, temp_xpath
, NB_OP_MODIFY
,
224 listcount(isis
->area_list
) == 0 ? "level-1-2" : NULL
);
225 nb_cli_enqueue_change(vty
, "./frr-isisd:isis", NB_OP_CREATE
,
227 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/area-tag",
229 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/ipv6-routing",
230 NB_OP_MODIFY
, "true");
231 nb_cli_enqueue_change(
232 vty
, "./frr-isisd:isis/circuit-type", NB_OP_MODIFY
,
233 listcount(isis
->area_list
) == 0 ? "level-1-2"
236 /* area exists, circuit type defaults to its area's is_type */
237 switch (area
->is_type
) {
239 circ_type
= "level-1";
242 circ_type
= "level-2";
244 case IS_LEVEL_1_AND_2
:
245 circ_type
= "level-1-2";
248 nb_cli_enqueue_change(vty
, "./frr-isisd:isis", NB_OP_CREATE
,
250 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/area-tag",
252 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/ipv6-routing",
253 NB_OP_MODIFY
, "true");
254 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/circuit-type",
255 NB_OP_MODIFY
, circ_type
);
258 /* check if the interface is a loopback and if so set it as passive */
259 ifp
= yang_dnode_get_entry(dnode
, false);
260 if (ifp
&& if_is_loopback(ifp
))
261 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/passive",
262 NB_OP_MODIFY
, "true");
264 return nb_cli_apply_changes(vty
, NULL
);
267 DEFPY(no_ip_router_isis
, no_ip_router_isis_cmd
,
268 "no <ip|ipv6>$ip router isis [WORD]$tag",
270 "Interface Internet Protocol config commands\n"
271 "IP router interface commands\n"
272 "IP router interface commands\n"
273 "IS-IS routing protocol\n"
274 "Routing process tag\n")
276 const struct lyd_node
*dnode
=
277 yang_dnode_get(running_config
->dnode
, VTY_CURR_XPATH
);
279 /* if both ipv4 and ipv6 are off delete the interface isis container too
281 if (!strncmp(ip
, "ipv6", strlen("ipv6"))) {
283 && !yang_dnode_get_bool(dnode
,
284 "./frr-isisd:isis/ipv4-routing"))
285 nb_cli_enqueue_change(vty
, "./frr-isisd:isis",
288 nb_cli_enqueue_change(vty
,
289 "./frr-isisd:isis/ipv6-routing",
290 NB_OP_MODIFY
, "false");
291 } else { /* no ipv4 */
293 && !yang_dnode_get_bool(dnode
,
294 "./frr-isisd:isis/ipv6-routing"))
295 nb_cli_enqueue_change(vty
, "./frr-isisd:isis",
298 nb_cli_enqueue_change(vty
,
299 "./frr-isisd:isis/ipv4-routing",
300 NB_OP_MODIFY
, "false");
303 return nb_cli_apply_changes(vty
, NULL
);
306 void cli_show_ip_isis_ipv4(struct vty
*vty
, struct lyd_node
*dnode
,
309 if (!yang_dnode_get_bool(dnode
, NULL
))
311 vty_out(vty
, " ip router isis %s\n",
312 yang_dnode_get_string(dnode
, "../area-tag"));
315 void cli_show_ip_isis_ipv6(struct vty
*vty
, struct lyd_node
*dnode
,
318 if (!yang_dnode_get_bool(dnode
, NULL
))
320 vty_out(vty
, " ipv6 router isis %s\n",
321 yang_dnode_get_string(dnode
, "../area-tag"));
325 * XPath: /frr-isisd:isis/instance/area-address
327 DEFPY(net
, net_cmd
, "[no] net WORD",
328 "Remove an existing Network Entity Title for this process\n"
329 "A Network Entity Title for this process (OSI only)\n"
330 "XX.XXXX. ... .XXX.XX Network entity title (NET)\n")
332 nb_cli_enqueue_change(vty
, "./area-address",
333 no
? NB_OP_DELETE
: NB_OP_CREATE
, net
);
335 return nb_cli_apply_changes(vty
, NULL
);
338 void cli_show_isis_area_address(struct vty
*vty
, struct lyd_node
*dnode
,
341 vty_out(vty
, " net %s\n", yang_dnode_get_string(dnode
, NULL
));
345 * XPath: /frr-isisd:isis/instance/is-type
347 DEFPY(is_type
, is_type_cmd
, "is-type <level-1|level-1-2|level-2-only>$level",
348 "IS Level for this routing process (OSI only)\n"
349 "Act as a station router only\n"
350 "Act as both a station router and an area router\n"
351 "Act as an area router only\n")
353 nb_cli_enqueue_change(vty
, "./is-type", NB_OP_MODIFY
,
354 strmatch(level
, "level-2-only") ? "level-2"
357 return nb_cli_apply_changes(vty
, NULL
);
360 DEFPY(no_is_type
, no_is_type_cmd
,
361 "no is-type [<level-1|level-1-2|level-2-only>]",
363 "IS Level for this routing process (OSI only)\n"
364 "Act as a station router only\n"
365 "Act as both a station router and an area router\n"
366 "Act as an area router only\n")
368 const char *value
= NULL
;
369 const struct lyd_node
*dnode
=
370 yang_dnode_get(running_config
->dnode
, VTY_CURR_XPATH
);
371 struct isis_area
*area
= yang_dnode_get_entry(dnode
, false);
374 * Put the is-type back to defaults:
375 * - level-1-2 on first area
376 * - level-1 for the rest
378 if (area
&& listgetdata(listhead(isis
->area_list
)) == area
)
382 nb_cli_enqueue_change(vty
, "./is-type", NB_OP_MODIFY
, value
);
384 return nb_cli_apply_changes(vty
, NULL
);
387 void cli_show_isis_is_type(struct vty
*vty
, struct lyd_node
*dnode
,
390 int is_type
= yang_dnode_get_enum(dnode
, NULL
);
394 vty_out(vty
, " is-type level-1\n");
397 vty_out(vty
, " is-type level-2-only\n");
399 case IS_LEVEL_1_AND_2
:
400 vty_out(vty
, " is-type level-1-2\n");
406 * XPath: /frr-isisd:isis/instance/dynamic-hostname
408 DEFPY(dynamic_hostname
, dynamic_hostname_cmd
, "[no] hostname dynamic",
410 "Dynamic hostname for IS-IS\n"
411 "Dynamic hostname\n")
413 nb_cli_enqueue_change(vty
, "./dynamic-hostname", NB_OP_MODIFY
,
414 no
? "false" : "true");
416 return nb_cli_apply_changes(vty
, NULL
);
419 void cli_show_isis_dynamic_hostname(struct vty
*vty
, struct lyd_node
*dnode
,
422 if (!yang_dnode_get_bool(dnode
, NULL
))
425 vty_out(vty
, " hostname dynamic\n");
429 * XPath: /frr-isisd:isis/instance/overload
431 DEFPY(set_overload_bit
, set_overload_bit_cmd
, "[no] set-overload-bit",
432 "Reset overload bit to accept transit traffic\n"
433 "Set overload bit to avoid any transit traffic\n")
435 nb_cli_enqueue_change(vty
, "./overload", NB_OP_MODIFY
,
436 no
? "false" : "true");
438 return nb_cli_apply_changes(vty
, NULL
);
441 void cli_show_isis_overload(struct vty
*vty
, struct lyd_node
*dnode
,
444 if (!yang_dnode_get_bool(dnode
, NULL
))
446 vty_out(vty
, " set-overload-bit\n");
450 * XPath: /frr-isisd:isis/instance/attached
452 DEFPY(set_attached_bit
, set_attached_bit_cmd
, "[no] set-attached-bit",
453 "Reset attached bit\n"
454 "Set attached bit to identify as L1/L2 router for inter-area traffic\n")
456 nb_cli_enqueue_change(vty
, "./attached", NB_OP_MODIFY
,
457 no
? "false" : "true");
459 return nb_cli_apply_changes(vty
, NULL
);
462 void cli_show_isis_attached(struct vty
*vty
, struct lyd_node
*dnode
,
465 if (!yang_dnode_get_bool(dnode
, NULL
))
467 vty_out(vty
, " set-attached-bit\n");
471 * XPath: /frr-isisd:isis/instance/metric-style
473 DEFPY(metric_style
, metric_style_cmd
,
474 "metric-style <narrow|transition|wide>$style",
475 "Use old-style (ISO 10589) or new-style packet formats\n"
476 "Use old style of TLVs with narrow metric\n"
477 "Send and accept both styles of TLVs during transition\n"
478 "Use new style of TLVs to carry wider metric\n")
480 nb_cli_enqueue_change(vty
, "./metric-style", NB_OP_MODIFY
, style
);
482 return nb_cli_apply_changes(vty
, NULL
);
485 DEFPY(no_metric_style
, no_metric_style_cmd
,
486 "no metric-style [narrow|transition|wide]",
488 "Use old-style (ISO 10589) or new-style packet formats\n"
489 "Use old style of TLVs with narrow metric\n"
490 "Send and accept both styles of TLVs during transition\n"
491 "Use new style of TLVs to carry wider metric\n")
493 nb_cli_enqueue_change(vty
, "./metric-style", NB_OP_MODIFY
, "narrow");
495 return nb_cli_apply_changes(vty
, NULL
);
498 void cli_show_isis_metric_style(struct vty
*vty
, struct lyd_node
*dnode
,
501 int metric
= yang_dnode_get_enum(dnode
, NULL
);
504 case ISIS_NARROW_METRIC
:
505 vty_out(vty
, " metric-style narrow\n");
507 case ISIS_WIDE_METRIC
:
508 vty_out(vty
, " metric-style wide\n");
510 case ISIS_TRANSITION_METRIC
:
511 vty_out(vty
, " metric-style transition\n");
517 * XPath: /frr-isisd:isis/instance/area-password
519 DEFPY(area_passwd
, area_passwd_cmd
,
520 "area-password <clear|md5>$pwd_type WORD$pwd [authenticate snp <send-only|validate>$snp]",
521 "Configure the authentication password for an area\n"
522 "Clear-text authentication type\n"
523 "MD5 authentication type\n"
524 "Level-wide password\n"
527 "Send but do not check PDUs on receiving\n"
528 "Send and check PDUs on receiving\n")
530 nb_cli_enqueue_change(vty
, "./area-password", NB_OP_CREATE
, NULL
);
531 nb_cli_enqueue_change(vty
, "./area-password/password", NB_OP_MODIFY
,
533 nb_cli_enqueue_change(vty
, "./area-password/password-type",
534 NB_OP_MODIFY
, pwd_type
);
535 nb_cli_enqueue_change(vty
, "./area-password/authenticate-snp",
536 NB_OP_MODIFY
, snp
? snp
: "none");
538 return nb_cli_apply_changes(vty
, NULL
);
541 void cli_show_isis_area_pwd(struct vty
*vty
, struct lyd_node
*dnode
,
546 vty_out(vty
, " area-password %s %s",
547 yang_dnode_get_string(dnode
, "./password-type"),
548 yang_dnode_get_string(dnode
, "./password"));
549 snp
= yang_dnode_get_string(dnode
, "./authenticate-snp");
550 if (!strmatch("none", snp
))
551 vty_out(vty
, " authenticate snp %s", snp
);
556 * XPath: /frr-isisd:isis/instance/domain-password
558 DEFPY(domain_passwd
, domain_passwd_cmd
,
559 "domain-password <clear|md5>$pwd_type WORD$pwd [authenticate snp <send-only|validate>$snp]",
560 "Set the authentication password for a routing domain\n"
561 "Clear-text authentication type\n"
562 "MD5 authentication type\n"
563 "Level-wide password\n"
566 "Send but do not check PDUs on receiving\n"
567 "Send and check PDUs on receiving\n")
569 nb_cli_enqueue_change(vty
, "./domain-password", NB_OP_CREATE
, NULL
);
570 nb_cli_enqueue_change(vty
, "./domain-password/password", NB_OP_MODIFY
,
572 nb_cli_enqueue_change(vty
, "./domain-password/password-type",
573 NB_OP_MODIFY
, pwd_type
);
574 nb_cli_enqueue_change(vty
, "./domain-password/authenticate-snp",
575 NB_OP_MODIFY
, snp
? snp
: "none");
577 return nb_cli_apply_changes(vty
, NULL
);
580 DEFPY(no_area_passwd
, no_area_passwd_cmd
,
581 "no <area-password|domain-password>$cmd",
583 "Configure the authentication password for an area\n"
584 "Set the authentication password for a routing domain\n")
586 nb_cli_enqueue_change(vty
, ".", NB_OP_DELETE
, NULL
);
588 return nb_cli_apply_changes(vty
, "./%s", cmd
);
591 void cli_show_isis_domain_pwd(struct vty
*vty
, struct lyd_node
*dnode
,
596 vty_out(vty
, " domain-password %s %s",
597 yang_dnode_get_string(dnode
, "./password-type"),
598 yang_dnode_get_string(dnode
, "./password"));
599 snp
= yang_dnode_get_string(dnode
, "./authenticate-snp");
600 if (!strmatch("none", snp
))
601 vty_out(vty
, " authenticate snp %s", snp
);
606 * XPath: /frr-isisd:isis/instance/lsp/generation-interval
608 DEFPY(lsp_gen_interval
, lsp_gen_interval_cmd
,
609 "lsp-gen-interval [level-1|level-2]$level (1-120)$val",
610 "Minimum interval between regenerating same LSP\n"
611 "Set interval for level 1 only\n"
612 "Set interval for level 2 only\n"
613 "Minimum interval in seconds\n")
615 if (!level
|| strmatch(level
, "level-1"))
616 nb_cli_enqueue_change(vty
, "./lsp/generation-interval/level-1",
617 NB_OP_MODIFY
, val_str
);
618 if (!level
|| strmatch(level
, "level-2"))
619 nb_cli_enqueue_change(vty
, "./lsp/generation-interval/level-2",
620 NB_OP_MODIFY
, val_str
);
622 return nb_cli_apply_changes(vty
, NULL
);
625 DEFPY(no_lsp_gen_interval
, no_lsp_gen_interval_cmd
,
626 "no lsp-gen-interval [level-1|level-2]$level [(1-120)]",
628 "Minimum interval between regenerating same LSP\n"
629 "Set interval for level 1 only\n"
630 "Set interval for level 2 only\n"
631 "Minimum interval in seconds\n")
633 if (!level
|| strmatch(level
, "level-1"))
634 nb_cli_enqueue_change(vty
, "./lsp/generation-interval/level-1",
636 if (!level
|| strmatch(level
, "level-2"))
637 nb_cli_enqueue_change(vty
, "./lsp/generation-interval/level-2",
640 return nb_cli_apply_changes(vty
, NULL
);
643 void cli_show_isis_lsp_gen_interval(struct vty
*vty
, struct lyd_node
*dnode
,
646 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
647 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
649 if (strmatch(l1
, l2
))
650 vty_out(vty
, " lsp-gen-interval %s\n", l1
);
652 vty_out(vty
, " lsp-gen-interval level-1 %s\n", l1
);
653 vty_out(vty
, " lsp-gen-interval level-2 %s\n", l2
);
658 * XPath: /frr-isisd:isis/instance/lsp/refresh-interval
660 DEFPY(lsp_refresh_interval
, lsp_refresh_interval_cmd
,
661 "lsp-refresh-interval [level-1|level-2]$level (1-65235)$val",
662 "LSP refresh interval\n"
663 "LSP refresh interval for Level 1 only\n"
664 "LSP refresh interval for Level 2 only\n"
665 "LSP refresh interval in seconds\n")
667 if (!level
|| strmatch(level
, "level-1"))
668 nb_cli_enqueue_change(vty
, "./lsp/refresh-interval/level-1",
669 NB_OP_MODIFY
, val_str
);
670 if (!level
|| strmatch(level
, "level-2"))
671 nb_cli_enqueue_change(vty
, "./lsp/refresh-interval/level-2",
672 NB_OP_MODIFY
, val_str
);
674 return nb_cli_apply_changes(vty
, NULL
);
677 DEFPY(no_lsp_refresh_interval
, no_lsp_refresh_interval_cmd
,
678 "no lsp-refresh-interval [level-1|level-2]$level [(1-65235)]",
680 "LSP refresh interval\n"
681 "LSP refresh interval for Level 1 only\n"
682 "LSP refresh interval for Level 2 only\n"
683 "LSP refresh interval in seconds\n")
685 if (!level
|| strmatch(level
, "level-1"))
686 nb_cli_enqueue_change(vty
, "./lsp/refresh-interval/level-1",
688 if (!level
|| strmatch(level
, "level-2"))
689 nb_cli_enqueue_change(vty
, "./lsp/refresh-interval/level-2",
692 return nb_cli_apply_changes(vty
, NULL
);
695 void cli_show_isis_lsp_ref_interval(struct vty
*vty
, struct lyd_node
*dnode
,
698 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
699 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
701 if (strmatch(l1
, l2
))
702 vty_out(vty
, " lsp-refresh-interval %s\n", l1
);
704 vty_out(vty
, " lsp-refresh-interval level-1 %s\n", l1
);
705 vty_out(vty
, " lsp-refresh-interval level-2 %s\n", l2
);
710 * XPath: /frr-isisd:isis/instance/lsp/maximum-lifetime
712 DEFPY(max_lsp_lifetime
, max_lsp_lifetime_cmd
,
713 "max-lsp-lifetime [level-1|level-2]$level (350-65535)$val",
714 "Maximum LSP lifetime\n"
715 "Maximum LSP lifetime for Level 1 only\n"
716 "Maximum LSP lifetime for Level 2 only\n"
717 "LSP lifetime in seconds\n")
719 if (!level
|| strmatch(level
, "level-1"))
720 nb_cli_enqueue_change(vty
, "./lsp/maximum-lifetime/level-1",
721 NB_OP_MODIFY
, val_str
);
722 if (!level
|| strmatch(level
, "level-2"))
723 nb_cli_enqueue_change(vty
, "./lsp/maximum-lifetime/level-2",
724 NB_OP_MODIFY
, val_str
);
726 return nb_cli_apply_changes(vty
, NULL
);
729 DEFPY(no_max_lsp_lifetime
, no_max_lsp_lifetime_cmd
,
730 "no max-lsp-lifetime [level-1|level-2]$level [(350-65535)]",
732 "Maximum LSP lifetime\n"
733 "Maximum LSP lifetime for Level 1 only\n"
734 "Maximum LSP lifetime for Level 2 only\n"
735 "LSP lifetime in seconds\n")
737 if (!level
|| strmatch(level
, "level-1"))
738 nb_cli_enqueue_change(vty
, "./lsp/maximum-lifetime/level-1",
740 if (!level
|| strmatch(level
, "level-2"))
741 nb_cli_enqueue_change(vty
, "./lsp/maximum-lifetime/level-2",
744 return nb_cli_apply_changes(vty
, NULL
);
747 void cli_show_isis_lsp_max_lifetime(struct vty
*vty
, struct lyd_node
*dnode
,
750 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
751 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
753 if (strmatch(l1
, l2
))
754 vty_out(vty
, " max-lsp-lifetime %s\n", l1
);
756 vty_out(vty
, " max-lsp-lifetime level-1 %s\n", l1
);
757 vty_out(vty
, " max-lsp-lifetime level-2 %s\n", l2
);
762 * XPath: /frr-isisd:isis/instance/lsp/mtu
764 DEFPY(area_lsp_mtu
, area_lsp_mtu_cmd
, "lsp-mtu (128-4352)$val",
765 "Configure the maximum size of generated LSPs\n"
766 "Maximum size of generated LSPs\n")
768 nb_cli_enqueue_change(vty
, "./lsp/mtu", NB_OP_MODIFY
, val_str
);
770 return nb_cli_apply_changes(vty
, NULL
);
773 DEFPY(no_area_lsp_mtu
, no_area_lsp_mtu_cmd
, "no lsp-mtu [(128-4352)]",
775 "Configure the maximum size of generated LSPs\n"
776 "Maximum size of generated LSPs\n")
778 nb_cli_enqueue_change(vty
, "./lsp/mtu", NB_OP_MODIFY
, NULL
);
780 return nb_cli_apply_changes(vty
, NULL
);
783 void cli_show_isis_lsp_mtu(struct vty
*vty
, struct lyd_node
*dnode
,
786 vty_out(vty
, " lsp-mtu %s\n", yang_dnode_get_string(dnode
, NULL
));
790 * XPath: /frr-isisd:isis/instance/spf/minimum-interval
792 DEFPY(spf_interval
, spf_interval_cmd
,
793 "spf-interval [level-1|level-2]$level (1-120)$val",
794 "Minimum interval between SPF calculations\n"
795 "Set interval for level 1 only\n"
796 "Set interval for level 2 only\n"
797 "Minimum interval between consecutive SPFs in seconds\n")
799 if (!level
|| strmatch(level
, "level-1"))
800 nb_cli_enqueue_change(vty
, "./spf/minimum-interval/level-1",
801 NB_OP_MODIFY
, val_str
);
802 if (!level
|| strmatch(level
, "level-2"))
803 nb_cli_enqueue_change(vty
, "./spf/minimum-interval/level-2",
804 NB_OP_MODIFY
, val_str
);
806 return nb_cli_apply_changes(vty
, NULL
);
809 DEFPY(no_spf_interval
, no_spf_interval_cmd
,
810 "no spf-interval [level-1|level-2]$level [(1-120)]",
812 "Minimum interval between SPF calculations\n"
813 "Set interval for level 1 only\n"
814 "Set interval for level 2 only\n"
815 "Minimum interval between consecutive SPFs in seconds\n")
817 if (!level
|| strmatch(level
, "level-1"))
818 nb_cli_enqueue_change(vty
, "./spf/minimum-interval/level-1",
820 if (!level
|| strmatch(level
, "level-2"))
821 nb_cli_enqueue_change(vty
, "./spf/minimum-interval/level-2",
824 return nb_cli_apply_changes(vty
, NULL
);
827 void cli_show_isis_spf_min_interval(struct vty
*vty
, struct lyd_node
*dnode
,
830 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
831 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
833 if (strmatch(l1
, l2
))
834 vty_out(vty
, " spf-interval %s\n", l1
);
836 vty_out(vty
, " spf-interval level-1 %s\n", l1
);
837 vty_out(vty
, " spf-interval level-2 %s\n", l2
);
842 * XPath: /frr-isisd:isis/instance/spf/ietf-backoff-delay
844 DEFPY(spf_delay_ietf
, spf_delay_ietf_cmd
,
845 "spf-delay-ietf init-delay (0-60000) short-delay (0-60000) long-delay (0-60000) holddown (0-60000) time-to-learn (0-60000)",
846 "IETF SPF delay algorithm\n"
847 "Delay used while in QUIET state\n"
848 "Delay used while in QUIET state in milliseconds\n"
849 "Delay used while in SHORT_WAIT state\n"
850 "Delay used while in SHORT_WAIT state in milliseconds\n"
851 "Delay used while in LONG_WAIT\n"
852 "Delay used while in LONG_WAIT state in milliseconds\n"
853 "Time with no received IGP events before considering IGP stable\n"
854 "Time with no received IGP events before considering IGP stable (in milliseconds)\n"
855 "Maximum duration needed to learn all the events related to a single failure\n"
856 "Maximum duration needed to learn all the events related to a single failure (in milliseconds)\n")
858 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay", NB_OP_CREATE
,
860 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/init-delay",
861 NB_OP_MODIFY
, init_delay_str
);
862 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/short-delay",
863 NB_OP_MODIFY
, short_delay_str
);
864 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/long-delay",
865 NB_OP_MODIFY
, long_delay_str
);
866 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/hold-down",
867 NB_OP_MODIFY
, holddown_str
);
868 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay/time-to-learn",
869 NB_OP_MODIFY
, time_to_learn_str
);
871 return nb_cli_apply_changes(vty
, NULL
);
874 DEFPY(no_spf_delay_ietf
, no_spf_delay_ietf_cmd
,
875 "no spf-delay-ietf [init-delay (0-60000) short-delay (0-60000) long-delay (0-60000) holddown (0-60000) time-to-learn (0-60000)]",
877 "IETF SPF delay algorithm\n"
878 "Delay used while in QUIET state\n"
879 "Delay used while in QUIET state in milliseconds\n"
880 "Delay used while in SHORT_WAIT state\n"
881 "Delay used while in SHORT_WAIT state in milliseconds\n"
882 "Delay used while in LONG_WAIT\n"
883 "Delay used while in LONG_WAIT state in milliseconds\n"
884 "Time with no received IGP events before considering IGP stable\n"
885 "Time with no received IGP events before considering IGP stable (in milliseconds)\n"
886 "Maximum duration needed to learn all the events related to a single failure\n"
887 "Maximum duration needed to learn all the events related to a single failure (in milliseconds)\n")
889 nb_cli_enqueue_change(vty
, "./spf/ietf-backoff-delay", NB_OP_DELETE
,
892 return nb_cli_apply_changes(vty
, NULL
);
895 void cli_show_isis_spf_ietf_backoff(struct vty
*vty
, struct lyd_node
*dnode
,
899 " spf-delay-ietf init-delay %s short-delay %s long-delay %s holddown %s time-to-learn %s\n",
900 yang_dnode_get_string(dnode
, "./init-delay"),
901 yang_dnode_get_string(dnode
, "./short-delay"),
902 yang_dnode_get_string(dnode
, "./long-delay"),
903 yang_dnode_get_string(dnode
, "./hold-down"),
904 yang_dnode_get_string(dnode
, "./time-to-learn"));
908 * XPath: /frr-isisd:isis/instance/purge-originator
910 DEFPY(area_purge_originator
, area_purge_originator_cmd
, "[no] purge-originator",
911 NO_STR
"Use the RFC 6232 purge-originator\n")
913 nb_cli_enqueue_change(vty
, "./purge-originator", NB_OP_MODIFY
,
914 no
? "false" : "true");
916 return nb_cli_apply_changes(vty
, NULL
);
919 void cli_show_isis_purge_origin(struct vty
*vty
, struct lyd_node
*dnode
,
922 if (!yang_dnode_get_bool(dnode
, NULL
))
924 vty_out(vty
, " purge-originator\n");
928 * XPath: /frr-isisd:isis/mpls-te
930 DEFPY(isis_mpls_te_on
, isis_mpls_te_on_cmd
, "mpls-te on",
931 MPLS_TE_STR
"Enable the MPLS-TE functionality\n")
933 nb_cli_enqueue_change(vty
, "/frr-isisd:isis/mpls-te", NB_OP_CREATE
,
936 return nb_cli_apply_changes(vty
, NULL
);
939 DEFPY(no_isis_mpls_te_on
, no_isis_mpls_te_on_cmd
, "no mpls-te [on]",
941 "Disable the MPLS-TE functionality\n"
942 "Enable the MPLS-TE functionality\n")
944 nb_cli_enqueue_change(vty
, "/frr-isisd:isis/mpls-te", NB_OP_DELETE
,
947 return nb_cli_apply_changes(vty
, NULL
);
950 void cli_show_isis_mpls_te(struct vty
*vty
, struct lyd_node
*dnode
,
953 vty_out(vty
, " mpls-te on\n");
957 * XPath: /frr-isisd:isis/mpls-te/router-address
959 DEFPY(isis_mpls_te_router_addr
, isis_mpls_te_router_addr_cmd
,
960 "mpls-te router-address A.B.C.D",
962 "Stable IP address of the advertising router\n"
963 "MPLS-TE router address in IPv4 address format\n")
965 nb_cli_enqueue_change(vty
, "/frr-isisd:isis/mpls-te/router-address",
966 NB_OP_MODIFY
, router_address_str
);
968 return nb_cli_apply_changes(vty
, NULL
);
971 void cli_show_isis_mpls_te_router_addr(struct vty
*vty
, struct lyd_node
*dnode
,
974 vty_out(vty
, " mpls-te router-address %s\n",
975 yang_dnode_get_string(dnode
, NULL
));
978 DEFPY(isis_mpls_te_inter_as
, isis_mpls_te_inter_as_cmd
,
979 "[no] mpls-te inter-as [level-1|level-1-2|level-2-only]",
981 "Configure MPLS-TE Inter-AS support\n"
982 "AREA native mode self originate INTER-AS LSP with L1 only flooding scope\n"
983 "AREA native mode self originate INTER-AS LSP with L1 and L2 flooding scope\n"
984 "AS native mode self originate INTER-AS LSP with L2 only flooding scope\n")
986 vty_out(vty
, "MPLS-TE Inter-AS is not yet supported.");
991 * XPath: /frr-isisd:isis/instance/default-information-originate
993 DEFPY(isis_default_originate
, isis_default_originate_cmd
,
994 "[no] default-information originate <ipv4|ipv6>$ip"
995 " <level-1|level-2>$level [always]$always"
996 " [<metric (0-16777215)$metric|route-map WORD$rmap>]",
998 "Control distribution of default information\n"
999 "Distribute a default route\n"
1000 "Distribute default route for IPv4\n"
1001 "Distribute default route for IPv6\n"
1002 "Distribute default route into level-1\n"
1003 "Distribute default route into level-2\n"
1004 "Always advertise default route\n"
1005 "Metric for default route\n"
1006 "ISIS default metric\n"
1007 "Route map reference\n"
1008 "Pointer to route-map entries\n")
1011 nb_cli_enqueue_change(vty
, ".", NB_OP_DELETE
, NULL
);
1013 nb_cli_enqueue_change(vty
, ".", NB_OP_CREATE
, NULL
);
1014 nb_cli_enqueue_change(vty
, "./always", NB_OP_MODIFY
,
1015 always
? "true" : "false");
1016 nb_cli_enqueue_change(vty
, "./route-map",
1017 rmap
? NB_OP_MODIFY
: NB_OP_DELETE
,
1018 rmap
? rmap
: NULL
);
1019 nb_cli_enqueue_change(vty
, "./metric",
1020 metric
? NB_OP_MODIFY
: NB_OP_DELETE
,
1021 metric
? metric_str
: NULL
);
1022 if (strmatch(ip
, "ipv6") && !always
) {
1024 "Zebra doesn't implement default-originate for IPv6 yet\n");
1026 "so use with care or use default-originate always.\n");
1030 return nb_cli_apply_changes(
1031 vty
, "./default-information-originate/%s[level='%s']", ip
,
1035 static void vty_print_def_origin(struct vty
*vty
, struct lyd_node
*dnode
,
1036 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 else if (yang_dnode_exists(dnode
, "./metric")) {
1049 metric
= yang_dnode_get_string(dnode
, "./metric");
1050 if (show_defaults
|| !yang_dnode_is_default(dnode
, "./metric"))
1051 vty_out(vty
, " metric %s", metric
);
1056 void cli_show_isis_def_origin_ipv4(struct vty
*vty
, struct lyd_node
*dnode
,
1059 const char *level
= yang_dnode_get_string(dnode
, "./level");
1061 vty_print_def_origin(vty
, dnode
, "ipv4", level
, show_defaults
);
1064 void cli_show_isis_def_origin_ipv6(struct vty
*vty
, struct lyd_node
*dnode
,
1067 const char *level
= yang_dnode_get_string(dnode
, "./level");
1069 vty_print_def_origin(vty
, dnode
, "ipv6", level
, show_defaults
);
1073 * XPath: /frr-isisd:isis/instance/redistribute
1075 DEFPY(isis_redistribute
, isis_redistribute_cmd
,
1076 "[no] redistribute <ipv4|ipv6>$ip " PROTO_REDIST_STR
1078 " <level-1|level-2>$level"
1079 " [<metric (0-16777215)|route-map WORD>]",
1081 "Redistribute IPv4 routes\n"
1082 "Redistribute IPv6 routes\n" PROTO_REDIST_HELP
1083 "Redistribute into level-1\n"
1084 "Redistribute into level-2\n"
1085 "Metric for redistributed routes\n"
1086 "ISIS default metric\n"
1087 "Route map reference\n"
1088 "Pointer to route-map entries\n")
1091 nb_cli_enqueue_change(vty
, ".", NB_OP_DELETE
, NULL
);
1093 nb_cli_enqueue_change(vty
, ".", NB_OP_CREATE
, NULL
);
1094 nb_cli_enqueue_change(vty
, "./route-map",
1095 route_map
? NB_OP_MODIFY
: NB_OP_DELETE
,
1096 route_map
? route_map
: NULL
);
1097 nb_cli_enqueue_change(vty
, "./metric",
1098 metric
? NB_OP_MODIFY
: NB_OP_DELETE
,
1099 metric
? metric_str
: NULL
);
1102 return nb_cli_apply_changes(
1103 vty
, "./redistribute/%s[protocol='%s'][level='%s']", ip
, proto
,
1107 static void vty_print_redistribute(struct vty
*vty
, struct lyd_node
*dnode
,
1110 const char *level
= yang_dnode_get_string(dnode
, "./level");
1111 const char *protocol
= yang_dnode_get_string(dnode
, "./protocol");
1113 vty_out(vty
, " redistribute %s %s %s", family
, protocol
, level
);
1114 if (yang_dnode_exists(dnode
, "./metric"))
1115 vty_out(vty
, " metric %s",
1116 yang_dnode_get_string(dnode
, "./metric"));
1117 else if (yang_dnode_exists(dnode
, "./route-map"))
1118 vty_out(vty
, " route-map %s",
1119 yang_dnode_get_string(dnode
, "./route-map"));
1123 void cli_show_isis_redistribute_ipv4(struct vty
*vty
, struct lyd_node
*dnode
,
1126 vty_print_redistribute(vty
, dnode
, "ipv4");
1128 void cli_show_isis_redistribute_ipv6(struct vty
*vty
, struct lyd_node
*dnode
,
1131 vty_print_redistribute(vty
, dnode
, "ipv6");
1135 * XPath: /frr-isisd:isis/instance/multi-topology
1137 DEFPY(isis_topology
, isis_topology_cmd
,
1145 "|ipv6-dstsrc>$topology "
1146 "[overload]$overload",
1148 "Configure IS-IS topologies\n"
1149 "IPv4 unicast topology\n"
1150 "IPv4 management topology\n"
1151 "IPv6 unicast topology\n"
1152 "IPv4 multicast topology\n"
1153 "IPv6 multicast topology\n"
1154 "IPv6 management topology\n"
1155 "IPv6 dst-src topology\n"
1156 "Set overload bit for topology\n")
1158 char base_xpath
[XPATH_MAXLEN
];
1160 /* Since IPv4-unicast is not configurable it is not present in the
1161 * YANG model, so we need to validate it here
1163 if (strmatch(topology
, "ipv4-unicast")) {
1164 vty_out(vty
, "Cannot configure IPv4 unicast topology\n");
1165 return CMD_WARNING_CONFIG_FAILED
;
1168 if (strmatch(topology
, "ipv4-mgmt"))
1169 snprintf(base_xpath
, XPATH_MAXLEN
,
1170 "./multi-topology/ipv4-management");
1171 else if (strmatch(topology
, "ipv6-mgmt"))
1172 snprintf(base_xpath
, XPATH_MAXLEN
,
1173 "./multi-topology/ipv6-management");
1175 snprintf(base_xpath
, XPATH_MAXLEN
, "./multi-topology/%s",
1179 nb_cli_enqueue_change(vty
, ".", NB_OP_DELETE
, NULL
);
1181 nb_cli_enqueue_change(vty
, ".", NB_OP_CREATE
, NULL
);
1182 nb_cli_enqueue_change(vty
, "./overload", NB_OP_MODIFY
,
1183 overload
? "true" : "false");
1186 return nb_cli_apply_changes(vty
, base_xpath
);
1189 void cli_show_isis_mt_ipv4_multicast(struct vty
*vty
, struct lyd_node
*dnode
,
1192 vty_out(vty
, " topology ipv4-multicast");
1193 if (yang_dnode_get_bool(dnode
, "./overload"))
1194 vty_out(vty
, " overload");
1198 void cli_show_isis_mt_ipv4_mgmt(struct vty
*vty
, struct lyd_node
*dnode
,
1201 vty_out(vty
, " topology ipv4-mgmt");
1202 if (yang_dnode_get_bool(dnode
, "./overload"))
1203 vty_out(vty
, " overload");
1207 void cli_show_isis_mt_ipv6_unicast(struct vty
*vty
, struct lyd_node
*dnode
,
1210 vty_out(vty
, " topology ipv6-unicast");
1211 if (yang_dnode_get_bool(dnode
, "./overload"))
1212 vty_out(vty
, " overload");
1216 void cli_show_isis_mt_ipv6_multicast(struct vty
*vty
, struct lyd_node
*dnode
,
1219 vty_out(vty
, " topology ipv6-multicast");
1220 if (yang_dnode_get_bool(dnode
, "./overload"))
1221 vty_out(vty
, " overload");
1225 void cli_show_isis_mt_ipv6_mgmt(struct vty
*vty
, struct lyd_node
*dnode
,
1228 vty_out(vty
, " topology ipv6-mgmt");
1229 if (yang_dnode_get_bool(dnode
, "./overload"))
1230 vty_out(vty
, " overload");
1234 void cli_show_isis_mt_ipv6_dstsrc(struct vty
*vty
, struct lyd_node
*dnode
,
1237 vty_out(vty
, " topology ipv6-dstsrc");
1238 if (yang_dnode_get_bool(dnode
, "./overload"))
1239 vty_out(vty
, " overload");
1244 * XPath: /frr-interface:lib/interface/frr-isisd:isis/passive
1246 DEFPY(isis_passive
, isis_passive_cmd
, "[no] isis passive",
1248 "IS-IS routing protocol\n"
1249 "Configure the passive mode for interface\n")
1251 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/passive", NB_OP_MODIFY
,
1252 no
? "false" : "true");
1254 return nb_cli_apply_changes(vty
, NULL
);
1257 void cli_show_ip_isis_passive(struct vty
*vty
, struct lyd_node
*dnode
,
1260 if (!yang_dnode_get_bool(dnode
, NULL
))
1261 vty_out(vty
, " no");
1262 vty_out(vty
, " isis passive\n");
1266 * XPath: /frr-interface:lib/interface/frr-isisd:isis/password
1269 DEFPY(isis_passwd
, isis_passwd_cmd
, "isis password <md5|clear>$type WORD$pwd",
1270 "IS-IS routing protocol\n"
1271 "Configure the authentication password for a circuit\n"
1272 "HMAC-MD5 authentication\n"
1273 "Cleartext password\n"
1274 "Circuit password\n")
1276 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/password", NB_OP_CREATE
,
1278 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/password/password",
1280 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/password/password-type",
1281 NB_OP_MODIFY
, type
);
1283 return nb_cli_apply_changes(vty
, NULL
);
1286 DEFPY(no_isis_passwd
, no_isis_passwd_cmd
, "no isis password [<md5|clear> WORD]",
1288 "IS-IS routing protocol\n"
1289 "Configure the authentication password for a circuit\n"
1290 "HMAC-MD5 authentication\n"
1291 "Cleartext password\n"
1292 "Circuit password\n")
1294 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/password", NB_OP_DELETE
,
1297 return nb_cli_apply_changes(vty
, NULL
);
1300 void cli_show_ip_isis_password(struct vty
*vty
, struct lyd_node
*dnode
,
1303 vty_out(vty
, " isis password %s %s\n",
1304 yang_dnode_get_string(dnode
, "./password-type"),
1305 yang_dnode_get_string(dnode
, "./password"));
1309 * XPath: /frr-interface:lib/interface/frr-isisd:isis/metric
1311 DEFPY(isis_metric
, isis_metric_cmd
,
1312 "isis metric [level-1|level-2]$level (0-16777215)$met",
1313 "IS-IS routing protocol\n"
1314 "Set default metric for circuit\n"
1315 "Specify metric for level-1 routing\n"
1316 "Specify metric for level-2 routing\n"
1317 "Default metric value\n")
1319 if (!level
|| strmatch(level
, "level-1"))
1320 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/metric/level-1",
1321 NB_OP_MODIFY
, met_str
);
1322 if (!level
|| strmatch(level
, "level-2"))
1323 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/metric/level-2",
1324 NB_OP_MODIFY
, met_str
);
1326 return nb_cli_apply_changes(vty
, NULL
);
1329 DEFPY(no_isis_metric
, no_isis_metric_cmd
,
1330 "no isis metric [level-1|level-2]$level [(0-16777215)]",
1332 "IS-IS routing protocol\n"
1333 "Set default metric for circuit\n"
1334 "Specify metric for level-1 routing\n"
1335 "Specify metric for level-2 routing\n"
1336 "Default metric value\n")
1338 if (!level
|| strmatch(level
, "level-1"))
1339 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/metric/level-1",
1340 NB_OP_MODIFY
, NULL
);
1341 if (!level
|| strmatch(level
, "level-2"))
1342 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/metric/level-2",
1343 NB_OP_MODIFY
, NULL
);
1345 return nb_cli_apply_changes(vty
, NULL
);
1348 void cli_show_ip_isis_metric(struct vty
*vty
, struct lyd_node
*dnode
,
1351 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1352 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1354 if (strmatch(l1
, l2
))
1355 vty_out(vty
, " isis metric %s\n", l1
);
1357 vty_out(vty
, " isis metric %s level-1\n", l1
);
1358 vty_out(vty
, " isis metric %s level-2\n", l2
);
1363 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/interval
1365 DEFPY(isis_hello_interval
, isis_hello_interval_cmd
,
1366 "isis hello-interval [level-1|level-2]$level (1-600)$intv",
1367 "IS-IS routing protocol\n"
1368 "Set Hello interval\n"
1369 "Specify hello-interval for level-1 IIHs\n"
1370 "Specify hello-interval for level-2 IIHs\n"
1371 "Holdtime 1 seconds, interval depends on multiplier\n")
1373 if (!level
|| strmatch(level
, "level-1"))
1374 nb_cli_enqueue_change(vty
,
1375 "./frr-isisd:isis/hello/interval/level-1",
1376 NB_OP_MODIFY
, intv_str
);
1377 if (!level
|| strmatch(level
, "level-2"))
1378 nb_cli_enqueue_change(vty
,
1379 "./frr-isisd:isis/hello/interval/level-2",
1380 NB_OP_MODIFY
, intv_str
);
1382 return nb_cli_apply_changes(vty
, NULL
);
1385 DEFPY(no_isis_hello_interval
, no_isis_hello_interval_cmd
,
1386 "no isis hello-interval [level-1|level-2]$level [(1-600)]",
1388 "IS-IS routing protocol\n"
1389 "Set Hello interval\n"
1390 "Specify hello-interval for level-1 IIHs\n"
1391 "Specify hello-interval for level-2 IIHs\n"
1392 "Holdtime 1 second, interval depends on multiplier\n")
1394 if (!level
|| strmatch(level
, "level-1"))
1395 nb_cli_enqueue_change(vty
,
1396 "./frr-isisd:isis/hello/interval/level-1",
1397 NB_OP_MODIFY
, NULL
);
1398 if (!level
|| strmatch(level
, "level-2"))
1399 nb_cli_enqueue_change(vty
,
1400 "./frr-isisd:isis/hello/interval/level-2",
1401 NB_OP_MODIFY
, NULL
);
1403 return nb_cli_apply_changes(vty
, NULL
);
1406 void cli_show_ip_isis_hello_interval(struct vty
*vty
, struct lyd_node
*dnode
,
1409 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1410 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1412 if (strmatch(l1
, l2
))
1413 vty_out(vty
, " isis hello-interval %s\n", l1
);
1415 vty_out(vty
, " isis hello-interval %s level-1\n", l1
);
1416 vty_out(vty
, " isis hello-interval %s level-2\n", l2
);
1421 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/multiplier
1423 DEFPY(isis_hello_multiplier
, isis_hello_multiplier_cmd
,
1424 "isis hello-multiplier [level-1|level-2]$level (2-100)$mult",
1425 "IS-IS routing protocol\n"
1426 "Set multiplier for Hello holding time\n"
1427 "Specify hello multiplier for level-1 IIHs\n"
1428 "Specify hello multiplier for level-2 IIHs\n"
1429 "Hello multiplier value\n")
1431 if (!level
|| strmatch(level
, "level-1"))
1432 nb_cli_enqueue_change(
1433 vty
, "./frr-isisd:isis/hello/multiplier/level-1",
1434 NB_OP_MODIFY
, mult_str
);
1435 if (!level
|| strmatch(level
, "level-2"))
1436 nb_cli_enqueue_change(
1437 vty
, "./frr-isisd:isis/hello/multiplier/level-2",
1438 NB_OP_MODIFY
, mult_str
);
1440 return nb_cli_apply_changes(vty
, NULL
);
1443 DEFPY(no_isis_hello_multiplier
, no_isis_hello_multiplier_cmd
,
1444 "no isis hello-multiplier [level-1|level-2]$level [(2-100)]",
1446 "IS-IS routing protocol\n"
1447 "Set multiplier for Hello holding time\n"
1448 "Specify hello multiplier for level-1 IIHs\n"
1449 "Specify hello multiplier for level-2 IIHs\n"
1450 "Hello multiplier value\n")
1452 if (!level
|| strmatch(level
, "level-1"))
1453 nb_cli_enqueue_change(
1454 vty
, "./frr-isisd:isis/hello/multiplier/level-1",
1455 NB_OP_MODIFY
, NULL
);
1456 if (!level
|| strmatch(level
, "level-2"))
1457 nb_cli_enqueue_change(
1458 vty
, "./frr-isisd:isis/hello/multiplier/level-2",
1459 NB_OP_MODIFY
, NULL
);
1461 return nb_cli_apply_changes(vty
, NULL
);
1464 void cli_show_ip_isis_hello_multi(struct vty
*vty
, struct lyd_node
*dnode
,
1467 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1468 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1470 if (strmatch(l1
, l2
))
1471 vty_out(vty
, " isis hello-multiplier %s\n", l1
);
1473 vty_out(vty
, " isis hello-multiplier %s level-1\n", l1
);
1474 vty_out(vty
, " isis hello-multiplier %s level-2\n", l2
);
1480 * /frr-interface:lib/interface/frr-isisd:isis/disable-three-way-handshake
1482 DEFPY(isis_threeway_adj
, isis_threeway_adj_cmd
, "[no] isis three-way-handshake",
1485 "Enable/Disable three-way handshake\n")
1487 nb_cli_enqueue_change(vty
,
1488 "./frr-isisd:isis/disable-three-way-handshake",
1489 NB_OP_MODIFY
, no
? "true" : "false");
1491 return nb_cli_apply_changes(vty
, NULL
);
1494 void cli_show_ip_isis_threeway_shake(struct vty
*vty
, struct lyd_node
*dnode
,
1497 if (yang_dnode_get_bool(dnode
, NULL
))
1498 vty_out(vty
, " no");
1499 vty_out(vty
, " isis three-way-handshake\n");
1503 * XPath: /frr-interface:lib/interface/frr-isisd:isis/hello/padding
1505 DEFPY(isis_hello_padding
, isis_hello_padding_cmd
, "[no] isis hello padding",
1507 "IS-IS routing protocol\n"
1508 "Add padding to IS-IS hello packets\n"
1509 "Pad hello packets\n")
1511 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/hello/padding",
1512 NB_OP_MODIFY
, no
? "false" : "true");
1514 return nb_cli_apply_changes(vty
, NULL
);
1517 void cli_show_ip_isis_hello_padding(struct vty
*vty
, struct lyd_node
*dnode
,
1520 if (!yang_dnode_get_bool(dnode
, NULL
))
1521 vty_out(vty
, " no");
1523 vty_out(vty
, " isis hello padding\n");
1527 * XPath: /frr-interface:lib/interface/frr-isisd:isis/csnp-interval
1529 DEFPY(csnp_interval
, csnp_interval_cmd
,
1530 "isis csnp-interval (1-600)$intv [level-1|level-2]$level",
1531 "IS-IS routing protocol\n"
1532 "Set CSNP interval in seconds\n"
1533 "CSNP interval value\n"
1534 "Specify interval for level-1 CSNPs\n"
1535 "Specify interval for level-2 CSNPs\n")
1537 if (!level
|| strmatch(level
, "level-1"))
1538 nb_cli_enqueue_change(vty
,
1539 "./frr-isisd:isis/csnp-interval/level-1",
1540 NB_OP_MODIFY
, intv_str
);
1541 if (!level
|| strmatch(level
, "level-2"))
1542 nb_cli_enqueue_change(vty
,
1543 "./frr-isisd:isis/csnp-interval/level-2",
1544 NB_OP_MODIFY
, intv_str
);
1546 return nb_cli_apply_changes(vty
, NULL
);
1549 DEFPY(no_csnp_interval
, no_csnp_interval_cmd
,
1550 "no isis csnp-interval [(1-600)] [level-1|level-2]$level",
1552 "IS-IS routing protocol\n"
1553 "Set CSNP interval in seconds\n"
1554 "CSNP interval value\n"
1555 "Specify interval for level-1 CSNPs\n"
1556 "Specify interval for level-2 CSNPs\n")
1558 if (!level
|| strmatch(level
, "level-1"))
1559 nb_cli_enqueue_change(vty
,
1560 "./frr-isisd:isis/csnp-interval/level-1",
1561 NB_OP_MODIFY
, NULL
);
1562 if (!level
|| strmatch(level
, "level-2"))
1563 nb_cli_enqueue_change(vty
,
1564 "./frr-isisd:isis/csnp-interval/level-2",
1565 NB_OP_MODIFY
, NULL
);
1567 return nb_cli_apply_changes(vty
, NULL
);
1570 void cli_show_ip_isis_csnp_interval(struct vty
*vty
, struct lyd_node
*dnode
,
1573 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1574 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1576 if (strmatch(l1
, l2
))
1577 vty_out(vty
, " isis csnp-interval %s\n", l1
);
1579 vty_out(vty
, " isis csnp-interval %s level-1\n", l1
);
1580 vty_out(vty
, " isis csnp-interval %s level-2\n", l2
);
1585 * XPath: /frr-interface:lib/interface/frr-isisd:isis/psnp-interval
1587 DEFPY(psnp_interval
, psnp_interval_cmd
,
1588 "isis psnp-interval (1-120)$intv [level-1|level-2]$level",
1589 "IS-IS routing protocol\n"
1590 "Set PSNP interval in seconds\n"
1591 "PSNP interval value\n"
1592 "Specify interval for level-1 PSNPs\n"
1593 "Specify interval for level-2 PSNPs\n")
1595 if (!level
|| strmatch(level
, "level-1"))
1596 nb_cli_enqueue_change(vty
,
1597 "./frr-isisd:isis/psnp-interval/level-1",
1598 NB_OP_MODIFY
, intv_str
);
1599 if (!level
|| strmatch(level
, "level-2"))
1600 nb_cli_enqueue_change(vty
,
1601 "./frr-isisd:isis/psnp-interval/level-2",
1602 NB_OP_MODIFY
, intv_str
);
1604 return nb_cli_apply_changes(vty
, NULL
);
1607 DEFPY(no_psnp_interval
, no_psnp_interval_cmd
,
1608 "no isis psnp-interval [(1-120)] [level-1|level-2]$level",
1610 "IS-IS routing protocol\n"
1611 "Set PSNP interval in seconds\n"
1612 "PSNP interval value\n"
1613 "Specify interval for level-1 PSNPs\n"
1614 "Specify interval for level-2 PSNPs\n")
1616 if (!level
|| strmatch(level
, "level-1"))
1617 nb_cli_enqueue_change(vty
,
1618 "./frr-isisd:isis/psnp-interval/level-1",
1619 NB_OP_MODIFY
, NULL
);
1620 if (!level
|| strmatch(level
, "level-2"))
1621 nb_cli_enqueue_change(vty
,
1622 "./frr-isisd:isis/psnp-interval/level-2",
1623 NB_OP_MODIFY
, NULL
);
1625 return nb_cli_apply_changes(vty
, NULL
);
1628 void cli_show_ip_isis_psnp_interval(struct vty
*vty
, struct lyd_node
*dnode
,
1631 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1632 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1634 if (strmatch(l1
, l2
))
1635 vty_out(vty
, " isis psnp-interval %s\n", l1
);
1637 vty_out(vty
, " isis psnp-interval %s level-1\n", l1
);
1638 vty_out(vty
, " isis psnp-interval %s level-2\n", l2
);
1643 * XPath: /frr-interface:lib/interface/frr-isisd:isis/multi-topology
1645 DEFPY(circuit_topology
, circuit_topology_cmd
,
1646 "[no] isis topology"
1656 "IS-IS routing protocol\n"
1657 "Configure interface IS-IS topologies\n"
1658 "IPv4 unicast topology\n"
1659 "IPv4 management topology\n"
1660 "IPv6 unicast topology\n"
1661 "IPv4 multicast topology\n"
1662 "IPv6 multicast topology\n"
1663 "IPv6 management topology\n"
1664 "IPv6 dst-src topology\n")
1666 nb_cli_enqueue_change(vty
, ".", NB_OP_MODIFY
, no
? "false" : "true");
1668 if (strmatch(topology
, "ipv4-mgmt"))
1669 return nb_cli_apply_changes(
1670 vty
, "./frr-isisd:isis/multi-topology/ipv4-management");
1671 else if (strmatch(topology
, "ipv6-mgmt"))
1672 return nb_cli_apply_changes(
1673 vty
, "./frr-isisd:isis/multi-topology/ipv6-management");
1675 return nb_cli_apply_changes(
1676 vty
, "./frr-isisd:isis/multi-topology/%s", topology
);
1679 void cli_show_ip_isis_mt_ipv4_unicast(struct vty
*vty
, struct lyd_node
*dnode
,
1682 if (!yang_dnode_get_bool(dnode
, NULL
))
1683 vty_out(vty
, " no");
1684 vty_out(vty
, " isis topology ipv4-unicast\n");
1687 void cli_show_ip_isis_mt_ipv4_multicast(struct vty
*vty
, struct lyd_node
*dnode
,
1690 if (!yang_dnode_get_bool(dnode
, NULL
))
1691 vty_out(vty
, " no");
1692 vty_out(vty
, " isis topology ipv4-multicast\n");
1695 void cli_show_ip_isis_mt_ipv4_mgmt(struct vty
*vty
, struct lyd_node
*dnode
,
1698 if (!yang_dnode_get_bool(dnode
, NULL
))
1699 vty_out(vty
, " no");
1700 vty_out(vty
, " isis topology ipv4-mgmt\n");
1703 void cli_show_ip_isis_mt_ipv6_unicast(struct vty
*vty
, struct lyd_node
*dnode
,
1706 if (!yang_dnode_get_bool(dnode
, NULL
))
1707 vty_out(vty
, " no");
1708 vty_out(vty
, " isis topology ipv6-unicast\n");
1711 void cli_show_ip_isis_mt_ipv6_multicast(struct vty
*vty
, struct lyd_node
*dnode
,
1714 if (!yang_dnode_get_bool(dnode
, NULL
))
1715 vty_out(vty
, " no");
1716 vty_out(vty
, " isis topology ipv6-multicast\n");
1719 void cli_show_ip_isis_mt_ipv6_mgmt(struct vty
*vty
, struct lyd_node
*dnode
,
1722 if (!yang_dnode_get_bool(dnode
, NULL
))
1723 vty_out(vty
, " no");
1724 vty_out(vty
, " isis topology ipv6-mgmt\n");
1727 void cli_show_ip_isis_mt_ipv6_dstsrc(struct vty
*vty
, struct lyd_node
*dnode
,
1730 if (!yang_dnode_get_bool(dnode
, NULL
))
1731 vty_out(vty
, " no");
1732 vty_out(vty
, " isis topology ipv6-dstsrc\n");
1736 * XPath: /frr-interface:lib/interface/frr-isisd:isis/circuit-type
1738 DEFPY(isis_circuit_type
, isis_circuit_type_cmd
,
1739 "isis circuit-type <level-1|level-1-2|level-2-only>$type",
1740 "IS-IS routing protocol\n"
1741 "Configure circuit type for interface\n"
1742 "Level-1 only adjacencies are formed\n"
1743 "Level-1-2 adjacencies are formed\n"
1744 "Level-2 only adjacencies are formed\n")
1746 nb_cli_enqueue_change(
1747 vty
, "./frr-isisd:isis/circuit-type", NB_OP_MODIFY
,
1748 strmatch(type
, "level-2-only") ? "level-2" : type
);
1750 return nb_cli_apply_changes(vty
, NULL
);
1753 DEFPY(no_isis_circuit_type
, no_isis_circuit_type_cmd
,
1754 "no isis circuit-type [level-1|level-1-2|level-2-only]",
1756 "IS-IS routing protocol\n"
1757 "Configure circuit type for interface\n"
1758 "Level-1 only adjacencies are formed\n"
1759 "Level-1-2 adjacencies are formed\n"
1760 "Level-2 only adjacencies are formed\n")
1762 const struct lyd_node
*dnode
;
1763 struct interface
*ifp
;
1764 struct isis_circuit
*circuit
;
1766 const char *circ_type
;
1769 * Default value depends on whether the circuit is part of an area,
1770 * and the is-type of the area if there is one. So we need to do this
1773 dnode
= yang_dnode_get(running_config
->dnode
, VTY_CURR_XPATH
);
1774 ifp
= yang_dnode_get_entry(dnode
, false);
1778 circuit
= circuit_scan_by_ifp(ifp
);
1782 if (circuit
->state
== C_STATE_UP
)
1783 is_type
= circuit
->area
->is_type
;
1789 circ_type
= "level-1";
1792 circ_type
= "level-2";
1794 case IS_LEVEL_1_AND_2
:
1795 circ_type
= "level-1-2";
1798 return CMD_ERR_NO_MATCH
;
1800 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/circuit-type",
1801 NB_OP_MODIFY
, circ_type
);
1803 return nb_cli_apply_changes(vty
, NULL
);
1806 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/circuit-type",
1807 NB_OP_MODIFY
, NULL
);
1809 return nb_cli_apply_changes(vty
, NULL
);
1812 void cli_show_ip_isis_circ_type(struct vty
*vty
, struct lyd_node
*dnode
,
1815 int level
= yang_dnode_get_enum(dnode
, NULL
);
1819 vty_out(vty
, " isis circuit-type level-1\n");
1822 vty_out(vty
, " isis circuit-type level-2-only\n");
1824 case IS_LEVEL_1_AND_2
:
1825 vty_out(vty
, " isis circuit-type level-1-2\n");
1831 * XPath: /frr-interface:lib/interface/frr-isisd:isis/network-type
1833 DEFPY(isis_network
, isis_network_cmd
, "[no] isis network point-to-point",
1835 "IS-IS routing protocol\n"
1836 "Set network type\n"
1837 "point-to-point network type\n")
1839 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/network-type",
1841 no
? "broadcast" : "point-to-point");
1843 return nb_cli_apply_changes(vty
, NULL
);
1846 void cli_show_ip_isis_network_type(struct vty
*vty
, struct lyd_node
*dnode
,
1849 if (yang_dnode_get_enum(dnode
, NULL
) != CIRCUIT_T_P2P
)
1850 vty_out(vty
, " no");
1852 vty_out(vty
, " isis network point-to-point\n");
1856 * XPath: /frr-interface:lib/interface/frr-isisd:isis/priority
1858 DEFPY(isis_priority
, isis_priority_cmd
,
1859 "isis priority (0-127)$prio [level-1|level-2]$level",
1860 "IS-IS routing protocol\n"
1861 "Set priority for Designated Router election\n"
1863 "Specify priority for level-1 routing\n"
1864 "Specify priority for level-2 routing\n")
1866 if (!level
|| strmatch(level
, "level-1"))
1867 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/priority/level-1",
1868 NB_OP_MODIFY
, prio_str
);
1869 if (!level
|| strmatch(level
, "level-2"))
1870 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/priority/level-2",
1871 NB_OP_MODIFY
, prio_str
);
1873 return nb_cli_apply_changes(vty
, NULL
);
1876 DEFPY(no_isis_priority
, no_isis_priority_cmd
,
1877 "no isis priority [(0-127)] [level-1|level-2]$level",
1879 "IS-IS routing protocol\n"
1880 "Set priority for Designated Router election\n"
1882 "Specify priority for level-1 routing\n"
1883 "Specify priority for level-2 routing\n")
1885 if (!level
|| strmatch(level
, "level-1"))
1886 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/priority/level-1",
1887 NB_OP_MODIFY
, NULL
);
1888 if (!level
|| strmatch(level
, "level-2"))
1889 nb_cli_enqueue_change(vty
, "./frr-isisd:isis/priority/level-2",
1890 NB_OP_MODIFY
, NULL
);
1892 return nb_cli_apply_changes(vty
, NULL
);
1895 void cli_show_ip_isis_priority(struct vty
*vty
, struct lyd_node
*dnode
,
1898 const char *l1
= yang_dnode_get_string(dnode
, "./level-1");
1899 const char *l2
= yang_dnode_get_string(dnode
, "./level-2");
1901 if (strmatch(l1
, l2
))
1902 vty_out(vty
, " isis priority %s\n", l1
);
1904 vty_out(vty
, " isis priority %s level-1\n", l1
);
1905 vty_out(vty
, " isis priority %s level-2\n", l2
);
1910 * XPath: /frr-isisd:isis/instance/log-adjacency-changes
1912 DEFPY(log_adj_changes
, log_adj_changes_cmd
, "[no] log-adjacency-changes",
1913 NO_STR
"Log changes in adjacency state\n")
1915 nb_cli_enqueue_change(vty
, "./log-adjacency-changes", NB_OP_MODIFY
,
1916 no
? "false" : "true");
1918 return nb_cli_apply_changes(vty
, NULL
);
1921 void cli_show_isis_log_adjacency(struct vty
*vty
, struct lyd_node
*dnode
,
1924 if (!yang_dnode_get_bool(dnode
, NULL
))
1925 vty_out(vty
, " no");
1926 vty_out(vty
, " log-adjacency-changes\n");
1929 void isis_cli_init(void)
1931 install_element(CONFIG_NODE
, &router_isis_cmd
);
1932 install_element(CONFIG_NODE
, &no_router_isis_cmd
);
1934 install_element(INTERFACE_NODE
, &ip_router_isis_cmd
);
1935 install_element(INTERFACE_NODE
, &ip6_router_isis_cmd
);
1936 install_element(INTERFACE_NODE
, &no_ip_router_isis_cmd
);
1938 install_element(ISIS_NODE
, &net_cmd
);
1940 install_element(ISIS_NODE
, &is_type_cmd
);
1941 install_element(ISIS_NODE
, &no_is_type_cmd
);
1943 install_element(ISIS_NODE
, &dynamic_hostname_cmd
);
1945 install_element(ISIS_NODE
, &set_overload_bit_cmd
);
1946 install_element(ISIS_NODE
, &set_attached_bit_cmd
);
1948 install_element(ISIS_NODE
, &metric_style_cmd
);
1949 install_element(ISIS_NODE
, &no_metric_style_cmd
);
1951 install_element(ISIS_NODE
, &area_passwd_cmd
);
1952 install_element(ISIS_NODE
, &domain_passwd_cmd
);
1953 install_element(ISIS_NODE
, &no_area_passwd_cmd
);
1955 install_element(ISIS_NODE
, &lsp_gen_interval_cmd
);
1956 install_element(ISIS_NODE
, &no_lsp_gen_interval_cmd
);
1957 install_element(ISIS_NODE
, &lsp_refresh_interval_cmd
);
1958 install_element(ISIS_NODE
, &no_lsp_refresh_interval_cmd
);
1959 install_element(ISIS_NODE
, &max_lsp_lifetime_cmd
);
1960 install_element(ISIS_NODE
, &no_max_lsp_lifetime_cmd
);
1961 install_element(ISIS_NODE
, &area_lsp_mtu_cmd
);
1962 install_element(ISIS_NODE
, &no_area_lsp_mtu_cmd
);
1964 install_element(ISIS_NODE
, &spf_interval_cmd
);
1965 install_element(ISIS_NODE
, &no_spf_interval_cmd
);
1966 install_element(ISIS_NODE
, &spf_delay_ietf_cmd
);
1967 install_element(ISIS_NODE
, &no_spf_delay_ietf_cmd
);
1969 install_element(ISIS_NODE
, &area_purge_originator_cmd
);
1971 install_element(ISIS_NODE
, &isis_mpls_te_on_cmd
);
1972 install_element(ISIS_NODE
, &no_isis_mpls_te_on_cmd
);
1973 install_element(ISIS_NODE
, &isis_mpls_te_router_addr_cmd
);
1974 install_element(ISIS_NODE
, &isis_mpls_te_inter_as_cmd
);
1976 install_element(ISIS_NODE
, &isis_default_originate_cmd
);
1977 install_element(ISIS_NODE
, &isis_redistribute_cmd
);
1979 install_element(ISIS_NODE
, &isis_topology_cmd
);
1981 install_element(INTERFACE_NODE
, &isis_passive_cmd
);
1983 install_element(INTERFACE_NODE
, &isis_passwd_cmd
);
1984 install_element(INTERFACE_NODE
, &no_isis_passwd_cmd
);
1986 install_element(INTERFACE_NODE
, &isis_metric_cmd
);
1987 install_element(INTERFACE_NODE
, &no_isis_metric_cmd
);
1989 install_element(INTERFACE_NODE
, &isis_hello_interval_cmd
);
1990 install_element(INTERFACE_NODE
, &no_isis_hello_interval_cmd
);
1992 install_element(INTERFACE_NODE
, &isis_hello_multiplier_cmd
);
1993 install_element(INTERFACE_NODE
, &no_isis_hello_multiplier_cmd
);
1995 install_element(INTERFACE_NODE
, &isis_threeway_adj_cmd
);
1997 install_element(INTERFACE_NODE
, &isis_hello_padding_cmd
);
1999 install_element(INTERFACE_NODE
, &csnp_interval_cmd
);
2000 install_element(INTERFACE_NODE
, &no_csnp_interval_cmd
);
2002 install_element(INTERFACE_NODE
, &psnp_interval_cmd
);
2003 install_element(INTERFACE_NODE
, &no_psnp_interval_cmd
);
2005 install_element(INTERFACE_NODE
, &circuit_topology_cmd
);
2007 install_element(INTERFACE_NODE
, &isis_circuit_type_cmd
);
2008 install_element(INTERFACE_NODE
, &no_isis_circuit_type_cmd
);
2010 install_element(INTERFACE_NODE
, &isis_network_cmd
);
2012 install_element(INTERFACE_NODE
, &isis_priority_cmd
);
2013 install_element(INTERFACE_NODE
, &no_isis_priority_cmd
);
2015 install_element(ISIS_NODE
, &log_adj_changes_cmd
);
2018 #endif /* ifndef FABRICD */