libosmovty  0.9.6-12.20170220git32ee5af8.fc32
Osmocom VTY library
command.h File Reference
#include <stdio.h>
#include <sys/types.h>
#include "vector.h"
#include "vty.h"

Go to the source code of this file.

Data Structures

struct  host
 Host configuration variable. More...
 
struct  cmd_node
 Node which has some commands and prompt string and configuration function pointer . More...
 
struct  cmd_element
 Structure of a command element. More...
 
struct  desc
 Command description structure. More...
 

Macros

#define CMD_SUCCESS   0
 Return value of the commands.
 
#define CMD_WARNING   1
 
#define CMD_ERR_NO_MATCH   2
 
#define CMD_ERR_AMBIGUOUS   3
 
#define CMD_ERR_INCOMPLETE   4
 
#define CMD_ERR_EXEED_ARGC_MAX   5
 
#define CMD_ERR_NOTHING_TODO   6
 
#define CMD_COMPLETE_FULL_MATCH   7
 
#define CMD_COMPLETE_MATCH   8
 
#define CMD_COMPLETE_LIST_MATCH   9
 
#define CMD_SUCCESS_DAEMON   10
 
#define CMD_ARGC_MAX   256
 
#define DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, attrs, dnum)
 
#define gDEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, attrs, dnum)
 
#define DEFUN_CMD_FUNC_DECL(funcname)   static int funcname (struct cmd_element *, struct vty *, int, const char *[]); \
 
#define DEFUN_CMD_FUNC_TEXT(funcname)
 
#define DEFUN(funcname, cmdname, cmdstr, helpstr)
 Macro for defining a VTY node and function. More...
 
#define gDEFUN(funcname, cmdname, cmdstr, helpstr)
 Macro for defining a non-static (global) VTY node and function. More...
 
#define DEFUN_ATTR(funcname, cmdname, cmdstr, helpstr, attr)
 
#define DEFUN_HIDDEN(funcname, cmdname, cmdstr, helpstr)   DEFUN_ATTR (funcname, cmdname, cmdstr, helpstr, CMD_ATTR_HIDDEN)
 
#define DEFUN_DEPRECATED(funcname, cmdname, cmdstr, helpstr)   DEFUN_ATTR (funcname, cmdname, cmdstr, helpstr, CMD_ATTR_DEPRECATED) \
 
#define DEFUN_NOSH(funcname, cmdname, cmdstr, helpstr)   DEFUN(funcname, cmdname, cmdstr, helpstr)
 
#define DEFSH(daemon, cmdname, cmdstr, helpstr)   DEFUN_CMD_ELEMENT(NULL, cmdname, cmdstr, helpstr, 0, daemon) \
 
#define DEFUNSH(daemon, funcname, cmdname, cmdstr, helpstr)
 
#define DEFUNSH_ATTR(daemon, funcname, cmdname, cmdstr, helpstr, attr)
 
#define DEFUNSH_HIDDEN(daemon, funcname, cmdname, cmdstr, helpstr)   DEFUNSH_ATTR (daemon, funcname, cmdname, cmdstr, helpstr, CMD_ATTR_HIDDEN)
 
#define DEFUNSH_DEPRECATED(daemon, funcname, cmdname, cmdstr, helpstr)   DEFUNSH_ATTR (daemon, funcname, cmdname, cmdstr, helpstr, CMD_ATTR_DEPRECATED)
 
#define ALIAS(funcname, cmdname, cmdstr, helpstr)   DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, 0)
 
#define gALIAS(funcname, cmdname, cmdstr, helpstr)   gDEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, 0)
 
#define ALIAS_ATTR(funcname, cmdname, cmdstr, helpstr, attr)   DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, attr, 0)
 
#define ALIAS_HIDDEN(funcname, cmdname, cmdstr, helpstr)   DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_HIDDEN, 0)
 
#define ALIAS_DEPRECATED(funcname, cmdname, cmdstr, helpstr)   DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_DEPRECATED, 0)
 
#define ALIAS_SH(daemon, funcname, cmdname, cmdstr, helpstr)   DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, 0, daemon)
 
#define ALIAS_SH_HIDDEN(daemon, funcname, cmdname, cmdstr, helpstr)   DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_HIDDEN, daemon)
 
#define ALIAS_SH_DEPRECATED(daemon, funcname, cmdname, cmdstr, helpstr)   DEFUN_CMD_ELEMENT(funcname, cmdname, cmdstr, helpstr, CMD_ATTR_DEPRECATED, daemon)
 
#define CMD_OPTION(S)   ((S[0]) == '[')
 
#define CMD_VARIABLE(S)   (((S[0]) >= 'A' && (S[0]) <= 'Z') || ((S[0]) == '<'))
 
#define CMD_VARARG(S)   ((S[0]) == '.')
 
#define CMD_RANGE(S)   ((S[0] == '<'))
 
#define CMD_IPV4(S)   ((strcmp ((S), "A.B.C.D") == 0))
 
#define CMD_IPV4_PREFIX(S)   ((strcmp ((S), "A.B.C.D/M") == 0))
 
#define CMD_IPV6(S)   ((strcmp ((S), "X:X::X:X") == 0))
 
#define CMD_IPV6_PREFIX(S)   ((strcmp ((S), "X:X::X:X/M") == 0))
 
#define SHOW_STR   "Show running system information\n"
 
#define IP_STR   "IP information\n"
 
#define IPV6_STR   "IPv6 information\n"
 
#define NO_STR   "Negate a command or set its defaults\n"
 
#define CLEAR_STR   "Reset functions\n"
 
#define RIP_STR   "RIP information\n"
 
#define BGP_STR   "BGP information\n"
 
#define OSPF_STR   "OSPF information\n"
 
#define NEIGHBOR_STR   "Specify neighbor router\n"
 
#define DEBUG_STR   "Debugging functions (see also 'undebug')\n"
 
#define UNDEBUG_STR   "Disable debugging functions (see also 'debug')\n"
 
#define ROUTER_STR   "Enable a routing process\n"
 
#define AS_STR   "AS number\n"
 
#define MBGP_STR   "MBGP information\n"
 
#define MATCH_STR   "Match values from routing table\n"
 
#define SET_STR   "Set values in destination routing protocol\n"
 
#define OUT_STR   "Filter outgoing routing updates\n"
 
#define IN_STR   "Filter incoming routing updates\n"
 
#define V4NOTATION_STR   "specify by IPv4 address notation(e.g. 0.0.0.0)\n"
 
#define OSPF6_NUMBER_STR   "Specify by number\n"
 
#define INTERFACE_STR   "Interface infomation\n"
 
#define IFNAME_STR   "Interface name(e.g. ep0)\n"
 
#define IP6_STR   "IPv6 Information\n"
 
#define OSPF6_STR   "Open Shortest Path First (OSPF) for IPv6\n"
 
#define OSPF6_ROUTER_STR   "Enable a routing process\n"
 
#define OSPF6_INSTANCE_STR   "<1-65535> Instance ID\n"
 
#define SECONDS_STR   "<1-65535> Seconds\n"
 
#define ROUTE_STR   "Routing Table\n"
 
#define PREFIX_LIST_STR   "Build a prefix list\n"
 
#define OSPF6_DUMP_TYPE_LIST   "(neighbor|interface|area|lsa|zebra|config|dbex|spf|route|lsdb|redistribute|hook|asbr|prefix|abr)"
 
#define ISIS_STR   "IS-IS information\n"
 
#define AREA_TAG_STR   "[area tag]\n"
 
#define CONF_BACKUP_EXT   ".sav"
 
#define NEIGHBOR_CMD   "neighbor A.B.C.D "
 
#define NO_NEIGHBOR_CMD   "no neighbor A.B.C.D "
 
#define NEIGHBOR_ADDR_STR   "Neighbor address\n"
 
#define NEIGHBOR_CMD2   "neighbor (A.B.C.D|WORD) "
 
#define NO_NEIGHBOR_CMD2   "no neighbor (A.B.C.D|WORD) "
 
#define NEIGHBOR_ADDR_STR2   "Neighbor address\nNeighbor tag\n"
 

Enumerations

enum  node_type {
  AUTH_NODE, VIEW_NODE, AUTH_ENABLE_NODE, ENABLE_NODE,
  CONFIG_NODE, SERVICE_NODE, DEBUG_NODE, CFG_LOG_NODE,
  CFG_STATS_NODE, VTY_NODE, L_E1INP_NODE, L_IPA_NODE,
  L_NS_NODE, L_BSSGP_NODE, L_CTRL_NODE, RESERVED1_NODE,
  RESERVED2_NODE, RESERVED3_NODE, _LAST_OSMOVTY_NODE
}
 There are some command levels which called from command node. More...
 
enum  { CMD_ATTR_DEPRECATED = 1, CMD_ATTR_HIDDEN }
 

Functions

void install_node (struct cmd_node *node, int(*func)(struct vty *))
 Install top node of command vector.
 
void install_default (int node_type)
 
void install_element (int ntype, struct cmd_element *cmd)
 Install a command into a node. More...
 
void install_element_ve (struct cmd_element *cmd)
 
void sort_node (void)
 Sort each node's command element according to command string.
 
void vty_install_default (int node_type)
 
char * argv_concat (const char **argv, int argc, int shift)
 
vector cmd_make_strvec (const char *)
 
void cmd_free_strvec (vector v)
 Free allocated string vector.
 
vector cmd_describe_command ()
 
char ** cmd_complete_command ()
 
const char * cmd_prompt (enum node_type node)
 Return prompt character of specified node.
 
int config_from_file (struct vty *, FILE *)
 
enum node_type node_parent (enum node_type)
 
int cmd_execute_command (vector, struct vty *, struct cmd_element **, int)
 
int cmd_execute_command_strict (vector, struct vty *, struct cmd_element **)
 
void config_replace_string (struct cmd_element *, char *,...)
 
void cmd_init (int)
 
char * host_config_file ()
 
void host_config_set (const char *)
 
char * osmo_asciidoc_escape (const char *inp)
 escape all special asciidoc symbols More...
 
void print_version (int print_copyright)
 print the version (and optionally copyright) information More...
 

Variables

struct cmd_element config_exit_cmd
 
struct cmd_element config_help_cmd
 
struct cmd_element config_list_cmd
 
struct cmd_element config_end_cmd
 
void * tall_vty_cmd_ctx
 
vty::index
void * index
For current referencing point of interface, route-map, access-list etc...
Definition: vty.h:95
vty::sb_len
size_t sb_len
How many subnegotiation characters have we received?
Definition: vty.h:124
_vector
Definition: vector.h:26
vty_shell
int vty_shell(struct vty *vty)
Return if this VTY is a shell or not.
Definition: vty.c:231
gDEFUN
#define gDEFUN(funcname, cmdname, cmdstr, helpstr)
Macro for defining a non-static (global) VTY node and function.
Definition: command.h:209
vty_app_info::tall_ctx
void * tall_ctx
talloc context
Definition: vty.h:157
cmd_node::node
int node
Node index.
Definition: command.h:105
telnet_connection::dbg
struct log_target * dbg
logging target associated with this telnet connection
Definition: telnet_interface.h:45
host::advanced
int advanced
Flags for services.
Definition: command.h:57
vty::length
int length
Command length.
Definition: vty.h:79
cmd_node::func
int(* func)(struct vty *)
Node's configuration write function.
Definition: command.h:114
vty_app_info::name
const char * name
name of the application
Definition: vty.h:151
vty_out_stat_item_group
void vty_out_stat_item_group(struct vty *vty, const char *prefix, struct osmo_stat_item_group *statg)
print a stat item group to given VTY
Definition: utils.c:107
vty_cmd_string_from_valstr
char * vty_cmd_string_from_valstr(void *ctx, const struct value_string *vals, const char *prefix, const char *sep, const char *end, int do_lower)
Generate a VTY command string from value_string.
Definition: utils.c:191
cmd_element::doc
const char * doc
Documentation of this command.
Definition: command.h:129
vty::hist
char * hist[VTY_MAXHIST]
Histry of command.
Definition: vty.h:85
telnet_connection::priv
void * priv
private data pointer passed through
Definition: telnet_interface.h:39
vty::iac_sb_in_progress
unsigned char iac_sb_in_progress
IAC SB (option subnegotiation) handling.
Definition: vty.h:114
telnet_interface.h
desc::cmd
const char * cmd
Command string.
Definition: command.h:140
cmd_free_strvec
void cmd_free_strvec(vector)
Free allocated string vector.
Definition: command.c:243
cmd_element
Structure of a command element.
Definition: command.h:126
node_type
node_type
There are some command levels which called from command node.
Definition: command.h:69
osmo_vty_write_config_file
int osmo_vty_write_config_file(const char *filename)
Write the current running config to a given file.
Definition: command.c:3417
telnet_connection::entry
struct llist_head entry
linked list header for internal management
Definition: telnet_interface.h:37
vty::cp
int cp
Command cursor point.
Definition: vty.h:76
host::password
char * password
Password for vty interface.
Definition: command.h:40
vty_config_unlock
int vty_config_unlock(struct vty *)
Unlock the configuration from a given VTY.
Definition: vty.c:336
telnet_close_client
int telnet_close_client(struct osmo_fd *fd)
close a telnet connection
Definition: telnet_interface.c:102
cmd_element::cmdsize
unsigned int cmdsize
Command index count.
Definition: command.h:132
CFG_STATS_NODE
@ CFG_STATS_NODE
Configure the statistics.
Definition: command.h:78
vty_out_rate_ctr_group
void vty_out_rate_ctr_group(struct vty *vty, const char *prefix, struct rate_ctr_group *ctrg)
print a rate counter group to given VTY
Definition: utils.c:75
vty_new
struct vty * vty_new(void)
Allocate a new vty interface structure.
Definition: vty.c:97
vty::lines
int lines
Configure lines.
Definition: vty.h:132
vty.h
vty_event
void vty_event(enum event event, int sock, struct vty *vty)
callback from core VTY code about VTY related events
Definition: telnet_interface.c:180
vty::fd
int fd
File descripter of this vty.
Definition: vty.h:58
cmd_node
Node which has some commands and prompt string and configuration function pointer .
Definition: command.h:103
osmo_asciidoc_escape
char * osmo_asciidoc_escape(const char *inp)
escape all special asciidoc symbols
Definition: command.c:410
vty::priv
void * priv
private data, specified by creator
Definition: vty.h:55
vty::max
int max
Command max length.
Definition: vty.h:82
vty_out_context
Definition: utils.c:45
osmo_vty_save_config_file
int osmo_vty_save_config_file(void)
Save the current state to the config file.
Definition: command.c:3435
AUTH_ENABLE_NODE
@ AUTH_ENABLE_NODE
Authentication mode for change enable.
Definition: command.h:72
install_node
void install_node(struct cmd_node *, int(*)(struct vty *))
Install top node of command vector.
Definition: command.c:126
CONFIG_NODE
@ CONFIG_NODE
Config node. Default mode of config file.
Definition: command.h:74
telnet_connection
A telnet connection.
Definition: telnet_interface.h:35
command.h
cmd_element::strvec
vector strvec
Pointing out each description vector.
Definition: command.h:131
cmd_make_strvec
vector cmd_make_strvec(const char *)
Definition: command.c:195
vty_app_info::version
const char * version
version string of the application
Definition: vty.h:153
CFG_LOG_NODE
@ CFG_LOG_NODE
Configure the logging.
Definition: command.h:77
vty_signal_data
Definition: vty.h:205
telnet_init
int telnet_init(void *tall_ctx, void *priv, int port)
Initialize telnet based VTY interface listening to 127.0.0.1.
Definition: telnet_interface.c:63
telnet_connection::fd
struct osmo_fd fd
filedsecriptor (socket )
Definition: telnet_interface.h:41
vty::width
int width
Window width.
Definition: vty.h:127
vty_close
void vty_close(struct vty *)
Close a given vty interface.
Definition: vty.c:190
vty::sb_buf
unsigned char sb_buf[TELNET_NAWS_SB_LEN]
sub-negotiation buffer
Definition: vty.h:120
vty
Definition: vty.h:50
vty::type
enum vty_type type
Is this vty connect to file or not.
Definition: vty.h:61
vty::hindex
int hindex
History insert end point.
Definition: vty.h:91
vty_current_index
void * vty_current_index(struct vty *vty)
return the current index of a given VTY
Definition: vty.c:306
cmd_prompt
const char * cmd_prompt(enum node_type)
Return prompt character of specified node.
Definition: command.c:397
cmd_make_descvec
static vector cmd_make_descvec(const char *string, const char *descstr)
New string vector.
Definition: command.c:294
telnet_init_dynif
int telnet_init_dynif(void *tall_ctx, void *priv, const char *ip, int port)
Initialize telnet based VTY interface.
Definition: telnet_interface.c:74
host::lines
int lines
System wide terminal lines.
Definition: command.h:48
vty_reset
void vty_reset(void)
Reset all VTY status.
Definition: vty.c:1696
vty::buf
char * buf
Command input buffer.
Definition: vty.h:73
ENABLE_NODE
@ ENABLE_NODE
Enable node.
Definition: command.h:73
vty_app_info::is_config_node
int(* is_config_node)(struct vty *vty, int node)
call-back to determine if node is config node
Definition: vty.h:161
vty::node
int node
Node status of this vty.
Definition: vty.h:64
AUTH_NODE
@ AUTH_NODE
Authentication mode of vty interface.
Definition: command.h:70
cmd_element::string
const char * string
Command specification by string.
Definition: command.h:127
cmd_element::daemon
int daemon
Daemon to which this command belong.
Definition: command.h:130
cmd_element::attr
unsigned char attr
Command attributes.
Definition: command.h:135
host::app_info
const struct vty_app_info * app_info
VTY application information.
Definition: command.h:65
vty_app_info::go_parent_cb
int(* go_parent_cb)(struct vty *vty)
call-back for returning to parent n ode
Definition: vty.h:159
host::enable
char * enable
Enable password.
Definition: command.h:44
buffer
Definition: buffer.c:36
vty_app_info::config_is_consistent
int(* config_is_consistent)(struct vty *vty)
Check if the config is consistent before write.
Definition: vty.h:163
install_element
void install_element(int node_type, struct cmd_element *)
Install a command into a node.
Definition: command.c:617
vty_read_config_file
int vty_read_config_file(const char *file_name, void *priv)
Read the configuration file using the VTY code.
Definition: vty.c:1794
event
event
VTY events.
Definition: vty.h:29
vty::fail
int fail
Failure count.
Definition: vty.h:67
VIEW_NODE
@ VIEW_NODE
View node. Default mode of vty interface.
Definition: command.h:71
print_version
void print_version(int print_copyright)
print the version (and optionally copyright) information
Definition: command.c:93
vty::status
enum vty::@1 status
Current vty status.
host::name
char * name
Host name of this router.
Definition: command.h:37
host::config
char * config
config file name of this host
Definition: command.h:54
vty_current_node
int vty_current_node(struct vty *vty)
return the current node of a given VTY
Definition: vty.c:312
vty_out
int vty_out(struct vty *vty, const char *format,...)
VTY standard output function.
Definition: vty.c:241
vty::escape
unsigned char escape
For escape character.
Definition: vty.h:101
buffer_data
Definition: buffer.c:46
telnet_connection::vty
struct vty * vty
VTY instance associated with telnet connection.
Definition: telnet_interface.h:43
desc
Command description structure.
Definition: command.h:139
host
Host configuration variable.
Definition: command.h:35
vty::obuf
struct buffer * obuf
Output buffer.
Definition: vty.h:70
vty::index_sub
void * index_sub
For multiple level index treatment such as key chain and key.
Definition: vty.h:98
host::logfile
char * logfile
Log filename.
Definition: command.h:51
vty_create
struct vty * vty_create(int vty_sock, void *priv)
Create new vty structure.
Definition: vty.c:1487
vty::config
int config
In configure mode.
Definition: vty.h:137
DEFUN
#define DEFUN(funcname, cmdname, cmdstr, helpstr)
Macro for defining a VTY node and function.
Definition: command.h:198
VTY_NODE
@ VTY_NODE
Vty node.
Definition: command.h:80
vty::iac
unsigned char iac
IAC handling.
Definition: vty.h:111
host::motd
const char * motd
Banner configuration.
Definition: command.h:61
vty_config_lock
int vty_config_lock(struct vty *)
Lock the configuration to a given VTY.
Definition: vty.c:323
vty::hp
int hp
History lookup current point.
Definition: vty.h:88
cmd_desc_str
static char * cmd_desc_str(const char **string)
Fetch next description. Used in cmd_make_descvec().
Definition: command.c:259
cmd_node::cmd_vector
vector cmd_vector
Vector of this node's command list.
Definition: command.h:117
vty::height
int height
Widnow height.
Definition: vty.h:129
vty_read
int vty_read(struct vty *vty)
Read data via vty socket.
Definition: vty.c:1266
vty_out_newline
int vty_out_newline(struct vty *vty)
print a newline on the given VTY
Definition: vty.c:298
sort_node
void sort_node(void)
Sort each node's command element according to command string.
Definition: command.c:163
cmd_node::prompt
const char * prompt
Prompt character at vty interface.
Definition: command.h:108
vty_init
void vty_init(struct vty_app_info *app_info)
Initialize VTY layer.
Definition: vty.c:1757
desc::str
const char * str
Command's description.
Definition: command.h:141
vty_app_info::copyright
const char * copyright
copyright string of the application
Definition: vty.h:155
CMD_SUCCESS
#define CMD_SUCCESS
Return value of the commands.
Definition: command.h:145
vty_app_info
Definition: vty.h:149