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