2 * IS-IS Rout(e)ing protocol - isis_vty_isisd.c
4 * This file contains the CLI that is specific to IS-IS
6 * Copyright (C) 2001,2002 Sampo Saaristo
7 * Tampere University of Technology
8 * Institute of Communications Engineering
9 * Copyright (C) 2016 David Lamparter, for NetDEF, Inc.
10 * Copyright (C) 2018 Christian Franke, for NetDEF, Inc.
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public Licenseas published by the Free
14 * Software Foundation; either version 2 of the License, or (at your option)
17 * This program is distributed in the hope that it will be useful,but WITHOUT
18 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
22 * You should have received a copy of the GNU General Public License along
23 * with this program; see the file COPYING; if not, write to the Free Software
24 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
31 #include "isis_circuit.h"
33 #include "isis_misc.h"
36 #include "isis_vty_common.h"
38 static int level_for_arg(const char *arg
)
40 if (!strcmp(arg
, "level-1"))
46 DEFUN (isis_circuit_type
,
47 isis_circuit_type_cmd
,
48 "isis circuit-type <level-1|level-1-2|level-2-only>",
49 "IS-IS routing protocol\n"
50 "Configure circuit type for interface\n"
51 "Level-1 only adjacencies are formed\n"
52 "Level-1-2 adjacencies are formed\n"
53 "Level-2 only adjacencies are formed\n")
57 struct isis_circuit
*circuit
= isis_circuit_lookup(vty
);
59 return CMD_ERR_NO_MATCH
;
61 is_type
= string2circuit_t(argv
[idx_level
]->arg
);
63 vty_out(vty
, "Unknown circuit-type \n");
64 return CMD_WARNING_CONFIG_FAILED
;
67 if (circuit
->state
== C_STATE_UP
68 && circuit
->area
->is_type
!= IS_LEVEL_1_AND_2
69 && circuit
->area
->is_type
!= is_type
) {
70 vty_out(vty
, "Invalid circuit level for area %s.\n",
71 circuit
->area
->area_tag
);
72 return CMD_WARNING_CONFIG_FAILED
;
74 isis_circuit_is_type_set(circuit
, is_type
);
79 DEFUN (no_isis_circuit_type
,
80 no_isis_circuit_type_cmd
,
81 "no isis circuit-type <level-1|level-1-2|level-2-only>",
83 "IS-IS routing protocol\n"
84 "Configure circuit type for interface\n"
85 "Level-1 only adjacencies are formed\n"
86 "Level-1-2 adjacencies are formed\n"
87 "Level-2 only adjacencies are formed\n")
90 struct isis_circuit
*circuit
= isis_circuit_lookup(vty
);
92 return CMD_ERR_NO_MATCH
;
95 * Set the circuits level to its default value
97 if (circuit
->state
== C_STATE_UP
)
98 is_type
= circuit
->area
->is_type
;
100 is_type
= IS_LEVEL_1_AND_2
;
101 isis_circuit_is_type_set(circuit
, is_type
);
108 "isis network point-to-point",
109 "IS-IS routing protocol\n"
111 "point-to-point network type\n")
113 struct isis_circuit
*circuit
= isis_circuit_lookup(vty
);
115 return CMD_ERR_NO_MATCH
;
117 if (isis_circuit_circ_type_set(circuit
, CIRCUIT_T_P2P
)) {
119 "isis network point-to-point is valid only on broadcast interfaces\n");
120 return CMD_WARNING_CONFIG_FAILED
;
126 DEFUN (no_isis_network
,
128 "no isis network point-to-point",
130 "IS-IS routing protocol\n"
131 "Set network type for circuit\n"
132 "point-to-point network type\n")
134 struct isis_circuit
*circuit
= isis_circuit_lookup(vty
);
136 return CMD_ERR_NO_MATCH
;
138 if (isis_circuit_circ_type_set(circuit
, CIRCUIT_T_BROADCAST
)) {
140 "isis network point-to-point is valid only on broadcast interfaces\n");
141 return CMD_WARNING_CONFIG_FAILED
;
147 DEFUN (isis_priority
,
149 "isis priority (0-127)",
150 "IS-IS routing protocol\n"
151 "Set priority for Designated Router election\n"
154 uint8_t prio
= atoi(argv
[2]->arg
);
155 struct isis_circuit
*circuit
= isis_circuit_lookup(vty
);
157 return CMD_ERR_NO_MATCH
;
159 circuit
->priority
[0] = prio
;
160 circuit
->priority
[1] = prio
;
165 DEFUN (no_isis_priority
,
166 no_isis_priority_cmd
,
167 "no isis priority [(0-127)]",
169 "IS-IS routing protocol\n"
170 "Set priority for Designated Router election\n"
173 struct isis_circuit
*circuit
= isis_circuit_lookup(vty
);
175 return CMD_ERR_NO_MATCH
;
177 circuit
->priority
[0] = DEFAULT_PRIORITY
;
178 circuit
->priority
[1] = DEFAULT_PRIORITY
;
183 DEFUN (isis_priority_level
,
184 isis_priority_level_cmd
,
185 "isis priority (0-127) <level-1|level-2>",
186 "IS-IS routing protocol\n"
187 "Set priority for Designated Router election\n"
189 "Specify priority for level-1 routing\n"
190 "Specify priority for level-2 routing\n")
192 uint8_t prio
= atoi(argv
[2]->arg
);
193 struct isis_circuit
*circuit
= isis_circuit_lookup(vty
);
195 return CMD_ERR_NO_MATCH
;
197 circuit
->priority
[level_for_arg(argv
[3]->text
)] = prio
;
202 DEFUN (no_isis_priority_level
,
203 no_isis_priority_level_cmd
,
204 "no isis priority [(0-127)] <level-1|level-2>",
206 "IS-IS routing protocol\n"
207 "Set priority for Designated Router election\n"
209 "Specify priority for level-1 routing\n"
210 "Specify priority for level-2 routing\n")
212 struct isis_circuit
*circuit
= isis_circuit_lookup(vty
);
213 int level
= level_for_arg(argv
[argc
- 1]->text
);
215 return CMD_ERR_NO_MATCH
;
217 circuit
->priority
[level
] = DEFAULT_PRIORITY
;
222 DEFUN (csnp_interval_level
,
223 csnp_interval_level_cmd
,
224 "isis csnp-interval (1-600) <level-1|level-2>",
225 "IS-IS routing protocol\n"
226 "Set CSNP interval in seconds\n"
227 "CSNP interval value\n"
228 "Specify interval for level-1 CSNPs\n"
229 "Specify interval for level-2 CSNPs\n")
231 uint16_t interval
= atoi(argv
[2]->arg
);
232 struct isis_circuit
*circuit
= isis_circuit_lookup(vty
);
234 return CMD_ERR_NO_MATCH
;
236 circuit
->csnp_interval
[level_for_arg(argv
[3]->text
)] = interval
;
241 DEFUN (no_csnp_interval_level
,
242 no_csnp_interval_level_cmd
,
243 "no isis csnp-interval [(1-600)] <level-1|level-2>",
245 "IS-IS routing protocol\n"
246 "Set CSNP interval in seconds\n"
247 "CSNP interval value\n"
248 "Specify interval for level-1 CSNPs\n"
249 "Specify interval for level-2 CSNPs\n")
251 struct isis_circuit
*circuit
= isis_circuit_lookup(vty
);
252 int level
= level_for_arg(argv
[argc
- 1]->text
);
254 return CMD_ERR_NO_MATCH
;
256 circuit
->csnp_interval
[level
] = DEFAULT_CSNP_INTERVAL
;
261 DEFUN (psnp_interval_level
,
262 psnp_interval_level_cmd
,
263 "isis psnp-interval (1-120) <level-1|level-2>",
264 "IS-IS routing protocol\n"
265 "Set PSNP interval in seconds\n"
266 "PSNP interval value\n"
267 "Specify interval for level-1 PSNPs\n"
268 "Specify interval for level-2 PSNPs\n")
270 uint16_t interval
= atoi(argv
[2]->arg
);
271 struct isis_circuit
*circuit
= isis_circuit_lookup(vty
);
273 return CMD_ERR_NO_MATCH
;
275 circuit
->psnp_interval
[level_for_arg(argv
[3]->text
)] = (uint16_t)interval
;
280 DEFUN (no_psnp_interval_level
,
281 no_psnp_interval_level_cmd
,
282 "no isis psnp-interval [(1-120)] <level-1|level-2>",
284 "IS-IS routing protocol\n"
285 "Set PSNP interval in seconds\n"
286 "PSNP interval value\n"
287 "Specify interval for level-1 PSNPs\n"
288 "Specify interval for level-2 PSNPs\n")
290 struct isis_circuit
*circuit
= isis_circuit_lookup(vty
);
291 int level
= level_for_arg(argv
[argc
- 1]->text
);
293 return CMD_ERR_NO_MATCH
;
295 circuit
->psnp_interval
[level
] = DEFAULT_PSNP_INTERVAL
;
300 void isis_vty_daemon_init(void)
302 install_element(INTERFACE_NODE
, &isis_circuit_type_cmd
);
303 install_element(INTERFACE_NODE
, &no_isis_circuit_type_cmd
);
305 install_element(INTERFACE_NODE
, &isis_network_cmd
);
306 install_element(INTERFACE_NODE
, &no_isis_network_cmd
);
308 install_element(INTERFACE_NODE
, &isis_priority_cmd
);
309 install_element(INTERFACE_NODE
, &no_isis_priority_cmd
);
310 install_element(INTERFACE_NODE
, &isis_priority_level_cmd
);
311 install_element(INTERFACE_NODE
, &no_isis_priority_level_cmd
);
313 install_element(INTERFACE_NODE
, &csnp_interval_level_cmd
);
314 install_element(INTERFACE_NODE
, &no_csnp_interval_level_cmd
);
316 install_element(INTERFACE_NODE
, &psnp_interval_level_cmd
);
317 install_element(INTERFACE_NODE
, &no_psnp_interval_level_cmd
);