]>
git.proxmox.com Git - mirror_frr.git/blob - lib/command_graph.h
5 * Copyright (C) 2016 Cumulus Networks, Inc.
6 * Copyright (C) 1997, 98, 99 Kunihiro Ishiguro
7 * Copyright (C) 2013 by Open Source Routing.
8 * Copyright (C) 2013 by Internet Systems Consortium, Inc. ("ISC")
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the Free
12 * Software Foundation; either version 2 of the License, or (at your option)
15 * This program is distributed in the hope that it will be useful, but WITHOUT
16 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
20 * You should have received a copy of the GNU General Public License along
21 * with this program; see the file COPYING; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 #ifndef _FRR_COMMAND_GRAPH_H
26 #define _FRR_COMMAND_GRAPH_H
40 DECLARE_MTYPE(CMD_ARG
)
47 * The type determines what kind of data the token can match (in the
48 * matching use case) or hold (in the argv use case).
50 /* clang-format off */
53 VARIABLE_TKN
, // almost anything
54 RANGE_TKN
, // integer range
55 IPV4_TKN
, // IPV4 addresses
56 IPV4_PREFIX_TKN
, // IPV4 network prefixes
57 IPV6_TKN
, // IPV6 prefixes
58 IPV6_PREFIX_TKN
, // IPV6 network prefixes
59 MAC_TKN
, // Ethernet address
60 MAC_PREFIX_TKN
, // Ethernet address w/ CIDR mask
63 FORK_TKN
, // marks subgraph beginning
64 JOIN_TKN
, // marks subgraph end
65 START_TKN
, // first token in line
66 END_TKN
, // last token in line
68 SPECIAL_TKN
= FORK_TKN
,
72 #define IS_VARYING_TOKEN(x) ((x) >= VARIABLE_TKN && (x) < FORK_TKN)
74 /* Command attributes */
75 enum { CMD_ATTR_NORMAL
,
81 /* Comamand token struct. */
83 enum cmd_token_type type
; // token type
84 uint8_t attr
; // token attributes
85 bool allowrepeat
; // matcher allowed to match token repetively?
88 char *text
; // token text
89 char *desc
; // token description
90 long long min
, max
; // for ranges
91 char *arg
; // user input that matches this token
94 struct graph_node
*forkjoin
; // paired FORK/JOIN for JOIN/FORK
97 /* Structure of command element. */
99 const char *string
; /* Command specification by string. */
100 const char *doc
; /* Documentation of this command. */
101 int daemon
; /* Daemon to which this command belong. */
102 uint32_t attr
; /* Command attributes */
104 /* handler function for command */
105 int (*func
)(const struct cmd_element
*, struct vty
*, int,
106 struct cmd_token
*[]);
108 const char *name
; /* symbol name for debugging */
112 /* text for <cr> command */
113 #define CMD_CR_TEXT "<cr>"
115 /* memory management for cmd_token */
116 extern struct cmd_token
*cmd_token_new(enum cmd_token_type
, uint8_t attr
,
117 const char *text
, const char *desc
);
118 extern struct cmd_token
*cmd_token_dup(struct cmd_token
*);
119 extern void cmd_token_del(struct cmd_token
*);
120 extern void cmd_token_varname_set(struct cmd_token
*token
, const char *varname
);
122 extern void cmd_graph_parse(struct graph
*graph
, const struct cmd_element
*cmd
);
123 extern void cmd_graph_names(struct graph
*graph
);
124 extern void cmd_graph_merge(struct graph
*old
, struct graph
*n
,
127 * Print callback for DOT dumping.
129 * See graph.h for more details.
131 extern void cmd_graph_node_print_cb(struct graph_node
*gn
, struct buffer
*buf
);
133 * Dump command graph to DOT.
136 * A command graph to dump
139 * String allocated with MTYPE_TMP representing this graph
141 char *cmd_graph_dump_dot(struct graph
*cmdgraph
);
147 #endif /* _FRR_COMMAND_GRAPH_H */