NetworkManager/src/nmcli/nmcli.h
Thomas Haller 7cfa8a01cd
cli: reformat file to look better
Comments on the same line as field names are not rendered well by clang-format.
Even if manually edited, it seems not a preferable way to comment on a field.
Move the comment in the line before.
2022-06-16 11:02:20 +02:00

269 lines
7.7 KiB
C

/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (C) 2010 - 2022 Red Hat, Inc.
*/
#ifndef NMC_NMCLI_H
#define NMC_NMCLI_H
#include "libnmc-base/nm-secret-agent-simple.h"
#include "libnmc-setting/nm-meta-setting-desc.h"
struct _NMPolkitListener;
typedef char *(*NmcCompEntryFunc)(const char *, int);
/* nmcli exit codes */
typedef enum {
/* Indicates successful execution */
NMC_RESULT_SUCCESS = 0,
/* Unknown / unspecified error */
NMC_RESULT_ERROR_UNKNOWN = 1,
/* Wrong invocation of nmcli */
NMC_RESULT_ERROR_USER_INPUT = 2,
/* A timeout expired */
NMC_RESULT_ERROR_TIMEOUT_EXPIRED = 3,
/* Error in connection activation */
NMC_RESULT_ERROR_CON_ACTIVATION = 4,
/* Error in connection deactivation */
NMC_RESULT_ERROR_CON_DEACTIVATION = 5,
/* Error in device disconnect */
NMC_RESULT_ERROR_DEV_DISCONNECT = 6,
/* Error in connection deletion */
NMC_RESULT_ERROR_CON_DEL = 7,
/* NetworkManager is not running */
NMC_RESULT_ERROR_NM_NOT_RUNNING = 8,
/* No more used, keep to preserve API */
NMC_RESULT_ERROR_VERSIONS_MISMATCH = 9,
/* Connection/Device/AP not found */
NMC_RESULT_ERROR_NOT_FOUND = 10,
/* --complete-args signals a file name may follow */
NMC_RESULT_COMPLETE_FILE = 65,
} NMCResultCode;
typedef enum {
NMC_PRINT_TERSE = 0,
NMC_PRINT_NORMAL = 1,
NMC_PRINT_PRETTY = 2,
} NMCPrintOutput;
static inline NMMetaAccessorGetType
nmc_print_output_to_accessor_get_type(NMCPrintOutput print_output)
{
return NM_IN_SET(print_output, NMC_PRINT_NORMAL, NMC_PRINT_PRETTY)
? NM_META_ACCESSOR_GET_TYPE_PRETTY
: NM_META_ACCESSOR_GET_TYPE_PARSABLE;
}
/* === Output fields === */
typedef enum {
/* Print field names instead of values */
NMC_OF_FLAG_FIELD_NAMES = 0x00000001,
/* Use the first value as section prefix for the other field names - just in multiline */
NMC_OF_FLAG_SECTION_PREFIX = 0x00000002,
/* Print main header in addition to values/field names */
NMC_OF_FLAG_MAIN_HEADER_ADD = 0x00000004,
/* Print main header only */
NMC_OF_FLAG_MAIN_HEADER_ONLY = 0x00000008,
} NmcOfFlags;
typedef struct {
const char *ansi_seq[_NM_META_COLOR_NUM];
} NmcColorPalette;
extern const NMMetaType nmc_meta_type_generic_info;
typedef struct _NmcOutputField NmcOutputField;
typedef struct _NmcMetaGenericInfo NmcMetaGenericInfo;
struct _NmcOutputField {
const NMMetaAbstractInfo *info;
/* Width in screen columns */
int width;
/* Value of current field - char* or char** (NULL-terminated array) */
void *value;
/* Whether value is char** instead of char* */
bool value_is_array : 1;
/* Whether to free the value */
bool free_value : 1;
NmcOfFlags flags; /* Flags - whether and how to print values/field names/headers */
NMMetaColor color; /* Use this color to print value */
};
typedef struct _NmcConfig {
/* Output mode */
NMCPrintOutput print_output;
/* Whether to use colors for output: option '--color' */
bool use_colors;
/* Multiline output instead of default tabular */
bool multiline_output : 1;
/* Whether to escape ':' and '\' in terse tabular mode */
bool escape_values : 1;
/* Whether running the editor - nmcli con edit' */
bool in_editor : 1;
/* Whether to display secrets (both input and output): option '--show-secrets' */
bool show_secrets : 1;
/* Overview mode (hide default values) */
bool overview : 1;
NmcColorPalette palette;
} NmcConfig;
typedef struct {
pid_t pid;
} NmcPagerData;
typedef struct _NmcOutputData {
/* GPtrArray of arrays of NmcOutputField structs - accumulates data for output */
GPtrArray *output_data;
} NmcOutputData;
/* NmCli - main structure */
typedef struct _NmCli {
/* Pointer to NMClient of libnm */
NMClient *client;
/* Return code of nmcli */
NMCResultCode return_value;
/* Reason text */
GString *return_text;
NmcPagerData pager_data;
/* Operation timeout */
int timeout;
/* Secret agent */
NMSecretAgentSimple *secret_agent;
/* Hash table with passwords in passwd-file */
GHashTable *pwds_hash;
/* polkit agent listener */
struct _NMPolkitListener *pk_listener;
/* Semaphore indicating whether nmcli should not end or not yet */
int should_wait;
/* '--nowait' option; used for passing to callbacks */
bool nowait_flag : 1;
/* Whether tabular/multiline mode was specified via '--mode' option */
bool mode_specified : 1;
/* Communicate the connection data over stdin/stdout instead of talking to the daemon. */
bool offline : 1;
/* Ask for missing parameters: option '--ask' */
bool ask : 1;
/* Autocomplete the command line */
bool complete : 1;
/* Whether to display status line in connection editor */
bool editor_status_line : 1;
/* Whether to ask for confirmation on saving connections with 'autoconnect=yes' */
bool editor_save_confirmation : 1;
union {
const NmcConfig nmc_config;
NmcConfig nmc_config_mutable;
};
/* Required fields in output: '--fields' option */
char *required_fields;
/* Buffer with sequences for terminal-colors.d(5)-based coloring. */
char *palette_buffer;
GPtrArray *offline_connections;
} NmCli;
extern const NmCli *const nm_cli_global_readline;
/* Error quark for GError domain */
#define NMCLI_ERROR (nmcli_error_quark())
GQuark nmcli_error_quark(void);
extern GMainLoop *loop;
gboolean nmc_seen_sigint(void);
void nmc_clear_sigint(void);
void nmc_set_sigquit_internal(void);
void nmc_exit(void);
void nm_cli_spawn_pager(const NmcConfig *nmc_config, NmcPagerData *pager_data);
void nmc_empty_output_fields(NmcOutputData *output_data);
#define NMC_OUTPUT_DATA_DEFINE_SCOPED(out) \
gs_unref_array GArray *out##_indices = NULL; \
nm_auto(nmc_empty_output_fields) NmcOutputData out = { \
.output_data = g_ptr_array_new_full(20, g_free), \
}
/*****************************************************************************/
struct _NMCCommand;
typedef struct _NMCCommand {
const char *cmd;
void (*func)(const struct _NMCCommand *cmd, NmCli *nmc, int argc, const char *const *argv);
void (*usage)(void);
/* Ensure a client instance is there before calling the handler (unless --offline has been given). */
bool needs_client : 1;
/* Client instance exists *and* the service is actually present on the bus. */
bool needs_nm_running : 1;
/* Run the handler without a client even if the comand usually requires one if --offline option was used. */
bool supports_offline : 1;
/* With --online, read in a keyfile from standard input before dispatching the handler. */
bool needs_offline_conn : 1;
} NMCCommand;
void nmc_command_func_agent(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const *argv);
void nmc_command_func_general(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const *argv);
void
nmc_command_func_networking(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const *argv);
void nmc_command_func_radio(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const *argv);
void nmc_command_func_monitor(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const *argv);
void
nmc_command_func_overview(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const *argv);
void
nmc_command_func_connection(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const *argv);
void nmc_command_func_device(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const *argv);
/*****************************************************************************/
#endif /* NMC_NMCLI_H */