1 /*
2  * Copyright (C) 2018  NetDEF, Inc.
3  *                     Renato Westphal
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License as published by the Free
7  * Software Foundation; either version 2 of the License, or (at your option)
8  * any later version.
9  *
10  * This program is distributed in the hope that it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; see the file COPYING; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18  */
19 
20 #ifndef _FRR_NORTHBOUND_CLI_H_
21 #define _FRR_NORTHBOUND_CLI_H_
22 
23 #include "northbound.h"
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 /* Possible formats in which a configuration can be displayed. */
30 enum nb_cfg_format {
31 	NB_CFG_FMT_CMDS = 0,
32 	NB_CFG_FMT_JSON,
33 	NB_CFG_FMT_XML,
34 };
35 
36 extern struct nb_config *vty_shared_candidate_config;
37 
38 /*
39  * Enqueue change to be applied in the candidate configuration.
40  *
41  * vty
42  *    The vty context.
43  *
44  * xpath
45  *    XPath (absolute or relative) of the configuration option being edited.
46  *
47  * operation
48  *    Operation to apply (either NB_OP_CREATE, NB_OP_MODIFY or NB_OP_DELETE).
49  *
50  * value
51  *    New value of the configuration option. Should be NULL for typeless YANG
52  *    data (e.g. presence-containers). For convenience, NULL can also be used
53  *    to restore a leaf to its default value.
54  */
55 extern void nb_cli_enqueue_change(struct vty *vty, const char *xpath,
56 				  enum nb_operation operation,
57 				  const char *value);
58 
59 /*
60  * Apply enqueued changes to the candidate configuration.
61  *
62  * vty
63  *    The vty context.
64  *
65  * xpath_base_fmt
66  *    Prepend the given XPath (absolute or relative) to all enqueued
67  *    configuration changes. This is an optional parameter.
68  *
69  * Returns:
70  *    CMD_SUCCESS on success, CMD_WARNING_CONFIG_FAILED otherwise.
71  */
72 extern int nb_cli_apply_changes(struct vty *vty, const char *xpath_base_fmt,
73 				...);
74 
75 /*
76  * Execute a YANG RPC or Action.
77  *
78  * xpath
79  *    XPath of the YANG RPC or Action node.
80  *
81  * input
82  *    List of 'yang_data' structures containing the RPC input parameters. It
83  *    can be set to NULL when there are no input parameters.
84  *
85  * output
86  *    List of 'yang_data' structures used to retrieve the RPC output parameters.
87  *    It can be set to NULL when it's known that the given YANG RPC or Action
88  *    doesn't have any output parameters.
89  *
90  * Returns:
91  *    CMD_SUCCESS on success, CMD_WARNING otherwise.
92  */
93 extern int nb_cli_rpc(const char *xpath, struct list *input,
94 		      struct list *output);
95 
96 /*
97  * Show CLI commands associated to the given YANG data node.
98  *
99  * vty
100  *    The vty terminal to dump the configuration to.
101  *
102  * dnode
103  *    libyang data node that should be shown in the form of CLI commands.
104  *
105  * show_defaults
106  *    Specify whether to display default configuration values or not.
107  */
108 extern void nb_cli_show_dnode_cmds(struct vty *vty, struct lyd_node *dnode,
109 				   bool show_defaults);
110 
111 /*
112  * Perform pending commit, if any.
113  *
114  * vty
115  *    The vty context.
116  */
117 extern void nb_cli_pending_commit_check(struct vty *vty);
118 
119 /* Prototypes of internal functions. */
120 extern void nb_cli_show_config_prepare(struct nb_config *config,
121 				       bool with_defaults);
122 extern void nb_cli_confirmed_commit_clean(struct vty *vty);
123 extern int nb_cli_confirmed_commit_rollback(struct vty *vty);
124 extern void nb_cli_install_default(int node);
125 extern void nb_cli_init(struct thread_master *tm);
126 extern void nb_cli_terminate(void);
127 
128 #ifdef __cplusplus
129 }
130 #endif
131 
132 #endif /* _FRR_NORTHBOUND_CLI_H_ */
133