1 /* Virtual terminal interface shell.
2 * Copyright (C) 2000 Kunihiro Ishiguro
4 * This file is part of GNU Zebra.
6 * GNU Zebra is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License as published by the
8 * Free Software Foundation; either version 2, or (at your option) any
11 * GNU Zebra is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with GNU Zebra; see the file COPYING. If not, write to the Free
18 * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
27 #include <sys/resource.h>
30 #include <readline/readline.h>
31 #include <readline/history.h>
35 #include "vtysh/vtysh.h"
37 #include "bgpd/bgp_vty.h"
43 /* VTY shell pager name. */
44 char *vtysh_pager_name = NULL;
46 /* VTY shell client structure. */
55 { .fd = -1, .name = "zebra", .flag = VTYSH_ZEBRA, .path = ZEBRA_VTYSH_PATH},
56 { .fd = -1, .name = "ripd", .flag = VTYSH_RIPD, .path = RIP_VTYSH_PATH},
57 { .fd = -1, .name = "ripngd", .flag = VTYSH_RIPNGD, .path = RIPNG_VTYSH_PATH},
58 { .fd = -1, .name = "ospfd", .flag = VTYSH_OSPFD, .path = OSPF_VTYSH_PATH},
59 { .fd = -1, .name = "ospf6d", .flag = VTYSH_OSPF6D, .path = OSPF6_VTYSH_PATH},
60 { .fd = -1, .name = "bgpd", .flag = VTYSH_BGPD, .path = BGP_VTYSH_PATH},
61 { .fd = -1, .name = "isisd", .flag = VTYSH_ISISD, .path = ISIS_VTYSH_PATH},
62 { .fd = -1, .name = "pimd", .flag = VTYSH_PIMD, .path = PIM_VTYSH_PATH},
63 { .fd = -1, .name = "nhrpd", .flag = VTYSH_NHRPD, .path = NHRP_VTYSH_PATH},
67 /* We need direct access to ripd to implement vtysh_exit_ripd_only. */
68 static struct vtysh_client *ripd_client = NULL;
71 /* Using integrated config from Quagga.conf. Default is no. */
72 int vtysh_writeconfig_integrated = 0;
74 extern char config_default[];
77 vclient_close (struct vtysh_client *vclient)
82 "Warning: closing connection to %s because of an I/O error!\n",
89 /* Return true if str begins with prefix, else return false */
91 begins_with(const char *str, const char *prefix)
95 size_t lenstr = strlen(str);
96 size_t lenprefix = strlen(prefix);
97 if (lenprefix > lenstr)
99 return strncmp(str, prefix, lenprefix) == 0;
102 /* Following filled with debug code to trace a problematic condition
103 * under load - it SHOULD handle it. */
104 #define ERR_WHERE_STRING "vtysh(): vtysh_client_execute(): "
106 vtysh_client_execute (struct vtysh_client *vclient, const char *line, FILE *fp)
122 ret = write (vclient->fd, line, strlen (line) + 1);
125 vclient_close (vclient);
129 /* Allow enough room for buffer to read more than a few pages from socket. */
130 bufsz = 5 * getpagesize() + 1;
131 buf = XMALLOC(MTYPE_TMP, bufsz);
132 memset(buf, 0, bufsz);
137 if (pbuf >= ((buf + bufsz) -1))
139 fprintf (stderr, ERR_WHERE_STRING \
140 "warning - pbuf beyond buffer end.\n");
141 XFREE(MTYPE_TMP, buf);
145 readln = (buf + bufsz) - pbuf - 1;
146 nbytes = read (vclient->fd, pbuf, readln);
154 fprintf(stderr, ERR_WHERE_STRING "(%u)", errno);
157 if (errno == EAGAIN || errno == EIO)
160 vclient_close (vclient);
161 XFREE(MTYPE_TMP, buf);
164 /* If we have already seen 3 nulls, then current byte is ret code */
165 if ((numnulls == 3) && (nbytes == 1))
173 /* If the config needs to be written in file or stdout */
180 /* At max look last four bytes */
189 /* Count the numnulls */
190 while (i < nbytes && numnulls <3)
192 if (pbuf[i++] == '\0')
197 /* We might have seen 3 consecutive nulls so store the ret code before updating pbuf*/
198 ret = pbuf[nbytes-1];
201 /* See if a line exists in buffer, if so parse and consume it, and
202 * reset read position. If 3 nulls has been encountered consume the buffer before
205 if (((eoln = strrchr(buf, '\n')) == NULL) && (numnulls<3))
208 if (eoln >= ((buf + bufsz) - 1))
210 fprintf (stderr, ERR_WHERE_STRING \
211 "warning - eoln beyond buffer end.\n");
214 /* If the config needs parsing, consume it */
216 vtysh_config_parse(buf);
219 left = (size_t)(buf + bufsz - eoln);
221 * This check is required since when a config line split between two consecutive reads,
222 * then buf will have first half of config line and current read will bring rest of the
223 * line. So in this case eoln will be 1 here, hence calculation of left will be wrong.
224 * In this case we don't need to do memmove, because we have already seen 3 nulls.
227 memmove(buf, eoln, left);
230 pbuf = buf + strlen(buf);
231 /* got 3 or more trailing NULs? */
232 if ((numnulls >=3) && (i < nbytes))
239 vtysh_config_parse (buf);
241 XFREE(MTYPE_TMP, buf);
247 vtysh_pager_init (void)
251 pager_defined = getenv ("VTYSH_PAGER");
254 vtysh_pager_name = strdup (pager_defined);
256 vtysh_pager_name = strdup ("more");
259 /* Command execution over the vty interface. */
261 vtysh_execute_func (const char *line, int pager)
266 struct cmd_element *cmd;
270 int saved_ret, saved_node;
272 /* Split readline string up into the vector. */
273 vline = cmd_make_strvec (line);
278 saved_ret = ret = cmd_execute_command (vline, vty, &cmd, 1);
279 saved_node = vty->node;
281 /* If command doesn't succeeded in current node, try to walk up in node tree.
282 * Changing vty->node is enough to try it just out without actual walkup in
284 while (ret != CMD_SUCCESS && ret != CMD_SUCCESS_DAEMON && ret != CMD_WARNING
285 && vty->node > CONFIG_NODE)
287 vty->node = node_parent(vty->node);
288 ret = cmd_execute_command (vline, vty, &cmd, 1);
292 vty->node = saved_node;
294 /* If command succeeded in any other node than current (tried > 0) we have
295 * to move into node in the vtysh where it succeeded. */
296 if (ret == CMD_SUCCESS || ret == CMD_SUCCESS_DAEMON || ret == CMD_WARNING)
298 if ((saved_node == BGP_VPNV4_NODE || saved_node == BGP_VPNV6_NODE
299 || saved_node == BGP_ENCAP_NODE || saved_node == BGP_ENCAPV6_NODE
300 || saved_node == BGP_IPV4_NODE
301 || saved_node == BGP_IPV6_NODE || saved_node == BGP_IPV4M_NODE
302 || saved_node == BGP_IPV6M_NODE)
305 vtysh_execute("exit-address-family");
307 else if ((saved_node == KEYCHAIN_KEY_NODE) && (tried == 1))
309 vtysh_execute("exit");
313 vtysh_execute ("end");
314 vtysh_execute ("configure terminal");
317 /* If command didn't succeed in any node, continue with return value from
324 cmd_free_strvec (vline);
330 if (vty->type == VTY_FILE)
331 fprintf (stdout,"Warning...\n");
333 case CMD_ERR_AMBIGUOUS:
334 fprintf (stdout,"%% Ambiguous command.\n");
336 case CMD_ERR_NO_MATCH:
337 fprintf (stdout,"%% Unknown command.\n");
339 case CMD_ERR_INCOMPLETE:
340 fprintf (stdout,"%% Command incomplete.\n");
342 case CMD_SUCCESS_DAEMON:
344 /* FIXME: Don't open pager for exit commands. popen() causes problems
345 * if exited from vtysh at all. This hack shouldn't cause any problem
346 * but is really ugly. */
347 if (pager && vtysh_pager_name && (strncmp(line, "exit", 4) != 0))
349 fp = popen (vtysh_pager_name, "w");
352 perror ("popen failed for pager");
361 if (! strcmp(cmd->string,"configure terminal"))
363 for (i = 0; i < array_size(vtysh_client); i++)
365 cmd_stat = vtysh_client_execute(&vtysh_client[i], line, fp);
366 if (cmd_stat == CMD_WARNING)
373 vline = cmd_make_strvec (line);
377 if (pager && vtysh_pager_name && fp && closepager)
379 if (pclose (fp) == -1)
381 perror ("pclose failed for pager");
388 ret = cmd_execute_command (vline, vty, &cmd, 1);
389 cmd_free_strvec (vline);
390 if (ret != CMD_SUCCESS_DAEMON)
396 (*cmd->func) (cmd, vty, 0, NULL);
401 cmd_stat = CMD_SUCCESS;
402 for (i = 0; i < array_size(vtysh_client); i++)
404 if (cmd->daemon & vtysh_client[i].flag)
406 cmd_stat = vtysh_client_execute(&vtysh_client[i], line, fp);
407 if (cmd_stat != CMD_SUCCESS)
411 if (cmd_stat != CMD_SUCCESS)
415 (*cmd->func) (cmd, vty, 0, NULL);
418 if (pager && vtysh_pager_name && fp && closepager)
420 if (pclose (fp) == -1)
422 perror ("pclose failed for pager");
430 vtysh_execute_no_pager (const char *line)
432 return vtysh_execute_func (line, 0);
436 vtysh_execute (const char *line)
438 return vtysh_execute_func (line, 1);
441 /* Configration make from file. */
443 vtysh_config_from_file (struct vty *vty, FILE *fp)
446 struct cmd_element *cmd;
448 while (fgets (vty->buf, vty->max, fp))
450 ret = command_config_read_one_line (vty, &cmd, 1);
455 if (vty->type == VTY_FILE)
456 fprintf (stdout,"Warning...\n");
458 case CMD_ERR_AMBIGUOUS:
459 fprintf (stdout,"%% Ambiguous command.\n");
461 case CMD_ERR_NO_MATCH:
462 fprintf (stdout,"%% Unknown command: %s", vty->buf);
464 case CMD_ERR_INCOMPLETE:
465 fprintf (stdout,"%% Command incomplete.\n");
467 case CMD_SUCCESS_DAEMON:
470 int cmd_stat = CMD_SUCCESS;
472 for (i = 0; i < array_size(vtysh_client); i++)
474 if (cmd->daemon & vtysh_client[i].flag)
476 cmd_stat = vtysh_client_execute (&vtysh_client[i],
478 if (cmd_stat != CMD_SUCCESS)
482 if (cmd_stat != CMD_SUCCESS)
486 (*cmd->func) (cmd, vty, 0, NULL);
493 /* We don't care about the point of the cursor when '?' is typed. */
495 vtysh_rl_describe (void)
502 struct cmd_token *token;
504 vline = cmd_make_strvec (rl_line_buffer);
506 /* In case of '> ?'. */
509 vline = vector_init (1);
510 vector_set (vline, NULL);
513 if (rl_end && isspace ((int) rl_line_buffer[rl_end - 1]))
514 vector_set (vline, NULL);
516 describe = cmd_describe_command (vline, vty, &ret);
518 fprintf (stdout,"\n");
520 /* Ambiguous and no match error. */
523 case CMD_ERR_AMBIGUOUS:
524 cmd_free_strvec (vline);
525 fprintf (stdout,"%% Ambiguous command.\n");
529 case CMD_ERR_NO_MATCH:
530 cmd_free_strvec (vline);
531 fprintf (stdout,"%% There is no matched command.\n");
537 /* Get width of command string. */
539 for (i = 0; i < vector_active (describe); i++)
540 if ((token = vector_slot (describe, i)) != NULL)
544 if (token->cmd[0] == '\0')
547 len = strlen (token->cmd);
548 if (token->cmd[0] == '.')
555 for (i = 0; i < vector_active (describe); i++)
556 if ((token = vector_slot (describe, i)) != NULL)
558 if (token->cmd[0] == '\0')
562 fprintf (stdout," %-s\n",
563 token->cmd[0] == '.' ? token->cmd + 1 : token->cmd);
565 fprintf (stdout," %-*s %s\n",
567 token->cmd[0] == '.' ? token->cmd + 1 : token->cmd,
571 cmd_free_strvec (vline);
572 vector_free (describe);
579 /* Result of cmd_complete_command() call will be stored here
580 * and used in new_completion() in order to put the space in
581 * correct places only. */
585 command_generator (const char *text, int state)
588 static char **matched = NULL;
589 static int index = 0;
596 if (vty->node == AUTH_NODE || vty->node == AUTH_ENABLE_NODE)
599 vline = cmd_make_strvec (rl_line_buffer);
603 if (rl_end && isspace ((int) rl_line_buffer[rl_end - 1]))
604 vector_set (vline, NULL);
606 matched = cmd_complete_command (vline, vty, &complete_status);
609 if (matched && matched[index])
610 return matched[index++];
616 new_completion (char *text, int start, int end)
620 matches = rl_completion_matches (text, command_generator);
625 if (complete_status != CMD_COMPLETE_FULL_MATCH)
626 /* only append a space on full match */
627 rl_completion_append_character = '\0';
634 /* This function is not actually being used. */
636 vtysh_completion (char *text, int start, int end)
640 char **matched = NULL;
642 if (vty->node == AUTH_NODE || vty->node == AUTH_ENABLE_NODE)
645 vline = cmd_make_strvec (rl_line_buffer);
649 /* In case of 'help \t'. */
650 if (rl_end && isspace ((int) rl_line_buffer[rl_end - 1]))
651 vector_set (vline, '\0');
653 matched = cmd_complete_command (vline, vty, &ret);
655 cmd_free_strvec (vline);
657 return (char **) matched;
661 /* Vty node structures. */
662 static struct cmd_node bgp_node =
665 "%s(config-router)# ",
668 static struct cmd_node rip_node =
671 "%s(config-router)# ",
674 static struct cmd_node isis_node =
677 "%s(config-router)# ",
680 static struct cmd_node interface_node =
686 static struct cmd_node rmap_node =
689 "%s(config-route-map)# "
692 static struct cmd_node zebra_node =
695 "%s(config-router)# "
698 static struct cmd_node bgp_vpnv4_node =
701 "%s(config-router-af)# "
704 static struct cmd_node bgp_vpnv6_node =
707 "%s(config-router-af)# "
710 static struct cmd_node bgp_encap_node =
713 "%s(config-router-af)# "
716 static struct cmd_node bgp_encapv6_node =
719 "%s(config-router-af)# "
722 static struct cmd_node bgp_ipv4_node =
725 "%s(config-router-af)# "
728 static struct cmd_node bgp_ipv4m_node =
731 "%s(config-router-af)# "
734 static struct cmd_node bgp_ipv6_node =
737 "%s(config-router-af)# "
740 static struct cmd_node bgp_ipv6m_node =
743 "%s(config-router-af)# "
746 static struct cmd_node ospf_node =
749 "%s(config-router)# "
752 static struct cmd_node ripng_node =
755 "%s(config-router)# "
758 static struct cmd_node ospf6_node =
764 static struct cmd_node babel_node =
770 static struct cmd_node keychain_node =
773 "%s(config-keychain)# "
776 static struct cmd_node keychain_key_node =
779 "%s(config-keychain-key)# "
782 struct cmd_node link_params_node =
785 "%s(config-link-params)# ",
788 /* Defined in lib/vty.c */
789 extern struct cmd_node vty_node;
791 /* When '^Z' is received from vty, move down to the enable mode. */
802 vty->node = ENABLE_NODE;
812 "End current mode and change to enable mode\n")
820 "router bgp " CMD_AS_RANGE,
825 vty->node = BGP_NODE;
829 ALIAS_SH (VTYSH_BGPD,
832 "router bgp " CMD_AS_RANGE " view WORD",
840 address_family_vpnv4,
841 address_family_vpnv4_cmd,
842 "address-family vpnv4",
843 "Enter Address Family command mode\n"
846 vty->node = BGP_VPNV4_NODE;
851 address_family_vpnv4_unicast,
852 address_family_vpnv4_unicast_cmd,
853 "address-family vpnv4 unicast",
854 "Enter Address Family command mode\n"
856 "Address Family Modifier\n")
858 vty->node = BGP_VPNV4_NODE;
863 address_family_vpnv6,
864 address_family_vpnv6_cmd,
865 "address-family vpnv6",
866 "Enter Address Family command mode\n"
869 vty->node = BGP_VPNV6_NODE;
874 address_family_vpnv6_unicast,
875 address_family_vpnv6_unicast_cmd,
876 "address-family vpnv6 unicast",
877 "Enter Address Family command mode\n"
879 "Address Family Modifier\n")
881 vty->node = BGP_VPNV6_NODE;
886 address_family_encap,
887 address_family_encap_cmd,
888 "address-family encap",
889 "Enter Address Family command mode\n"
892 vty->node = BGP_ENCAP_NODE;
897 address_family_encapv4,
898 address_family_encapv4_cmd,
899 "address-family encapv4",
900 "Enter Address Family command mode\n"
903 vty->node = BGP_ENCAP_NODE;
908 address_family_encapv6,
909 address_family_encapv6_cmd,
910 "address-family encapv6",
911 "Enter Address Family command mode\n"
914 vty->node = BGP_ENCAPV6_NODE;
919 address_family_ipv4_unicast,
920 address_family_ipv4_unicast_cmd,
921 "address-family ipv4 unicast",
922 "Enter Address Family command mode\n"
924 "Address Family Modifier\n")
926 vty->node = BGP_IPV4_NODE;
931 address_family_ipv4_multicast,
932 address_family_ipv4_multicast_cmd,
933 "address-family ipv4 multicast",
934 "Enter Address Family command mode\n"
936 "Address Family Modifier\n")
938 vty->node = BGP_IPV4M_NODE;
944 address_family_ipv6_cmd,
945 "address-family ipv6",
946 "Enter Address Family command mode\n"
949 vty->node = BGP_IPV6_NODE;
954 address_family_ipv6_unicast,
955 address_family_ipv6_unicast_cmd,
956 "address-family ipv6 unicast",
957 "Enter Address Family command mode\n"
959 "Address Family Modifier\n")
961 vty->node = BGP_IPV6_NODE;
966 address_family_ipv6_multicast,
967 address_family_ipv6_multicast_cmd,
968 "address-family ipv6 multicast",
969 "Enter Address Family command mode\n"
971 "Address Family Modifier\n")
973 vty->node = BGP_IPV6M_NODE;
981 "Authentication key management\n"
982 "Key-chain management\n"
985 vty->node = KEYCHAIN_NODE;
992 "key <0-2147483647>",
994 "Key identifier number\n")
996 vty->node = KEYCHAIN_KEY_NODE;
1000 DEFUNSH (VTYSH_RIPD,
1007 vty->node = RIP_NODE;
1011 DEFUNSH (VTYSH_RIPNGD,
1018 vty->node = RIPNG_NODE;
1022 DEFUNSH (VTYSH_OSPFD,
1026 "Enable a routing process\n"
1027 "Start OSPF configuration\n")
1029 vty->node = OSPF_NODE;
1033 DEFUNSH (VTYSH_OSPF6D,
1040 vty->node = OSPF6_NODE;
1044 DEFUNSH (VTYSH_ISISD,
1050 "ISO Routing area tag")
1052 vty->node = ISIS_NODE;
1056 DEFUNSH (VTYSH_RMAP,
1059 "route-map WORD (deny|permit) <1-65535>",
1060 "Create route-map or enter route-map command mode\n"
1062 "Route map denies set operations\n"
1063 "Route map permits set operations\n"
1064 "Sequence to insert to/delete from existing route-map entry\n")
1066 vty->node = RMAP_NODE;
1074 "Configure a terminal line\n"
1075 "Virtual terminal\n")
1077 vty->node = VTY_NODE;
1085 "Turn on privileged mode command\n")
1087 vty->node = ENABLE_NODE;
1095 "Turn off privileged mode command\n")
1097 if (vty->node == ENABLE_NODE)
1098 vty->node = VIEW_NODE;
1103 vtysh_config_terminal,
1104 vtysh_config_terminal_cmd,
1105 "configure terminal",
1106 "Configuration from vty interface\n"
1107 "Configuration terminal\n")
1109 vty->node = CONFIG_NODE;
1114 vtysh_exit (struct vty *vty)
1123 vty->node = ENABLE_NODE;
1125 case INTERFACE_NODE:
1138 vtysh_execute("end");
1139 vtysh_execute("configure terminal");
1140 vty->node = CONFIG_NODE;
1142 case BGP_VPNV4_NODE:
1143 case BGP_VPNV6_NODE:
1144 case BGP_ENCAP_NODE:
1145 case BGP_ENCAPV6_NODE:
1147 case BGP_IPV4M_NODE:
1149 case BGP_IPV6M_NODE:
1150 vty->node = BGP_NODE;
1152 case KEYCHAIN_KEY_NODE:
1153 vty->node = KEYCHAIN_NODE;
1155 case LINK_PARAMS_NODE:
1156 vty->node = INTERFACE_NODE;
1168 "Exit current mode and down to previous mode\n")
1170 return vtysh_exit (vty);
1173 ALIAS (vtysh_exit_all,
1176 "Exit current mode and down to previous mode\n")
1178 DEFUNSH (VTYSH_BGPD,
1179 exit_address_family,
1180 exit_address_family_cmd,
1181 "exit-address-family",
1182 "Exit from Address Family configuration mode\n")
1184 if (vty->node == BGP_IPV4_NODE
1185 || vty->node == BGP_IPV4M_NODE
1186 || vty->node == BGP_VPNV4_NODE
1187 || vty->node == BGP_VPNV6_NODE
1188 || vty->node == BGP_ENCAP_NODE
1189 || vty->node == BGP_ENCAPV6_NODE
1190 || vty->node == BGP_IPV6_NODE
1191 || vty->node == BGP_IPV6M_NODE)
1192 vty->node = BGP_NODE;
1196 DEFUNSH (VTYSH_ZEBRA,
1198 vtysh_exit_zebra_cmd,
1200 "Exit current mode and down to previous mode\n")
1202 return vtysh_exit (vty);
1205 ALIAS (vtysh_exit_zebra,
1206 vtysh_quit_zebra_cmd,
1208 "Exit current mode and down to previous mode\n")
1210 DEFUNSH (VTYSH_RIPD,
1212 vtysh_exit_ripd_cmd,
1214 "Exit current mode and down to previous mode\n")
1216 return vtysh_exit (vty);
1219 ALIAS (vtysh_exit_ripd,
1220 vtysh_quit_ripd_cmd,
1222 "Exit current mode and down to previous mode\n")
1224 DEFUNSH (VTYSH_RIPNGD,
1226 vtysh_exit_ripngd_cmd,
1228 "Exit current mode and down to previous mode\n")
1230 return vtysh_exit (vty);
1233 ALIAS (vtysh_exit_ripngd,
1234 vtysh_quit_ripngd_cmd,
1236 "Exit current mode and down to previous mode\n")
1238 DEFUNSH (VTYSH_RMAP,
1240 vtysh_exit_rmap_cmd,
1242 "Exit current mode and down to previous mode\n")
1244 return vtysh_exit (vty);
1247 ALIAS (vtysh_exit_rmap,
1248 vtysh_quit_rmap_cmd,
1250 "Exit current mode and down to previous mode\n")
1252 DEFUNSH (VTYSH_BGPD,
1254 vtysh_exit_bgpd_cmd,
1256 "Exit current mode and down to previous mode\n")
1258 return vtysh_exit (vty);
1261 ALIAS (vtysh_exit_bgpd,
1262 vtysh_quit_bgpd_cmd,
1264 "Exit current mode and down to previous mode\n")
1266 DEFUNSH (VTYSH_OSPFD,
1268 vtysh_exit_ospfd_cmd,
1270 "Exit current mode and down to previous mode\n")
1272 return vtysh_exit (vty);
1275 ALIAS (vtysh_exit_ospfd,
1276 vtysh_quit_ospfd_cmd,
1278 "Exit current mode and down to previous mode\n")
1280 DEFUNSH (VTYSH_OSPF6D,
1282 vtysh_exit_ospf6d_cmd,
1284 "Exit current mode and down to previous mode\n")
1286 return vtysh_exit (vty);
1289 ALIAS (vtysh_exit_ospf6d,
1290 vtysh_quit_ospf6d_cmd,
1292 "Exit current mode and down to previous mode\n")
1294 DEFUNSH (VTYSH_ISISD,
1296 vtysh_exit_isisd_cmd,
1298 "Exit current mode and down to previous mode\n")
1300 return vtysh_exit (vty);
1303 ALIAS (vtysh_exit_isisd,
1304 vtysh_quit_isisd_cmd,
1306 "Exit current mode and down to previous mode\n")
1309 vtysh_exit_line_vty,
1310 vtysh_exit_line_vty_cmd,
1312 "Exit current mode and down to previous mode\n")
1314 return vtysh_exit (vty);
1317 ALIAS (vtysh_exit_line_vty,
1318 vtysh_quit_line_vty_cmd,
1320 "Exit current mode and down to previous mode\n")
1322 DEFUNSH (VTYSH_INTERFACE,
1324 vtysh_interface_cmd,
1326 "Select an interface to configure\n"
1327 "Interface's name\n")
1329 vty->node = INTERFACE_NODE;
1333 ALIAS_SH (VTYSH_ZEBRA,
1335 vtysh_interface_vrf_cmd,
1336 "interface IFNAME " VRF_CMD_STR,
1337 "Select an interface to configure\n"
1338 "Interface's name\n"
1341 DEFSH (VTYSH_INTERFACE,
1342 vtysh_no_interface_cmd,
1343 "no interface IFNAME",
1345 "Delete a pseudo interface's configuration\n"
1346 "Interface's name\n")
1349 vtysh_no_interface_vrf_cmd,
1350 "no interface IFNAME " VRF_CMD_STR,
1352 "Delete a pseudo interface's configuration\n"
1353 "Interface's name\n"
1356 /* TODO Implement interface description commands in ripngd, ospf6d
1358 DEFSH (VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_OSPFD,
1360 "description .LINE",
1361 "Interface specific description\n"
1362 "Characters describing this interface\n")
1364 DEFSH (VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_OSPFD,
1365 no_interface_desc_cmd,
1368 "Interface specific description\n")
1370 DEFSH (VTYSH_RIPD|VTYSH_RIPNGD,
1371 distribute_list_all_cmd,
1372 "distribute-list WORD (in|out)",
1373 "Filter networks in routing updates\n"
1374 "Access-list name\n"
1375 "Filter incoming routing updates\n"
1376 "Filter outgoing routing updates\n")
1378 DEFSH (VTYSH_RIPD|VTYSH_RIPNGD,
1379 no_distribute_list_all_cmd,
1380 "no distribute-list WORD (in|out)",
1382 "Filter networks in routing updates\n"
1383 "Access-list name\n"
1384 "Filter incoming routing updates\n"
1385 "Filter outgoing routing updates\n")
1387 DEFSH (VTYSH_RIPD|VTYSH_RIPNGD,
1388 distribute_list_cmd,
1389 "distribute-list WORD (in|out) WORD",
1390 "Filter networks in routing updates\n"
1391 "Access-list name\n"
1392 "Filter incoming routing updates\n"
1393 "Filter outgoing routing updates\n"
1396 DEFSH (VTYSH_RIPD|VTYSH_RIPNGD,
1397 no_distribute_list_cmd,
1398 "no distribute-list WORD (in|out) WORD",
1400 "Filter networks in routing updates\n"
1401 "Access-list name\n"
1402 "Filter incoming routing updates\n"
1403 "Filter outgoing routing updates\n"
1406 DEFSH (VTYSH_RIPD|VTYSH_RIPNGD,
1407 distribute_list_prefix_all_cmd,
1408 "distribute-list prefix WORD (in|out)",
1409 "Filter networks in routing updates\n"
1410 "Filter prefixes in routing updates\n"
1411 "Name of an IP prefix-list\n"
1412 "Filter incoming routing updates\n"
1413 "Filter outgoing routing updates\n")
1415 DEFSH (VTYSH_RIPD|VTYSH_RIPNGD,
1416 no_distribute_list_prefix_all_cmd,
1417 "no distribute-list prefix WORD (in|out)",
1419 "Filter networks in routing updates\n"
1420 "Filter prefixes in routing updates\n"
1421 "Name of an IP prefix-list\n"
1422 "Filter incoming routing updates\n"
1423 "Filter outgoing routing updates\n")
1425 DEFSH (VTYSH_RIPD|VTYSH_RIPNGD,
1426 distribute_list_prefix_cmd,
1427 "distribute-list prefix WORD (in|out) WORD",
1428 "Filter networks in routing updates\n"
1429 "Filter prefixes in routing updates\n"
1430 "Name of an IP prefix-list\n"
1431 "Filter incoming routing updates\n"
1432 "Filter outgoing routing updates\n"
1435 DEFSH (VTYSH_RIPD|VTYSH_RIPNGD,
1436 no_distribute_list_prefix_cmd,
1437 "no distribute-list prefix WORD (in|out) WORD",
1439 "Filter networks in routing updates\n"
1440 "Filter prefixes in routing updates\n"
1441 "Name of an IP prefix-list\n"
1442 "Filter incoming routing updates\n"
1443 "Filter outgoing routing updates\n"
1446 DEFSH (VTYSH_RIPNGD,
1447 ipv6_distribute_list_all_cmd,
1448 "ipv6 distribute-list WORD (in|out)",
1449 "Filter networks in routing updates\n"
1450 "Access-list name\n"
1451 "Filter incoming routing updates\n"
1452 "Filter outgoing routing updates\n")
1454 DEFSH (VTYSH_RIPNGD,
1455 no_ipv6_distribute_list_all_cmd,
1456 "no ipv6 distribute-list WORD (in|out)",
1458 "Filter networks in routing updates\n"
1459 "Access-list name\n"
1460 "Filter incoming routing updates\n"
1461 "Filter outgoing routing updates\n")
1463 DEFSH (VTYSH_RIPNGD,
1464 ipv6_distribute_list_cmd,
1465 "ipv6 distribute-list WORD (in|out) WORD",
1466 "Filter networks in routing updates\n"
1467 "Access-list name\n"
1468 "Filter incoming routing updates\n"
1469 "Filter outgoing routing updates\n"
1472 DEFSH (VTYSH_RIPNGD,
1473 no_ipv6_distribute_list_cmd,
1474 "no ipv6 distribute-list WORD (in|out) WORD",
1476 "Filter networks in routing updates\n"
1477 "Access-list name\n"
1478 "Filter incoming routing updates\n"
1479 "Filter outgoing routing updates\n"
1482 DEFSH (VTYSH_RIPNGD,
1483 ipv6_distribute_list_prefix_all_cmd,
1484 "ipv6 distribute-list prefix WORD (in|out)",
1485 "Filter networks in routing updates\n"
1486 "Filter prefixes in routing updates\n"
1487 "Name of an IP prefix-list\n"
1488 "Filter incoming routing updates\n"
1489 "Filter outgoing routing updates\n")
1491 DEFSH (VTYSH_RIPNGD,
1492 no_ipv6_distribute_list_prefix_all_cmd,
1493 "no ipv6 distribute-list prefix WORD (in|out)",
1495 "Filter networks in routing updates\n"
1496 "Filter prefixes in routing updates\n"
1497 "Name of an IP prefix-list\n"
1498 "Filter incoming routing updates\n"
1499 "Filter outgoing routing updates\n")
1501 DEFSH (VTYSH_RIPNGD,
1502 ipv6_distribute_list_prefix_cmd,
1503 "ipv6 distribute-list prefix WORD (in|out) WORD",
1504 "Filter networks in routing updates\n"
1505 "Filter prefixes in routing updates\n"
1506 "Name of an IP prefix-list\n"
1507 "Filter incoming routing updates\n"
1508 "Filter outgoing routing updates\n"
1511 DEFSH (VTYSH_RIPNGD,
1512 no_ipv6_distribute_list_prefix_cmd,
1513 "no ipv6 distribute-list prefix WORD (in|out) WORD",
1515 "Filter networks in routing updates\n"
1516 "Filter prefixes in routing updates\n"
1517 "Name of an IP prefix-list\n"
1518 "Filter incoming routing updates\n"
1519 "Filter outgoing routing updates\n"
1522 DEFUNSH (VTYSH_INTERFACE,
1523 vtysh_exit_interface,
1524 vtysh_exit_interface_cmd,
1526 "Exit current mode and down to previous mode\n")
1528 return vtysh_exit (vty);
1531 ALIAS (vtysh_exit_interface,
1532 vtysh_quit_interface_cmd,
1534 "Exit current mode and down to previous mode\n")
1536 DEFUN (vtysh_show_thread,
1537 vtysh_show_thread_cmd,
1538 "show thread cpu [FILTER]",
1540 "Thread information\n"
1541 "Thread CPU usage\n"
1542 "Display filter (rwtexb)\n")
1545 int ret = CMD_SUCCESS;
1548 sprintf(line, "show thread cpu %s\n", (argc == 1) ? argv[0] : "");
1549 for (i = 0; i < array_size(vtysh_client); i++)
1550 if ( vtysh_client[i].fd >= 0 )
1552 fprintf (stdout, "Thread statistics for %s:\n",
1553 vtysh_client[i].name);
1554 ret = vtysh_client_execute (&vtysh_client[i], line, stdout);
1555 fprintf (stdout,"\n");
1560 DEFUN (vtysh_show_work_queues,
1561 vtysh_show_work_queues_cmd,
1564 "Work Queue information\n")
1567 int ret = CMD_SUCCESS;
1568 char line[] = "show work-queues\n";
1570 for (i = 0; i < array_size(vtysh_client); i++)
1571 if ( vtysh_client[i].fd >= 0 )
1573 fprintf (stdout, "Work queue statistics for %s:\n",
1574 vtysh_client[i].name);
1575 ret = vtysh_client_execute (&vtysh_client[i], line, stdout);
1576 fprintf (stdout,"\n");
1582 DEFUN (vtysh_show_work_queues_daemon,
1583 vtysh_show_work_queues_daemon_cmd,
1584 "show work-queues (zebra|ripd|ripngd|ospfd|ospf6d|bgpd|isisd)",
1586 "Work Queue information\n"
1587 "For the zebra daemon\n"
1588 "For the rip daemon\n"
1589 "For the ripng daemon\n"
1590 "For the ospf daemon\n"
1591 "For the ospfv6 daemon\n"
1592 "For the bgp daemon\n"
1593 "For the isis daemon\n")
1596 int ret = CMD_SUCCESS;
1598 for (i = 0; i < array_size(vtysh_client); i++)
1600 if (begins_with(vtysh_client[i].name, argv[0]))
1604 ret = vtysh_client_execute(&vtysh_client[i], "show work-queues\n", stdout);
1609 DEFUNSH (VTYSH_ZEBRA,
1611 vtysh_link_params_cmd,
1616 vty->node = LINK_PARAMS_NODE;
1620 DEFUNSH (VTYSH_ZEBRA,
1622 exit_link_params_cmd,
1624 "Exit from Link Params configuration node\n")
1626 if (vty->node == LINK_PARAMS_NODE)
1627 vty->node = INTERFACE_NODE;
1632 DEFUN (vtysh_show_memory,
1633 vtysh_show_memory_cmd,
1636 "Memory statistics\n")
1639 int ret = CMD_SUCCESS;
1640 char line[] = "show memory\n";
1642 for (i = 0; i < array_size(vtysh_client); i++)
1643 if ( vtysh_client[i].fd >= 0 )
1645 fprintf (stdout, "Memory statistics for %s:\n",
1646 vtysh_client[i].name);
1647 ret = vtysh_client_execute (&vtysh_client[i], line, stdout);
1648 fprintf (stdout,"\n");
1654 /* Logging commands. */
1655 DEFUN (vtysh_show_logging,
1656 vtysh_show_logging_cmd,
1659 "Show current logging configuration\n")
1662 int ret = CMD_SUCCESS;
1663 char line[] = "show logging\n";
1665 for (i = 0; i < array_size(vtysh_client); i++)
1666 if ( vtysh_client[i].fd >= 0 )
1668 fprintf (stdout,"Logging configuration for %s:\n",
1669 vtysh_client[i].name);
1670 ret = vtysh_client_execute (&vtysh_client[i], line, stdout);
1671 fprintf (stdout,"\n");
1679 vtysh_log_stdout_cmd,
1682 "Set stdout logging level\n")
1688 vtysh_log_stdout_level,
1689 vtysh_log_stdout_level_cmd,
1690 "log stdout "LOG_LEVELS,
1692 "Set stdout logging level\n"
1699 no_vtysh_log_stdout,
1700 no_vtysh_log_stdout_cmd,
1701 "no log stdout [LEVEL]",
1704 "Cancel logging to stdout\n"
1713 "log file FILENAME",
1716 "Logging filename\n")
1722 vtysh_log_file_level,
1723 vtysh_log_file_level_cmd,
1724 "log file FILENAME "LOG_LEVELS,
1727 "Logging filename\n"
1735 no_vtysh_log_file_cmd,
1736 "no log file [FILENAME]",
1739 "Cancel logging to file\n"
1740 "Logging file name\n")
1745 ALIAS_SH (VTYSH_ALL,
1747 no_vtysh_log_file_level_cmd,
1748 "no log file FILENAME LEVEL",
1751 "Cancel logging to file\n"
1752 "Logging file name\n"
1757 vtysh_log_monitor_cmd,
1760 "Set terminal line (monitor) logging level\n")
1766 vtysh_log_monitor_level,
1767 vtysh_log_monitor_level_cmd,
1768 "log monitor "LOG_LEVELS,
1770 "Set terminal line (monitor) logging level\n"
1777 no_vtysh_log_monitor,
1778 no_vtysh_log_monitor_cmd,
1779 "no log monitor [LEVEL]",
1782 "Disable terminal line (monitor) logging\n"
1790 vtysh_log_syslog_cmd,
1793 "Set syslog logging level\n")
1799 vtysh_log_syslog_level,
1800 vtysh_log_syslog_level_cmd,
1801 "log syslog "LOG_LEVELS,
1803 "Set syslog logging level\n"
1810 no_vtysh_log_syslog,
1811 no_vtysh_log_syslog_cmd,
1812 "no log syslog [LEVEL]",
1815 "Cancel logging to syslog\n"
1823 vtysh_log_facility_cmd,
1824 "log facility "LOG_FACILITIES,
1826 "Facility parameter for syslog messages\n"
1834 no_vtysh_log_facility,
1835 no_vtysh_log_facility_cmd,
1836 "no log facility [FACILITY]",
1839 "Reset syslog facility to default (daemon)\n"
1840 "Syslog facility\n")
1846 DEFUNSH_DEPRECATED (VTYSH_ALL,
1849 "log trap "LOG_LEVELS,
1851 "(Deprecated) Set logging level and default for all destinations\n"
1858 DEFUNSH_DEPRECATED (VTYSH_ALL,
1860 no_vtysh_log_trap_cmd,
1861 "no log trap [LEVEL]",
1864 "Permit all logging information\n"
1871 vtysh_log_record_priority,
1872 vtysh_log_record_priority_cmd,
1873 "log record-priority",
1875 "Log the priority of the message within the message\n")
1881 no_vtysh_log_record_priority,
1882 no_vtysh_log_record_priority_cmd,
1883 "no log record-priority",
1886 "Do not log the priority of the message within the message\n")
1892 vtysh_log_timestamp_precision,
1893 vtysh_log_timestamp_precision_cmd,
1894 "log timestamp precision <0-6>",
1896 "Timestamp configuration\n"
1897 "Set the timestamp precision\n"
1898 "Number of subsecond digits\n")
1904 no_vtysh_log_timestamp_precision,
1905 no_vtysh_log_timestamp_precision_cmd,
1906 "no log timestamp precision",
1909 "Timestamp configuration\n"
1910 "Reset the timestamp precision to the default value of 0\n")
1916 vtysh_service_password_encrypt,
1917 vtysh_service_password_encrypt_cmd,
1918 "service password-encryption",
1919 "Set up miscellaneous service\n"
1920 "Enable encrypted passwords\n")
1926 no_vtysh_service_password_encrypt,
1927 no_vtysh_service_password_encrypt_cmd,
1928 "no service password-encryption",
1930 "Set up miscellaneous service\n"
1931 "Enable encrypted passwords\n")
1937 vtysh_config_password,
1939 "password (8|) WORD",
1940 "Assign the terminal connection password\n"
1941 "Specifies a HIDDEN password will follow\n"
1943 "The HIDDEN line password string\n")
1949 vtysh_password_text,
1950 vtysh_password_text_cmd,
1952 "Assign the terminal connection password\n"
1953 "The UNENCRYPTED (cleartext) line password\n")
1959 vtysh_config_enable_password,
1960 vtysh_enable_password_cmd,
1961 "enable password (8|) WORD",
1962 "Modify enable password parameters\n"
1963 "Assign the privileged level password\n"
1964 "Specifies a HIDDEN password will follow\n"
1966 "The HIDDEN 'enable' password string\n")
1972 vtysh_enable_password_text,
1973 vtysh_enable_password_text_cmd,
1974 "enable password LINE",
1975 "Modify enable password parameters\n"
1976 "Assign the privileged level password\n"
1977 "The UNENCRYPTED (cleartext) 'enable' password\n")
1983 no_vtysh_config_enable_password,
1984 no_vtysh_enable_password_cmd,
1985 "no enable password",
1987 "Modify enable password parameters\n"
1988 "Assign the privileged level password\n")
1993 DEFUN (vtysh_write_terminal,
1994 vtysh_write_terminal_cmd,
1996 "Write running configuration to memory, network, or terminal\n"
1997 "Write to terminal\n")
2000 char line[] = "write terminal\n";
2003 if (vtysh_pager_name)
2005 fp = popen (vtysh_pager_name, "w");
2015 vty_out (vty, "Building configuration...%s", VTY_NEWLINE);
2016 vty_out (vty, "%sCurrent configuration:%s", VTY_NEWLINE,
2018 vty_out (vty, "!%s", VTY_NEWLINE);
2020 for (i = 0; i < array_size(vtysh_client); i++)
2021 vtysh_client_execute (&vtysh_client[i], line, NULL);
2023 /* Integrate vtysh specific configuration. */
2024 vtysh_config_write ();
2026 vtysh_config_dump (fp);
2028 if (vtysh_pager_name && fp)
2031 if (pclose (fp) == -1)
2039 vty_out (vty, "end%s", VTY_NEWLINE);
2044 DEFUN (vtysh_write_terminal_daemon,
2045 vtysh_write_terminal_daemon_cmd,
2046 "write terminal (zebra|ripd|ripngd|ospfd|ospf6d|bgpd|isisd|babeld)",
2047 "Write running configuration to memory, network, or terminal\n"
2048 "Write to terminal\n"
2049 "For the zebra daemon\n"
2050 "For the rip daemon\n"
2051 "For the ripng daemon\n"
2052 "For the ospf daemon\n"
2053 "For the ospfv6 daemon\n"
2054 "For the bgp daemon\n"
2055 "For the isis daemon\n"
2056 "For the babel daemon\n")
2059 int ret = CMD_SUCCESS;
2061 for (i = 0; i < array_size(vtysh_client); i++)
2063 if (strcmp(vtysh_client[i].name, argv[0]) == 0)
2067 if (i == array_size(vtysh_client))
2068 return CMD_ERR_NO_MATCH;
2070 ret = vtysh_client_execute(&vtysh_client[i], "show running-config\n", stdout);
2075 DEFUN (vtysh_integrated_config,
2076 vtysh_integrated_config_cmd,
2077 "service integrated-vtysh-config",
2078 "Set up miscellaneous service\n"
2079 "Write configuration into integrated file\n")
2081 vtysh_writeconfig_integrated = 1;
2085 DEFUN (no_vtysh_integrated_config,
2086 no_vtysh_integrated_config_cmd,
2087 "no service integrated-vtysh-config",
2089 "Set up miscellaneous service\n"
2090 "Write configuration into integrated file\n")
2092 vtysh_writeconfig_integrated = 0;
2097 write_config_integrated(void)
2100 char line[] = "write terminal\n";
2102 char *integrate_sav = NULL;
2104 integrate_sav = malloc (strlen (integrate_default) +
2105 strlen (CONF_BACKUP_EXT) + 1);
2106 strcpy (integrate_sav, integrate_default);
2107 strcat (integrate_sav, CONF_BACKUP_EXT);
2109 fprintf (stdout,"Building Configuration...\n");
2111 /* Move current configuration file to backup config file. */
2112 unlink (integrate_sav);
2113 rename (integrate_default, integrate_sav);
2114 free (integrate_sav);
2116 fp = fopen (integrate_default, "w");
2119 fprintf (stdout,"%% Can't open configuration file %s.\n",
2124 for (i = 0; i < array_size(vtysh_client); i++)
2125 vtysh_client_execute (&vtysh_client[i], line, NULL);
2127 vtysh_config_write ();
2128 vtysh_config_dump (fp);
2132 if (chmod (integrate_default, CONFIGFILE_MASK) != 0)
2134 fprintf (stdout,"%% Can't chmod configuration file %s: %s (%d)\n",
2135 integrate_default, safe_strerror(errno), errno);
2139 fprintf(stdout,"Integrated configuration saved to %s\n",integrate_default);
2141 fprintf (stdout,"[OK]\n");
2146 DEFUN (vtysh_write_memory,
2147 vtysh_write_memory_cmd,
2149 "Write running configuration to memory, network, or terminal\n"
2150 "Write configuration to the file (same as write file)\n")
2152 int ret = CMD_SUCCESS;
2153 char line[] = "write memory\n";
2156 /* If integrated Quagga.conf explicitely set. */
2157 if (vtysh_writeconfig_integrated)
2158 return write_config_integrated();
2160 fprintf (stdout,"Building Configuration...\n");
2162 for (i = 0; i < array_size(vtysh_client); i++)
2163 ret = vtysh_client_execute (&vtysh_client[i], line, stdout);
2165 fprintf (stdout,"[OK]\n");
2170 ALIAS (vtysh_write_memory,
2171 vtysh_copy_runningconfig_startupconfig_cmd,
2172 "copy running-config startup-config",
2173 "Copy from one file to another\n"
2174 "Copy from current system configuration\n"
2175 "Copy to startup configuration\n")
2177 ALIAS (vtysh_write_memory,
2178 vtysh_write_file_cmd,
2180 "Write running configuration to memory, network, or terminal\n"
2181 "Write configuration to the file (same as write memory)\n")
2183 ALIAS (vtysh_write_memory,
2186 "Write running configuration to memory, network, or terminal\n")
2188 ALIAS (vtysh_write_terminal,
2189 vtysh_show_running_config_cmd,
2190 "show running-config",
2192 "Current operating configuration\n")
2194 ALIAS (vtysh_write_terminal_daemon,
2195 vtysh_show_running_config_daemon_cmd,
2196 "show running-config (zebra|ripd|ripngd|ospfd|ospf6d|bgpd|isisd|babeld)",
2198 "Current operating configuration\n"
2199 "For the zebra daemon\n"
2200 "For the rip daemon\n"
2201 "For the ripng daemon\n"
2202 "For the ospf daemon\n"
2203 "For the ospfv6 daemon\n"
2204 "For the bgp daemon\n"
2205 "For the isis daemon\n"
2206 "For the babel daemon\n")
2208 DEFUN (vtysh_terminal_length,
2209 vtysh_terminal_length_cmd,
2210 "terminal length <0-512>",
2211 "Set terminal line parameters\n"
2212 "Set number of lines on a screen\n"
2213 "Number of lines on screen (0 for no pausing)\n")
2216 char *endptr = NULL;
2217 char default_pager[10];
2219 lines = strtol (argv[0], &endptr, 10);
2220 if (lines < 0 || lines > 512 || *endptr != '\0')
2222 vty_out (vty, "length is malformed%s", VTY_NEWLINE);
2226 if (vtysh_pager_name)
2228 free (vtysh_pager_name);
2229 vtysh_pager_name = NULL;
2234 snprintf(default_pager, 10, "more -%i", lines);
2235 vtysh_pager_name = strdup (default_pager);
2241 DEFUN (vtysh_terminal_no_length,
2242 vtysh_terminal_no_length_cmd,
2243 "terminal no length",
2244 "Set terminal line parameters\n"
2246 "Set number of lines on a screen\n")
2248 if (vtysh_pager_name)
2250 free (vtysh_pager_name);
2251 vtysh_pager_name = NULL;
2258 DEFUN (vtysh_show_daemons,
2259 vtysh_show_daemons_cmd,
2262 "Show list of running daemons\n")
2266 for (i = 0; i < array_size(vtysh_client); i++)
2267 if ( vtysh_client[i].fd >= 0 )
2268 vty_out(vty, " %s", vtysh_client[i].name);
2269 vty_out(vty, "%s", VTY_NEWLINE);
2274 /* Execute command in child process. */
2276 execute_command (const char *command, int argc, const char *arg1,
2287 /* Failure of fork(). */
2288 fprintf (stderr, "Can't fork: %s\n", safe_strerror (errno));
2293 /* This is child process. */
2297 execlp (command, command, (const char *)NULL);
2300 execlp (command, command, arg1, (const char *)NULL);
2303 execlp (command, command, arg1, arg2, (const char *)NULL);
2307 /* When execlp suceed, this part is not executed. */
2308 fprintf (stderr, "Can't execute %s: %s\n", command, safe_strerror (errno));
2313 /* This is parent. */
2315 wait4 (pid, &status, 0, NULL);
2324 "Send echo messages\n"
2325 "Ping destination address or hostname\n")
2327 execute_command ("ping", 1, argv[0], NULL);
2334 "Send echo messages\n"
2336 "Ping destination address or hostname\n")
2338 DEFUN (vtysh_traceroute,
2339 vtysh_traceroute_cmd,
2341 "Trace route to destination\n"
2342 "Trace route to destination address or hostname\n")
2344 execute_command ("traceroute", 1, argv[0], NULL);
2348 ALIAS (vtysh_traceroute,
2349 vtysh_traceroute_ip_cmd,
2350 "traceroute ip WORD",
2351 "Trace route to destination\n"
2353 "Trace route to destination address or hostname\n")
2359 "Send echo messages\n"
2361 "Ping destination address or hostname\n")
2363 execute_command ("ping6", 1, argv[0], NULL);
2367 DEFUN (vtysh_traceroute6,
2368 vtysh_traceroute6_cmd,
2369 "traceroute ipv6 WORD",
2370 "Trace route to destination\n"
2372 "Trace route to destination address or hostname\n")
2374 execute_command ("traceroute6", 1, argv[0], NULL);
2379 DEFUN (vtysh_telnet,
2382 "Open a telnet connection\n"
2383 "IP address or hostname of a remote system\n")
2385 execute_command ("telnet", 1, argv[0], NULL);
2389 DEFUN (vtysh_telnet_port,
2390 vtysh_telnet_port_cmd,
2392 "Open a telnet connection\n"
2393 "IP address or hostname of a remote system\n"
2394 "TCP Port number\n")
2396 execute_command ("telnet", 2, argv[0], argv[1]);
2403 "Open an ssh connection\n"
2406 execute_command ("ssh", 1, argv[0], NULL);
2410 DEFUN (vtysh_start_shell,
2411 vtysh_start_shell_cmd,
2413 "Start UNIX shell\n")
2415 execute_command ("sh", 0, NULL, NULL);
2419 DEFUN (vtysh_start_bash,
2420 vtysh_start_bash_cmd,
2422 "Start UNIX shell\n"
2425 execute_command ("bash", 0, NULL, NULL);
2429 DEFUN (vtysh_start_zsh,
2430 vtysh_start_zsh_cmd,
2432 "Start UNIX shell\n"
2435 execute_command ("zsh", 0, NULL, NULL);
2440 vtysh_install_default (enum node_type node)
2442 install_element (node, &config_list_cmd);
2445 /* Making connection to protocol daemon. */
2447 vtysh_connect (struct vtysh_client *vclient)
2451 struct sockaddr_un addr;
2454 /* Stat socket to see if we have permission to access it. */
2455 ret = stat (vclient->path, &s_stat);
2456 if (ret < 0 && errno != ENOENT)
2458 fprintf (stderr, "vtysh_connect(%s): stat = %s\n",
2459 vclient->path, safe_strerror(errno));
2465 if (! S_ISSOCK(s_stat.st_mode))
2467 fprintf (stderr, "vtysh_connect(%s): Not a socket\n",
2474 sock = socket (AF_UNIX, SOCK_STREAM, 0);
2478 fprintf(stderr, "vtysh_connect(%s): socket = %s\n", vclient->path,
2479 safe_strerror(errno));
2484 memset (&addr, 0, sizeof (struct sockaddr_un));
2485 addr.sun_family = AF_UNIX;
2486 strncpy (addr.sun_path, vclient->path, strlen (vclient->path));
2487 #ifdef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN
2488 len = addr.sun_len = SUN_LEN(&addr);
2490 len = sizeof (addr.sun_family) + strlen (addr.sun_path);
2491 #endif /* HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */
2493 ret = connect (sock, (struct sockaddr *) &addr, len);
2497 fprintf(stderr, "vtysh_connect(%s): connect = %s\n", vclient->path,
2498 safe_strerror(errno));
2509 vtysh_connect_all(const char *daemon_name)
2515 for (i = 0; i < array_size(vtysh_client); i++)
2517 if (!daemon_name || !strcmp(daemon_name, vtysh_client[i].name))
2520 if (vtysh_connect(&vtysh_client[i]) == 0)
2522 /* We need direct access to ripd in vtysh_exit_ripd_only. */
2523 if (vtysh_client[i].flag == VTYSH_RIPD)
2524 ripd_client = &vtysh_client[i];
2528 fprintf(stderr, "Error: no daemons match name %s!\n", daemon_name);
2532 /* To disable readline's filename completion. */
2534 vtysh_completion_entry_function (const char *ignore, int invoking_key)
2540 vtysh_readline_init (void)
2542 /* readline related settings. */
2543 rl_bind_key ('?', (rl_command_func_t *) vtysh_rl_describe);
2544 rl_completion_entry_function = vtysh_completion_entry_function;
2545 rl_attempted_completion_function = (rl_completion_func_t *)new_completion;
2551 static struct utsname names;
2552 static char buf[100];
2553 const char*hostname;
2554 extern struct host host;
2556 hostname = host.name;
2560 if (!names.nodename[0])
2562 hostname = names.nodename;
2565 snprintf (buf, sizeof buf, cmd_prompt (vty->node), hostname);
2571 vtysh_init_vty (void)
2573 /* Make vty structure. */
2575 vty->type = VTY_SHELL;
2576 vty->node = VIEW_NODE;
2578 /* Initialize commands. */
2581 /* Install nodes. */
2582 install_node (&bgp_node, NULL);
2583 install_node (&rip_node, NULL);
2584 install_node (&interface_node, NULL);
2585 install_node (&link_params_node, NULL);
2586 install_node (&rmap_node, NULL);
2587 install_node (&zebra_node, NULL);
2588 install_node (&bgp_vpnv4_node, NULL);
2589 install_node (&bgp_vpnv6_node, NULL);
2590 install_node (&bgp_encap_node, NULL);
2591 install_node (&bgp_encapv6_node, NULL);
2592 install_node (&bgp_ipv4_node, NULL);
2593 install_node (&bgp_ipv4m_node, NULL);
2594 /* #ifdef HAVE_IPV6 */
2595 install_node (&bgp_ipv6_node, NULL);
2596 install_node (&bgp_ipv6m_node, NULL);
2598 install_node (&ospf_node, NULL);
2599 /* #ifdef HAVE_IPV6 */
2600 install_node (&ripng_node, NULL);
2601 install_node (&ospf6_node, NULL);
2603 install_node (&babel_node, NULL);
2604 install_node (&keychain_node, NULL);
2605 install_node (&keychain_key_node, NULL);
2606 install_node (&isis_node, NULL);
2607 install_node (&vty_node, NULL);
2609 vtysh_install_default (VIEW_NODE);
2610 vtysh_install_default (ENABLE_NODE);
2611 vtysh_install_default (CONFIG_NODE);
2612 vtysh_install_default (BGP_NODE);
2613 vtysh_install_default (RIP_NODE);
2614 vtysh_install_default (INTERFACE_NODE);
2615 vtysh_install_default (LINK_PARAMS_NODE);
2616 vtysh_install_default (RMAP_NODE);
2617 vtysh_install_default (ZEBRA_NODE);
2618 vtysh_install_default (BGP_VPNV4_NODE);
2619 vtysh_install_default (BGP_VPNV6_NODE);
2620 vtysh_install_default (BGP_ENCAP_NODE);
2621 vtysh_install_default (BGP_ENCAPV6_NODE);
2622 vtysh_install_default (BGP_IPV4_NODE);
2623 vtysh_install_default (BGP_IPV4M_NODE);
2624 vtysh_install_default (BGP_IPV6_NODE);
2625 vtysh_install_default (BGP_IPV6M_NODE);
2626 vtysh_install_default (OSPF_NODE);
2627 vtysh_install_default (RIPNG_NODE);
2628 vtysh_install_default (OSPF6_NODE);
2629 vtysh_install_default (BABEL_NODE);
2630 vtysh_install_default (ISIS_NODE);
2631 vtysh_install_default (KEYCHAIN_NODE);
2632 vtysh_install_default (KEYCHAIN_KEY_NODE);
2633 vtysh_install_default (VTY_NODE);
2635 install_element (VIEW_NODE, &vtysh_enable_cmd);
2636 install_element (ENABLE_NODE, &vtysh_config_terminal_cmd);
2637 install_element (ENABLE_NODE, &vtysh_disable_cmd);
2639 /* "exit" command. */
2640 install_element (VIEW_NODE, &vtysh_exit_all_cmd);
2641 install_element (VIEW_NODE, &vtysh_quit_all_cmd);
2642 install_element (CONFIG_NODE, &vtysh_exit_all_cmd);
2643 /* install_element (CONFIG_NODE, &vtysh_quit_all_cmd); */
2644 install_element (ENABLE_NODE, &vtysh_exit_all_cmd);
2645 install_element (ENABLE_NODE, &vtysh_quit_all_cmd);
2646 install_element (RIP_NODE, &vtysh_exit_ripd_cmd);
2647 install_element (RIP_NODE, &vtysh_quit_ripd_cmd);
2648 install_element (RIPNG_NODE, &vtysh_exit_ripngd_cmd);
2649 install_element (RIPNG_NODE, &vtysh_quit_ripngd_cmd);
2650 install_element (OSPF_NODE, &vtysh_exit_ospfd_cmd);
2651 install_element (OSPF_NODE, &vtysh_quit_ospfd_cmd);
2652 install_element (OSPF6_NODE, &vtysh_exit_ospf6d_cmd);
2653 install_element (OSPF6_NODE, &vtysh_quit_ospf6d_cmd);
2654 install_element (BGP_NODE, &vtysh_exit_bgpd_cmd);
2655 install_element (BGP_NODE, &vtysh_quit_bgpd_cmd);
2656 install_element (BGP_VPNV4_NODE, &vtysh_exit_bgpd_cmd);
2657 install_element (BGP_VPNV4_NODE, &vtysh_quit_bgpd_cmd);
2658 install_element (BGP_VPNV6_NODE, &vtysh_exit_bgpd_cmd);
2659 install_element (BGP_VPNV6_NODE, &vtysh_quit_bgpd_cmd);
2660 install_element (BGP_ENCAP_NODE, &vtysh_exit_bgpd_cmd);
2661 install_element (BGP_ENCAP_NODE, &vtysh_quit_bgpd_cmd);
2662 install_element (BGP_ENCAPV6_NODE, &vtysh_exit_bgpd_cmd);
2663 install_element (BGP_ENCAPV6_NODE, &vtysh_quit_bgpd_cmd);
2664 install_element (BGP_IPV4_NODE, &vtysh_exit_bgpd_cmd);
2665 install_element (BGP_IPV4_NODE, &vtysh_quit_bgpd_cmd);
2666 install_element (BGP_IPV4M_NODE, &vtysh_exit_bgpd_cmd);
2667 install_element (BGP_IPV4M_NODE, &vtysh_quit_bgpd_cmd);
2668 install_element (BGP_IPV6_NODE, &vtysh_exit_bgpd_cmd);
2669 install_element (BGP_IPV6_NODE, &vtysh_quit_bgpd_cmd);
2670 install_element (BGP_IPV6M_NODE, &vtysh_exit_bgpd_cmd);
2671 install_element (BGP_IPV6M_NODE, &vtysh_quit_bgpd_cmd);
2672 install_element (ISIS_NODE, &vtysh_exit_isisd_cmd);
2673 install_element (ISIS_NODE, &vtysh_quit_isisd_cmd);
2674 install_element (KEYCHAIN_NODE, &vtysh_exit_ripd_cmd);
2675 install_element (KEYCHAIN_NODE, &vtysh_quit_ripd_cmd);
2676 install_element (KEYCHAIN_KEY_NODE, &vtysh_exit_ripd_cmd);
2677 install_element (KEYCHAIN_KEY_NODE, &vtysh_quit_ripd_cmd);
2678 install_element (RMAP_NODE, &vtysh_exit_rmap_cmd);
2679 install_element (RMAP_NODE, &vtysh_quit_rmap_cmd);
2680 install_element (VTY_NODE, &vtysh_exit_line_vty_cmd);
2681 install_element (VTY_NODE, &vtysh_quit_line_vty_cmd);
2683 /* "end" command. */
2684 install_element (CONFIG_NODE, &vtysh_end_all_cmd);
2685 install_element (ENABLE_NODE, &vtysh_end_all_cmd);
2686 install_element (RIP_NODE, &vtysh_end_all_cmd);
2687 install_element (RIPNG_NODE, &vtysh_end_all_cmd);
2688 install_element (OSPF_NODE, &vtysh_end_all_cmd);
2689 install_element (OSPF6_NODE, &vtysh_end_all_cmd);
2690 install_element (BABEL_NODE, &vtysh_end_all_cmd);
2691 install_element (BGP_NODE, &vtysh_end_all_cmd);
2692 install_element (BGP_IPV4_NODE, &vtysh_end_all_cmd);
2693 install_element (BGP_IPV4M_NODE, &vtysh_end_all_cmd);
2694 install_element (BGP_VPNV4_NODE, &vtysh_end_all_cmd);
2695 install_element (BGP_VPNV6_NODE, &vtysh_end_all_cmd);
2696 install_element (BGP_ENCAP_NODE, &vtysh_end_all_cmd);
2697 install_element (BGP_ENCAPV6_NODE, &vtysh_end_all_cmd);
2698 install_element (BGP_IPV6_NODE, &vtysh_end_all_cmd);
2699 install_element (BGP_IPV6M_NODE, &vtysh_end_all_cmd);
2700 install_element (ISIS_NODE, &vtysh_end_all_cmd);
2701 install_element (KEYCHAIN_NODE, &vtysh_end_all_cmd);
2702 install_element (KEYCHAIN_KEY_NODE, &vtysh_end_all_cmd);
2703 install_element (RMAP_NODE, &vtysh_end_all_cmd);
2704 install_element (VTY_NODE, &vtysh_end_all_cmd);
2706 install_element (INTERFACE_NODE, &interface_desc_cmd);
2707 install_element (INTERFACE_NODE, &no_interface_desc_cmd);
2708 install_element (INTERFACE_NODE, &vtysh_end_all_cmd);
2709 install_element (INTERFACE_NODE, &vtysh_exit_interface_cmd);
2710 install_element (LINK_PARAMS_NODE, &exit_link_params_cmd);
2711 install_element (LINK_PARAMS_NODE, &vtysh_end_all_cmd);
2712 install_element (LINK_PARAMS_NODE, &vtysh_exit_interface_cmd);
2713 install_element (INTERFACE_NODE, &vtysh_quit_interface_cmd);
2714 install_element (CONFIG_NODE, &router_rip_cmd);
2716 install_element (CONFIG_NODE, &router_ripng_cmd);
2718 install_element (CONFIG_NODE, &router_ospf_cmd);
2720 install_element (CONFIG_NODE, &router_ospf6_cmd);
2722 install_element (CONFIG_NODE, &router_isis_cmd);
2723 install_element (CONFIG_NODE, &router_bgp_cmd);
2724 install_element (CONFIG_NODE, &router_bgp_view_cmd);
2725 install_element (BGP_NODE, &address_family_vpnv4_cmd);
2726 install_element (BGP_NODE, &address_family_vpnv4_unicast_cmd);
2727 install_element (BGP_NODE, &address_family_vpnv6_cmd);
2728 install_element (BGP_NODE, &address_family_vpnv6_unicast_cmd);
2729 install_element (BGP_NODE, &address_family_encap_cmd);
2730 install_element (BGP_NODE, &address_family_encapv6_cmd);
2731 install_element (BGP_NODE, &address_family_ipv4_unicast_cmd);
2732 install_element (BGP_NODE, &address_family_ipv4_multicast_cmd);
2734 install_element (BGP_NODE, &address_family_ipv6_cmd);
2735 install_element (BGP_NODE, &address_family_ipv6_unicast_cmd);
2736 install_element (BGP_NODE, &address_family_ipv6_multicast_cmd);
2738 install_element (BGP_VPNV4_NODE, &exit_address_family_cmd);
2739 install_element (BGP_VPNV6_NODE, &exit_address_family_cmd);
2740 install_element (BGP_ENCAP_NODE, &exit_address_family_cmd);
2741 install_element (BGP_ENCAPV6_NODE, &exit_address_family_cmd);
2742 install_element (BGP_IPV4_NODE, &exit_address_family_cmd);
2743 install_element (BGP_IPV4M_NODE, &exit_address_family_cmd);
2744 install_element (BGP_IPV6_NODE, &exit_address_family_cmd);
2745 install_element (BGP_IPV6M_NODE, &exit_address_family_cmd);
2746 install_element (CONFIG_NODE, &key_chain_cmd);
2747 install_element (CONFIG_NODE, &route_map_cmd);
2748 install_element (CONFIG_NODE, &vtysh_line_vty_cmd);
2749 install_element (KEYCHAIN_NODE, &key_cmd);
2750 install_element (KEYCHAIN_NODE, &key_chain_cmd);
2751 install_element (KEYCHAIN_KEY_NODE, &key_chain_cmd);
2752 install_element (CONFIG_NODE, &vtysh_interface_cmd);
2753 install_element (CONFIG_NODE, &vtysh_no_interface_cmd);
2754 install_element (CONFIG_NODE, &vtysh_interface_vrf_cmd);
2755 install_element (CONFIG_NODE, &vtysh_no_interface_vrf_cmd);
2756 install_element (INTERFACE_NODE, &vtysh_link_params_cmd);
2757 install_element (ENABLE_NODE, &vtysh_show_running_config_cmd);
2758 install_element (ENABLE_NODE, &vtysh_show_running_config_daemon_cmd);
2759 install_element (ENABLE_NODE, &vtysh_copy_runningconfig_startupconfig_cmd);
2760 install_element (ENABLE_NODE, &vtysh_write_file_cmd);
2761 install_element (ENABLE_NODE, &vtysh_write_cmd);
2762 /* distribute-list commands. (based on lib/distribute.c distribute_list_init()) */
2763 install_element (RIP_NODE, &distribute_list_all_cmd);
2764 install_element (RIP_NODE, &no_distribute_list_all_cmd);
2765 install_element (RIP_NODE, &distribute_list_cmd);
2766 install_element (RIP_NODE, &no_distribute_list_cmd);
2767 install_element (RIP_NODE, &distribute_list_prefix_all_cmd);
2768 install_element (RIP_NODE, &no_distribute_list_prefix_all_cmd);
2769 install_element (RIP_NODE, &distribute_list_prefix_cmd);
2770 install_element (RIP_NODE, &no_distribute_list_prefix_cmd);
2771 install_element (RIPNG_NODE, &ipv6_distribute_list_all_cmd);
2772 install_element (RIPNG_NODE, &no_ipv6_distribute_list_all_cmd);
2773 install_element (RIPNG_NODE, &ipv6_distribute_list_cmd);
2774 install_element (RIPNG_NODE, &no_ipv6_distribute_list_cmd);
2775 install_element (RIPNG_NODE, &ipv6_distribute_list_prefix_all_cmd);
2776 install_element (RIPNG_NODE, &no_ipv6_distribute_list_prefix_all_cmd);
2777 install_element (RIPNG_NODE, &ipv6_distribute_list_prefix_cmd);
2778 install_element (RIPNG_NODE, &no_ipv6_distribute_list_prefix_cmd);
2779 install_element (RIPNG_NODE, &distribute_list_all_cmd);
2780 install_element (RIPNG_NODE, &no_distribute_list_all_cmd);
2781 install_element (RIPNG_NODE, &distribute_list_cmd);
2782 install_element (RIPNG_NODE, &no_distribute_list_cmd);
2783 install_element (RIPNG_NODE, &distribute_list_prefix_all_cmd);
2784 install_element (RIPNG_NODE, &no_distribute_list_prefix_all_cmd);
2785 install_element (RIPNG_NODE, &distribute_list_prefix_cmd);
2786 install_element (RIPNG_NODE, &no_distribute_list_prefix_cmd);
2788 /* "write terminal" command. */
2789 install_element (ENABLE_NODE, &vtysh_write_terminal_cmd);
2790 install_element (ENABLE_NODE, &vtysh_write_terminal_daemon_cmd);
2792 install_element (CONFIG_NODE, &vtysh_integrated_config_cmd);
2793 install_element (CONFIG_NODE, &no_vtysh_integrated_config_cmd);
2795 /* "write memory" command. */
2796 install_element (ENABLE_NODE, &vtysh_write_memory_cmd);
2798 install_element (VIEW_NODE, &vtysh_terminal_length_cmd);
2799 install_element (ENABLE_NODE, &vtysh_terminal_length_cmd);
2800 install_element (VIEW_NODE, &vtysh_terminal_no_length_cmd);
2801 install_element (ENABLE_NODE, &vtysh_terminal_no_length_cmd);
2802 install_element (VIEW_NODE, &vtysh_show_daemons_cmd);
2803 install_element (ENABLE_NODE, &vtysh_show_daemons_cmd);
2805 install_element (VIEW_NODE, &vtysh_ping_cmd);
2806 install_element (VIEW_NODE, &vtysh_ping_ip_cmd);
2807 install_element (VIEW_NODE, &vtysh_traceroute_cmd);
2808 install_element (VIEW_NODE, &vtysh_traceroute_ip_cmd);
2810 install_element (VIEW_NODE, &vtysh_ping6_cmd);
2811 install_element (VIEW_NODE, &vtysh_traceroute6_cmd);
2813 install_element (VIEW_NODE, &vtysh_telnet_cmd);
2814 install_element (VIEW_NODE, &vtysh_telnet_port_cmd);
2815 install_element (VIEW_NODE, &vtysh_ssh_cmd);
2816 install_element (ENABLE_NODE, &vtysh_ping_cmd);
2817 install_element (ENABLE_NODE, &vtysh_ping_ip_cmd);
2818 install_element (ENABLE_NODE, &vtysh_traceroute_cmd);
2819 install_element (ENABLE_NODE, &vtysh_traceroute_ip_cmd);
2821 install_element (ENABLE_NODE, &vtysh_ping6_cmd);
2822 install_element (ENABLE_NODE, &vtysh_traceroute6_cmd);
2824 install_element (ENABLE_NODE, &vtysh_telnet_cmd);
2825 install_element (ENABLE_NODE, &vtysh_telnet_port_cmd);
2826 install_element (ENABLE_NODE, &vtysh_ssh_cmd);
2827 install_element (ENABLE_NODE, &vtysh_start_shell_cmd);
2828 install_element (ENABLE_NODE, &vtysh_start_bash_cmd);
2829 install_element (ENABLE_NODE, &vtysh_start_zsh_cmd);
2831 install_element (VIEW_NODE, &vtysh_show_memory_cmd);
2832 install_element (ENABLE_NODE, &vtysh_show_memory_cmd);
2834 install_element (VIEW_NODE, &vtysh_show_work_queues_cmd);
2835 install_element (ENABLE_NODE, &vtysh_show_work_queues_cmd);
2836 install_element (ENABLE_NODE, &vtysh_show_work_queues_daemon_cmd);
2837 install_element (VIEW_NODE, &vtysh_show_work_queues_daemon_cmd);
2839 install_element (VIEW_NODE, &vtysh_show_thread_cmd);
2840 install_element (ENABLE_NODE, &vtysh_show_thread_cmd);
2843 install_element (ENABLE_NODE, &vtysh_show_logging_cmd);
2844 install_element (VIEW_NODE, &vtysh_show_logging_cmd);
2845 install_element (CONFIG_NODE, &vtysh_log_stdout_cmd);
2846 install_element (CONFIG_NODE, &vtysh_log_stdout_level_cmd);
2847 install_element (CONFIG_NODE, &no_vtysh_log_stdout_cmd);
2848 install_element (CONFIG_NODE, &vtysh_log_file_cmd);
2849 install_element (CONFIG_NODE, &vtysh_log_file_level_cmd);
2850 install_element (CONFIG_NODE, &no_vtysh_log_file_cmd);
2851 install_element (CONFIG_NODE, &no_vtysh_log_file_level_cmd);
2852 install_element (CONFIG_NODE, &vtysh_log_monitor_cmd);
2853 install_element (CONFIG_NODE, &vtysh_log_monitor_level_cmd);
2854 install_element (CONFIG_NODE, &no_vtysh_log_monitor_cmd);
2855 install_element (CONFIG_NODE, &vtysh_log_syslog_cmd);
2856 install_element (CONFIG_NODE, &vtysh_log_syslog_level_cmd);
2857 install_element (CONFIG_NODE, &no_vtysh_log_syslog_cmd);
2858 install_element (CONFIG_NODE, &vtysh_log_trap_cmd);
2859 install_element (CONFIG_NODE, &no_vtysh_log_trap_cmd);
2860 install_element (CONFIG_NODE, &vtysh_log_facility_cmd);
2861 install_element (CONFIG_NODE, &no_vtysh_log_facility_cmd);
2862 install_element (CONFIG_NODE, &vtysh_log_record_priority_cmd);
2863 install_element (CONFIG_NODE, &no_vtysh_log_record_priority_cmd);
2864 install_element (CONFIG_NODE, &vtysh_log_timestamp_precision_cmd);
2865 install_element (CONFIG_NODE, &no_vtysh_log_timestamp_precision_cmd);
2867 install_element (CONFIG_NODE, &vtysh_service_password_encrypt_cmd);
2868 install_element (CONFIG_NODE, &no_vtysh_service_password_encrypt_cmd);
2870 install_element (CONFIG_NODE, &vtysh_password_cmd);
2871 install_element (CONFIG_NODE, &vtysh_password_text_cmd);
2872 install_element (CONFIG_NODE, &vtysh_enable_password_cmd);
2873 install_element (CONFIG_NODE, &vtysh_enable_password_text_cmd);
2874 install_element (CONFIG_NODE, &no_vtysh_enable_password_cmd);