2002-12-13 21:15:29 +01:00
|
|
|
/* Virtual terminal interface shell.
|
|
|
|
* Copyright (C) 2000 Kunihiro Ishiguro
|
|
|
|
*
|
|
|
|
* This file is part of GNU Zebra.
|
|
|
|
*
|
|
|
|
* GNU Zebra is free software; you can redistribute it and/or modify it
|
|
|
|
* under the terms of the GNU General Public License as published by the
|
|
|
|
* Free Software Foundation; either version 2, or (at your option) any
|
|
|
|
* later version.
|
|
|
|
*
|
|
|
|
* GNU Zebra is distributed in the hope that it will be useful, but
|
|
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with GNU Zebra; see the file COPYING. If not, write to the Free
|
|
|
|
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
|
|
* 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <zebra.h>
|
|
|
|
|
|
|
|
#include <sys/un.h>
|
|
|
|
#include <setjmp.h>
|
|
|
|
#include <sys/wait.h>
|
|
|
|
#include <sys/resource.h>
|
|
|
|
#include <sys/stat.h>
|
|
|
|
|
|
|
|
#include <readline/readline.h>
|
|
|
|
#include <readline/history.h>
|
|
|
|
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
#include <dirent.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
2015-03-04 07:07:01 +01:00
|
|
|
#include "linklist.h"
|
2002-12-13 21:15:29 +01:00
|
|
|
#include "command.h"
|
|
|
|
#include "memory.h"
|
2016-01-07 16:03:01 +01:00
|
|
|
#include "filter.h"
|
2002-12-13 21:15:29 +01:00
|
|
|
#include "vtysh/vtysh.h"
|
2004-11-20 03:06:59 +01:00
|
|
|
#include "log.h"
|
2008-07-02 15:40:33 +02:00
|
|
|
#include "bgpd/bgp_vty.h"
|
2014-07-03 12:24:34 +02:00
|
|
|
#include "ns.h"
|
2015-05-22 11:40:00 +02:00
|
|
|
#include "vrf.h"
|
2002-12-13 21:15:29 +01:00
|
|
|
|
|
|
|
/* Struct VTY. */
|
|
|
|
struct vty *vty;
|
|
|
|
|
|
|
|
/* VTY shell pager name. */
|
|
|
|
char *vtysh_pager_name = NULL;
|
|
|
|
|
|
|
|
/* VTY shell client structure. */
|
|
|
|
struct vtysh_client
|
|
|
|
{
|
|
|
|
int fd;
|
2015-05-20 03:29:15 +02:00
|
|
|
const char *name;
|
2005-01-28 22:11:46 +01:00
|
|
|
int flag;
|
2015-05-20 03:29:15 +02:00
|
|
|
const char *path;
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
struct vtysh_client *next;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct vtysh_client vtysh_client[] =
|
|
|
|
{
|
|
|
|
{ .fd = -1, .name = "zebra", .flag = VTYSH_ZEBRA, .path = ZEBRA_VTYSH_PATH, .next = NULL},
|
|
|
|
{ .fd = -1, .name = "ripd", .flag = VTYSH_RIPD, .path = RIP_VTYSH_PATH, .next = NULL},
|
|
|
|
{ .fd = -1, .name = "ripngd", .flag = VTYSH_RIPNGD, .path = RIPNG_VTYSH_PATH, .next = NULL},
|
|
|
|
{ .fd = -1, .name = "ospfd", .flag = VTYSH_OSPFD, .path = OSPF_VTYSH_PATH, .next = NULL},
|
|
|
|
{ .fd = -1, .name = "ospf6d", .flag = VTYSH_OSPF6D, .path = OSPF6_VTYSH_PATH, .next = NULL},
|
|
|
|
{ .fd = -1, .name = "bgpd", .flag = VTYSH_BGPD, .path = BGP_VTYSH_PATH, .next = NULL},
|
|
|
|
{ .fd = -1, .name = "isisd", .flag = VTYSH_ISISD, .path = ISIS_VTYSH_PATH, .next = NULL},
|
2015-02-04 07:01:14 +01:00
|
|
|
{ .fd = -1, .name = "pimd", .flag = VTYSH_PIMD, .path = PIM_VTYSH_PATH, .next = NULL},
|
2005-01-28 22:11:46 +01:00
|
|
|
};
|
|
|
|
|
2004-10-03 22:11:32 +02:00
|
|
|
/* Using integrated config from Quagga.conf. Default is no. */
|
2016-07-20 17:24:47 +02:00
|
|
|
int vtysh_writeconfig_integrated = 1;
|
2004-10-03 22:11:32 +02:00
|
|
|
|
|
|
|
extern char config_default[];
|
|
|
|
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
static void
|
2002-12-13 21:15:29 +01:00
|
|
|
vclient_close (struct vtysh_client *vclient)
|
|
|
|
{
|
2005-01-28 22:11:46 +01:00
|
|
|
if (vclient->fd >= 0)
|
|
|
|
{
|
|
|
|
fprintf(stderr,
|
|
|
|
"Warning: closing connection to %s because of an I/O error!\n",
|
|
|
|
vclient->name);
|
|
|
|
close (vclient->fd);
|
|
|
|
vclient->fd = -1;
|
|
|
|
}
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
2015-10-16 22:53:03 +02:00
|
|
|
/* Return true if str begins with prefix, else return false */
|
|
|
|
static int
|
|
|
|
begins_with(const char *str, const char *prefix)
|
|
|
|
{
|
|
|
|
if (!str || !prefix)
|
|
|
|
return 0;
|
|
|
|
size_t lenstr = strlen(str);
|
|
|
|
size_t lenprefix = strlen(prefix);
|
|
|
|
if (lenprefix > lenstr)
|
|
|
|
return 0;
|
|
|
|
return strncmp(str, prefix, lenprefix) == 0;
|
|
|
|
}
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
/* Following filled with debug code to trace a problematic condition
|
2004-08-26 15:08:30 +02:00
|
|
|
* under load - it SHOULD handle it. */
|
2002-12-13 21:15:29 +01:00
|
|
|
#define ERR_WHERE_STRING "vtysh(): vtysh_client_config(): "
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
static int
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
vtysh_client_config_one (struct vtysh_client *vclient, char *line)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
int ret;
|
|
|
|
char *buf;
|
|
|
|
size_t bufsz;
|
|
|
|
char *pbuf;
|
|
|
|
size_t left;
|
|
|
|
char *eoln;
|
|
|
|
int nbytes;
|
|
|
|
int i;
|
|
|
|
int readln;
|
|
|
|
|
|
|
|
if (vclient->fd < 0)
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
|
|
|
|
ret = write (vclient->fd, line, strlen (line) + 1);
|
|
|
|
if (ret <= 0)
|
|
|
|
{
|
|
|
|
vclient_close (vclient);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
/* Allow enough room for buffer to read more than a few pages from socket. */
|
2003-01-23 19:05:42 +01:00
|
|
|
bufsz = 5 * getpagesize() + 1;
|
2002-12-13 21:15:29 +01:00
|
|
|
buf = XMALLOC(MTYPE_TMP, bufsz);
|
|
|
|
memset(buf, 0, bufsz);
|
|
|
|
pbuf = buf;
|
|
|
|
|
|
|
|
while (1)
|
|
|
|
{
|
|
|
|
if (pbuf >= ((buf + bufsz) -1))
|
|
|
|
{
|
|
|
|
fprintf (stderr, ERR_WHERE_STRING \
|
|
|
|
"warning - pbuf beyond buffer end.\n");
|
|
|
|
return CMD_WARNING;
|
|
|
|
}
|
|
|
|
|
|
|
|
readln = (buf + bufsz) - pbuf - 1;
|
|
|
|
nbytes = read (vclient->fd, pbuf, readln);
|
|
|
|
|
|
|
|
if (nbytes <= 0)
|
|
|
|
{
|
|
|
|
|
|
|
|
if (errno == EINTR)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
fprintf(stderr, ERR_WHERE_STRING "(%u)", errno);
|
|
|
|
perror("");
|
|
|
|
|
|
|
|
if (errno == EAGAIN || errno == EIO)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
vclient_close (vclient);
|
|
|
|
XFREE(MTYPE_TMP, buf);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
pbuf[nbytes] = '\0';
|
|
|
|
|
|
|
|
if (nbytes >= 4)
|
|
|
|
{
|
|
|
|
i = nbytes - 4;
|
|
|
|
if (pbuf[i] == '\0' && pbuf[i + 1] == '\0' && pbuf[i + 2] == '\0')
|
|
|
|
{
|
|
|
|
ret = pbuf[i + 3];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
pbuf += nbytes;
|
|
|
|
|
|
|
|
/* See if a line exists in buffer, if so parse and consume it, and
|
2004-08-26 15:08:30 +02:00
|
|
|
* reset read position. */
|
2002-12-13 21:15:29 +01:00
|
|
|
if ((eoln = strrchr(buf, '\n')) == NULL)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (eoln >= ((buf + bufsz) - 1))
|
|
|
|
{
|
|
|
|
fprintf (stderr, ERR_WHERE_STRING \
|
|
|
|
"warning - eoln beyond buffer end.\n");
|
|
|
|
}
|
|
|
|
vtysh_config_parse(buf);
|
|
|
|
|
|
|
|
eoln++;
|
|
|
|
left = (size_t)(buf + bufsz - eoln);
|
|
|
|
memmove(buf, eoln, left);
|
|
|
|
buf[bufsz-1] = '\0';
|
|
|
|
pbuf = buf + strlen(buf);
|
|
|
|
}
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
/* Parse anything left in the buffer. */
|
2004-10-03 22:11:32 +02:00
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
vtysh_config_parse (buf);
|
|
|
|
|
|
|
|
XFREE(MTYPE_TMP, buf);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2015-05-20 03:29:15 +02:00
|
|
|
static void
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
vtysh_client_config (struct vtysh_client *head_client, char *line)
|
|
|
|
{
|
|
|
|
struct vtysh_client *client;
|
|
|
|
int rc;
|
|
|
|
|
|
|
|
rc = vtysh_client_config_one(head_client, line);
|
|
|
|
if (rc != CMD_SUCCESS)
|
2015-05-20 03:29:15 +02:00
|
|
|
return;
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
|
|
|
|
client = head_client->next;
|
|
|
|
while (client)
|
|
|
|
{
|
|
|
|
rc = vtysh_client_config_one(client, line);
|
|
|
|
if (rc != CMD_SUCCESS)
|
2015-05-20 03:29:15 +02:00
|
|
|
return;
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
client = client->next;
|
|
|
|
}
|
2015-05-20 03:29:15 +02:00
|
|
|
return;
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
vtysh_client_execute_one (struct vtysh_client *vclient, const char *line, FILE *fp)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
int ret;
|
|
|
|
char buf[1001];
|
|
|
|
int nbytes;
|
2004-09-17 08:52:16 +02:00
|
|
|
int i;
|
|
|
|
int numnulls = 0;
|
2002-12-13 21:15:29 +01:00
|
|
|
|
|
|
|
if (vclient->fd < 0)
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
|
|
|
|
ret = write (vclient->fd, line, strlen (line) + 1);
|
|
|
|
if (ret <= 0)
|
|
|
|
{
|
|
|
|
vclient_close (vclient);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
while (1)
|
|
|
|
{
|
|
|
|
nbytes = read (vclient->fd, buf, sizeof(buf)-1);
|
|
|
|
|
|
|
|
if (nbytes <= 0 && errno != EINTR)
|
|
|
|
{
|
|
|
|
vclient_close (vclient);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (nbytes > 0)
|
|
|
|
{
|
2004-11-11 15:03:39 +01:00
|
|
|
if ((numnulls == 3) && (nbytes == 1))
|
|
|
|
return buf[0];
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
buf[nbytes] = '\0';
|
2004-11-11 15:03:39 +01:00
|
|
|
fputs (buf, fp);
|
2002-12-13 21:15:29 +01:00
|
|
|
fflush (fp);
|
2004-09-17 08:52:16 +02:00
|
|
|
|
2004-10-11 20:21:55 +02:00
|
|
|
/* check for trailling \0\0\0<ret code>,
|
|
|
|
* even if split across reads
|
|
|
|
* (see lib/vty.c::vtysh_read)
|
|
|
|
*/
|
2004-09-17 08:52:16 +02:00
|
|
|
if (nbytes >= 4)
|
|
|
|
{
|
|
|
|
i = nbytes-4;
|
|
|
|
numnulls = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
i = 0;
|
|
|
|
|
2004-10-11 20:21:55 +02:00
|
|
|
while (i < nbytes && numnulls < 3)
|
2004-09-17 08:52:16 +02:00
|
|
|
{
|
|
|
|
if (buf[i++] == '\0')
|
|
|
|
numnulls++;
|
|
|
|
else
|
2004-11-11 15:03:39 +01:00
|
|
|
numnulls = 0;
|
2004-09-17 08:52:16 +02:00
|
|
|
}
|
|
|
|
|
2004-11-11 15:03:39 +01:00
|
|
|
/* got 3 or more trailing NULs? */
|
|
|
|
if ((numnulls >= 3) && (i < nbytes))
|
2004-10-11 20:21:55 +02:00
|
|
|
return (buf[nbytes-1]);
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
static int
|
|
|
|
vtysh_client_execute (struct vtysh_client *head_client, const char *line, FILE *fp)
|
|
|
|
{
|
|
|
|
struct vtysh_client *client;
|
|
|
|
int rc;
|
|
|
|
|
|
|
|
rc = vtysh_client_execute_one(head_client, line, fp);
|
|
|
|
if (rc != CMD_SUCCESS)
|
|
|
|
return rc;
|
|
|
|
|
|
|
|
client = head_client->next;
|
|
|
|
while (client)
|
|
|
|
{
|
|
|
|
rc = vtysh_client_execute_one(client, line, fp);
|
|
|
|
if (rc != CMD_SUCCESS)
|
|
|
|
return rc;
|
|
|
|
client = client->next;
|
|
|
|
}
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
void
|
2005-01-28 22:11:46 +01:00
|
|
|
vtysh_pager_init (void)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
2004-08-27 16:23:28 +02:00
|
|
|
char *pager_defined;
|
|
|
|
|
|
|
|
pager_defined = getenv ("VTYSH_PAGER");
|
|
|
|
|
|
|
|
if (pager_defined)
|
|
|
|
vtysh_pager_name = strdup (pager_defined);
|
|
|
|
else
|
2004-08-27 15:56:39 +02:00
|
|
|
vtysh_pager_name = strdup ("more");
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Command execution over the vty interface. */
|
2008-07-28 21:19:04 +02:00
|
|
|
static int
|
2004-10-07 23:40:25 +02:00
|
|
|
vtysh_execute_func (const char *line, int pager)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
2008-07-29 00:04:56 +02:00
|
|
|
int ret, cmd_stat;
|
2005-01-28 22:11:46 +01:00
|
|
|
u_int i;
|
2002-12-13 21:15:29 +01:00
|
|
|
vector vline;
|
|
|
|
struct cmd_element *cmd;
|
|
|
|
FILE *fp = NULL;
|
2005-01-23 22:42:25 +01:00
|
|
|
int closepager = 0;
|
|
|
|
int tried = 0;
|
|
|
|
int saved_ret, saved_node;
|
2002-12-13 21:15:29 +01:00
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
/* Split readline string up into the vector. */
|
2002-12-13 21:15:29 +01:00
|
|
|
vline = cmd_make_strvec (line);
|
|
|
|
|
|
|
|
if (vline == NULL)
|
2008-07-28 21:19:04 +02:00
|
|
|
return CMD_SUCCESS;
|
2002-12-13 21:15:29 +01:00
|
|
|
|
2005-01-23 22:42:25 +01:00
|
|
|
saved_ret = ret = cmd_execute_command (vline, vty, &cmd, 1);
|
|
|
|
saved_node = vty->node;
|
|
|
|
|
|
|
|
/* If command doesn't succeeded in current node, try to walk up in node tree.
|
|
|
|
* Changing vty->node is enough to try it just out without actual walkup in
|
|
|
|
* the vtysh. */
|
|
|
|
while (ret != CMD_SUCCESS && ret != CMD_SUCCESS_DAEMON && ret != CMD_WARNING
|
|
|
|
&& vty->node > CONFIG_NODE)
|
|
|
|
{
|
|
|
|
vty->node = node_parent(vty->node);
|
|
|
|
ret = cmd_execute_command (vline, vty, &cmd, 1);
|
|
|
|
tried++;
|
|
|
|
}
|
|
|
|
|
|
|
|
vty->node = saved_node;
|
|
|
|
|
|
|
|
/* If command succeeded in any other node than current (tried > 0) we have
|
|
|
|
* to move into node in the vtysh where it succeeded. */
|
|
|
|
if (ret == CMD_SUCCESS || ret == CMD_SUCCESS_DAEMON || ret == CMD_WARNING)
|
|
|
|
{
|
2016-01-12 19:41:57 +01:00
|
|
|
if ((saved_node == BGP_VPNV4_NODE || saved_node == BGP_VPNV6_NODE
|
2016-01-12 19:42:04 +01:00
|
|
|
|| saved_node == BGP_ENCAP_NODE || saved_node == BGP_ENCAPV6_NODE
|
2016-06-07 04:29:05 +02:00
|
|
|
|| saved_node == BGP_IPV4_NODE
|
2005-08-23 00:44:29 +02:00
|
|
|
|| saved_node == BGP_IPV6_NODE || saved_node == BGP_IPV4M_NODE
|
|
|
|
|| saved_node == BGP_IPV6M_NODE)
|
2005-01-23 22:42:25 +01:00
|
|
|
&& (tried == 1))
|
|
|
|
{
|
|
|
|
vtysh_execute("exit-address-family");
|
|
|
|
}
|
|
|
|
else if ((saved_node == KEYCHAIN_KEY_NODE) && (tried == 1))
|
|
|
|
{
|
|
|
|
vtysh_execute("exit");
|
|
|
|
}
|
|
|
|
else if (tried)
|
|
|
|
{
|
|
|
|
vtysh_execute ("end");
|
|
|
|
vtysh_execute ("configure terminal");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* If command didn't succeed in any node, continue with return value from
|
|
|
|
* first try. */
|
|
|
|
else if (tried)
|
|
|
|
{
|
|
|
|
ret = saved_ret;
|
|
|
|
}
|
2002-12-13 21:15:29 +01:00
|
|
|
|
|
|
|
cmd_free_strvec (vline);
|
|
|
|
|
2008-07-29 00:04:56 +02:00
|
|
|
cmd_stat = ret;
|
2002-12-13 21:15:29 +01:00
|
|
|
switch (ret)
|
|
|
|
{
|
|
|
|
case CMD_WARNING:
|
|
|
|
if (vty->type == VTY_FILE)
|
2002-12-13 21:49:00 +01:00
|
|
|
fprintf (stdout,"Warning...\n");
|
2002-12-13 21:15:29 +01:00
|
|
|
break;
|
|
|
|
case CMD_ERR_AMBIGUOUS:
|
2002-12-13 21:49:00 +01:00
|
|
|
fprintf (stdout,"%% Ambiguous command.\n");
|
2002-12-13 21:15:29 +01:00
|
|
|
break;
|
|
|
|
case CMD_ERR_NO_MATCH:
|
2002-12-13 21:49:00 +01:00
|
|
|
fprintf (stdout,"%% Unknown command.\n");
|
2002-12-13 21:15:29 +01:00
|
|
|
break;
|
|
|
|
case CMD_ERR_INCOMPLETE:
|
2002-12-13 21:49:00 +01:00
|
|
|
fprintf (stdout,"%% Command incomplete.\n");
|
2002-12-13 21:15:29 +01:00
|
|
|
break;
|
|
|
|
case CMD_SUCCESS_DAEMON:
|
|
|
|
{
|
2004-10-20 21:07:48 +02:00
|
|
|
/* FIXME: Don't open pager for exit commands. popen() causes problems
|
|
|
|
* if exited from vtysh at all. This hack shouldn't cause any problem
|
|
|
|
* but is really ugly. */
|
|
|
|
if (pager && vtysh_pager_name && (strncmp(line, "exit", 4) != 0))
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
2002-12-13 21:49:00 +01:00
|
|
|
fp = popen (vtysh_pager_name, "w");
|
2002-12-13 21:15:29 +01:00
|
|
|
if (fp == NULL)
|
|
|
|
{
|
2003-05-01 16:29:48 +02:00
|
|
|
perror ("popen failed for pager");
|
|
|
|
fp = stdout;
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
2003-05-01 16:29:48 +02:00
|
|
|
else
|
|
|
|
closepager=1;
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
fp = stdout;
|
|
|
|
|
|
|
|
if (! strcmp(cmd->string,"configure terminal"))
|
|
|
|
{
|
2012-09-26 10:39:10 +02:00
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
2005-01-28 22:11:46 +01:00
|
|
|
{
|
|
|
|
cmd_stat = vtysh_client_execute(&vtysh_client[i], line, fp);
|
|
|
|
if (cmd_stat == CMD_WARNING)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
if (cmd_stat)
|
|
|
|
{
|
2004-08-25 14:22:00 +02:00
|
|
|
line = "end";
|
|
|
|
vline = cmd_make_strvec (line);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
2004-08-25 14:22:00 +02:00
|
|
|
if (vline == NULL)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
2003-05-01 16:29:48 +02:00
|
|
|
if (pager && vtysh_pager_name && fp && closepager)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
if (pclose (fp) == -1)
|
|
|
|
{
|
2003-05-01 16:29:48 +02:00
|
|
|
perror ("pclose failed for pager");
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
fp = NULL;
|
|
|
|
}
|
2008-07-28 21:19:04 +02:00
|
|
|
return CMD_SUCCESS;
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
2005-01-17 00:31:54 +01:00
|
|
|
ret = cmd_execute_command (vline, vty, &cmd, 1);
|
2004-08-25 14:22:00 +02:00
|
|
|
cmd_free_strvec (vline);
|
|
|
|
if (ret != CMD_SUCCESS_DAEMON)
|
|
|
|
break;
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
if (cmd->func)
|
|
|
|
{
|
|
|
|
(*cmd->func) (cmd, vty, 0, NULL);
|
|
|
|
break;
|
2004-08-25 14:22:00 +02:00
|
|
|
}
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
2005-01-28 22:11:46 +01:00
|
|
|
cmd_stat = CMD_SUCCESS;
|
2012-09-26 10:39:10 +02:00
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
2005-01-28 22:11:46 +01:00
|
|
|
{
|
|
|
|
if (cmd->daemon & vtysh_client[i].flag)
|
|
|
|
{
|
|
|
|
cmd_stat = vtysh_client_execute(&vtysh_client[i], line, fp);
|
|
|
|
if (cmd_stat != CMD_SUCCESS)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (cmd_stat != CMD_SUCCESS)
|
|
|
|
break;
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
if (cmd->func)
|
|
|
|
(*cmd->func) (cmd, vty, 0, NULL);
|
|
|
|
}
|
|
|
|
}
|
2003-05-01 16:29:48 +02:00
|
|
|
if (pager && vtysh_pager_name && fp && closepager)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
if (pclose (fp) == -1)
|
|
|
|
{
|
2003-05-01 16:29:48 +02:00
|
|
|
perror ("pclose failed for pager");
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
fp = NULL;
|
|
|
|
}
|
2008-07-28 21:19:04 +02:00
|
|
|
return cmd_stat;
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
2008-07-28 21:19:04 +02:00
|
|
|
int
|
2004-10-07 23:40:25 +02:00
|
|
|
vtysh_execute_no_pager (const char *line)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
2008-07-28 21:19:04 +02:00
|
|
|
return vtysh_execute_func (line, 0);
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
2008-07-28 21:19:04 +02:00
|
|
|
int
|
2004-10-07 23:40:25 +02:00
|
|
|
vtysh_execute (const char *line)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
2008-07-28 21:19:04 +02:00
|
|
|
return vtysh_execute_func (line, 1);
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
2016-08-18 19:47:01 +02:00
|
|
|
static char *
|
|
|
|
trim (char *s)
|
|
|
|
{
|
|
|
|
size_t size;
|
|
|
|
char *end;
|
|
|
|
|
|
|
|
size = strlen(s);
|
|
|
|
|
|
|
|
if (!size)
|
|
|
|
return s;
|
|
|
|
|
|
|
|
end = s + size - 1;
|
|
|
|
while (end >= s && isspace(*end))
|
|
|
|
end--;
|
|
|
|
*(end + 1) = '\0';
|
|
|
|
|
|
|
|
while (*s && isspace(*s))
|
|
|
|
s++;
|
|
|
|
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
|
2015-05-20 03:04:11 +02:00
|
|
|
int
|
2015-05-20 03:29:15 +02:00
|
|
|
vtysh_mark_file (const char *filename)
|
2015-05-20 03:04:11 +02:00
|
|
|
{
|
|
|
|
struct vty *vty;
|
|
|
|
FILE *confp = NULL;
|
|
|
|
int ret;
|
|
|
|
vector vline;
|
|
|
|
int tried = 0;
|
|
|
|
struct cmd_element *cmd;
|
|
|
|
int saved_ret, prev_node;
|
|
|
|
int lineno = 0;
|
2016-08-18 19:47:01 +02:00
|
|
|
char *vty_buf_copy = NULL;
|
|
|
|
char *vty_buf_trimmed = NULL;
|
2015-05-20 03:04:11 +02:00
|
|
|
|
|
|
|
if (strncmp("-", filename, 1) == 0)
|
|
|
|
confp = stdin;
|
|
|
|
else
|
|
|
|
confp = fopen (filename, "r");
|
|
|
|
|
|
|
|
if (confp == NULL)
|
2016-04-06 15:34:33 +02:00
|
|
|
{
|
|
|
|
fprintf (stderr, "%% Can't open config file %s due to '%s'.\n",
|
|
|
|
filename, safe_strerror (errno));
|
|
|
|
return (CMD_ERR_NO_FILE);
|
|
|
|
}
|
2015-05-20 03:04:11 +02:00
|
|
|
|
|
|
|
vty = vty_new ();
|
|
|
|
vty->fd = 0; /* stdout */
|
|
|
|
vty->type = VTY_TERM;
|
|
|
|
vty->node = CONFIG_NODE;
|
|
|
|
|
|
|
|
vtysh_execute_no_pager ("enable");
|
|
|
|
vtysh_execute_no_pager ("configure terminal");
|
2016-08-18 19:47:01 +02:00
|
|
|
vty_buf_copy = XCALLOC (MTYPE_VTY, VTY_BUFSIZ);
|
2015-05-20 03:04:11 +02:00
|
|
|
|
|
|
|
while (fgets (vty->buf, VTY_BUFSIZ, confp))
|
|
|
|
{
|
|
|
|
lineno++;
|
|
|
|
tried = 0;
|
2016-08-18 19:47:01 +02:00
|
|
|
strcpy(vty_buf_copy, vty->buf);
|
|
|
|
vty_buf_trimmed = trim(vty_buf_copy);
|
2015-05-20 03:04:11 +02:00
|
|
|
|
2016-08-18 19:47:01 +02:00
|
|
|
if (vty_buf_trimmed[0] == '!' || vty_buf_trimmed[0] == '#')
|
2015-05-20 03:04:11 +02:00
|
|
|
{
|
|
|
|
fprintf(stdout, "%s", vty->buf);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Split readline string up into the vector. */
|
|
|
|
vline = cmd_make_strvec (vty->buf);
|
|
|
|
|
|
|
|
if (vline == NULL)
|
|
|
|
{
|
|
|
|
fprintf(stdout, "%s", vty->buf);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2016-08-18 19:47:01 +02:00
|
|
|
/* Ignore the "end" lines, we will generate these where appropriate */
|
|
|
|
if (strlen(vty_buf_trimmed) == 3 && strncmp("end", vty_buf_trimmed, 3) == 0)
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2015-05-20 03:04:11 +02:00
|
|
|
prev_node = vty->node;
|
|
|
|
saved_ret = ret = cmd_execute_command_strict (vline, vty, &cmd);
|
|
|
|
|
|
|
|
/* If command doesn't succeeded in current node, try to walk up in node tree.
|
|
|
|
* Changing vty->node is enough to try it just out without actual walkup in
|
|
|
|
* the vtysh. */
|
|
|
|
while (ret != CMD_SUCCESS && ret != CMD_SUCCESS_DAEMON && ret != CMD_WARNING
|
|
|
|
&& vty->node > CONFIG_NODE)
|
|
|
|
{
|
|
|
|
vty->node = node_parent(vty->node);
|
|
|
|
ret = cmd_execute_command_strict (vline, vty, &cmd);
|
|
|
|
tried++;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* If command succeeded in any other node than current (tried > 0) we have
|
|
|
|
* to move into node in the vtysh where it succeeded. */
|
|
|
|
if (ret == CMD_SUCCESS || ret == CMD_SUCCESS_DAEMON || ret == CMD_WARNING)
|
|
|
|
{
|
|
|
|
if ((prev_node == BGP_VPNV4_NODE || prev_node == BGP_IPV4_NODE
|
|
|
|
|| prev_node == BGP_IPV6_NODE || prev_node == BGP_IPV4M_NODE
|
2016-06-11 20:36:42 +02:00
|
|
|
|| prev_node == BGP_IPV6M_NODE || prev_node == BGP_VPNV6_NODE)
|
2015-05-20 03:04:11 +02:00
|
|
|
&& (tried == 1))
|
|
|
|
{
|
|
|
|
fprintf(stdout, "exit-address-family\n");
|
|
|
|
}
|
|
|
|
else if ((prev_node == KEYCHAIN_KEY_NODE) && (tried == 1))
|
|
|
|
{
|
|
|
|
fprintf(stdout, "exit\n");
|
|
|
|
}
|
|
|
|
else if (tried)
|
|
|
|
{
|
|
|
|
fprintf(stdout, "end\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* If command didn't succeed in any node, continue with return value from
|
|
|
|
* first try. */
|
|
|
|
else if (tried)
|
|
|
|
{
|
|
|
|
ret = saved_ret;
|
|
|
|
vty->node = prev_node;
|
|
|
|
}
|
|
|
|
|
|
|
|
cmd_free_strvec (vline);
|
|
|
|
switch (ret)
|
|
|
|
{
|
|
|
|
case CMD_WARNING:
|
|
|
|
if (vty->type == VTY_FILE)
|
|
|
|
fprintf (stderr,"line %d: Warning...: %s\n", lineno, vty->buf);
|
|
|
|
fclose(confp);
|
|
|
|
vty_close(vty);
|
2016-08-18 19:47:01 +02:00
|
|
|
XFREE(MTYPE_VTY, vty_buf_copy);
|
2016-04-06 15:34:33 +02:00
|
|
|
return CMD_WARNING;
|
2015-05-20 03:04:11 +02:00
|
|
|
case CMD_ERR_AMBIGUOUS:
|
|
|
|
fprintf (stderr,"line %d: %% Ambiguous command: %s\n", lineno, vty->buf);
|
|
|
|
fclose(confp);
|
|
|
|
vty_close(vty);
|
2016-08-18 19:47:01 +02:00
|
|
|
XFREE(MTYPE_VTY, vty_buf_copy);
|
2016-04-06 15:34:33 +02:00
|
|
|
return CMD_ERR_AMBIGUOUS;
|
2015-05-20 03:04:11 +02:00
|
|
|
case CMD_ERR_NO_MATCH:
|
|
|
|
fprintf (stderr,"line %d: %% Unknown command: %s\n", lineno, vty->buf);
|
|
|
|
fclose(confp);
|
|
|
|
vty_close(vty);
|
2016-08-18 19:47:01 +02:00
|
|
|
XFREE(MTYPE_VTY, vty_buf_copy);
|
2016-04-06 15:34:33 +02:00
|
|
|
return CMD_ERR_NO_MATCH;
|
2015-05-20 03:04:11 +02:00
|
|
|
case CMD_ERR_INCOMPLETE:
|
|
|
|
fprintf (stderr,"line %d: %% Command incomplete: %s\n", lineno, vty->buf);
|
|
|
|
fclose(confp);
|
|
|
|
vty_close(vty);
|
2016-08-18 19:47:01 +02:00
|
|
|
XFREE(MTYPE_VTY, vty_buf_copy);
|
2016-04-06 15:34:33 +02:00
|
|
|
return CMD_ERR_INCOMPLETE;
|
2015-05-20 03:04:11 +02:00
|
|
|
case CMD_SUCCESS:
|
|
|
|
fprintf(stdout, "%s", vty->buf);
|
|
|
|
break;
|
|
|
|
case CMD_SUCCESS_DAEMON:
|
|
|
|
{
|
|
|
|
u_int i;
|
|
|
|
int cmd_stat = CMD_SUCCESS;
|
|
|
|
|
|
|
|
fprintf(stdout, "%s", vty->buf);
|
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
|
|
|
{
|
|
|
|
if (cmd->daemon & vtysh_client[i].flag)
|
|
|
|
{
|
|
|
|
cmd_stat = vtysh_client_execute (&vtysh_client[i],
|
|
|
|
vty->buf, stdout);
|
|
|
|
if (cmd_stat != CMD_SUCCESS)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (cmd_stat != CMD_SUCCESS)
|
|
|
|
break;
|
|
|
|
|
|
|
|
if (cmd->func)
|
|
|
|
(*cmd->func) (cmd, vty, 0, NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/* This is the end */
|
|
|
|
fprintf(stdout, "end\n");
|
|
|
|
vty_close(vty);
|
2016-08-18 19:47:01 +02:00
|
|
|
XFREE(MTYPE_VTY, vty_buf_copy);
|
2015-05-20 03:04:11 +02:00
|
|
|
|
|
|
|
if (confp != stdin)
|
|
|
|
fclose(confp);
|
|
|
|
|
|
|
|
return (0);
|
|
|
|
}
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
/* Configration make from file. */
|
2016-03-09 13:25:02 +01:00
|
|
|
int
|
2002-12-13 21:15:29 +01:00
|
|
|
vtysh_config_from_file (struct vty *vty, FILE *fp)
|
|
|
|
{
|
|
|
|
int ret;
|
|
|
|
struct cmd_element *cmd;
|
2015-09-01 21:46:08 +02:00
|
|
|
int lineno = 0;
|
2016-03-09 13:25:02 +01:00
|
|
|
int retcode = CMD_SUCCESS;
|
2002-12-13 21:15:29 +01:00
|
|
|
|
|
|
|
while (fgets (vty->buf, VTY_BUFSIZ, fp))
|
|
|
|
{
|
2015-09-01 21:46:08 +02:00
|
|
|
lineno++;
|
2002-12-13 21:15:29 +01:00
|
|
|
|
2015-09-28 22:17:36 +02:00
|
|
|
ret = command_config_read_one_line (vty, &cmd, 1);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
|
|
|
switch (ret)
|
|
|
|
{
|
|
|
|
case CMD_WARNING:
|
|
|
|
if (vty->type == VTY_FILE)
|
2016-04-06 15:34:33 +02:00
|
|
|
fprintf (stderr,"line %d: Warning[%d]...: %s\n", lineno, vty->node, vty->buf);
|
|
|
|
retcode = CMD_WARNING; /* once we have an error, we remember & return that */
|
2002-12-13 21:15:29 +01:00
|
|
|
break;
|
|
|
|
case CMD_ERR_AMBIGUOUS:
|
2016-04-06 15:34:33 +02:00
|
|
|
fprintf (stderr,"line %d: %% Ambiguous command[%d]: %s\n", lineno, vty->node, vty->buf);
|
|
|
|
retcode = CMD_ERR_AMBIGUOUS; /* once we have an error, we remember & return that */
|
2002-12-13 21:15:29 +01:00
|
|
|
break;
|
|
|
|
case CMD_ERR_NO_MATCH:
|
2016-04-06 15:34:33 +02:00
|
|
|
fprintf (stderr,"line %d: %% Unknown command[%d]: %s", lineno, vty->node, vty->buf);
|
|
|
|
retcode = CMD_ERR_NO_MATCH; /* once we have an error, we remember & return that */
|
2002-12-13 21:15:29 +01:00
|
|
|
break;
|
|
|
|
case CMD_ERR_INCOMPLETE:
|
2016-04-06 15:34:33 +02:00
|
|
|
fprintf (stderr,"line %d: %% Command incomplete[%d]: %s\n", lineno, vty->node, vty->buf);
|
|
|
|
retcode = CMD_ERR_INCOMPLETE; /* once we have an error, we remember & return that */
|
2002-12-13 21:15:29 +01:00
|
|
|
break;
|
|
|
|
case CMD_SUCCESS_DAEMON:
|
|
|
|
{
|
2005-01-28 22:11:46 +01:00
|
|
|
u_int i;
|
|
|
|
int cmd_stat = CMD_SUCCESS;
|
|
|
|
|
2012-09-26 10:39:10 +02:00
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
2005-01-28 22:11:46 +01:00
|
|
|
{
|
2006-01-11 02:38:25 +01:00
|
|
|
if (cmd->daemon & vtysh_client[i].flag)
|
2005-01-28 22:11:46 +01:00
|
|
|
{
|
|
|
|
cmd_stat = vtysh_client_execute (&vtysh_client[i],
|
|
|
|
vty->buf, stdout);
|
2016-04-15 15:15:21 +02:00
|
|
|
/*
|
|
|
|
* CMD_WARNING - Can mean that the command was
|
|
|
|
* parsed successfully but it was already entered
|
|
|
|
* in a few spots. As such if we receive a
|
|
|
|
* CMD_WARNING from a daemon we shouldn't stop
|
|
|
|
* talking to the other daemons for the particular
|
|
|
|
* command.
|
|
|
|
*/
|
|
|
|
if (cmd_stat != CMD_SUCCESS && cmd_stat != CMD_WARNING)
|
2016-04-06 15:34:33 +02:00
|
|
|
{
|
|
|
|
fprintf (stderr, "line %d: Failure to communicate[%d] to %s, line: %s\n",
|
|
|
|
lineno, cmd_stat, vtysh_client[i].name, vty->buf);
|
|
|
|
break;
|
|
|
|
}
|
2005-01-28 22:11:46 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (cmd_stat != CMD_SUCCESS)
|
|
|
|
break;
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
if (cmd->func)
|
|
|
|
(*cmd->func) (cmd, vty, 0, NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2016-03-09 13:25:02 +01:00
|
|
|
|
|
|
|
return (retcode);
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* We don't care about the point of the cursor when '?' is typed. */
|
2015-03-04 07:07:01 +01:00
|
|
|
static int
|
2005-01-28 22:11:46 +01:00
|
|
|
vtysh_rl_describe (void)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
int ret;
|
2004-10-07 23:40:25 +02:00
|
|
|
unsigned int i;
|
2002-12-13 21:15:29 +01:00
|
|
|
vector vline;
|
|
|
|
vector describe;
|
|
|
|
int width;
|
2013-09-30 14:27:51 +02:00
|
|
|
struct cmd_token *token;
|
2002-12-13 21:15:29 +01:00
|
|
|
|
|
|
|
vline = cmd_make_strvec (rl_line_buffer);
|
|
|
|
|
|
|
|
/* In case of '> ?'. */
|
|
|
|
if (vline == NULL)
|
|
|
|
{
|
|
|
|
vline = vector_init (1);
|
2016-05-16 03:07:50 +02:00
|
|
|
vector_set (vline, NULL);
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
if (rl_end && isspace ((int) rl_line_buffer[rl_end - 1]))
|
2016-05-16 03:07:50 +02:00
|
|
|
vector_set (vline, NULL);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
|
|
|
describe = cmd_describe_command (vline, vty, &ret);
|
|
|
|
|
2002-12-13 21:49:00 +01:00
|
|
|
fprintf (stdout,"\n");
|
2002-12-13 21:15:29 +01:00
|
|
|
|
|
|
|
/* Ambiguous and no match error. */
|
|
|
|
switch (ret)
|
|
|
|
{
|
|
|
|
case CMD_ERR_AMBIGUOUS:
|
|
|
|
cmd_free_strvec (vline);
|
2002-12-13 21:49:00 +01:00
|
|
|
fprintf (stdout,"%% Ambiguous command.\n");
|
2002-12-13 21:15:29 +01:00
|
|
|
rl_on_new_line ();
|
|
|
|
return 0;
|
|
|
|
break;
|
|
|
|
case CMD_ERR_NO_MATCH:
|
|
|
|
cmd_free_strvec (vline);
|
2002-12-13 21:49:00 +01:00
|
|
|
fprintf (stdout,"%% There is no matched command.\n");
|
2002-12-13 21:15:29 +01:00
|
|
|
rl_on_new_line ();
|
|
|
|
return 0;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Get width of command string. */
|
|
|
|
width = 0;
|
2005-03-14 21:19:01 +01:00
|
|
|
for (i = 0; i < vector_active (describe); i++)
|
2013-09-30 14:27:51 +02:00
|
|
|
if ((token = vector_slot (describe, i)) != NULL)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
int len;
|
|
|
|
|
2013-09-30 14:27:51 +02:00
|
|
|
if (token->cmd[0] == '\0')
|
2002-12-13 21:15:29 +01:00
|
|
|
continue;
|
|
|
|
|
2013-09-30 14:27:51 +02:00
|
|
|
len = strlen (token->cmd);
|
|
|
|
if (token->cmd[0] == '.')
|
2002-12-13 21:15:29 +01:00
|
|
|
len--;
|
|
|
|
|
|
|
|
if (width < len)
|
|
|
|
width = len;
|
|
|
|
}
|
|
|
|
|
2005-03-14 21:19:01 +01:00
|
|
|
for (i = 0; i < vector_active (describe); i++)
|
2013-09-30 14:27:51 +02:00
|
|
|
if ((token = vector_slot (describe, i)) != NULL)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
2013-09-30 14:27:51 +02:00
|
|
|
if (token->cmd[0] == '\0')
|
2002-12-13 21:15:29 +01:00
|
|
|
continue;
|
|
|
|
|
2013-09-30 14:27:51 +02:00
|
|
|
if (! token->desc)
|
2002-12-13 21:49:00 +01:00
|
|
|
fprintf (stdout," %-s\n",
|
2013-09-30 14:27:51 +02:00
|
|
|
token->cmd[0] == '.' ? token->cmd + 1 : token->cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
else
|
2002-12-13 21:49:00 +01:00
|
|
|
fprintf (stdout," %-*s %s\n",
|
2004-08-25 14:22:00 +02:00
|
|
|
width,
|
2013-09-30 14:27:51 +02:00
|
|
|
token->cmd[0] == '.' ? token->cmd + 1 : token->cmd,
|
|
|
|
token->desc);
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
cmd_free_strvec (vline);
|
|
|
|
vector_free (describe);
|
|
|
|
|
|
|
|
rl_on_new_line();
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
/* Result of cmd_complete_command() call will be stored here
|
|
|
|
* and used in new_completion() in order to put the space in
|
|
|
|
* correct places only. */
|
2002-12-13 21:15:29 +01:00
|
|
|
int complete_status;
|
|
|
|
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
static char *
|
2003-04-19 01:55:29 +02:00
|
|
|
command_generator (const char *text, int state)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
vector vline;
|
|
|
|
static char **matched = NULL;
|
|
|
|
static int index = 0;
|
|
|
|
|
|
|
|
/* First call. */
|
|
|
|
if (! state)
|
|
|
|
{
|
|
|
|
index = 0;
|
|
|
|
|
|
|
|
if (vty->node == AUTH_NODE || vty->node == AUTH_ENABLE_NODE)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
vline = cmd_make_strvec (rl_line_buffer);
|
|
|
|
if (vline == NULL)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
if (rl_end && isspace ((int) rl_line_buffer[rl_end - 1]))
|
2016-05-16 03:07:50 +02:00
|
|
|
vector_set (vline, NULL);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
2016-09-09 23:58:33 +02:00
|
|
|
if (matched)
|
|
|
|
XFREE (MTYPE_TMP, matched);
|
2002-12-13 21:15:29 +01:00
|
|
|
matched = cmd_complete_command (vline, vty, &complete_status);
|
2016-09-09 23:58:33 +02:00
|
|
|
cmd_free_strvec (vline);
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (matched && matched[index])
|
|
|
|
return matched[index++];
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
static char **
|
2002-12-13 21:15:29 +01:00
|
|
|
new_completion (char *text, int start, int end)
|
|
|
|
{
|
|
|
|
char **matches;
|
|
|
|
|
2003-04-19 01:55:29 +02:00
|
|
|
matches = rl_completion_matches (text, command_generator);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
|
|
|
if (matches)
|
|
|
|
{
|
|
|
|
rl_point = rl_end;
|
2013-03-04 10:23:30 +01:00
|
|
|
if (complete_status != CMD_COMPLETE_FULL_MATCH)
|
|
|
|
/* only append a space on full match */
|
|
|
|
rl_completion_append_character = '\0';
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return matches;
|
|
|
|
}
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
/* Vty node structures. */
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node bgp_node =
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
BGP_NODE,
|
|
|
|
"%s(config-router)# ",
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node rip_node =
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
RIP_NODE,
|
|
|
|
"%s(config-router)# ",
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node isis_node =
|
2003-12-23 11:39:08 +01:00
|
|
|
{
|
|
|
|
ISIS_NODE,
|
|
|
|
"%s(config-router)# ",
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node interface_node =
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
INTERFACE_NODE,
|
|
|
|
"%s(config-if)# ",
|
|
|
|
};
|
|
|
|
|
2014-07-03 12:24:34 +02:00
|
|
|
static struct cmd_node ns_node =
|
|
|
|
{
|
|
|
|
NS_NODE,
|
|
|
|
"%s(config-logical-router)# ",
|
|
|
|
};
|
|
|
|
|
2016-02-02 13:34:29 +01:00
|
|
|
static struct cmd_node vrf_node =
|
|
|
|
{
|
|
|
|
VRF_NODE,
|
|
|
|
"%s(config-vrf)# ",
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node rmap_node =
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
RMAP_NODE,
|
|
|
|
"%s(config-route-map)# "
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node zebra_node =
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
ZEBRA_NODE,
|
|
|
|
"%s(config-router)# "
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node bgp_vpnv4_node =
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
BGP_VPNV4_NODE,
|
|
|
|
"%s(config-router-af)# "
|
|
|
|
};
|
|
|
|
|
2016-06-07 04:29:05 +02:00
|
|
|
static struct cmd_node bgp_vpnv6_node =
|
|
|
|
{
|
|
|
|
BGP_VPNV6_NODE,
|
|
|
|
"%s(config-router-af)# "
|
|
|
|
};
|
|
|
|
|
2016-01-12 19:42:04 +01:00
|
|
|
static struct cmd_node bgp_encap_node =
|
|
|
|
{
|
|
|
|
BGP_ENCAP_NODE,
|
|
|
|
"%s(config-router-af)# "
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct cmd_node bgp_encapv6_node =
|
|
|
|
{
|
|
|
|
BGP_ENCAPV6_NODE,
|
|
|
|
"%s(config-router-af)# "
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node bgp_ipv4_node =
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
BGP_IPV4_NODE,
|
|
|
|
"%s(config-router-af)# "
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node bgp_ipv4m_node =
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
BGP_IPV4M_NODE,
|
|
|
|
"%s(config-router-af)# "
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node bgp_ipv6_node =
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
BGP_IPV6_NODE,
|
|
|
|
"%s(config-router-af)# "
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node bgp_ipv6m_node =
|
2005-08-23 00:44:29 +02:00
|
|
|
{
|
|
|
|
BGP_IPV6M_NODE,
|
|
|
|
"%s(config-router-af)# "
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node ospf_node =
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
OSPF_NODE,
|
|
|
|
"%s(config-router)# "
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node ripng_node =
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
RIPNG_NODE,
|
|
|
|
"%s(config-router)# "
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node ospf6_node =
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
OSPF6_NODE,
|
|
|
|
"%s(config-ospf6)# "
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node keychain_node =
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
KEYCHAIN_NODE,
|
|
|
|
"%s(config-keychain)# "
|
|
|
|
};
|
|
|
|
|
2008-12-01 20:10:34 +01:00
|
|
|
static struct cmd_node keychain_key_node =
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
KEYCHAIN_KEY_NODE,
|
|
|
|
"%s(config-keychain-key)# "
|
|
|
|
};
|
|
|
|
|
Update Traffic Engineering Support for OSPFD
NOTE: I am squashing several commits together because they
do not independently compile and we need this ability to
do any type of sane testing on the patches. Since this
series builds together I am doing this. -DBS
This new structure is the basis to get new link parameters for
Traffic Engineering from Zebra/interface layer to OSPFD and ISISD
for the support of Traffic Engineering
* lib/if.[c,h]: link parameters struture and get/set functions
* lib/command.[c,h]: creation of a new link-node
* lib/zclient.[c,h]: modification to the ZBUS message to convey the
link parameters structure
* lib/zebra.h: New ZBUS message
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support for IEEE 754 format
* lib/stream.[c,h]: Add stream_get{f,d} and stream_put{f,d}) demux and muxers to
safely convert between big-endian IEEE-754 single and double binary
format, as used in IETF RFCs, and C99. Implementation depends on host
using __STDC_IEC_559__, which should be everything we care about. Should
correctly error out otherwise.
* lib/network.[c,h]: Add ntohf and htonf converter
* lib/memtypes.c: Add new memeory type for Traffic Engineering support
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add link parameters support to Zebra
* zebra/interface.c:
- Add new link-params CLI commands
- Add new functions to set/get link parameters for interface
* zebra/redistribute.[c,h]: Add new function to propagate link parameters
to routing daemon (essentially OSPFD and ISISD) for Traffic Engineering.
* zebra/redistribute_null.c: Add new function
zebra_interface_parameters_update()
* zebra/zserv.[c,h]: Add new functions to send link parameters
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support of new link-params CLI to vtysh
In vtysh_config.c/vtysh_config_parse_line(), it is not possible to continue
to use the ordered version for adding line i.e. config_add_line_uniq() to print
Interface CLI commands as it completely break the new LINK_PARAMS_NODE.
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Update Traffic Engineering support for OSPFD
These patches update original code to RFC3630 (OSPF-TE) and add support of
RFC5392 (Inter-AS v2) & RFC7471 (TE metric extensions) and partial support
of RFC6827 (ASON - GMPLS).
* ospfd/ospf_dump.[c,h]: Add new dump functions for Traffic Engineering
* ospfd/ospf_opaque.[c,h]: Add new TLV code points for RFC5392
* ospfd/ospf_packet.c: Update checking of OSPF_OPTION
* ospfd/ospf_vty.[c,h]: Update ospf_str2area_id
* ospfd/ospf_zebra.c: Add new function ospf_interface_link_params() to get
Link Parameters information from the interface to populate Traffic Engineering
metrics
* ospfd/ospfd.[c,h]: Update OSPF_OPTION flags (T -> MT and new DN)
* ospfd/ospf_te.[c,h]: Major modifications to update the code to new
link parameters structure and new RFCs
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
tmp
2016-04-19 16:21:46 +02:00
|
|
|
struct cmd_node link_params_node =
|
|
|
|
{
|
|
|
|
LINK_PARAMS_NODE,
|
|
|
|
"%s(config-link-params)# ",
|
|
|
|
};
|
|
|
|
|
2004-10-03 22:11:32 +02:00
|
|
|
/* Defined in lib/vty.c */
|
|
|
|
extern struct cmd_node vty_node;
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
/* When '^Z' is received from vty, move down to the enable mode. */
|
2015-03-04 07:07:01 +01:00
|
|
|
static int
|
2005-01-28 22:11:46 +01:00
|
|
|
vtysh_end (void)
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
switch (vty->node)
|
|
|
|
{
|
|
|
|
case VIEW_NODE:
|
|
|
|
case ENABLE_NODE:
|
|
|
|
/* Nothing to do. */
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vty->node = ENABLE_NODE;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_end_all,
|
|
|
|
vtysh_end_all_cmd,
|
|
|
|
"end",
|
2004-10-03 22:11:32 +02:00
|
|
|
"End current mode and change to enable mode\n")
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
2004-09-26 18:25:07 +02:00
|
|
|
return vtysh_end ();
|
2004-08-26 15:08:30 +02:00
|
|
|
}
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
router_bgp,
|
|
|
|
router_bgp_cmd,
|
2008-07-02 15:40:33 +02:00
|
|
|
"router bgp " CMD_AS_RANGE,
|
2002-12-13 21:15:29 +01:00
|
|
|
ROUTER_STR
|
|
|
|
BGP_STR
|
|
|
|
AS_STR)
|
|
|
|
{
|
|
|
|
vty->node = BGP_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2015-11-03 19:59:57 +01:00
|
|
|
ALIAS_SH (VTYSH_BGPD,
|
|
|
|
router_bgp,
|
|
|
|
router_bgp_asn_cmd,
|
|
|
|
"router bgp",
|
|
|
|
ROUTER_STR
|
|
|
|
BGP_STR)
|
|
|
|
|
2008-07-03 21:34:48 +02:00
|
|
|
ALIAS_SH (VTYSH_BGPD,
|
|
|
|
router_bgp,
|
|
|
|
router_bgp_view_cmd,
|
2016-02-02 13:34:29 +01:00
|
|
|
"router bgp " CMD_AS_RANGE " (view|vrf) WORD",
|
2008-07-03 21:34:48 +02:00
|
|
|
ROUTER_STR
|
|
|
|
BGP_STR
|
|
|
|
AS_STR
|
2016-02-02 13:34:29 +01:00
|
|
|
"BGP view\nBGP VRF\n"
|
|
|
|
"View/VRF name\n")
|
2008-07-03 21:34:48 +02:00
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
address_family_vpnv4,
|
|
|
|
address_family_vpnv4_cmd,
|
|
|
|
"address-family vpnv4",
|
|
|
|
"Enter Address Family command mode\n"
|
|
|
|
"Address family\n")
|
|
|
|
{
|
|
|
|
vty->node = BGP_VPNV4_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
address_family_vpnv4_unicast,
|
|
|
|
address_family_vpnv4_unicast_cmd,
|
|
|
|
"address-family vpnv4 unicast",
|
|
|
|
"Enter Address Family command mode\n"
|
|
|
|
"Address family\n"
|
|
|
|
"Address Family Modifier\n")
|
|
|
|
{
|
|
|
|
vty->node = BGP_VPNV4_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2016-06-07 04:29:05 +02:00
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
address_family_vpnv6,
|
|
|
|
address_family_vpnv6_cmd,
|
|
|
|
"address-family vpnv6",
|
|
|
|
"Enter Address Family command mode\n"
|
|
|
|
"Address family\n")
|
|
|
|
{
|
|
|
|
vty->node = BGP_VPNV6_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
address_family_vpnv6_unicast,
|
|
|
|
address_family_vpnv6_unicast_cmd,
|
|
|
|
"address-family vpnv6 unicast",
|
|
|
|
"Enter Address Family command mode\n"
|
|
|
|
"Address family\n"
|
|
|
|
"Address Family Modifier\n")
|
|
|
|
{
|
|
|
|
vty->node = BGP_VPNV6_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2016-01-12 19:42:04 +01:00
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
address_family_encap,
|
|
|
|
address_family_encap_cmd,
|
|
|
|
"address-family encap",
|
|
|
|
"Enter Address Family command mode\n"
|
|
|
|
"Address family\n")
|
|
|
|
{
|
|
|
|
vty->node = BGP_ENCAP_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
address_family_encapv4,
|
|
|
|
address_family_encapv4_cmd,
|
|
|
|
"address-family encapv4",
|
|
|
|
"Enter Address Family command mode\n"
|
|
|
|
"Address family\n")
|
|
|
|
{
|
|
|
|
vty->node = BGP_ENCAP_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
address_family_encapv6,
|
|
|
|
address_family_encapv6_cmd,
|
|
|
|
"address-family encapv6",
|
|
|
|
"Enter Address Family command mode\n"
|
|
|
|
"Address family\n")
|
|
|
|
{
|
|
|
|
vty->node = BGP_ENCAPV6_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
address_family_ipv4_unicast,
|
|
|
|
address_family_ipv4_unicast_cmd,
|
|
|
|
"address-family ipv4 unicast",
|
|
|
|
"Enter Address Family command mode\n"
|
|
|
|
"Address family\n"
|
|
|
|
"Address Family Modifier\n")
|
|
|
|
{
|
|
|
|
vty->node = BGP_IPV4_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
address_family_ipv4_multicast,
|
|
|
|
address_family_ipv4_multicast_cmd,
|
|
|
|
"address-family ipv4 multicast",
|
|
|
|
"Enter Address Family command mode\n"
|
|
|
|
"Address family\n"
|
|
|
|
"Address Family Modifier\n")
|
|
|
|
{
|
|
|
|
vty->node = BGP_IPV4M_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
address_family_ipv6,
|
|
|
|
address_family_ipv6_cmd,
|
|
|
|
"address-family ipv6",
|
|
|
|
"Enter Address Family command mode\n"
|
|
|
|
"Address family\n")
|
|
|
|
{
|
|
|
|
vty->node = BGP_IPV6_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
address_family_ipv6_unicast,
|
|
|
|
address_family_ipv6_unicast_cmd,
|
|
|
|
"address-family ipv6 unicast",
|
|
|
|
"Enter Address Family command mode\n"
|
|
|
|
"Address family\n"
|
|
|
|
"Address Family Modifier\n")
|
|
|
|
{
|
|
|
|
vty->node = BGP_IPV6_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2005-08-23 00:44:29 +02:00
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
address_family_ipv6_multicast,
|
|
|
|
address_family_ipv6_multicast_cmd,
|
|
|
|
"address-family ipv6 multicast",
|
|
|
|
"Enter Address Family command mode\n"
|
|
|
|
"Address family\n"
|
|
|
|
"Address Family Modifier\n")
|
|
|
|
{
|
|
|
|
vty->node = BGP_IPV6M_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
DEFUNSH (VTYSH_RIPD,
|
|
|
|
key_chain,
|
|
|
|
key_chain_cmd,
|
|
|
|
"key chain WORD",
|
|
|
|
"Authentication key management\n"
|
|
|
|
"Key-chain management\n"
|
|
|
|
"Key-chain name\n")
|
|
|
|
{
|
|
|
|
vty->node = KEYCHAIN_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_RIPD,
|
|
|
|
key,
|
|
|
|
key_cmd,
|
|
|
|
"key <0-2147483647>",
|
|
|
|
"Configure a key\n"
|
|
|
|
"Key identifier number\n")
|
|
|
|
{
|
|
|
|
vty->node = KEYCHAIN_KEY_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_RIPD,
|
|
|
|
router_rip,
|
|
|
|
router_rip_cmd,
|
|
|
|
"router rip",
|
|
|
|
ROUTER_STR
|
|
|
|
"RIP")
|
|
|
|
{
|
|
|
|
vty->node = RIP_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_RIPNGD,
|
|
|
|
router_ripng,
|
|
|
|
router_ripng_cmd,
|
|
|
|
"router ripng",
|
|
|
|
ROUTER_STR
|
|
|
|
"RIPng")
|
|
|
|
{
|
|
|
|
vty->node = RIPNG_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_OSPFD,
|
|
|
|
router_ospf,
|
|
|
|
router_ospf_cmd,
|
|
|
|
"router ospf",
|
|
|
|
"Enable a routing process\n"
|
|
|
|
"Start OSPF configuration\n")
|
|
|
|
{
|
|
|
|
vty->node = OSPF_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
ALIAS_SH (VTYSH_OSPFD,
|
|
|
|
router_ospf,
|
|
|
|
router_ospf_instance_cmd,
|
|
|
|
"router ospf <1-65535>",
|
|
|
|
"Enable a routing process\n"
|
|
|
|
"Start OSPF configuration\n"
|
|
|
|
"Instance ID\n")
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
DEFUNSH (VTYSH_OSPF6D,
|
|
|
|
router_ospf6,
|
|
|
|
router_ospf6_cmd,
|
|
|
|
"router ospf6",
|
|
|
|
OSPF6_ROUTER_STR
|
|
|
|
OSPF6_STR)
|
|
|
|
{
|
|
|
|
vty->node = OSPF6_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2003-12-23 11:39:08 +01:00
|
|
|
DEFUNSH (VTYSH_ISISD,
|
2004-08-25 14:22:00 +02:00
|
|
|
router_isis,
|
|
|
|
router_isis_cmd,
|
|
|
|
"router isis WORD",
|
|
|
|
ROUTER_STR
|
|
|
|
"ISO IS-IS\n"
|
|
|
|
"ISO Routing area tag")
|
2003-12-23 11:39:08 +01:00
|
|
|
{
|
|
|
|
vty->node = ISIS_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
DEFUNSH (VTYSH_RMAP,
|
|
|
|
route_map,
|
|
|
|
route_map_cmd,
|
|
|
|
"route-map WORD (deny|permit) <1-65535>",
|
|
|
|
"Create route-map or enter route-map command mode\n"
|
|
|
|
"Route map tag\n"
|
|
|
|
"Route map denies set operations\n"
|
|
|
|
"Route map permits set operations\n"
|
|
|
|
"Sequence to insert to/delete from existing route-map entry\n")
|
|
|
|
{
|
|
|
|
vty->node = RMAP_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2004-10-03 22:11:32 +02:00
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_line_vty,
|
|
|
|
vtysh_line_vty_cmd,
|
|
|
|
"line vty",
|
|
|
|
"Configure a terminal line\n"
|
|
|
|
"Virtual terminal\n")
|
|
|
|
{
|
|
|
|
vty->node = VTY_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_enable,
|
|
|
|
vtysh_enable_cmd,
|
|
|
|
"enable",
|
|
|
|
"Turn on privileged mode command\n")
|
|
|
|
{
|
|
|
|
vty->node = ENABLE_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_disable,
|
|
|
|
vtysh_disable_cmd,
|
|
|
|
"disable",
|
|
|
|
"Turn off privileged mode command\n")
|
|
|
|
{
|
|
|
|
if (vty->node == ENABLE_NODE)
|
|
|
|
vty->node = VIEW_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_config_terminal,
|
|
|
|
vtysh_config_terminal_cmd,
|
|
|
|
"configure terminal",
|
|
|
|
"Configuration from vty interface\n"
|
|
|
|
"Configuration terminal\n")
|
|
|
|
{
|
|
|
|
vty->node = CONFIG_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
static int
|
2002-12-13 21:15:29 +01:00
|
|
|
vtysh_exit (struct vty *vty)
|
|
|
|
{
|
|
|
|
switch (vty->node)
|
|
|
|
{
|
|
|
|
case VIEW_NODE:
|
|
|
|
case ENABLE_NODE:
|
|
|
|
exit (0);
|
|
|
|
break;
|
|
|
|
case CONFIG_NODE:
|
|
|
|
vty->node = ENABLE_NODE;
|
|
|
|
break;
|
|
|
|
case INTERFACE_NODE:
|
2014-07-03 12:24:34 +02:00
|
|
|
case NS_NODE:
|
2016-02-02 13:34:29 +01:00
|
|
|
case VRF_NODE:
|
2002-12-13 21:15:29 +01:00
|
|
|
case ZEBRA_NODE:
|
|
|
|
case BGP_NODE:
|
|
|
|
case RIP_NODE:
|
|
|
|
case RIPNG_NODE:
|
|
|
|
case OSPF_NODE:
|
|
|
|
case OSPF6_NODE:
|
2003-12-23 11:39:08 +01:00
|
|
|
case ISIS_NODE:
|
2002-12-13 21:15:29 +01:00
|
|
|
case MASC_NODE:
|
|
|
|
case RMAP_NODE:
|
|
|
|
case VTY_NODE:
|
|
|
|
case KEYCHAIN_NODE:
|
2004-05-10 01:16:40 +02:00
|
|
|
vtysh_execute("end");
|
|
|
|
vtysh_execute("configure terminal");
|
2002-12-13 21:15:29 +01:00
|
|
|
vty->node = CONFIG_NODE;
|
|
|
|
break;
|
|
|
|
case BGP_VPNV4_NODE:
|
2016-06-07 04:29:05 +02:00
|
|
|
case BGP_VPNV6_NODE:
|
2016-01-12 19:42:04 +01:00
|
|
|
case BGP_ENCAP_NODE:
|
|
|
|
case BGP_ENCAPV6_NODE:
|
2002-12-13 21:15:29 +01:00
|
|
|
case BGP_IPV4_NODE:
|
|
|
|
case BGP_IPV4M_NODE:
|
|
|
|
case BGP_IPV6_NODE:
|
2005-08-23 00:44:29 +02:00
|
|
|
case BGP_IPV6M_NODE:
|
2002-12-13 21:15:29 +01:00
|
|
|
vty->node = BGP_NODE;
|
|
|
|
break;
|
|
|
|
case KEYCHAIN_KEY_NODE:
|
|
|
|
vty->node = KEYCHAIN_NODE;
|
|
|
|
break;
|
Update Traffic Engineering Support for OSPFD
NOTE: I am squashing several commits together because they
do not independently compile and we need this ability to
do any type of sane testing on the patches. Since this
series builds together I am doing this. -DBS
This new structure is the basis to get new link parameters for
Traffic Engineering from Zebra/interface layer to OSPFD and ISISD
for the support of Traffic Engineering
* lib/if.[c,h]: link parameters struture and get/set functions
* lib/command.[c,h]: creation of a new link-node
* lib/zclient.[c,h]: modification to the ZBUS message to convey the
link parameters structure
* lib/zebra.h: New ZBUS message
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support for IEEE 754 format
* lib/stream.[c,h]: Add stream_get{f,d} and stream_put{f,d}) demux and muxers to
safely convert between big-endian IEEE-754 single and double binary
format, as used in IETF RFCs, and C99. Implementation depends on host
using __STDC_IEC_559__, which should be everything we care about. Should
correctly error out otherwise.
* lib/network.[c,h]: Add ntohf and htonf converter
* lib/memtypes.c: Add new memeory type for Traffic Engineering support
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add link parameters support to Zebra
* zebra/interface.c:
- Add new link-params CLI commands
- Add new functions to set/get link parameters for interface
* zebra/redistribute.[c,h]: Add new function to propagate link parameters
to routing daemon (essentially OSPFD and ISISD) for Traffic Engineering.
* zebra/redistribute_null.c: Add new function
zebra_interface_parameters_update()
* zebra/zserv.[c,h]: Add new functions to send link parameters
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support of new link-params CLI to vtysh
In vtysh_config.c/vtysh_config_parse_line(), it is not possible to continue
to use the ordered version for adding line i.e. config_add_line_uniq() to print
Interface CLI commands as it completely break the new LINK_PARAMS_NODE.
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Update Traffic Engineering support for OSPFD
These patches update original code to RFC3630 (OSPF-TE) and add support of
RFC5392 (Inter-AS v2) & RFC7471 (TE metric extensions) and partial support
of RFC6827 (ASON - GMPLS).
* ospfd/ospf_dump.[c,h]: Add new dump functions for Traffic Engineering
* ospfd/ospf_opaque.[c,h]: Add new TLV code points for RFC5392
* ospfd/ospf_packet.c: Update checking of OSPF_OPTION
* ospfd/ospf_vty.[c,h]: Update ospf_str2area_id
* ospfd/ospf_zebra.c: Add new function ospf_interface_link_params() to get
Link Parameters information from the interface to populate Traffic Engineering
metrics
* ospfd/ospfd.[c,h]: Update OSPF_OPTION flags (T -> MT and new DN)
* ospfd/ospf_te.[c,h]: Major modifications to update the code to new
link parameters structure and new RFCs
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
tmp
2016-04-19 16:21:46 +02:00
|
|
|
case LINK_PARAMS_NODE:
|
|
|
|
vty->node = INTERFACE_NODE;
|
|
|
|
break;
|
2002-12-13 21:15:29 +01:00
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_exit_all,
|
|
|
|
vtysh_exit_all_cmd,
|
|
|
|
"exit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
{
|
|
|
|
return vtysh_exit (vty);
|
|
|
|
}
|
|
|
|
|
|
|
|
ALIAS (vtysh_exit_all,
|
|
|
|
vtysh_quit_all_cmd,
|
|
|
|
"quit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
exit_address_family,
|
|
|
|
exit_address_family_cmd,
|
|
|
|
"exit-address-family",
|
|
|
|
"Exit from Address Family configuration mode\n")
|
|
|
|
{
|
|
|
|
if (vty->node == BGP_IPV4_NODE
|
|
|
|
|| vty->node == BGP_IPV4M_NODE
|
|
|
|
|| vty->node == BGP_VPNV4_NODE
|
2016-06-07 04:29:05 +02:00
|
|
|
|| vty->node == BGP_VPNV6_NODE
|
2016-01-12 19:42:04 +01:00
|
|
|
|| vty->node == BGP_ENCAP_NODE
|
|
|
|
|| vty->node == BGP_ENCAPV6_NODE
|
2005-08-23 00:44:29 +02:00
|
|
|
|| vty->node == BGP_IPV6_NODE
|
|
|
|
|| vty->node == BGP_IPV6M_NODE)
|
2002-12-13 21:15:29 +01:00
|
|
|
vty->node = BGP_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ZEBRA,
|
|
|
|
vtysh_exit_zebra,
|
|
|
|
vtysh_exit_zebra_cmd,
|
|
|
|
"exit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
{
|
|
|
|
return vtysh_exit (vty);
|
|
|
|
}
|
|
|
|
|
|
|
|
ALIAS (vtysh_exit_zebra,
|
|
|
|
vtysh_quit_zebra_cmd,
|
|
|
|
"quit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_RIPD,
|
|
|
|
vtysh_exit_ripd,
|
|
|
|
vtysh_exit_ripd_cmd,
|
|
|
|
"exit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
{
|
|
|
|
return vtysh_exit (vty);
|
|
|
|
}
|
|
|
|
|
|
|
|
ALIAS (vtysh_exit_ripd,
|
|
|
|
vtysh_quit_ripd_cmd,
|
|
|
|
"quit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
|
2003-03-25 06:07:42 +01:00
|
|
|
DEFUNSH (VTYSH_RIPNGD,
|
2004-08-25 14:22:00 +02:00
|
|
|
vtysh_exit_ripngd,
|
|
|
|
vtysh_exit_ripngd_cmd,
|
|
|
|
"exit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
2003-03-25 06:07:42 +01:00
|
|
|
{
|
|
|
|
return vtysh_exit (vty);
|
|
|
|
}
|
|
|
|
|
|
|
|
ALIAS (vtysh_exit_ripngd,
|
|
|
|
vtysh_quit_ripngd_cmd,
|
|
|
|
"quit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
DEFUNSH (VTYSH_RMAP,
|
|
|
|
vtysh_exit_rmap,
|
|
|
|
vtysh_exit_rmap_cmd,
|
|
|
|
"exit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
{
|
|
|
|
return vtysh_exit (vty);
|
|
|
|
}
|
|
|
|
|
|
|
|
ALIAS (vtysh_exit_rmap,
|
|
|
|
vtysh_quit_rmap_cmd,
|
|
|
|
"quit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_BGPD,
|
|
|
|
vtysh_exit_bgpd,
|
|
|
|
vtysh_exit_bgpd_cmd,
|
|
|
|
"exit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
{
|
|
|
|
return vtysh_exit (vty);
|
|
|
|
}
|
|
|
|
|
|
|
|
ALIAS (vtysh_exit_bgpd,
|
|
|
|
vtysh_quit_bgpd_cmd,
|
|
|
|
"quit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_OSPFD,
|
|
|
|
vtysh_exit_ospfd,
|
|
|
|
vtysh_exit_ospfd_cmd,
|
|
|
|
"exit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
{
|
|
|
|
return vtysh_exit (vty);
|
|
|
|
}
|
|
|
|
|
|
|
|
ALIAS (vtysh_exit_ospfd,
|
|
|
|
vtysh_quit_ospfd_cmd,
|
|
|
|
"quit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
|
2003-03-25 06:07:42 +01:00
|
|
|
DEFUNSH (VTYSH_OSPF6D,
|
2004-08-25 14:22:00 +02:00
|
|
|
vtysh_exit_ospf6d,
|
|
|
|
vtysh_exit_ospf6d_cmd,
|
|
|
|
"exit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
2003-03-25 06:07:42 +01:00
|
|
|
{
|
|
|
|
return vtysh_exit (vty);
|
|
|
|
}
|
|
|
|
|
|
|
|
ALIAS (vtysh_exit_ospf6d,
|
|
|
|
vtysh_quit_ospf6d_cmd,
|
|
|
|
"quit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
|
2003-12-23 11:39:08 +01:00
|
|
|
DEFUNSH (VTYSH_ISISD,
|
2004-08-25 14:22:00 +02:00
|
|
|
vtysh_exit_isisd,
|
|
|
|
vtysh_exit_isisd_cmd,
|
|
|
|
"exit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
2003-12-23 11:39:08 +01:00
|
|
|
{
|
|
|
|
return vtysh_exit (vty);
|
|
|
|
}
|
|
|
|
|
|
|
|
ALIAS (vtysh_exit_isisd,
|
|
|
|
vtysh_quit_isisd_cmd,
|
|
|
|
"quit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
|
2004-10-03 22:11:32 +02:00
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_exit_line_vty,
|
|
|
|
vtysh_exit_line_vty_cmd,
|
|
|
|
"exit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
{
|
|
|
|
return vtysh_exit (vty);
|
|
|
|
}
|
|
|
|
|
|
|
|
ALIAS (vtysh_exit_line_vty,
|
|
|
|
vtysh_quit_line_vty_cmd,
|
|
|
|
"quit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
DEFUNSH (VTYSH_INTERFACE,
|
2002-12-13 21:15:29 +01:00
|
|
|
vtysh_interface,
|
|
|
|
vtysh_interface_cmd,
|
|
|
|
"interface IFNAME",
|
|
|
|
"Select an interface to configure\n"
|
|
|
|
"Interface's name\n")
|
|
|
|
{
|
|
|
|
vty->node = INTERFACE_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2015-05-22 11:40:00 +02:00
|
|
|
ALIAS_SH (VTYSH_ZEBRA,
|
|
|
|
vtysh_interface,
|
|
|
|
vtysh_interface_vrf_cmd,
|
|
|
|
"interface IFNAME " VRF_CMD_STR,
|
|
|
|
"Select an interface to configure\n"
|
2016-02-02 13:34:29 +01:00
|
|
|
"Interface's name\n"
|
|
|
|
VRF_CMD_HELP_STR)
|
2015-05-22 11:40:00 +02:00
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
/* TODO Implement "no interface command in isisd. */
|
2003-05-23 11:25:20 +02:00
|
|
|
DEFSH (VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D,
|
|
|
|
vtysh_no_interface_cmd,
|
|
|
|
"no interface IFNAME",
|
|
|
|
NO_STR
|
|
|
|
"Delete a pseudo interface's configuration\n"
|
|
|
|
"Interface's name\n")
|
|
|
|
|
2015-05-22 11:40:00 +02:00
|
|
|
DEFSH (VTYSH_ZEBRA,
|
|
|
|
vtysh_no_interface_vrf_cmd,
|
|
|
|
"no interface IFNAME " VRF_CMD_STR,
|
|
|
|
NO_STR
|
|
|
|
"Delete a pseudo interface's configuration\n"
|
|
|
|
"Interface's name\n"
|
|
|
|
VRF_CMD_HELP_STR)
|
|
|
|
|
2014-07-03 12:24:34 +02:00
|
|
|
DEFUNSH (VTYSH_NS,
|
|
|
|
vtysh_ns,
|
|
|
|
vtysh_ns_cmd,
|
|
|
|
"logical-router <1-65535 ns NAME",
|
|
|
|
"Enable a logical-router\n"
|
|
|
|
"Specify the logical-router indentifier\n"
|
|
|
|
"The Name Space\n"
|
|
|
|
"The file name in " NS_RUN_DIR ", or a full pathname\n")
|
|
|
|
{
|
|
|
|
vty->node = NS_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2016-02-02 13:34:29 +01:00
|
|
|
DEFUNSH (VTYSH_VRF,
|
|
|
|
vtysh_vrf,
|
|
|
|
vtysh_vrf_cmd,
|
|
|
|
"vrf NAME",
|
|
|
|
"Select a VRF to configure\n"
|
|
|
|
"VRF's name\n")
|
|
|
|
{
|
|
|
|
vty->node = VRF_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFSH (VTYSH_ZEBRA,
|
|
|
|
vtysh_no_vrf_cmd,
|
|
|
|
"no vrf NAME",
|
|
|
|
NO_STR
|
|
|
|
"Delete a pseudo vrf's configuration\n"
|
|
|
|
"VRF's name\n")
|
|
|
|
|
2014-07-03 12:24:34 +02:00
|
|
|
DEFUNSH (VTYSH_NS,
|
|
|
|
vtysh_exit_ns,
|
|
|
|
vtysh_exit_ns_cmd,
|
|
|
|
"exit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
{
|
|
|
|
return vtysh_exit (vty);
|
|
|
|
}
|
|
|
|
|
|
|
|
ALIAS (vtysh_exit_ns,
|
|
|
|
vtysh_quit_ns_cmd,
|
|
|
|
"quit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
|
2016-02-02 13:34:29 +01:00
|
|
|
DEFUNSH (VTYSH_VRF,
|
|
|
|
vtysh_exit_vrf,
|
|
|
|
vtysh_exit_vrf_cmd,
|
|
|
|
"exit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
{
|
|
|
|
return vtysh_exit (vty);
|
|
|
|
}
|
|
|
|
|
|
|
|
ALIAS (vtysh_exit_vrf,
|
|
|
|
vtysh_quit_vrf_cmd,
|
|
|
|
"quit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
/* TODO Implement interface description commands in ripngd, ospf6d
|
|
|
|
* and isisd. */
|
2003-03-01 16:44:10 +01:00
|
|
|
DEFSH (VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_OSPFD,
|
|
|
|
interface_desc_cmd,
|
|
|
|
"description .LINE",
|
|
|
|
"Interface specific description\n"
|
|
|
|
"Characters describing this interface\n")
|
2003-03-28 03:25:45 +01:00
|
|
|
|
|
|
|
DEFSH (VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_OSPFD,
|
|
|
|
no_interface_desc_cmd,
|
|
|
|
"no description",
|
|
|
|
NO_STR
|
|
|
|
"Interface specific description\n")
|
2003-03-01 16:44:10 +01:00
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
DEFUNSH (VTYSH_INTERFACE,
|
2002-12-13 21:15:29 +01:00
|
|
|
vtysh_exit_interface,
|
|
|
|
vtysh_exit_interface_cmd,
|
|
|
|
"exit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
{
|
|
|
|
return vtysh_exit (vty);
|
|
|
|
}
|
|
|
|
|
|
|
|
ALIAS (vtysh_exit_interface,
|
|
|
|
vtysh_quit_interface_cmd,
|
|
|
|
"quit",
|
|
|
|
"Exit current mode and down to previous mode\n")
|
|
|
|
|
2015-08-20 03:33:13 +02:00
|
|
|
DEFUN (vtysh_show_thread,
|
|
|
|
vtysh_show_thread_cmd,
|
|
|
|
"show thread cpu [FILTER]",
|
|
|
|
SHOW_STR
|
|
|
|
"Thread information\n"
|
|
|
|
"Thread CPU usage\n"
|
|
|
|
"Display filter (rwtexb)\n")
|
|
|
|
{
|
|
|
|
unsigned int i;
|
|
|
|
int ret = CMD_SUCCESS;
|
|
|
|
char line[100];
|
|
|
|
|
|
|
|
sprintf(line, "show thread cpu %s\n", (argc == 1) ? argv[0] : "");
|
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
|
|
|
if ( vtysh_client[i].fd >= 0 )
|
|
|
|
{
|
|
|
|
fprintf (stdout, "Thread statistics for %s:\n",
|
|
|
|
vtysh_client[i].name);
|
|
|
|
ret = vtysh_client_execute (&vtysh_client[i], line, stdout);
|
|
|
|
fprintf (stdout,"\n");
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (vtysh_show_work_queues,
|
|
|
|
vtysh_show_work_queues_cmd,
|
|
|
|
"show work-queues",
|
|
|
|
SHOW_STR
|
|
|
|
"Work Queue information\n")
|
|
|
|
{
|
|
|
|
unsigned int i;
|
|
|
|
int ret = CMD_SUCCESS;
|
|
|
|
char line[] = "show work-queues\n";
|
|
|
|
|
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
|
|
|
if ( vtysh_client[i].fd >= 0 )
|
|
|
|
{
|
|
|
|
fprintf (stdout, "Work queue statistics for %s:\n",
|
|
|
|
vtysh_client[i].name);
|
|
|
|
ret = vtysh_client_execute (&vtysh_client[i], line, stdout);
|
|
|
|
fprintf (stdout,"\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2016-02-25 13:29:29 +01:00
|
|
|
DEFUN (vtysh_show_work_queues_daemon,
|
|
|
|
vtysh_show_work_queues_daemon_cmd,
|
|
|
|
"show work-queues (zebra|ripd|ripngd|ospfd|ospf6d|bgpd|isisd)",
|
|
|
|
SHOW_STR
|
|
|
|
"Work Queue information\n"
|
|
|
|
"For the zebra daemon\n"
|
|
|
|
"For the rip daemon\n"
|
|
|
|
"For the ripng daemon\n"
|
|
|
|
"For the ospf daemon\n"
|
|
|
|
"For the ospfv6 daemon\n"
|
|
|
|
"For the bgp daemon\n"
|
|
|
|
"For the isis daemon\n")
|
|
|
|
{
|
|
|
|
unsigned int i;
|
|
|
|
int ret = CMD_SUCCESS;
|
|
|
|
|
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
|
|
|
{
|
|
|
|
if (begins_with(vtysh_client[i].name, argv[0]))
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = vtysh_client_execute(&vtysh_client[i], "show work-queues\n", stdout);
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
Update Traffic Engineering Support for OSPFD
NOTE: I am squashing several commits together because they
do not independently compile and we need this ability to
do any type of sane testing on the patches. Since this
series builds together I am doing this. -DBS
This new structure is the basis to get new link parameters for
Traffic Engineering from Zebra/interface layer to OSPFD and ISISD
for the support of Traffic Engineering
* lib/if.[c,h]: link parameters struture and get/set functions
* lib/command.[c,h]: creation of a new link-node
* lib/zclient.[c,h]: modification to the ZBUS message to convey the
link parameters structure
* lib/zebra.h: New ZBUS message
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support for IEEE 754 format
* lib/stream.[c,h]: Add stream_get{f,d} and stream_put{f,d}) demux and muxers to
safely convert between big-endian IEEE-754 single and double binary
format, as used in IETF RFCs, and C99. Implementation depends on host
using __STDC_IEC_559__, which should be everything we care about. Should
correctly error out otherwise.
* lib/network.[c,h]: Add ntohf and htonf converter
* lib/memtypes.c: Add new memeory type for Traffic Engineering support
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add link parameters support to Zebra
* zebra/interface.c:
- Add new link-params CLI commands
- Add new functions to set/get link parameters for interface
* zebra/redistribute.[c,h]: Add new function to propagate link parameters
to routing daemon (essentially OSPFD and ISISD) for Traffic Engineering.
* zebra/redistribute_null.c: Add new function
zebra_interface_parameters_update()
* zebra/zserv.[c,h]: Add new functions to send link parameters
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support of new link-params CLI to vtysh
In vtysh_config.c/vtysh_config_parse_line(), it is not possible to continue
to use the ordered version for adding line i.e. config_add_line_uniq() to print
Interface CLI commands as it completely break the new LINK_PARAMS_NODE.
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Update Traffic Engineering support for OSPFD
These patches update original code to RFC3630 (OSPF-TE) and add support of
RFC5392 (Inter-AS v2) & RFC7471 (TE metric extensions) and partial support
of RFC6827 (ASON - GMPLS).
* ospfd/ospf_dump.[c,h]: Add new dump functions for Traffic Engineering
* ospfd/ospf_opaque.[c,h]: Add new TLV code points for RFC5392
* ospfd/ospf_packet.c: Update checking of OSPF_OPTION
* ospfd/ospf_vty.[c,h]: Update ospf_str2area_id
* ospfd/ospf_zebra.c: Add new function ospf_interface_link_params() to get
Link Parameters information from the interface to populate Traffic Engineering
metrics
* ospfd/ospfd.[c,h]: Update OSPF_OPTION flags (T -> MT and new DN)
* ospfd/ospf_te.[c,h]: Major modifications to update the code to new
link parameters structure and new RFCs
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
tmp
2016-04-19 16:21:46 +02:00
|
|
|
DEFUNSH (VTYSH_ZEBRA,
|
|
|
|
vtysh_link_params,
|
|
|
|
vtysh_link_params_cmd,
|
|
|
|
"link-params",
|
|
|
|
LINK_PARAMS_STR
|
|
|
|
)
|
|
|
|
{
|
|
|
|
vty->node = LINK_PARAMS_NODE;
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2006-05-28 09:54:45 +02:00
|
|
|
/* Memory */
|
|
|
|
DEFUN (vtysh_show_memory,
|
|
|
|
vtysh_show_memory_cmd,
|
|
|
|
"show memory",
|
|
|
|
SHOW_STR
|
|
|
|
"Memory statistics\n")
|
|
|
|
{
|
|
|
|
unsigned int i;
|
|
|
|
int ret = CMD_SUCCESS;
|
|
|
|
char line[] = "show memory\n";
|
|
|
|
|
2012-09-26 10:39:10 +02:00
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
2006-05-28 09:54:45 +02:00
|
|
|
if ( vtysh_client[i].fd >= 0 )
|
|
|
|
{
|
|
|
|
fprintf (stdout, "Memory statistics for %s:\n",
|
|
|
|
vtysh_client[i].name);
|
|
|
|
ret = vtysh_client_execute (&vtysh_client[i], line, stdout);
|
|
|
|
fprintf (stdout,"\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
/* Logging commands. */
|
2006-05-24 00:10:01 +02:00
|
|
|
DEFUN (vtysh_show_logging,
|
|
|
|
vtysh_show_logging_cmd,
|
|
|
|
"show logging",
|
|
|
|
SHOW_STR
|
|
|
|
"Show current logging configuration\n")
|
|
|
|
{
|
|
|
|
unsigned int i;
|
|
|
|
int ret = CMD_SUCCESS;
|
|
|
|
char line[] = "show logging\n";
|
|
|
|
|
2012-09-26 10:39:10 +02:00
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
2006-05-24 00:10:55 +02:00
|
|
|
if ( vtysh_client[i].fd >= 0 )
|
|
|
|
{
|
|
|
|
fprintf (stdout,"Logging configuration for %s:\n",
|
|
|
|
vtysh_client[i].name);
|
|
|
|
ret = vtysh_client_execute (&vtysh_client[i], line, stdout);
|
|
|
|
fprintf (stdout,"\n");
|
|
|
|
}
|
|
|
|
|
2006-05-24 00:10:01 +02:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_log_stdout,
|
|
|
|
vtysh_log_stdout_cmd,
|
|
|
|
"log stdout",
|
|
|
|
"Logging control\n"
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
"Set stdout logging level\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_log_stdout_level,
|
|
|
|
vtysh_log_stdout_level_cmd,
|
|
|
|
"log stdout "LOG_LEVELS,
|
|
|
|
"Logging control\n"
|
|
|
|
"Set stdout logging level\n"
|
|
|
|
LOG_LEVEL_DESC)
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
no_vtysh_log_stdout,
|
|
|
|
no_vtysh_log_stdout_cmd,
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
"no log stdout [LEVEL]",
|
2004-08-26 15:08:30 +02:00
|
|
|
NO_STR
|
|
|
|
"Logging control\n"
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
"Cancel logging to stdout\n"
|
|
|
|
"Logging level\n")
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_log_file,
|
|
|
|
vtysh_log_file_cmd,
|
|
|
|
"log file FILENAME",
|
|
|
|
"Logging control\n"
|
|
|
|
"Logging to file\n"
|
|
|
|
"Logging filename\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_log_file_level,
|
|
|
|
vtysh_log_file_level_cmd,
|
|
|
|
"log file FILENAME "LOG_LEVELS,
|
|
|
|
"Logging control\n"
|
|
|
|
"Logging to file\n"
|
|
|
|
"Logging filename\n"
|
|
|
|
LOG_LEVEL_DESC)
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
no_vtysh_log_file,
|
|
|
|
no_vtysh_log_file_cmd,
|
|
|
|
"no log file [FILENAME]",
|
|
|
|
NO_STR
|
|
|
|
"Logging control\n"
|
|
|
|
"Cancel logging to file\n"
|
|
|
|
"Logging file name\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
ALIAS_SH (VTYSH_ALL,
|
|
|
|
no_vtysh_log_file,
|
|
|
|
no_vtysh_log_file_level_cmd,
|
|
|
|
"no log file FILENAME LEVEL",
|
|
|
|
NO_STR
|
|
|
|
"Logging control\n"
|
|
|
|
"Cancel logging to file\n"
|
|
|
|
"Logging file name\n"
|
|
|
|
"Logging level\n")
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_log_monitor,
|
|
|
|
vtysh_log_monitor_cmd,
|
|
|
|
"log monitor",
|
|
|
|
"Logging control\n"
|
|
|
|
"Set terminal line (monitor) logging level\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_log_monitor_level,
|
|
|
|
vtysh_log_monitor_level_cmd,
|
|
|
|
"log monitor "LOG_LEVELS,
|
|
|
|
"Logging control\n"
|
|
|
|
"Set terminal line (monitor) logging level\n"
|
|
|
|
LOG_LEVEL_DESC)
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
no_vtysh_log_monitor,
|
|
|
|
no_vtysh_log_monitor_cmd,
|
|
|
|
"no log monitor [LEVEL]",
|
|
|
|
NO_STR
|
|
|
|
"Logging control\n"
|
|
|
|
"Disable terminal line (monitor) logging\n"
|
|
|
|
"Logging level\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_log_syslog,
|
|
|
|
vtysh_log_syslog_cmd,
|
|
|
|
"log syslog",
|
|
|
|
"Logging control\n"
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
"Set syslog logging level\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_log_syslog_level,
|
|
|
|
vtysh_log_syslog_level_cmd,
|
|
|
|
"log syslog "LOG_LEVELS,
|
|
|
|
"Logging control\n"
|
|
|
|
"Set syslog logging level\n"
|
|
|
|
LOG_LEVEL_DESC)
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
no_vtysh_log_syslog,
|
|
|
|
no_vtysh_log_syslog_cmd,
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
"no log syslog [LEVEL]",
|
2004-08-26 15:08:30 +02:00
|
|
|
NO_STR
|
|
|
|
"Logging control\n"
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
"Cancel logging to syslog\n"
|
|
|
|
"Logging level\n")
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
vtysh_log_facility,
|
|
|
|
vtysh_log_facility_cmd,
|
|
|
|
"log facility "LOG_FACILITIES,
|
2004-08-26 15:08:30 +02:00
|
|
|
"Logging control\n"
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
"Facility parameter for syslog messages\n"
|
|
|
|
LOG_FACILITY_DESC)
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
no_vtysh_log_facility,
|
|
|
|
no_vtysh_log_facility_cmd,
|
|
|
|
"no log facility [FACILITY]",
|
2004-08-26 15:08:30 +02:00
|
|
|
NO_STR
|
|
|
|
"Logging control\n"
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
"Reset syslog facility to default (daemon)\n"
|
|
|
|
"Syslog facility\n")
|
|
|
|
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH_DEPRECATED (VTYSH_ALL,
|
|
|
|
vtysh_log_trap,
|
|
|
|
vtysh_log_trap_cmd,
|
|
|
|
"log trap "LOG_LEVELS,
|
|
|
|
"Logging control\n"
|
|
|
|
"(Deprecated) Set logging level and default for all destinations\n"
|
|
|
|
LOG_LEVEL_DESC)
|
|
|
|
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH_DEPRECATED (VTYSH_ALL,
|
|
|
|
no_vtysh_log_trap,
|
|
|
|
no_vtysh_log_trap_cmd,
|
|
|
|
"no log trap [LEVEL]",
|
|
|
|
NO_STR
|
|
|
|
"Logging control\n"
|
|
|
|
"Permit all logging information\n"
|
|
|
|
"Logging level\n")
|
2004-08-26 15:08:30 +02:00
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_log_record_priority,
|
|
|
|
vtysh_log_record_priority_cmd,
|
|
|
|
"log record-priority",
|
|
|
|
"Logging control\n"
|
|
|
|
"Log the priority of the message within the message\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
no_vtysh_log_record_priority,
|
|
|
|
no_vtysh_log_record_priority_cmd,
|
|
|
|
"no log record-priority",
|
|
|
|
NO_STR
|
|
|
|
"Logging control\n"
|
|
|
|
"Do not log the priority of the message within the message\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2007-04-29 05:53:31 +02:00
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_log_timestamp_precision,
|
|
|
|
vtysh_log_timestamp_precision_cmd,
|
|
|
|
"log timestamp precision <0-6>",
|
|
|
|
"Logging control\n"
|
|
|
|
"Timestamp configuration\n"
|
|
|
|
"Set the timestamp precision\n"
|
|
|
|
"Number of subsecond digits\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
no_vtysh_log_timestamp_precision,
|
|
|
|
no_vtysh_log_timestamp_precision_cmd,
|
|
|
|
"no log timestamp precision",
|
|
|
|
NO_STR
|
|
|
|
"Logging control\n"
|
|
|
|
"Timestamp configuration\n"
|
|
|
|
"Reset the timestamp precision to the default value of 0\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2004-10-03 22:11:32 +02:00
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_service_password_encrypt,
|
|
|
|
vtysh_service_password_encrypt_cmd,
|
|
|
|
"service password-encryption",
|
|
|
|
"Set up miscellaneous service\n"
|
|
|
|
"Enable encrypted passwords\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
no_vtysh_service_password_encrypt,
|
|
|
|
no_vtysh_service_password_encrypt_cmd,
|
|
|
|
"no service password-encryption",
|
|
|
|
NO_STR
|
|
|
|
"Set up miscellaneous service\n"
|
|
|
|
"Enable encrypted passwords\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_config_password,
|
|
|
|
vtysh_password_cmd,
|
|
|
|
"password (8|) WORD",
|
|
|
|
"Assign the terminal connection password\n"
|
|
|
|
"Specifies a HIDDEN password will follow\n"
|
|
|
|
"dummy string \n"
|
|
|
|
"The HIDDEN line password string\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_password_text,
|
|
|
|
vtysh_password_text_cmd,
|
|
|
|
"password LINE",
|
|
|
|
"Assign the terminal connection password\n"
|
|
|
|
"The UNENCRYPTED (cleartext) line password\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_config_enable_password,
|
|
|
|
vtysh_enable_password_cmd,
|
|
|
|
"enable password (8|) WORD",
|
|
|
|
"Modify enable password parameters\n"
|
|
|
|
"Assign the privileged level password\n"
|
|
|
|
"Specifies a HIDDEN password will follow\n"
|
|
|
|
"dummy string \n"
|
|
|
|
"The HIDDEN 'enable' password string\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
vtysh_enable_password_text,
|
|
|
|
vtysh_enable_password_text_cmd,
|
|
|
|
"enable password LINE",
|
|
|
|
"Modify enable password parameters\n"
|
|
|
|
"Assign the privileged level password\n"
|
|
|
|
"The UNENCRYPTED (cleartext) 'enable' password\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUNSH (VTYSH_ALL,
|
|
|
|
no_vtysh_config_enable_password,
|
|
|
|
no_vtysh_enable_password_cmd,
|
|
|
|
"no enable password",
|
|
|
|
NO_STR
|
|
|
|
"Modify enable password parameters\n"
|
|
|
|
"Assign the privileged level password\n")
|
|
|
|
{
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
DEFUN (vtysh_write_terminal,
|
|
|
|
vtysh_write_terminal_cmd,
|
|
|
|
"write terminal",
|
|
|
|
"Write running configuration to memory, network, or terminal\n"
|
|
|
|
"Write to terminal\n")
|
|
|
|
{
|
2005-01-28 22:11:46 +01:00
|
|
|
u_int i;
|
2002-12-13 21:15:29 +01:00
|
|
|
char line[] = "write terminal\n";
|
|
|
|
FILE *fp = NULL;
|
|
|
|
|
|
|
|
if (vtysh_pager_name)
|
|
|
|
{
|
2002-12-13 21:49:00 +01:00
|
|
|
fp = popen (vtysh_pager_name, "w");
|
2002-12-13 21:15:29 +01:00
|
|
|
if (fp == NULL)
|
|
|
|
{
|
|
|
|
perror ("popen");
|
|
|
|
exit (1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
fp = stdout;
|
|
|
|
|
|
|
|
vty_out (vty, "Building configuration...%s", VTY_NEWLINE);
|
|
|
|
vty_out (vty, "%sCurrent configuration:%s", VTY_NEWLINE,
|
|
|
|
VTY_NEWLINE);
|
2004-10-03 22:11:32 +02:00
|
|
|
vty_out (vty, "!%s", VTY_NEWLINE);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
2012-09-26 10:39:10 +02:00
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
2016-07-18 08:08:05 +02:00
|
|
|
if ((argc < 1 ) || (begins_with(vtysh_client[i].name, argv[0])))
|
|
|
|
vtysh_client_config (&vtysh_client[i], line);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
2004-10-03 22:11:32 +02:00
|
|
|
/* Integrate vtysh specific configuration. */
|
|
|
|
vtysh_config_write ();
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
vtysh_config_dump (fp);
|
|
|
|
|
|
|
|
if (vtysh_pager_name && fp)
|
|
|
|
{
|
|
|
|
fflush (fp);
|
|
|
|
if (pclose (fp) == -1)
|
|
|
|
{
|
|
|
|
perror ("pclose");
|
|
|
|
exit (1);
|
|
|
|
}
|
|
|
|
fp = NULL;
|
|
|
|
}
|
|
|
|
|
2009-06-23 07:55:57 +02:00
|
|
|
vty_out (vty, "end%s", VTY_NEWLINE);
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2015-09-22 21:00:57 +02:00
|
|
|
DEFUN (vtysh_write_terminal_daemon,
|
|
|
|
vtysh_write_terminal_daemon_cmd,
|
2016-06-01 21:34:21 +02:00
|
|
|
"write terminal (zebra|ripd|ripngd|ospfd|ospf6d|bgpd|isisd|pimd)",
|
2015-09-22 21:00:57 +02:00
|
|
|
"Write running configuration to memory, network, or terminal\n"
|
|
|
|
"Write to terminal\n"
|
|
|
|
"For the zebra daemon\n"
|
|
|
|
"For the rip daemon\n"
|
|
|
|
"For the ripng daemon\n"
|
|
|
|
"For the ospf daemon\n"
|
|
|
|
"For the ospfv6 daemon\n"
|
|
|
|
"For the bgp daemon\n"
|
2016-06-01 21:34:21 +02:00
|
|
|
"For the isis daemon\n"
|
|
|
|
"For the pim daemon\n")
|
2015-09-22 21:00:57 +02:00
|
|
|
{
|
|
|
|
unsigned int i;
|
|
|
|
int ret = CMD_SUCCESS;
|
|
|
|
|
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
|
|
|
{
|
2015-10-16 22:53:03 +02:00
|
|
|
if (begins_with(vtysh_client[i].name, argv[0]))
|
2015-09-22 21:00:57 +02:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = vtysh_client_execute(&vtysh_client[i], "show running-config\n", stdout);
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2004-10-03 22:11:32 +02:00
|
|
|
DEFUN (vtysh_integrated_config,
|
|
|
|
vtysh_integrated_config_cmd,
|
|
|
|
"service integrated-vtysh-config",
|
|
|
|
"Set up miscellaneous service\n"
|
|
|
|
"Write configuration into integrated file\n")
|
2002-12-13 21:49:00 +01:00
|
|
|
{
|
2004-10-03 22:11:32 +02:00
|
|
|
vtysh_writeconfig_integrated = 1;
|
|
|
|
return CMD_SUCCESS;
|
2002-12-13 21:49:00 +01:00
|
|
|
}
|
|
|
|
|
2004-10-03 22:11:32 +02:00
|
|
|
DEFUN (no_vtysh_integrated_config,
|
|
|
|
no_vtysh_integrated_config_cmd,
|
|
|
|
"no service integrated-vtysh-config",
|
|
|
|
NO_STR
|
|
|
|
"Set up miscellaneous service\n"
|
|
|
|
"Write configuration into integrated file\n")
|
2002-12-13 21:49:00 +01:00
|
|
|
{
|
2004-10-03 22:11:32 +02:00
|
|
|
vtysh_writeconfig_integrated = 0;
|
|
|
|
return CMD_SUCCESS;
|
2002-12-13 21:49:00 +01:00
|
|
|
}
|
|
|
|
|
2015-05-20 03:29:18 +02:00
|
|
|
static void
|
|
|
|
backup_config_file (const char *fbackup)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
char *integrate_sav = NULL;
|
|
|
|
|
2015-05-20 03:29:18 +02:00
|
|
|
integrate_sav = malloc (strlen (fbackup) +
|
2004-08-26 15:08:30 +02:00
|
|
|
strlen (CONF_BACKUP_EXT) + 1);
|
2015-05-20 03:29:18 +02:00
|
|
|
strcpy (integrate_sav, fbackup);
|
2002-12-13 21:15:29 +01:00
|
|
|
strcat (integrate_sav, CONF_BACKUP_EXT);
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
/* Move current configuration file to backup config file. */
|
2002-12-13 21:15:29 +01:00
|
|
|
unlink (integrate_sav);
|
2015-05-20 03:29:18 +02:00
|
|
|
rename (fbackup, integrate_sav);
|
2004-08-26 15:08:30 +02:00
|
|
|
free (integrate_sav);
|
2015-05-20 03:29:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
write_config_integrated(void)
|
|
|
|
{
|
|
|
|
u_int i;
|
|
|
|
char line[] = "write terminal\n";
|
|
|
|
FILE *fp, *fp1;
|
|
|
|
|
|
|
|
fprintf (stdout,"Building Configuration...\n");
|
|
|
|
|
|
|
|
backup_config_file(integrate_default);
|
|
|
|
backup_config_file(host.config);
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
fp = fopen (integrate_default, "w");
|
|
|
|
if (fp == NULL)
|
|
|
|
{
|
2016-04-06 15:34:33 +02:00
|
|
|
fprintf (stdout,"%% Can't open configuration file %s due to '%s'\n",
|
|
|
|
integrate_default, safe_strerror(errno));
|
2002-12-13 21:15:29 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2015-05-20 03:29:18 +02:00
|
|
|
fp1 = fopen (host.config, "w");
|
|
|
|
if (fp1 == NULL)
|
|
|
|
{
|
2016-04-06 15:34:33 +02:00
|
|
|
fprintf (stdout,"%% Can't open configuration file %s due to '%s'\n",
|
|
|
|
host.config, safe_strerror(errno));
|
2015-05-20 03:29:18 +02:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
vtysh_config_write ();
|
|
|
|
vtysh_config_dump (fp1);
|
|
|
|
|
|
|
|
fclose (fp1);
|
2012-09-26 10:39:10 +02:00
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
2015-05-20 03:29:15 +02:00
|
|
|
vtysh_client_config (&vtysh_client[i], line);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
2015-05-20 03:29:17 +02:00
|
|
|
vtysh_config_write ();
|
2002-12-13 21:15:29 +01:00
|
|
|
vtysh_config_dump (fp);
|
|
|
|
|
|
|
|
fclose (fp);
|
|
|
|
|
2003-12-22 21:15:53 +01:00
|
|
|
if (chmod (integrate_default, CONFIGFILE_MASK) != 0)
|
|
|
|
{
|
2016-04-06 15:34:33 +02:00
|
|
|
fprintf (stdout,"%% Can't chmod configuration file %s: %s\n",
|
|
|
|
integrate_default, safe_strerror(errno));
|
2003-12-22 21:15:53 +01:00
|
|
|
return CMD_WARNING;
|
|
|
|
}
|
|
|
|
|
2015-05-20 03:29:18 +02:00
|
|
|
if (chmod (host.config, CONFIGFILE_MASK) != 0)
|
|
|
|
{
|
|
|
|
fprintf (stdout,"%% Can't chmod configuration file %s: %s (%d)\n",
|
|
|
|
integrate_default, safe_strerror(errno), errno);
|
|
|
|
return CMD_WARNING;
|
|
|
|
}
|
2002-12-13 21:49:00 +01:00
|
|
|
fprintf(stdout,"Integrated configuration saved to %s\n",integrate_default);
|
|
|
|
|
|
|
|
fprintf (stdout,"[OK]\n");
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2002-12-13 21:49:00 +01:00
|
|
|
DEFUN (vtysh_write_memory,
|
|
|
|
vtysh_write_memory_cmd,
|
|
|
|
"write memory",
|
|
|
|
"Write running configuration to memory, network, or terminal\n"
|
|
|
|
"Write configuration to the file (same as write file)\n")
|
|
|
|
{
|
2003-04-19 01:55:29 +02:00
|
|
|
int ret = CMD_SUCCESS;
|
2002-12-13 21:49:00 +01:00
|
|
|
char line[] = "write memory\n";
|
2005-01-28 22:11:46 +01:00
|
|
|
u_int i;
|
2015-05-20 03:29:18 +02:00
|
|
|
FILE *fp;
|
|
|
|
|
2004-10-03 22:11:32 +02:00
|
|
|
/* If integrated Quagga.conf explicitely set. */
|
|
|
|
if (vtysh_writeconfig_integrated)
|
|
|
|
return write_config_integrated();
|
2015-05-20 03:29:18 +02:00
|
|
|
else
|
|
|
|
backup_config_file(integrate_default);
|
2002-12-13 21:49:00 +01:00
|
|
|
|
|
|
|
fprintf (stdout,"Building Configuration...\n");
|
|
|
|
|
2012-09-26 10:39:10 +02:00
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
2005-01-28 22:11:46 +01:00
|
|
|
ret = vtysh_client_execute (&vtysh_client[i], line, stdout);
|
2015-05-20 03:29:18 +02:00
|
|
|
|
|
|
|
|
|
|
|
fp = fopen(host.config, "w");
|
|
|
|
if (fp == NULL)
|
|
|
|
{
|
2016-04-06 15:34:33 +02:00
|
|
|
fprintf (stdout,"%% Can't open configuration file %s due to '%s'\n",
|
|
|
|
host.config, safe_strerror(errno));
|
2015-05-20 03:29:18 +02:00
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
vtysh_config_write ();
|
|
|
|
vtysh_config_dump (fp);
|
|
|
|
|
|
|
|
fclose (fp);
|
|
|
|
|
|
|
|
if (chmod (host.config, CONFIGFILE_MASK) != 0)
|
|
|
|
{
|
2016-04-06 15:34:33 +02:00
|
|
|
fprintf (stdout,"%% Can't chmod configuration file %s: %s\n",
|
|
|
|
integrate_default, safe_strerror(errno));
|
2015-05-20 03:29:18 +02:00
|
|
|
return CMD_WARNING;
|
|
|
|
}
|
|
|
|
|
2002-12-13 21:49:00 +01:00
|
|
|
fprintf (stdout,"[OK]\n");
|
|
|
|
|
2003-04-19 01:55:29 +02:00
|
|
|
return ret;
|
2002-12-13 21:49:00 +01:00
|
|
|
}
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
ALIAS (vtysh_write_memory,
|
|
|
|
vtysh_copy_runningconfig_startupconfig_cmd,
|
|
|
|
"copy running-config startup-config",
|
|
|
|
"Copy from one file to another\n"
|
|
|
|
"Copy from current system configuration\n"
|
|
|
|
"Copy to startup configuration\n")
|
|
|
|
|
|
|
|
ALIAS (vtysh_write_memory,
|
|
|
|
vtysh_write_file_cmd,
|
|
|
|
"write file",
|
|
|
|
"Write running configuration to memory, network, or terminal\n"
|
|
|
|
"Write configuration to the file (same as write memory)\n")
|
|
|
|
|
2003-05-25 13:51:29 +02:00
|
|
|
ALIAS (vtysh_write_memory,
|
|
|
|
vtysh_write_cmd,
|
|
|
|
"write",
|
|
|
|
"Write running configuration to memory, network, or terminal\n")
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
ALIAS (vtysh_write_terminal,
|
|
|
|
vtysh_show_running_config_cmd,
|
|
|
|
"show running-config",
|
|
|
|
SHOW_STR
|
|
|
|
"Current operating configuration\n")
|
2004-08-25 14:22:00 +02:00
|
|
|
|
2016-07-18 08:08:05 +02:00
|
|
|
ALIAS (vtysh_write_terminal,
|
2015-09-22 21:00:57 +02:00
|
|
|
vtysh_show_running_config_daemon_cmd,
|
2016-06-01 21:34:21 +02:00
|
|
|
"show running-config (zebra|ripd|ripngd|ospfd|ospf6d|bgpd|isisd|pimd)",
|
2015-09-22 21:00:57 +02:00
|
|
|
SHOW_STR
|
|
|
|
"Current operating configuration\n"
|
|
|
|
"For the zebra daemon\n"
|
|
|
|
"For the rip daemon\n"
|
|
|
|
"For the ripng daemon\n"
|
|
|
|
"For the ospf daemon\n"
|
|
|
|
"For the ospfv6 daemon\n"
|
|
|
|
"For the bgp daemon\n"
|
2016-06-01 21:34:21 +02:00
|
|
|
"For the isis daemon\n"
|
|
|
|
"For the pim daemon\n")
|
2015-09-22 21:00:57 +02:00
|
|
|
|
2004-08-27 15:56:39 +02:00
|
|
|
DEFUN (vtysh_terminal_length,
|
|
|
|
vtysh_terminal_length_cmd,
|
|
|
|
"terminal length <0-512>",
|
|
|
|
"Set terminal line parameters\n"
|
|
|
|
"Set number of lines on a screen\n"
|
|
|
|
"Number of lines on screen (0 for no pausing)\n")
|
|
|
|
{
|
|
|
|
int lines;
|
|
|
|
char *endptr = NULL;
|
|
|
|
char default_pager[10];
|
|
|
|
|
|
|
|
lines = strtol (argv[0], &endptr, 10);
|
|
|
|
if (lines < 0 || lines > 512 || *endptr != '\0')
|
|
|
|
{
|
|
|
|
vty_out (vty, "length is malformed%s", VTY_NEWLINE);
|
|
|
|
return CMD_WARNING;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (vtysh_pager_name)
|
|
|
|
{
|
|
|
|
free (vtysh_pager_name);
|
|
|
|
vtysh_pager_name = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (lines != 0)
|
|
|
|
{
|
|
|
|
snprintf(default_pager, 10, "more -%i", lines);
|
|
|
|
vtysh_pager_name = strdup (default_pager);
|
|
|
|
}
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (vtysh_terminal_no_length,
|
|
|
|
vtysh_terminal_no_length_cmd,
|
|
|
|
"terminal no length",
|
|
|
|
"Set terminal line parameters\n"
|
|
|
|
NO_STR
|
|
|
|
"Set number of lines on a screen\n")
|
|
|
|
{
|
|
|
|
if (vtysh_pager_name)
|
|
|
|
{
|
|
|
|
free (vtysh_pager_name);
|
|
|
|
vtysh_pager_name = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
vtysh_pager_init();
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2004-10-28 19:43:11 +02:00
|
|
|
DEFUN (vtysh_show_daemons,
|
|
|
|
vtysh_show_daemons_cmd,
|
|
|
|
"show daemons",
|
2004-10-03 22:11:32 +02:00
|
|
|
SHOW_STR
|
|
|
|
"Show list of running daemons\n")
|
|
|
|
{
|
2005-01-28 22:11:46 +01:00
|
|
|
u_int i;
|
|
|
|
|
2012-09-26 10:39:10 +02:00
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
2005-01-28 22:11:46 +01:00
|
|
|
if ( vtysh_client[i].fd >= 0 )
|
|
|
|
vty_out(vty, " %s", vtysh_client[i].name);
|
2004-10-03 22:11:32 +02:00
|
|
|
vty_out(vty, "%s", VTY_NEWLINE);
|
|
|
|
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
/* Execute command in child process. */
|
2015-05-20 03:29:15 +02:00
|
|
|
static void
|
2004-10-11 15:20:40 +02:00
|
|
|
execute_command (const char *command, int argc, const char *arg1,
|
|
|
|
const char *arg2)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
pid_t pid;
|
|
|
|
int status;
|
|
|
|
|
|
|
|
/* Call fork(). */
|
|
|
|
pid = fork ();
|
|
|
|
|
|
|
|
if (pid < 0)
|
|
|
|
{
|
|
|
|
/* Failure of fork(). */
|
2004-11-20 03:06:59 +01:00
|
|
|
fprintf (stderr, "Can't fork: %s\n", safe_strerror (errno));
|
2002-12-13 21:15:29 +01:00
|
|
|
exit (1);
|
|
|
|
}
|
|
|
|
else if (pid == 0)
|
|
|
|
{
|
|
|
|
/* This is child process. */
|
|
|
|
switch (argc)
|
|
|
|
{
|
|
|
|
case 0:
|
2015-05-20 03:29:15 +02:00
|
|
|
execlp (command, command, (const char *)NULL);
|
2002-12-13 21:15:29 +01:00
|
|
|
break;
|
|
|
|
case 1:
|
2015-05-20 03:29:15 +02:00
|
|
|
execlp (command, command, arg1, (const char *)NULL);
|
2002-12-13 21:15:29 +01:00
|
|
|
break;
|
|
|
|
case 2:
|
2015-05-20 03:29:15 +02:00
|
|
|
execlp (command, command, arg1, arg2, (const char *)NULL);
|
2002-12-13 21:15:29 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* When execlp suceed, this part is not executed. */
|
2004-11-20 03:06:59 +01:00
|
|
|
fprintf (stderr, "Can't execute %s: %s\n", command, safe_strerror (errno));
|
2002-12-13 21:15:29 +01:00
|
|
|
exit (1);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* This is parent. */
|
|
|
|
execute_flag = 1;
|
2015-05-20 03:29:15 +02:00
|
|
|
wait4 (pid, &status, 0, NULL);
|
2002-12-13 21:15:29 +01:00
|
|
|
execute_flag = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (vtysh_ping,
|
|
|
|
vtysh_ping_cmd,
|
|
|
|
"ping WORD",
|
2003-06-25 12:49:55 +02:00
|
|
|
"Send echo messages\n"
|
2002-12-13 21:15:29 +01:00
|
|
|
"Ping destination address or hostname\n")
|
|
|
|
{
|
|
|
|
execute_command ("ping", 1, argv[0], NULL);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2003-06-25 12:49:55 +02:00
|
|
|
ALIAS (vtysh_ping,
|
|
|
|
vtysh_ping_ip_cmd,
|
|
|
|
"ping ip WORD",
|
|
|
|
"Send echo messages\n"
|
|
|
|
"IP echo\n"
|
|
|
|
"Ping destination address or hostname\n")
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
DEFUN (vtysh_traceroute,
|
|
|
|
vtysh_traceroute_cmd,
|
|
|
|
"traceroute WORD",
|
|
|
|
"Trace route to destination\n"
|
|
|
|
"Trace route to destination address or hostname\n")
|
|
|
|
{
|
|
|
|
execute_command ("traceroute", 1, argv[0], NULL);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2003-06-25 12:49:55 +02:00
|
|
|
ALIAS (vtysh_traceroute,
|
|
|
|
vtysh_traceroute_ip_cmd,
|
|
|
|
"traceroute ip WORD",
|
|
|
|
"Trace route to destination\n"
|
|
|
|
"IP trace\n"
|
|
|
|
"Trace route to destination address or hostname\n")
|
|
|
|
|
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
DEFUN (vtysh_ping6,
|
|
|
|
vtysh_ping6_cmd,
|
|
|
|
"ping ipv6 WORD",
|
|
|
|
"Send echo messages\n"
|
|
|
|
"IPv6 echo\n"
|
|
|
|
"Ping destination address or hostname\n")
|
|
|
|
{
|
|
|
|
execute_command ("ping6", 1, argv[0], NULL);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (vtysh_traceroute6,
|
|
|
|
vtysh_traceroute6_cmd,
|
|
|
|
"traceroute ipv6 WORD",
|
|
|
|
"Trace route to destination\n"
|
|
|
|
"IPv6 trace\n"
|
|
|
|
"Trace route to destination address or hostname\n")
|
|
|
|
{
|
|
|
|
execute_command ("traceroute6", 1, argv[0], NULL);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2015-08-13 01:11:07 +02:00
|
|
|
#if defined(HAVE_SHELL_ACCESS)
|
2002-12-13 21:15:29 +01:00
|
|
|
DEFUN (vtysh_telnet,
|
|
|
|
vtysh_telnet_cmd,
|
|
|
|
"telnet WORD",
|
|
|
|
"Open a telnet connection\n"
|
|
|
|
"IP address or hostname of a remote system\n")
|
|
|
|
{
|
|
|
|
execute_command ("telnet", 1, argv[0], NULL);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (vtysh_telnet_port,
|
|
|
|
vtysh_telnet_port_cmd,
|
|
|
|
"telnet WORD PORT",
|
|
|
|
"Open a telnet connection\n"
|
|
|
|
"IP address or hostname of a remote system\n"
|
|
|
|
"TCP Port number\n")
|
|
|
|
{
|
|
|
|
execute_command ("telnet", 2, argv[0], argv[1]);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2003-01-25 07:56:09 +01:00
|
|
|
DEFUN (vtysh_ssh,
|
|
|
|
vtysh_ssh_cmd,
|
|
|
|
"ssh WORD",
|
|
|
|
"Open an ssh connection\n"
|
|
|
|
"[user@]host\n")
|
|
|
|
{
|
|
|
|
execute_command ("ssh", 1, argv[0], NULL);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
DEFUN (vtysh_start_shell,
|
|
|
|
vtysh_start_shell_cmd,
|
|
|
|
"start-shell",
|
|
|
|
"Start UNIX shell\n")
|
|
|
|
{
|
|
|
|
execute_command ("sh", 0, NULL, NULL);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (vtysh_start_bash,
|
|
|
|
vtysh_start_bash_cmd,
|
|
|
|
"start-shell bash",
|
|
|
|
"Start UNIX shell\n"
|
|
|
|
"Start bash\n")
|
|
|
|
{
|
|
|
|
execute_command ("bash", 0, NULL, NULL);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
|
|
|
|
|
|
|
DEFUN (vtysh_start_zsh,
|
|
|
|
vtysh_start_zsh_cmd,
|
|
|
|
"start-shell zsh",
|
|
|
|
"Start UNIX shell\n"
|
|
|
|
"Start Z shell\n")
|
|
|
|
{
|
|
|
|
execute_command ("zsh", 0, NULL, NULL);
|
|
|
|
return CMD_SUCCESS;
|
|
|
|
}
|
2015-08-13 01:11:07 +02:00
|
|
|
#endif
|
2004-08-25 14:22:00 +02:00
|
|
|
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
static void
|
2002-12-13 21:15:29 +01:00
|
|
|
vtysh_install_default (enum node_type node)
|
|
|
|
{
|
|
|
|
install_element (node, &config_list_cmd);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Making connection to protocol daemon. */
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
static int
|
2005-01-28 22:11:46 +01:00
|
|
|
vtysh_connect (struct vtysh_client *vclient)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
int ret;
|
|
|
|
int sock, len;
|
|
|
|
struct sockaddr_un addr;
|
|
|
|
struct stat s_stat;
|
|
|
|
|
|
|
|
/* Stat socket to see if we have permission to access it. */
|
2005-01-28 22:11:46 +01:00
|
|
|
ret = stat (vclient->path, &s_stat);
|
2002-12-13 21:15:29 +01:00
|
|
|
if (ret < 0 && errno != ENOENT)
|
|
|
|
{
|
|
|
|
fprintf (stderr, "vtysh_connect(%s): stat = %s\n",
|
2005-01-28 22:11:46 +01:00
|
|
|
vclient->path, safe_strerror(errno));
|
2002-12-13 21:15:29 +01:00
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ret >= 0)
|
|
|
|
{
|
|
|
|
if (! S_ISSOCK(s_stat.st_mode))
|
|
|
|
{
|
|
|
|
fprintf (stderr, "vtysh_connect(%s): Not a socket\n",
|
2005-01-28 22:11:46 +01:00
|
|
|
vclient->path);
|
2002-12-13 21:15:29 +01:00
|
|
|
exit (1);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sock = socket (AF_UNIX, SOCK_STREAM, 0);
|
|
|
|
if (sock < 0)
|
|
|
|
{
|
|
|
|
#ifdef DEBUG
|
2005-01-28 22:11:46 +01:00
|
|
|
fprintf(stderr, "vtysh_connect(%s): socket = %s\n", vclient->path,
|
2004-11-20 03:06:59 +01:00
|
|
|
safe_strerror(errno));
|
2002-12-13 21:15:29 +01:00
|
|
|
#endif /* DEBUG */
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
memset (&addr, 0, sizeof (struct sockaddr_un));
|
|
|
|
addr.sun_family = AF_UNIX;
|
2005-01-28 22:11:46 +01:00
|
|
|
strncpy (addr.sun_path, vclient->path, strlen (vclient->path));
|
[autoconf] bugs 162,303,178: Fix 'present but can not be compiled' warnings
2007-05-09 Paul Jakma <paul.jakma@sun.com>
* configure.ac: sys/conf.h depends on sys/param.h, at least on
FBSD 6.2.
(bug #363) Should check for in_pktinfo for IRDP
2006-05-27 Paul Jakma <paul.jakma@sun.com>
* configure.ac: General cleanup of header and type checks, introducing
an internal define, QUAGGA_INCLUDES, to build up a list of
stuff to include so as to avoid 'present but cant be compiled'
warnings.
Misc additional checks of things missing according to autoscan.
Add LIBM, for bgpd's use of libm, so as to avoid burdening
LIBS, and all the binaries, with libm linkage.
Remove the bad practice of using m4 changequote(), just
quote the []'s in the case statements properly.
This should fix bugs 162, 303 and 178.
* */*.{c,h}: Update all HAVE_* to the standard autoconf namespaced
HAVE_* defines. I.e. HAVE_SA_LEN -> HAVE_STRUCT_SOCKADDR_SA_LEN,
* bgpd/Makefile.am: Add LIBM to bgpd's LDADD, for pow().
2007-05-10 04:38:51 +02:00
|
|
|
#ifdef HAVE_STRUCT_SOCKADDR_UN_SUN_LEN
|
2002-12-13 21:15:29 +01:00
|
|
|
len = addr.sun_len = SUN_LEN(&addr);
|
|
|
|
#else
|
|
|
|
len = sizeof (addr.sun_family) + strlen (addr.sun_path);
|
[autoconf] bugs 162,303,178: Fix 'present but can not be compiled' warnings
2007-05-09 Paul Jakma <paul.jakma@sun.com>
* configure.ac: sys/conf.h depends on sys/param.h, at least on
FBSD 6.2.
(bug #363) Should check for in_pktinfo for IRDP
2006-05-27 Paul Jakma <paul.jakma@sun.com>
* configure.ac: General cleanup of header and type checks, introducing
an internal define, QUAGGA_INCLUDES, to build up a list of
stuff to include so as to avoid 'present but cant be compiled'
warnings.
Misc additional checks of things missing according to autoscan.
Add LIBM, for bgpd's use of libm, so as to avoid burdening
LIBS, and all the binaries, with libm linkage.
Remove the bad practice of using m4 changequote(), just
quote the []'s in the case statements properly.
This should fix bugs 162, 303 and 178.
* */*.{c,h}: Update all HAVE_* to the standard autoconf namespaced
HAVE_* defines. I.e. HAVE_SA_LEN -> HAVE_STRUCT_SOCKADDR_SA_LEN,
* bgpd/Makefile.am: Add LIBM to bgpd's LDADD, for pow().
2007-05-10 04:38:51 +02:00
|
|
|
#endif /* HAVE_STRUCT_SOCKADDR_UN_SUN_LEN */
|
2002-12-13 21:15:29 +01:00
|
|
|
|
|
|
|
ret = connect (sock, (struct sockaddr *) &addr, len);
|
|
|
|
if (ret < 0)
|
|
|
|
{
|
|
|
|
#ifdef DEBUG
|
2005-01-28 22:11:46 +01:00
|
|
|
fprintf(stderr, "vtysh_connect(%s): connect = %s\n", vclient->path,
|
2004-11-20 03:06:59 +01:00
|
|
|
safe_strerror(errno));
|
2002-12-13 21:15:29 +01:00
|
|
|
#endif /* DEBUG */
|
|
|
|
close (sock);
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
vclient->fd = sock;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
/* Return true if str ends with suffix, else return false */
|
|
|
|
static int
|
|
|
|
ends_with(const char *str, const char *suffix)
|
|
|
|
{
|
|
|
|
if (!str || !suffix)
|
|
|
|
return 0;
|
|
|
|
size_t lenstr = strlen(str);
|
|
|
|
size_t lensuffix = strlen(suffix);
|
|
|
|
if (lensuffix > lenstr)
|
|
|
|
return 0;
|
|
|
|
return strncmp(str + lenstr - lensuffix, suffix, lensuffix) == 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
vtysh_client_sorted_insert (struct vtysh_client *head_client,
|
|
|
|
struct vtysh_client *client)
|
|
|
|
{
|
|
|
|
struct vtysh_client *prev_node, *current_node;
|
|
|
|
|
|
|
|
prev_node = head_client;
|
|
|
|
current_node = head_client->next;
|
|
|
|
while (current_node)
|
|
|
|
{
|
|
|
|
if (strcmp(current_node->path, client->path) > 0)
|
|
|
|
break;
|
|
|
|
|
|
|
|
prev_node = current_node;
|
|
|
|
current_node = current_node->next;
|
|
|
|
}
|
|
|
|
client->next = current_node;
|
|
|
|
prev_node->next = client;
|
|
|
|
}
|
|
|
|
|
|
|
|
#define MAXIMUM_INSTANCES 10
|
|
|
|
|
|
|
|
static void
|
|
|
|
vtysh_update_all_insances(struct vtysh_client * head_client)
|
|
|
|
{
|
|
|
|
struct vtysh_client *client;
|
2015-05-20 03:29:15 +02:00
|
|
|
char *ptr;
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
DIR *dir;
|
|
|
|
struct dirent *file;
|
|
|
|
int n = 0;
|
|
|
|
|
|
|
|
if (head_client->flag != VTYSH_OSPFD) return;
|
|
|
|
|
|
|
|
/* ls /var/run/quagga/ and look for all files ending in .vty */
|
|
|
|
dir = opendir("/var/run/quagga/");
|
|
|
|
if (dir)
|
|
|
|
{
|
|
|
|
while ((file = readdir(dir)) != NULL)
|
|
|
|
{
|
|
|
|
if (begins_with(file->d_name, "ospfd-") && ends_with(file->d_name, ".vty"))
|
|
|
|
{
|
|
|
|
if (n == MAXIMUM_INSTANCES)
|
|
|
|
{
|
|
|
|
fprintf(stderr,
|
|
|
|
"Parsing /var/run/quagga/, client limit(%d) reached!\n", n);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
client = (struct vtysh_client *) malloc(sizeof(struct vtysh_client));
|
|
|
|
client->fd = -1;
|
2015-05-20 03:29:15 +02:00
|
|
|
client->name = "ospfd";
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
client->flag = VTYSH_OSPFD;
|
2015-05-20 03:29:15 +02:00
|
|
|
ptr = (char *) malloc(100);
|
|
|
|
sprintf(ptr, "/var/run/quagga/%s", file->d_name);
|
|
|
|
client->path = (const char *)ptr;
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
client->next = NULL;
|
|
|
|
vtysh_client_sorted_insert(head_client, client);
|
|
|
|
n++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
closedir(dir);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-03-04 07:07:01 +01:00
|
|
|
static int
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
vtysh_connect_all_instances (struct vtysh_client *head_client)
|
|
|
|
{
|
|
|
|
struct vtysh_client *client;
|
|
|
|
int rc = 0;
|
|
|
|
|
|
|
|
vtysh_update_all_insances(head_client);
|
|
|
|
|
|
|
|
client = head_client->next;
|
|
|
|
while (client)
|
|
|
|
{
|
|
|
|
if (vtysh_connect(client) == 0)
|
|
|
|
rc++;
|
|
|
|
client = client->next;
|
|
|
|
}
|
|
|
|
|
|
|
|
return rc;
|
|
|
|
}
|
|
|
|
|
[vtysh] Never skip authentication, and add support for multiple -c commands
2006-07-27 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* vtysh.1: Document new options -d and -E, and note that now multiple
-c options may be supplied, with embedded linefeed now supported.
In BUGS section, remove warning about vtysh causing a daemon
to freeze, since this has been fixed.
* vtysh_main.c: (usage) Add new -d and -E options. And note that
-c can be used multiple times, possibly with embedded linefeeds.
(longopts) Add new -d and -E options.
(main) Add new -d and -E options, and create a linked list to
support multiple -c options. Do not call vtysh_connect_all until
after vtysh_read_config(config_default) and vtysh_auth have
succeeded. This prevents the vtysh.conf file from configuring
any daemons, and it ensures that authentication has been passed
before we send any commands to any daemons. Call vtysh_connect_all
with any daemon name supplied with -d. If it is unable to connect
to any daemons, issue an error message and exit immediately.
When used in -c mode, call vtysh_execute("enable") before
executing the commands in order to match interactive behavior.
And detect embedded linefeed chars in -c commands and break them up
appropriately.
* vtysh.h: (vtysh_connect_all) Fix proto to reflect new
daemon_name argument, and that it now returns an integer -- the
number of daemons to which we were able to connect.
* vtysh.c: (vtysh_connect_all) Add a new daemon_name argument.
If supplied, connect only to that daemon. And return
the number of daemons to which we were able to connect.
(vtysh_prompt): Performance enhancement -- make struct utsname
static so we call uname to get the hostname only once.
2006-07-27 20:01:41 +02:00
|
|
|
int
|
|
|
|
vtysh_connect_all(const char *daemon_name)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
2005-01-28 22:11:46 +01:00
|
|
|
u_int i;
|
[vtysh] Never skip authentication, and add support for multiple -c commands
2006-07-27 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* vtysh.1: Document new options -d and -E, and note that now multiple
-c options may be supplied, with embedded linefeed now supported.
In BUGS section, remove warning about vtysh causing a daemon
to freeze, since this has been fixed.
* vtysh_main.c: (usage) Add new -d and -E options. And note that
-c can be used multiple times, possibly with embedded linefeeds.
(longopts) Add new -d and -E options.
(main) Add new -d and -E options, and create a linked list to
support multiple -c options. Do not call vtysh_connect_all until
after vtysh_read_config(config_default) and vtysh_auth have
succeeded. This prevents the vtysh.conf file from configuring
any daemons, and it ensures that authentication has been passed
before we send any commands to any daemons. Call vtysh_connect_all
with any daemon name supplied with -d. If it is unable to connect
to any daemons, issue an error message and exit immediately.
When used in -c mode, call vtysh_execute("enable") before
executing the commands in order to match interactive behavior.
And detect embedded linefeed chars in -c commands and break them up
appropriately.
* vtysh.h: (vtysh_connect_all) Fix proto to reflect new
daemon_name argument, and that it now returns an integer -- the
number of daemons to which we were able to connect.
* vtysh.c: (vtysh_connect_all) Add a new daemon_name argument.
If supplied, connect only to that daemon. And return
the number of daemons to which we were able to connect.
(vtysh_prompt): Performance enhancement -- make struct utsname
static so we call uname to get the hostname only once.
2006-07-27 20:01:41 +02:00
|
|
|
int rc = 0;
|
|
|
|
int matches = 0;
|
2005-01-28 22:11:46 +01:00
|
|
|
|
2012-09-26 10:39:10 +02:00
|
|
|
for (i = 0; i < array_size(vtysh_client); i++)
|
2005-01-28 22:11:46 +01:00
|
|
|
{
|
[vtysh] Never skip authentication, and add support for multiple -c commands
2006-07-27 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* vtysh.1: Document new options -d and -E, and note that now multiple
-c options may be supplied, with embedded linefeed now supported.
In BUGS section, remove warning about vtysh causing a daemon
to freeze, since this has been fixed.
* vtysh_main.c: (usage) Add new -d and -E options. And note that
-c can be used multiple times, possibly with embedded linefeeds.
(longopts) Add new -d and -E options.
(main) Add new -d and -E options, and create a linked list to
support multiple -c options. Do not call vtysh_connect_all until
after vtysh_read_config(config_default) and vtysh_auth have
succeeded. This prevents the vtysh.conf file from configuring
any daemons, and it ensures that authentication has been passed
before we send any commands to any daemons. Call vtysh_connect_all
with any daemon name supplied with -d. If it is unable to connect
to any daemons, issue an error message and exit immediately.
When used in -c mode, call vtysh_execute("enable") before
executing the commands in order to match interactive behavior.
And detect embedded linefeed chars in -c commands and break them up
appropriately.
* vtysh.h: (vtysh_connect_all) Fix proto to reflect new
daemon_name argument, and that it now returns an integer -- the
number of daemons to which we were able to connect.
* vtysh.c: (vtysh_connect_all) Add a new daemon_name argument.
If supplied, connect only to that daemon. And return
the number of daemons to which we were able to connect.
(vtysh_prompt): Performance enhancement -- make struct utsname
static so we call uname to get the hostname only once.
2006-07-27 20:01:41 +02:00
|
|
|
if (!daemon_name || !strcmp(daemon_name, vtysh_client[i].name))
|
|
|
|
{
|
|
|
|
matches++;
|
|
|
|
if (vtysh_connect(&vtysh_client[i]) == 0)
|
|
|
|
rc++;
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
|
|
|
|
rc += vtysh_connect_all_instances(&vtysh_client[i]);
|
|
|
|
}
|
2005-01-28 22:11:46 +01:00
|
|
|
}
|
[vtysh] Never skip authentication, and add support for multiple -c commands
2006-07-27 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* vtysh.1: Document new options -d and -E, and note that now multiple
-c options may be supplied, with embedded linefeed now supported.
In BUGS section, remove warning about vtysh causing a daemon
to freeze, since this has been fixed.
* vtysh_main.c: (usage) Add new -d and -E options. And note that
-c can be used multiple times, possibly with embedded linefeeds.
(longopts) Add new -d and -E options.
(main) Add new -d and -E options, and create a linked list to
support multiple -c options. Do not call vtysh_connect_all until
after vtysh_read_config(config_default) and vtysh_auth have
succeeded. This prevents the vtysh.conf file from configuring
any daemons, and it ensures that authentication has been passed
before we send any commands to any daemons. Call vtysh_connect_all
with any daemon name supplied with -d. If it is unable to connect
to any daemons, issue an error message and exit immediately.
When used in -c mode, call vtysh_execute("enable") before
executing the commands in order to match interactive behavior.
And detect embedded linefeed chars in -c commands and break them up
appropriately.
* vtysh.h: (vtysh_connect_all) Fix proto to reflect new
daemon_name argument, and that it now returns an integer -- the
number of daemons to which we were able to connect.
* vtysh.c: (vtysh_connect_all) Add a new daemon_name argument.
If supplied, connect only to that daemon. And return
the number of daemons to which we were able to connect.
(vtysh_prompt): Performance enhancement -- make struct utsname
static so we call uname to get the hostname only once.
2006-07-27 20:01:41 +02:00
|
|
|
if (!matches)
|
|
|
|
fprintf(stderr, "Error: no daemons match name %s!\n", daemon_name);
|
|
|
|
return rc;
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
/* To disable readline's filename completion. */
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
static char *
|
2003-04-19 01:55:29 +02:00
|
|
|
vtysh_completion_entry_function (const char *ignore, int invoking_key)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
2003-04-19 01:55:29 +02:00
|
|
|
return NULL;
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2005-01-28 22:11:46 +01:00
|
|
|
vtysh_readline_init (void)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
/* readline related settings. */
|
2014-05-27 19:55:11 +02:00
|
|
|
rl_bind_key ('?', (rl_command_func_t *) vtysh_rl_describe);
|
2003-03-25 06:07:42 +01:00
|
|
|
rl_completion_entry_function = vtysh_completion_entry_function;
|
2014-05-27 19:55:11 +02:00
|
|
|
rl_attempted_completion_function = (rl_completion_func_t *)new_completion;
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
char *
|
2005-01-28 22:11:46 +01:00
|
|
|
vtysh_prompt (void)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
[vtysh] Never skip authentication, and add support for multiple -c commands
2006-07-27 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* vtysh.1: Document new options -d and -E, and note that now multiple
-c options may be supplied, with embedded linefeed now supported.
In BUGS section, remove warning about vtysh causing a daemon
to freeze, since this has been fixed.
* vtysh_main.c: (usage) Add new -d and -E options. And note that
-c can be used multiple times, possibly with embedded linefeeds.
(longopts) Add new -d and -E options.
(main) Add new -d and -E options, and create a linked list to
support multiple -c options. Do not call vtysh_connect_all until
after vtysh_read_config(config_default) and vtysh_auth have
succeeded. This prevents the vtysh.conf file from configuring
any daemons, and it ensures that authentication has been passed
before we send any commands to any daemons. Call vtysh_connect_all
with any daemon name supplied with -d. If it is unable to connect
to any daemons, issue an error message and exit immediately.
When used in -c mode, call vtysh_execute("enable") before
executing the commands in order to match interactive behavior.
And detect embedded linefeed chars in -c commands and break them up
appropriately.
* vtysh.h: (vtysh_connect_all) Fix proto to reflect new
daemon_name argument, and that it now returns an integer -- the
number of daemons to which we were able to connect.
* vtysh.c: (vtysh_connect_all) Add a new daemon_name argument.
If supplied, connect only to that daemon. And return
the number of daemons to which we were able to connect.
(vtysh_prompt): Performance enhancement -- make struct utsname
static so we call uname to get the hostname only once.
2006-07-27 20:01:41 +02:00
|
|
|
static struct utsname names;
|
2002-12-13 21:15:29 +01:00
|
|
|
static char buf[100];
|
|
|
|
const char*hostname;
|
|
|
|
extern struct host host;
|
|
|
|
|
|
|
|
hostname = host.name;
|
|
|
|
|
|
|
|
if (!hostname)
|
|
|
|
{
|
[vtysh] Never skip authentication, and add support for multiple -c commands
2006-07-27 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* vtysh.1: Document new options -d and -E, and note that now multiple
-c options may be supplied, with embedded linefeed now supported.
In BUGS section, remove warning about vtysh causing a daemon
to freeze, since this has been fixed.
* vtysh_main.c: (usage) Add new -d and -E options. And note that
-c can be used multiple times, possibly with embedded linefeeds.
(longopts) Add new -d and -E options.
(main) Add new -d and -E options, and create a linked list to
support multiple -c options. Do not call vtysh_connect_all until
after vtysh_read_config(config_default) and vtysh_auth have
succeeded. This prevents the vtysh.conf file from configuring
any daemons, and it ensures that authentication has been passed
before we send any commands to any daemons. Call vtysh_connect_all
with any daemon name supplied with -d. If it is unable to connect
to any daemons, issue an error message and exit immediately.
When used in -c mode, call vtysh_execute("enable") before
executing the commands in order to match interactive behavior.
And detect embedded linefeed chars in -c commands and break them up
appropriately.
* vtysh.h: (vtysh_connect_all) Fix proto to reflect new
daemon_name argument, and that it now returns an integer -- the
number of daemons to which we were able to connect.
* vtysh.c: (vtysh_connect_all) Add a new daemon_name argument.
If supplied, connect only to that daemon. And return
the number of daemons to which we were able to connect.
(vtysh_prompt): Performance enhancement -- make struct utsname
static so we call uname to get the hostname only once.
2006-07-27 20:01:41 +02:00
|
|
|
if (!names.nodename[0])
|
|
|
|
uname (&names);
|
2002-12-13 21:15:29 +01:00
|
|
|
hostname = names.nodename;
|
|
|
|
}
|
|
|
|
|
|
|
|
snprintf (buf, sizeof buf, cmd_prompt (vty->node), hostname);
|
|
|
|
|
|
|
|
return buf;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
2005-01-28 22:11:46 +01:00
|
|
|
vtysh_init_vty (void)
|
2002-12-13 21:15:29 +01:00
|
|
|
{
|
|
|
|
/* Make vty structure. */
|
|
|
|
vty = vty_new ();
|
|
|
|
vty->type = VTY_SHELL;
|
|
|
|
vty->node = VIEW_NODE;
|
|
|
|
|
|
|
|
/* Initialize commands. */
|
|
|
|
cmd_init (0);
|
|
|
|
|
|
|
|
/* Install nodes. */
|
|
|
|
install_node (&bgp_node, NULL);
|
|
|
|
install_node (&rip_node, NULL);
|
|
|
|
install_node (&interface_node, NULL);
|
Update Traffic Engineering Support for OSPFD
NOTE: I am squashing several commits together because they
do not independently compile and we need this ability to
do any type of sane testing on the patches. Since this
series builds together I am doing this. -DBS
This new structure is the basis to get new link parameters for
Traffic Engineering from Zebra/interface layer to OSPFD and ISISD
for the support of Traffic Engineering
* lib/if.[c,h]: link parameters struture and get/set functions
* lib/command.[c,h]: creation of a new link-node
* lib/zclient.[c,h]: modification to the ZBUS message to convey the
link parameters structure
* lib/zebra.h: New ZBUS message
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support for IEEE 754 format
* lib/stream.[c,h]: Add stream_get{f,d} and stream_put{f,d}) demux and muxers to
safely convert between big-endian IEEE-754 single and double binary
format, as used in IETF RFCs, and C99. Implementation depends on host
using __STDC_IEC_559__, which should be everything we care about. Should
correctly error out otherwise.
* lib/network.[c,h]: Add ntohf and htonf converter
* lib/memtypes.c: Add new memeory type for Traffic Engineering support
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add link parameters support to Zebra
* zebra/interface.c:
- Add new link-params CLI commands
- Add new functions to set/get link parameters for interface
* zebra/redistribute.[c,h]: Add new function to propagate link parameters
to routing daemon (essentially OSPFD and ISISD) for Traffic Engineering.
* zebra/redistribute_null.c: Add new function
zebra_interface_parameters_update()
* zebra/zserv.[c,h]: Add new functions to send link parameters
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support of new link-params CLI to vtysh
In vtysh_config.c/vtysh_config_parse_line(), it is not possible to continue
to use the ordered version for adding line i.e. config_add_line_uniq() to print
Interface CLI commands as it completely break the new LINK_PARAMS_NODE.
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Update Traffic Engineering support for OSPFD
These patches update original code to RFC3630 (OSPF-TE) and add support of
RFC5392 (Inter-AS v2) & RFC7471 (TE metric extensions) and partial support
of RFC6827 (ASON - GMPLS).
* ospfd/ospf_dump.[c,h]: Add new dump functions for Traffic Engineering
* ospfd/ospf_opaque.[c,h]: Add new TLV code points for RFC5392
* ospfd/ospf_packet.c: Update checking of OSPF_OPTION
* ospfd/ospf_vty.[c,h]: Update ospf_str2area_id
* ospfd/ospf_zebra.c: Add new function ospf_interface_link_params() to get
Link Parameters information from the interface to populate Traffic Engineering
metrics
* ospfd/ospfd.[c,h]: Update OSPF_OPTION flags (T -> MT and new DN)
* ospfd/ospf_te.[c,h]: Major modifications to update the code to new
link parameters structure and new RFCs
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
tmp
2016-04-19 16:21:46 +02:00
|
|
|
install_node (&link_params_node, NULL);
|
2014-07-03 12:24:34 +02:00
|
|
|
install_node (&ns_node, NULL);
|
2016-02-02 13:34:29 +01:00
|
|
|
install_node (&vrf_node, NULL);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_node (&rmap_node, NULL);
|
|
|
|
install_node (&zebra_node, NULL);
|
|
|
|
install_node (&bgp_vpnv4_node, NULL);
|
2016-06-07 04:29:05 +02:00
|
|
|
install_node (&bgp_vpnv6_node, NULL);
|
2016-01-12 19:42:04 +01:00
|
|
|
install_node (&bgp_encap_node, NULL);
|
|
|
|
install_node (&bgp_encapv6_node, NULL);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_node (&bgp_ipv4_node, NULL);
|
|
|
|
install_node (&bgp_ipv4m_node, NULL);
|
|
|
|
/* #ifdef HAVE_IPV6 */
|
|
|
|
install_node (&bgp_ipv6_node, NULL);
|
2005-08-23 00:44:29 +02:00
|
|
|
install_node (&bgp_ipv6m_node, NULL);
|
2002-12-13 21:15:29 +01:00
|
|
|
/* #endif */
|
|
|
|
install_node (&ospf_node, NULL);
|
|
|
|
/* #ifdef HAVE_IPV6 */
|
|
|
|
install_node (&ripng_node, NULL);
|
|
|
|
install_node (&ospf6_node, NULL);
|
|
|
|
/* #endif */
|
|
|
|
install_node (&keychain_node, NULL);
|
|
|
|
install_node (&keychain_key_node, NULL);
|
2003-12-23 11:39:08 +01:00
|
|
|
install_node (&isis_node, NULL);
|
2004-10-03 22:11:32 +02:00
|
|
|
install_node (&vty_node, NULL);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
|
|
|
vtysh_install_default (VIEW_NODE);
|
|
|
|
vtysh_install_default (ENABLE_NODE);
|
|
|
|
vtysh_install_default (CONFIG_NODE);
|
|
|
|
vtysh_install_default (BGP_NODE);
|
|
|
|
vtysh_install_default (RIP_NODE);
|
|
|
|
vtysh_install_default (INTERFACE_NODE);
|
Update Traffic Engineering Support for OSPFD
NOTE: I am squashing several commits together because they
do not independently compile and we need this ability to
do any type of sane testing on the patches. Since this
series builds together I am doing this. -DBS
This new structure is the basis to get new link parameters for
Traffic Engineering from Zebra/interface layer to OSPFD and ISISD
for the support of Traffic Engineering
* lib/if.[c,h]: link parameters struture and get/set functions
* lib/command.[c,h]: creation of a new link-node
* lib/zclient.[c,h]: modification to the ZBUS message to convey the
link parameters structure
* lib/zebra.h: New ZBUS message
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support for IEEE 754 format
* lib/stream.[c,h]: Add stream_get{f,d} and stream_put{f,d}) demux and muxers to
safely convert between big-endian IEEE-754 single and double binary
format, as used in IETF RFCs, and C99. Implementation depends on host
using __STDC_IEC_559__, which should be everything we care about. Should
correctly error out otherwise.
* lib/network.[c,h]: Add ntohf and htonf converter
* lib/memtypes.c: Add new memeory type for Traffic Engineering support
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add link parameters support to Zebra
* zebra/interface.c:
- Add new link-params CLI commands
- Add new functions to set/get link parameters for interface
* zebra/redistribute.[c,h]: Add new function to propagate link parameters
to routing daemon (essentially OSPFD and ISISD) for Traffic Engineering.
* zebra/redistribute_null.c: Add new function
zebra_interface_parameters_update()
* zebra/zserv.[c,h]: Add new functions to send link parameters
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support of new link-params CLI to vtysh
In vtysh_config.c/vtysh_config_parse_line(), it is not possible to continue
to use the ordered version for adding line i.e. config_add_line_uniq() to print
Interface CLI commands as it completely break the new LINK_PARAMS_NODE.
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Update Traffic Engineering support for OSPFD
These patches update original code to RFC3630 (OSPF-TE) and add support of
RFC5392 (Inter-AS v2) & RFC7471 (TE metric extensions) and partial support
of RFC6827 (ASON - GMPLS).
* ospfd/ospf_dump.[c,h]: Add new dump functions for Traffic Engineering
* ospfd/ospf_opaque.[c,h]: Add new TLV code points for RFC5392
* ospfd/ospf_packet.c: Update checking of OSPF_OPTION
* ospfd/ospf_vty.[c,h]: Update ospf_str2area_id
* ospfd/ospf_zebra.c: Add new function ospf_interface_link_params() to get
Link Parameters information from the interface to populate Traffic Engineering
metrics
* ospfd/ospfd.[c,h]: Update OSPF_OPTION flags (T -> MT and new DN)
* ospfd/ospf_te.[c,h]: Major modifications to update the code to new
link parameters structure and new RFCs
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
tmp
2016-04-19 16:21:46 +02:00
|
|
|
vtysh_install_default (LINK_PARAMS_NODE);
|
2014-07-03 12:24:34 +02:00
|
|
|
vtysh_install_default (NS_NODE);
|
2016-02-02 13:34:29 +01:00
|
|
|
vtysh_install_default (VRF_NODE);
|
2002-12-13 21:15:29 +01:00
|
|
|
vtysh_install_default (RMAP_NODE);
|
|
|
|
vtysh_install_default (ZEBRA_NODE);
|
|
|
|
vtysh_install_default (BGP_VPNV4_NODE);
|
2016-06-07 04:29:05 +02:00
|
|
|
vtysh_install_default (BGP_VPNV6_NODE);
|
2016-01-12 19:42:04 +01:00
|
|
|
vtysh_install_default (BGP_ENCAP_NODE);
|
|
|
|
vtysh_install_default (BGP_ENCAPV6_NODE);
|
2002-12-13 21:15:29 +01:00
|
|
|
vtysh_install_default (BGP_IPV4_NODE);
|
|
|
|
vtysh_install_default (BGP_IPV4M_NODE);
|
|
|
|
vtysh_install_default (BGP_IPV6_NODE);
|
2005-08-23 00:44:29 +02:00
|
|
|
vtysh_install_default (BGP_IPV6M_NODE);
|
2002-12-13 21:15:29 +01:00
|
|
|
vtysh_install_default (OSPF_NODE);
|
|
|
|
vtysh_install_default (RIPNG_NODE);
|
|
|
|
vtysh_install_default (OSPF6_NODE);
|
2003-12-23 11:39:08 +01:00
|
|
|
vtysh_install_default (ISIS_NODE);
|
2002-12-13 21:15:29 +01:00
|
|
|
vtysh_install_default (KEYCHAIN_NODE);
|
|
|
|
vtysh_install_default (KEYCHAIN_KEY_NODE);
|
2004-10-03 22:11:32 +02:00
|
|
|
vtysh_install_default (VTY_NODE);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
|
|
|
install_element (VIEW_NODE, &vtysh_enable_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_config_terminal_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_disable_cmd);
|
|
|
|
|
|
|
|
/* "exit" command. */
|
|
|
|
install_element (VIEW_NODE, &vtysh_exit_all_cmd);
|
|
|
|
install_element (VIEW_NODE, &vtysh_quit_all_cmd);
|
|
|
|
install_element (CONFIG_NODE, &vtysh_exit_all_cmd);
|
|
|
|
/* install_element (CONFIG_NODE, &vtysh_quit_all_cmd); */
|
|
|
|
install_element (ENABLE_NODE, &vtysh_exit_all_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_quit_all_cmd);
|
|
|
|
install_element (RIP_NODE, &vtysh_exit_ripd_cmd);
|
|
|
|
install_element (RIP_NODE, &vtysh_quit_ripd_cmd);
|
2003-03-25 06:07:42 +01:00
|
|
|
install_element (RIPNG_NODE, &vtysh_exit_ripngd_cmd);
|
|
|
|
install_element (RIPNG_NODE, &vtysh_quit_ripngd_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (OSPF_NODE, &vtysh_exit_ospfd_cmd);
|
|
|
|
install_element (OSPF_NODE, &vtysh_quit_ospfd_cmd);
|
2003-03-25 06:07:42 +01:00
|
|
|
install_element (OSPF6_NODE, &vtysh_exit_ospf6d_cmd);
|
|
|
|
install_element (OSPF6_NODE, &vtysh_quit_ospf6d_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (BGP_NODE, &vtysh_exit_bgpd_cmd);
|
|
|
|
install_element (BGP_NODE, &vtysh_quit_bgpd_cmd);
|
|
|
|
install_element (BGP_VPNV4_NODE, &vtysh_exit_bgpd_cmd);
|
|
|
|
install_element (BGP_VPNV4_NODE, &vtysh_quit_bgpd_cmd);
|
2016-06-07 04:29:05 +02:00
|
|
|
install_element (BGP_VPNV6_NODE, &vtysh_exit_bgpd_cmd);
|
|
|
|
install_element (BGP_VPNV6_NODE, &vtysh_quit_bgpd_cmd);
|
2016-01-12 19:42:04 +01:00
|
|
|
install_element (BGP_ENCAP_NODE, &vtysh_exit_bgpd_cmd);
|
|
|
|
install_element (BGP_ENCAP_NODE, &vtysh_quit_bgpd_cmd);
|
|
|
|
install_element (BGP_ENCAPV6_NODE, &vtysh_exit_bgpd_cmd);
|
|
|
|
install_element (BGP_ENCAPV6_NODE, &vtysh_quit_bgpd_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (BGP_IPV4_NODE, &vtysh_exit_bgpd_cmd);
|
|
|
|
install_element (BGP_IPV4_NODE, &vtysh_quit_bgpd_cmd);
|
|
|
|
install_element (BGP_IPV4M_NODE, &vtysh_exit_bgpd_cmd);
|
|
|
|
install_element (BGP_IPV4M_NODE, &vtysh_quit_bgpd_cmd);
|
|
|
|
install_element (BGP_IPV6_NODE, &vtysh_exit_bgpd_cmd);
|
|
|
|
install_element (BGP_IPV6_NODE, &vtysh_quit_bgpd_cmd);
|
2005-08-23 00:44:29 +02:00
|
|
|
install_element (BGP_IPV6M_NODE, &vtysh_exit_bgpd_cmd);
|
|
|
|
install_element (BGP_IPV6M_NODE, &vtysh_quit_bgpd_cmd);
|
2003-12-23 11:39:08 +01:00
|
|
|
install_element (ISIS_NODE, &vtysh_exit_isisd_cmd);
|
|
|
|
install_element (ISIS_NODE, &vtysh_quit_isisd_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (KEYCHAIN_NODE, &vtysh_exit_ripd_cmd);
|
|
|
|
install_element (KEYCHAIN_NODE, &vtysh_quit_ripd_cmd);
|
|
|
|
install_element (KEYCHAIN_KEY_NODE, &vtysh_exit_ripd_cmd);
|
|
|
|
install_element (KEYCHAIN_KEY_NODE, &vtysh_quit_ripd_cmd);
|
|
|
|
install_element (RMAP_NODE, &vtysh_exit_rmap_cmd);
|
|
|
|
install_element (RMAP_NODE, &vtysh_quit_rmap_cmd);
|
2004-10-03 22:11:32 +02:00
|
|
|
install_element (VTY_NODE, &vtysh_exit_line_vty_cmd);
|
|
|
|
install_element (VTY_NODE, &vtysh_quit_line_vty_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
|
|
|
/* "end" command. */
|
|
|
|
install_element (CONFIG_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (RIP_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (RIPNG_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (OSPF_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (OSPF6_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (BGP_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (BGP_IPV4_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (BGP_IPV4M_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (BGP_VPNV4_NODE, &vtysh_end_all_cmd);
|
2016-06-07 04:29:05 +02:00
|
|
|
install_element (BGP_VPNV6_NODE, &vtysh_end_all_cmd);
|
2016-01-12 19:42:04 +01:00
|
|
|
install_element (BGP_ENCAP_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (BGP_ENCAPV6_NODE, &vtysh_end_all_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (BGP_IPV6_NODE, &vtysh_end_all_cmd);
|
2005-08-23 00:44:29 +02:00
|
|
|
install_element (BGP_IPV6M_NODE, &vtysh_end_all_cmd);
|
2003-12-23 11:39:08 +01:00
|
|
|
install_element (ISIS_NODE, &vtysh_end_all_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (KEYCHAIN_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (KEYCHAIN_KEY_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (RMAP_NODE, &vtysh_end_all_cmd);
|
2004-10-03 22:11:32 +02:00
|
|
|
install_element (VTY_NODE, &vtysh_end_all_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
2003-03-01 16:44:10 +01:00
|
|
|
install_element (INTERFACE_NODE, &interface_desc_cmd);
|
2003-03-28 03:25:45 +01:00
|
|
|
install_element (INTERFACE_NODE, &no_interface_desc_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (INTERFACE_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (INTERFACE_NODE, &vtysh_exit_interface_cmd);
|
Update Traffic Engineering Support for OSPFD
NOTE: I am squashing several commits together because they
do not independently compile and we need this ability to
do any type of sane testing on the patches. Since this
series builds together I am doing this. -DBS
This new structure is the basis to get new link parameters for
Traffic Engineering from Zebra/interface layer to OSPFD and ISISD
for the support of Traffic Engineering
* lib/if.[c,h]: link parameters struture and get/set functions
* lib/command.[c,h]: creation of a new link-node
* lib/zclient.[c,h]: modification to the ZBUS message to convey the
link parameters structure
* lib/zebra.h: New ZBUS message
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support for IEEE 754 format
* lib/stream.[c,h]: Add stream_get{f,d} and stream_put{f,d}) demux and muxers to
safely convert between big-endian IEEE-754 single and double binary
format, as used in IETF RFCs, and C99. Implementation depends on host
using __STDC_IEC_559__, which should be everything we care about. Should
correctly error out otherwise.
* lib/network.[c,h]: Add ntohf and htonf converter
* lib/memtypes.c: Add new memeory type for Traffic Engineering support
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add link parameters support to Zebra
* zebra/interface.c:
- Add new link-params CLI commands
- Add new functions to set/get link parameters for interface
* zebra/redistribute.[c,h]: Add new function to propagate link parameters
to routing daemon (essentially OSPFD and ISISD) for Traffic Engineering.
* zebra/redistribute_null.c: Add new function
zebra_interface_parameters_update()
* zebra/zserv.[c,h]: Add new functions to send link parameters
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support of new link-params CLI to vtysh
In vtysh_config.c/vtysh_config_parse_line(), it is not possible to continue
to use the ordered version for adding line i.e. config_add_line_uniq() to print
Interface CLI commands as it completely break the new LINK_PARAMS_NODE.
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Update Traffic Engineering support for OSPFD
These patches update original code to RFC3630 (OSPF-TE) and add support of
RFC5392 (Inter-AS v2) & RFC7471 (TE metric extensions) and partial support
of RFC6827 (ASON - GMPLS).
* ospfd/ospf_dump.[c,h]: Add new dump functions for Traffic Engineering
* ospfd/ospf_opaque.[c,h]: Add new TLV code points for RFC5392
* ospfd/ospf_packet.c: Update checking of OSPF_OPTION
* ospfd/ospf_vty.[c,h]: Update ospf_str2area_id
* ospfd/ospf_zebra.c: Add new function ospf_interface_link_params() to get
Link Parameters information from the interface to populate Traffic Engineering
metrics
* ospfd/ospfd.[c,h]: Update OSPF_OPTION flags (T -> MT and new DN)
* ospfd/ospf_te.[c,h]: Major modifications to update the code to new
link parameters structure and new RFCs
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
tmp
2016-04-19 16:21:46 +02:00
|
|
|
install_element (LINK_PARAMS_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (LINK_PARAMS_NODE, &vtysh_exit_interface_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (INTERFACE_NODE, &vtysh_quit_interface_cmd);
|
2016-02-02 13:34:29 +01:00
|
|
|
|
2014-07-03 12:24:34 +02:00
|
|
|
install_element (NS_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (NS_NODE, &vtysh_exit_ns_cmd);
|
|
|
|
install_element (NS_NODE, &vtysh_quit_ns_cmd);
|
|
|
|
|
2016-02-02 13:34:29 +01:00
|
|
|
install_element (VRF_NODE, &vtysh_end_all_cmd);
|
|
|
|
install_element (VRF_NODE, &vtysh_exit_vrf_cmd);
|
|
|
|
install_element (VRF_NODE, &vtysh_quit_vrf_cmd);
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (CONFIG_NODE, &router_rip_cmd);
|
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
install_element (CONFIG_NODE, &router_ripng_cmd);
|
|
|
|
#endif
|
|
|
|
install_element (CONFIG_NODE, &router_ospf_cmd);
|
Multi-Instance OSPF Summary
——————————————-------------
- etc/init.d/quagga is modified to support creating separate ospf daemon
process for each instance. Each individual instance is monitored by
watchquagga just like any protocol daemons.(requires initd-mi.patch).
- Vtysh is modified to able to connect to multiple daemons of the same
protocol (supported for OSPF only for now).
- ospfd is modified to remember the Instance-ID that its invoked with. For
the entire life of the process it caters to any command request that
matches that instance-ID (unless its a non instance specific command).
Routes/messages to zebra are tagged with instance-ID.
- zebra route/redistribute mechanisms are modified to work with
[protocol type + instance-id]
- bgpd now has ability to have multiple instance specific redistribution
for a protocol (OSPF only supported/tested for now).
- zlog ability to display instance-id besides the protocol/daemon name.
- Changes in other daemons are to because of the needed integration with
some of the modified APIs/routines. (Didn’t prefer replicating too many
separate instance specific APIs.)
- config/show/debug commands are modified to take instance-id argument
as appropriate.
Guidelines to start using multi-instance ospf
---------------------------------------------
The patch is backward compatible, i.e for any previous way of single ospf
deamon(router ospf <cr>) will continue to work as is, including all the
show commands etc.
To enable multiple instances, do the following:
1. service quagga stop
2. Modify /etc/quagga/daemons to add instance-ids of each desired
instance in the following format:
ospfd=“yes"
ospfd_instances="1,2,3"
assuming you want to enable 3 instances with those instance ids.
3. Create corresponding ospfd config files as ospfd-1.conf, ospfd-2.conf
and ospfd-3.conf.
4. service quagga start/restart
5. Verify that the deamons are started as expected. You should see
ospfd started with -n <instance-id> option.
ps –ef | grep quagga
With that /var/run/quagga/ should have ospfd-<instance-id>.pid and
ospfd-<instance-id>/vty to each instance.
6. vtysh to work with instances as you would with any other deamons.
7. Overall most quagga semantics are the same working with the instance
deamon, like it is for any other daemon.
NOTE:
To safeguard against errors leading to too many processes getting invoked,
a hard limit on number of instance-ids is in place, currently its 5.
Allowed instance-id range is <1-65535>
Once daemons are up, show running from vtysh should show the instance-id
of each daemon as 'router ospf <instance-id>’ (without needing explicit
configuration)
Instance-id can not be changed via vtysh, other router ospf configuration
is allowed as before.
Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
2015-05-20 03:03:42 +02:00
|
|
|
install_element (CONFIG_NODE, &router_ospf_instance_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
install_element (CONFIG_NODE, &router_ospf6_cmd);
|
|
|
|
#endif
|
2003-12-23 11:39:08 +01:00
|
|
|
install_element (CONFIG_NODE, &router_isis_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (CONFIG_NODE, &router_bgp_cmd);
|
2015-11-03 19:59:57 +01:00
|
|
|
install_element (CONFIG_NODE, &router_bgp_asn_cmd);
|
2008-07-03 21:34:48 +02:00
|
|
|
install_element (CONFIG_NODE, &router_bgp_view_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (BGP_NODE, &address_family_vpnv4_cmd);
|
|
|
|
install_element (BGP_NODE, &address_family_vpnv4_unicast_cmd);
|
2016-06-07 04:29:05 +02:00
|
|
|
install_element (BGP_NODE, &address_family_vpnv6_cmd);
|
|
|
|
install_element (BGP_NODE, &address_family_vpnv6_unicast_cmd);
|
2016-01-12 19:42:04 +01:00
|
|
|
install_element (BGP_NODE, &address_family_encap_cmd);
|
|
|
|
install_element (BGP_NODE, &address_family_encapv6_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (BGP_NODE, &address_family_ipv4_unicast_cmd);
|
|
|
|
install_element (BGP_NODE, &address_family_ipv4_multicast_cmd);
|
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
install_element (BGP_NODE, &address_family_ipv6_cmd);
|
|
|
|
install_element (BGP_NODE, &address_family_ipv6_unicast_cmd);
|
2015-05-20 02:40:36 +02:00
|
|
|
install_element (BGP_NODE, &address_family_ipv6_multicast_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
#endif
|
|
|
|
install_element (BGP_VPNV4_NODE, &exit_address_family_cmd);
|
2016-06-07 04:29:05 +02:00
|
|
|
install_element (BGP_VPNV6_NODE, &exit_address_family_cmd);
|
2016-01-12 19:42:04 +01:00
|
|
|
install_element (BGP_ENCAP_NODE, &exit_address_family_cmd);
|
|
|
|
install_element (BGP_ENCAPV6_NODE, &exit_address_family_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (BGP_IPV4_NODE, &exit_address_family_cmd);
|
|
|
|
install_element (BGP_IPV4M_NODE, &exit_address_family_cmd);
|
|
|
|
install_element (BGP_IPV6_NODE, &exit_address_family_cmd);
|
2005-08-23 00:44:29 +02:00
|
|
|
install_element (BGP_IPV6M_NODE, &exit_address_family_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (CONFIG_NODE, &key_chain_cmd);
|
|
|
|
install_element (CONFIG_NODE, &route_map_cmd);
|
2004-10-03 22:11:32 +02:00
|
|
|
install_element (CONFIG_NODE, &vtysh_line_vty_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (KEYCHAIN_NODE, &key_cmd);
|
|
|
|
install_element (KEYCHAIN_NODE, &key_chain_cmd);
|
|
|
|
install_element (KEYCHAIN_KEY_NODE, &key_chain_cmd);
|
|
|
|
install_element (CONFIG_NODE, &vtysh_interface_cmd);
|
2003-05-23 11:25:20 +02:00
|
|
|
install_element (CONFIG_NODE, &vtysh_no_interface_cmd);
|
2015-05-22 11:40:00 +02:00
|
|
|
install_element (CONFIG_NODE, &vtysh_interface_vrf_cmd);
|
|
|
|
install_element (CONFIG_NODE, &vtysh_no_interface_vrf_cmd);
|
Update Traffic Engineering Support for OSPFD
NOTE: I am squashing several commits together because they
do not independently compile and we need this ability to
do any type of sane testing on the patches. Since this
series builds together I am doing this. -DBS
This new structure is the basis to get new link parameters for
Traffic Engineering from Zebra/interface layer to OSPFD and ISISD
for the support of Traffic Engineering
* lib/if.[c,h]: link parameters struture and get/set functions
* lib/command.[c,h]: creation of a new link-node
* lib/zclient.[c,h]: modification to the ZBUS message to convey the
link parameters structure
* lib/zebra.h: New ZBUS message
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support for IEEE 754 format
* lib/stream.[c,h]: Add stream_get{f,d} and stream_put{f,d}) demux and muxers to
safely convert between big-endian IEEE-754 single and double binary
format, as used in IETF RFCs, and C99. Implementation depends on host
using __STDC_IEC_559__, which should be everything we care about. Should
correctly error out otherwise.
* lib/network.[c,h]: Add ntohf and htonf converter
* lib/memtypes.c: Add new memeory type for Traffic Engineering support
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add link parameters support to Zebra
* zebra/interface.c:
- Add new link-params CLI commands
- Add new functions to set/get link parameters for interface
* zebra/redistribute.[c,h]: Add new function to propagate link parameters
to routing daemon (essentially OSPFD and ISISD) for Traffic Engineering.
* zebra/redistribute_null.c: Add new function
zebra_interface_parameters_update()
* zebra/zserv.[c,h]: Add new functions to send link parameters
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Add support of new link-params CLI to vtysh
In vtysh_config.c/vtysh_config_parse_line(), it is not possible to continue
to use the ordered version for adding line i.e. config_add_line_uniq() to print
Interface CLI commands as it completely break the new LINK_PARAMS_NODE.
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
Update Traffic Engineering support for OSPFD
These patches update original code to RFC3630 (OSPF-TE) and add support of
RFC5392 (Inter-AS v2) & RFC7471 (TE metric extensions) and partial support
of RFC6827 (ASON - GMPLS).
* ospfd/ospf_dump.[c,h]: Add new dump functions for Traffic Engineering
* ospfd/ospf_opaque.[c,h]: Add new TLV code points for RFC5392
* ospfd/ospf_packet.c: Update checking of OSPF_OPTION
* ospfd/ospf_vty.[c,h]: Update ospf_str2area_id
* ospfd/ospf_zebra.c: Add new function ospf_interface_link_params() to get
Link Parameters information from the interface to populate Traffic Engineering
metrics
* ospfd/ospfd.[c,h]: Update OSPF_OPTION flags (T -> MT and new DN)
* ospfd/ospf_te.[c,h]: Major modifications to update the code to new
link parameters structure and new RFCs
Signed-off-by: Olivier Dugeon <olivier.dugeon@orange.com>
tmp
2016-04-19 16:21:46 +02:00
|
|
|
install_element (INTERFACE_NODE, &vtysh_link_params_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (ENABLE_NODE, &vtysh_show_running_config_cmd);
|
2015-09-22 21:00:57 +02:00
|
|
|
install_element (ENABLE_NODE, &vtysh_show_running_config_daemon_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (ENABLE_NODE, &vtysh_copy_runningconfig_startupconfig_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_write_file_cmd);
|
2003-05-25 13:51:29 +02:00
|
|
|
install_element (ENABLE_NODE, &vtysh_write_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
2016-02-02 13:34:29 +01:00
|
|
|
install_element (CONFIG_NODE, &vtysh_vrf_cmd);
|
|
|
|
install_element (CONFIG_NODE, &vtysh_no_vrf_cmd);
|
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
/* "write terminal" command. */
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (ENABLE_NODE, &vtysh_write_terminal_cmd);
|
2015-09-22 21:00:57 +02:00
|
|
|
install_element (ENABLE_NODE, &vtysh_write_terminal_daemon_cmd);
|
2016-02-25 13:29:29 +01:00
|
|
|
|
2004-10-03 22:11:32 +02:00
|
|
|
install_element (CONFIG_NODE, &vtysh_integrated_config_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_vtysh_integrated_config_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
|
2004-08-26 15:08:30 +02:00
|
|
|
/* "write memory" command. */
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (ENABLE_NODE, &vtysh_write_memory_cmd);
|
|
|
|
|
2004-08-27 15:56:39 +02:00
|
|
|
install_element (VIEW_NODE, &vtysh_terminal_length_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_terminal_length_cmd);
|
|
|
|
install_element (VIEW_NODE, &vtysh_terminal_no_length_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_terminal_no_length_cmd);
|
2004-10-28 19:43:11 +02:00
|
|
|
install_element (VIEW_NODE, &vtysh_show_daemons_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_show_daemons_cmd);
|
2004-08-27 15:56:39 +02:00
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (VIEW_NODE, &vtysh_ping_cmd);
|
2003-06-25 12:49:55 +02:00
|
|
|
install_element (VIEW_NODE, &vtysh_ping_ip_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (VIEW_NODE, &vtysh_traceroute_cmd);
|
2003-06-25 12:49:55 +02:00
|
|
|
install_element (VIEW_NODE, &vtysh_traceroute_ip_cmd);
|
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
install_element (VIEW_NODE, &vtysh_ping6_cmd);
|
|
|
|
install_element (VIEW_NODE, &vtysh_traceroute6_cmd);
|
|
|
|
#endif
|
2015-08-13 01:11:07 +02:00
|
|
|
#if defined(HAVE_SHELL_ACCESS)
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (VIEW_NODE, &vtysh_telnet_cmd);
|
|
|
|
install_element (VIEW_NODE, &vtysh_telnet_port_cmd);
|
2003-01-25 07:56:09 +01:00
|
|
|
install_element (VIEW_NODE, &vtysh_ssh_cmd);
|
2015-08-13 01:11:07 +02:00
|
|
|
#endif
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (ENABLE_NODE, &vtysh_ping_cmd);
|
2003-06-25 12:49:55 +02:00
|
|
|
install_element (ENABLE_NODE, &vtysh_ping_ip_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (ENABLE_NODE, &vtysh_traceroute_cmd);
|
2003-06-25 12:49:55 +02:00
|
|
|
install_element (ENABLE_NODE, &vtysh_traceroute_ip_cmd);
|
|
|
|
#ifdef HAVE_IPV6
|
|
|
|
install_element (ENABLE_NODE, &vtysh_ping6_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_traceroute6_cmd);
|
|
|
|
#endif
|
2015-08-13 01:11:07 +02:00
|
|
|
#if defined(HAVE_SHELL_ACCESS)
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (ENABLE_NODE, &vtysh_telnet_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_telnet_port_cmd);
|
2004-08-27 00:21:31 +02:00
|
|
|
install_element (ENABLE_NODE, &vtysh_ssh_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (ENABLE_NODE, &vtysh_start_shell_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_start_bash_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_start_zsh_cmd);
|
2015-08-13 01:11:07 +02:00
|
|
|
#endif
|
|
|
|
|
2006-05-28 09:54:45 +02:00
|
|
|
install_element (VIEW_NODE, &vtysh_show_memory_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_show_memory_cmd);
|
|
|
|
|
2015-08-20 03:33:13 +02:00
|
|
|
install_element (VIEW_NODE, &vtysh_show_work_queues_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_show_work_queues_cmd);
|
2016-02-25 13:29:29 +01:00
|
|
|
install_element (ENABLE_NODE, &vtysh_show_work_queues_daemon_cmd);
|
|
|
|
install_element (VIEW_NODE, &vtysh_show_work_queues_daemon_cmd);
|
2015-08-20 03:33:13 +02:00
|
|
|
|
|
|
|
install_element (VIEW_NODE, &vtysh_show_thread_cmd);
|
|
|
|
install_element (ENABLE_NODE, &vtysh_show_thread_cmd);
|
|
|
|
|
2006-05-24 00:10:01 +02:00
|
|
|
/* Logging */
|
|
|
|
install_element (ENABLE_NODE, &vtysh_show_logging_cmd);
|
|
|
|
install_element (VIEW_NODE, &vtysh_show_logging_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (CONFIG_NODE, &vtysh_log_stdout_cmd);
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
install_element (CONFIG_NODE, &vtysh_log_stdout_level_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (CONFIG_NODE, &no_vtysh_log_stdout_cmd);
|
|
|
|
install_element (CONFIG_NODE, &vtysh_log_file_cmd);
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
install_element (CONFIG_NODE, &vtysh_log_file_level_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (CONFIG_NODE, &no_vtysh_log_file_cmd);
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
install_element (CONFIG_NODE, &no_vtysh_log_file_level_cmd);
|
|
|
|
install_element (CONFIG_NODE, &vtysh_log_monitor_cmd);
|
|
|
|
install_element (CONFIG_NODE, &vtysh_log_monitor_level_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_vtysh_log_monitor_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (CONFIG_NODE, &vtysh_log_syslog_cmd);
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
install_element (CONFIG_NODE, &vtysh_log_syslog_level_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (CONFIG_NODE, &no_vtysh_log_syslog_cmd);
|
|
|
|
install_element (CONFIG_NODE, &vtysh_log_trap_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_vtysh_log_trap_cmd);
|
2004-12-07 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* bgp_main.c: (main) The 2nd argument to openzlog has been removed.
* isis_main.c: (main) The 2nd argument to openzlog has been removed.
* ospf6_main.c: (main) The 2nd argument to openzlog has been removed.
Note that stdout logging will no longer be enabled by default when
not running as a daemon.
* ospf_main.c: (main) The 2nd argument to openzlog has been removed.
* rip_main.c: (main) The 2nd argument to openzlog has been removed.
* ripng_main.c: (main) The 2nd argument to openzlog has been removed.
* main.c: (main) The 2nd argument to openzlog has been removed.
So stdout logging will no longer be enabled by default.
* irdp_main.c: (irdp_finish) Reduce severity of shutdown message
from LOG_WARNING to LOG_INFO.
* vtysh.c: Make several functions static instead of global.
Added several commands to support destination-specific logging levels.
(vtysh_completion) This function is unused, so comment it out.
* basic.texi: Document new logging features. Separate basic config
commands from basic VTY commands.
* log.h: Replace struct zlog flags and maskpri fields with maxlvl
array to support individual logging levels for each destination.
Remove the 2nd argument to openzlog since the default logging config
should be standardized inside the library. Replaced the
zlog_set_flag and zlog_reset_flag functions with zlog_set_level.
And zlog_set_file now requires an additional log_level argument.
Declare zlog_proto_names for use inside command.c in the
"show logging" command. Added defines useful for command
construction.
* log.c: (vzlog) Decide where to send the message based on the
individual logging levels configured for each destination.
Remove support for ZLOG_STDERR since it was never actually used.
Support record-priority for terminal monitors.
(zlog_signal,zlog_backtrace_sigsafe) Support destination-specific
logging levels. Remove stderr support (was never used). Added
support for terminal monitor logging.
(_zlog_assert_failed) Increase message severity to LOG_EMERG.
(openzlog) Remove 2nd argument since default config should be
standardized in library. By default, terminal monitoring
is set to debug, and all other logging is disabled.
(zlog_set_flag,zlog_reset_flag) Removed.
(zlog_set_level) New function to replace zlog_set_flag and
zlog_reset_flag. Supports destination-specific logging levels.
(zlog_set_file,zlog_reset_file) Support file-specific logging level.
(zlog_rotate) Log an error message if fopen fails, and support
new file-specific logging level.
* command.h: Change DEFUN_CMD_FUNC_DECL and DEFUN_CMD_FUNC_TEXT so that
command functions will be static instead of global. Remove
declarations for config_exit and config_help. Define new macros
DEFUNSH_ATTR, DEFUNSH_HIDDEN, and DEFUNSH_DEPRECATED so we can
have deprecated commands in vtysh. Similarly, for completeness,
define macros ALIAS_SH, ALIAS_SH_HIDDEN, and ALIAS_SH_DEPRECATED.
Also, fix bug in ALIAS_ATTR macro (didn't matter because it
was never used).
* command.c: Make many functions static instead of global.
(facility_name,facility_match,level_match) New functions
to support enhanced destination-specific logging levels.
(config_write_host) Support new destination-specific logging levels.
(config_logmsg) Added new "logmsg" command to help test logging
system.
(show_logging) Added "show logging" command to show the current
configuration of the logging system.
(config_log_stdout_level) Support explicit stdout logging level.
(no_config_log_stdout) Now takes optional LEVEL arg.
(config_log_monitor,config_log_monitor_level,no_config_log_monitor)
New commands creating new "log monitor" commands to set terminal
monitoring log level.
(config_log_file_level) Support explicit file logging level.
(config_log_syslog_level) Support explicit syslog logging level.
(config_log_facility,no_config_log_facility) Implement new
"log facility" command.
(cmd_init) Add hooks for new commands: "show logging", "logmsg",
"log stdout <level>", "log monitor", "log monitor <level>",
"no log monitor", "log file <filename> <level>",
"no log file <filename> <level>", "log syslog <level>",
"log facility", and "no log facility".
* vty.h: Added a "level" argument to vty_log so it can support
"log record-priority". Declare new function vty_log_fixed for
use in signal handlers.
* vty.c: (vty_log,vty_log_out) Added a "level" argument to support
"log record-priority" for vty terminal monitors.
(vty_down_level) Use config_exit_cmd.func instead of calling
config_exit directly (since command functions will now be static
instead of global).
(vty_log_fixed) New function to send terminal monitor messages
from inside a signal handler.
2004-12-07 16:39:31 +01:00
|
|
|
install_element (CONFIG_NODE, &vtysh_log_facility_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_vtysh_log_facility_cmd);
|
2002-12-13 21:15:29 +01:00
|
|
|
install_element (CONFIG_NODE, &vtysh_log_record_priority_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_vtysh_log_record_priority_cmd);
|
2007-04-29 05:53:31 +02:00
|
|
|
install_element (CONFIG_NODE, &vtysh_log_timestamp_precision_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_vtysh_log_timestamp_precision_cmd);
|
2004-10-03 22:11:32 +02:00
|
|
|
|
|
|
|
install_element (CONFIG_NODE, &vtysh_service_password_encrypt_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_vtysh_service_password_encrypt_cmd);
|
|
|
|
|
|
|
|
install_element (CONFIG_NODE, &vtysh_password_cmd);
|
|
|
|
install_element (CONFIG_NODE, &vtysh_password_text_cmd);
|
|
|
|
install_element (CONFIG_NODE, &vtysh_enable_password_cmd);
|
|
|
|
install_element (CONFIG_NODE, &vtysh_enable_password_text_cmd);
|
|
|
|
install_element (CONFIG_NODE, &no_vtysh_enable_password_cmd);
|
|
|
|
|
2002-12-13 21:15:29 +01:00
|
|
|
}
|