diff options
| author | Michael Biebl <biebl@debian.org> | 2021-10-01 23:05:04 +0200 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2021-10-01 23:05:04 +0200 |
| commit | e74c568b07b50b97873fb4ee1d776dedefbd54d6 (patch) | |
| tree | 3469f17ea9af91f7ff169b890633bda68b0cf76e /src/libnmc-setting/nm-meta-setting-desc.h | |
| parent | bfe522304da217296e2a61040f58e35ec5d6f3f2 (diff) | |
New upstream version 1.32.12 upstream/1.32.12
Diffstat (limited to 'src/libnmc-setting/nm-meta-setting-desc.h')
| -rw-r--r-- | src/libnmc-setting/nm-meta-setting-desc.h | 541 |
1 files changed, 541 insertions, 0 deletions
diff --git a/src/libnmc-setting/nm-meta-setting-desc.h b/src/libnmc-setting/nm-meta-setting-desc.h new file mode 100644 index 00000000..29416dcb --- /dev/null +++ b/src/libnmc-setting/nm-meta-setting-desc.h @@ -0,0 +1,541 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2010 - 2018 Red Hat, Inc. + */ + +#ifndef __NM_META_SETTING_DESC_H__ +#define __NM_META_SETTING_DESC_H__ + +#include "libnm-glib-aux/nm-obj.h" +#include "nm-meta-setting-base.h" +#include "libnm-base/nm-ethtool-base.h" + +struct _NMDevice; + +#define NM_META_TEXT_HIDDEN N_("<hidden>") + +#define NM_META_TEXT_PROMPT_ADSL_PROTO N_("Protocol") +#define NM_META_TEXT_PROMPT_ADSL_PROTO_CHOICES \ + "(" NM_SETTING_ADSL_PROTOCOL_PPPOA "/" NM_SETTING_ADSL_PROTOCOL_PPPOE \ + "/" NM_SETTING_ADSL_PROTOCOL_IPOATM ")" + +#define NM_META_TEXT_PROMPT_ADSL_ENCAP N_("ADSL encapsulation") +#define NM_META_TEXT_PROMPT_ADSL_ENCAP_CHOICES \ + "(" NM_SETTING_ADSL_ENCAPSULATION_VCMUX "/" NM_SETTING_ADSL_ENCAPSULATION_LLC ") [none]" + +#define NM_META_TEXT_PROMPT_CON_TYPE N_("Connection type") +#define NM_META_TEXT_PROMPT_IFNAME N_("Interface name [*]") +#define NM_META_TEXT_PROMPT_VPN_TYPE N_("VPN type") +#define NM_META_TEXT_PROMPT_MASTER N_("Master") + +#define NM_META_TEXT_PROMPT_IB_MODE N_("Transport mode") +#define NM_META_TEXT_WORD_DATAGRAM "datagram" +#define NM_META_TEXT_WORD_CONNECTED "connected" +#define NM_META_TEXT_PROMPT_IB_MODE_CHOICES \ + "(" NM_META_TEXT_WORD_DATAGRAM "/" NM_META_TEXT_WORD_CONNECTED \ + ") [" NM_META_TEXT_WORD_DATAGRAM "]" + +#define NM_META_TEXT_PROMPT_BT_TYPE N_("Bluetooth type") +#define NM_META_TEXT_WORD_PANU "panu" +#define NM_META_TEXT_WORD_NAP "nap" +#define NM_META_TEXT_WORD_DUN_GSM "dun-gsm" +#define NM_META_TEXT_WORD_DUN_CDMA "dun-cdma" +#define NM_META_TEXT_PROMPT_BT_TYPE_CHOICES \ + "(" NM_META_TEXT_WORD_PANU "/" NM_META_TEXT_WORD_NAP "/" NM_META_TEXT_WORD_DUN_GSM \ + "/" NM_META_TEXT_WORD_DUN_CDMA ") [" NM_META_TEXT_WORD_PANU "]" + +#define NM_META_TEXT_PROMPT_BOND_MODE N_("Bonding mode") + +#define NM_META_TEXT_PROMPT_BOND_MON_MODE N_("Bonding monitoring mode") +#define NM_META_TEXT_WORD_MIIMON "miimon" +#define NM_META_TEXT_WORD_ARP "arp" +#define NM_META_TEXT_PROMPT_BOND_MON_MODE_CHOICES \ + "(" NM_META_TEXT_WORD_MIIMON "/" NM_META_TEXT_WORD_ARP ") [" NM_META_TEXT_WORD_MIIMON "]" + +#define NM_META_TEXT_PROMPT_WIFI_MODE N_("Wi-Fi mode") +#define NM_META_TEXT_WORD_INFRA "infrastructure" +#define NM_META_TEXT_WORD_AP "ap" +#define NM_META_TEXT_WORD_ADHOC "adhoc" +#define NM_META_TEXT_WORD_MESH "mesh" +#define NM_META_TEXT_PROMPT_WIFI_MODE_CHOICES \ + "(" NM_META_TEXT_WORD_INFRA "/" NM_META_TEXT_WORD_AP "/" NM_META_TEXT_WORD_ADHOC \ + "/" NM_META_TEXT_WORD_MESH ") [" NM_META_TEXT_WORD_INFRA "]" + +#define NM_META_TEXT_PROMPT_TUN_MODE N_("Tun mode") +#define NM_META_TEXT_WORD_TUN "tun" +#define NM_META_TEXT_WORD_TAP "tap" +#define NM_META_TEXT_PROMPT_TUN_MODE_CHOICES \ + "(" NM_META_TEXT_WORD_TUN "/" NM_META_TEXT_WORD_TAP ") [" NM_META_TEXT_WORD_TUN "]" + +#define NM_META_TEXT_PROMPT_IP_TUNNEL_MODE N_("IP Tunnel mode") + +#define NM_META_TEXT_PROMPT_MACVLAN_MODE N_("MACVLAN mode") + +#define NM_META_TEXT_PROMPT_MACSEC_MODE N_("MACsec mode") +#define NM_META_TEXT_WORD_PSK "psk" +#define NM_META_TEXT_WORD_EAP "eap" +#define NM_META_TEXT_PROMPT_MACSEC_MODE_CHOICES \ + "(" NM_META_TEXT_WORD_PSK "/" NM_META_TEXT_WORD_EAP ")" + +#define NM_META_TEXT_PROMPT_PROXY_METHOD N_("Proxy method") +#define NM_META_TEXT_WORD_NONE "none" +#define NM_META_TEXT_WORD_AUTO "auto" +#define NM_META_TEXT_PROMPT_PROXY_METHOD_CHOICES \ + "(" NM_META_TEXT_WORD_NONE "/" NM_META_TEXT_WORD_AUTO ") [" NM_META_TEXT_WORD_NONE "]" + +typedef enum { + NM_META_COLOR_NONE = 0, + NM_META_COLOR_CONNECTION_ACTIVATED, + NM_META_COLOR_CONNECTION_ACTIVATING, + NM_META_COLOR_CONNECTION_DISCONNECTING, + NM_META_COLOR_CONNECTION_INVISIBLE, + NM_META_COLOR_CONNECTION_EXTERNAL, + NM_META_COLOR_CONNECTION_UNKNOWN, + NM_META_COLOR_CONNECTIVITY_FULL, + NM_META_COLOR_CONNECTIVITY_LIMITED, + NM_META_COLOR_CONNECTIVITY_NONE, + NM_META_COLOR_CONNECTIVITY_PORTAL, + NM_META_COLOR_CONNECTIVITY_UNKNOWN, + NM_META_COLOR_DEVICE_ACTIVATED, + NM_META_COLOR_DEVICE_ACTIVATING, + NM_META_COLOR_DEVICE_DISCONNECTED, + NM_META_COLOR_DEVICE_FIRMWARE_MISSING, + NM_META_COLOR_DEVICE_PLUGIN_MISSING, + NM_META_COLOR_DEVICE_UNAVAILABLE, + NM_META_COLOR_DEVICE_DISABLED, + NM_META_COLOR_DEVICE_EXTERNAL, + NM_META_COLOR_DEVICE_UNKNOWN, + NM_META_COLOR_MANAGER_RUNNING, + NM_META_COLOR_MANAGER_STARTING, + NM_META_COLOR_MANAGER_STOPPED, + NM_META_COLOR_PERMISSION_AUTH, + NM_META_COLOR_PERMISSION_NO, + NM_META_COLOR_PERMISSION_UNKNOWN, + NM_META_COLOR_PERMISSION_YES, + NM_META_COLOR_PROMPT, + NM_META_COLOR_STATE_ASLEEP, + NM_META_COLOR_STATE_CONNECTED_GLOBAL, + NM_META_COLOR_STATE_CONNECTED_LOCAL, + NM_META_COLOR_STATE_CONNECTED_SITE, + NM_META_COLOR_STATE_CONNECTING, + NM_META_COLOR_STATE_DISCONNECTED, + NM_META_COLOR_STATE_DISCONNECTING, + NM_META_COLOR_STATE_UNKNOWN, + NM_META_COLOR_WIFI_SIGNAL_EXCELLENT, + NM_META_COLOR_WIFI_SIGNAL_FAIR, + NM_META_COLOR_WIFI_SIGNAL_GOOD, + NM_META_COLOR_WIFI_SIGNAL_POOR, + NM_META_COLOR_WIFI_SIGNAL_UNKNOWN, + NM_META_COLOR_DISABLED, + NM_META_COLOR_ENABLED, + _NM_META_COLOR_NUM +} NMMetaColor; + +typedef enum { + NM_META_ACCESSOR_MODIFIER_SET, + NM_META_ACCESSOR_MODIFIER_ADD, + NM_META_ACCESSOR_MODIFIER_DEL, +} NMMetaAccessorModifier; + +typedef enum { + NM_META_ACCESSOR_GET_TYPE_PRETTY, + NM_META_ACCESSOR_GET_TYPE_PARSABLE, + NM_META_ACCESSOR_GET_TYPE_COLOR, +} NMMetaAccessorGetType; + +typedef enum { + NM_META_ACCESSOR_SETTING_INIT_TYPE_DEFAULT, + NM_META_ACCESSOR_SETTING_INIT_TYPE_CLI, +} NMMetaAccessorSettingInitType; + +typedef enum { + NM_META_ACCESSOR_GET_FLAGS_NONE = 0, + NM_META_ACCESSOR_GET_FLAGS_ACCEPT_STRV = (1LL << 0), + NM_META_ACCESSOR_GET_FLAGS_SHOW_SECRETS = (1LL << 1), +} NMMetaAccessorGetFlags; + +typedef enum { + NM_META_ACCESSOR_GET_OUT_FLAGS_NONE = 0, + NM_META_ACCESSOR_GET_OUT_FLAGS_STRV = (1LL << 0), + + /* the property allows to be hidden, if and only if, it's value is set to the + * default. This should only be set by new properties, to preserve behavior + * of old properties, which were always printed. */ + NM_META_ACCESSOR_GET_OUT_FLAGS_HIDE = (1LL << 1), +} NMMetaAccessorGetOutFlags; + +typedef enum { + NM_META_PROPERTY_TYP_FLAG_ENUM_GET_PRETTY_NUMERIC = (1LL << 0), + NM_META_PROPERTY_TYP_FLAG_ENUM_GET_PRETTY_NUMERIC_HEX = (1LL << 1), + NM_META_PROPERTY_TYP_FLAG_ENUM_GET_PRETTY_TEXT = (1LL << 2), + NM_META_PROPERTY_TYP_FLAG_ENUM_GET_PRETTY_TEXT_L10N = (1LL << 3), + NM_META_PROPERTY_TYP_FLAG_ENUM_GET_PARSABLE_NUMERIC = (1LL << 4), + NM_META_PROPERTY_TYP_FLAG_ENUM_GET_PARSABLE_NUMERIC_HEX = (1LL << 5), + NM_META_PROPERTY_TYP_FLAG_ENUM_GET_PARSABLE_TEXT = (1LL << 6), +} NMMetaPropertyTypFlags; + +typedef enum { + NM_META_PROPERTY_TYPE_MAC_MODE_DEFAULT, + NM_META_PROPERTY_TYPE_MAC_MODE_CLONED, + NM_META_PROPERTY_TYPE_MAC_MODE_INFINIBAND, + NM_META_PROPERTY_TYPE_MAC_MODE_WPAN, +} NMMetaPropertyTypeMacMode; + +typedef struct _NMMetaEnvironment NMMetaEnvironment; +typedef struct _NMMetaType NMMetaType; +typedef struct _NMMetaAbstractInfo NMMetaAbstractInfo; +typedef struct _NMMetaSettingInfoEditor NMMetaSettingInfoEditor; +typedef struct _NMMetaPropertyInfo NMMetaPropertyInfo; +typedef struct _NMMetaPropertyType NMMetaPropertyType; +typedef struct _NMMetaPropertyTypData NMMetaPropertyTypData; +typedef struct _NMMetaOperationContext NMMetaOperationContext; +typedef struct _NMMetaNestedPropertyInfo NMMetaNestedPropertyInfo; +typedef struct _NMMetaPropertyTypDataNested NMMetaPropertyTypDataNested; + +/* this gives some context information for virtual functions. + * This command actually violates layering, and should be considered + * a hack. In the future, try to replace its use. */ +struct _NMMetaOperationContext { + NMConnection *connection; +}; + +struct _NMMetaPropertyType { + /* should return a translated string */ + const char *(*describe_fcn)(const NMMetaPropertyInfo *property_info, char **out_to_free); + + gconstpointer (*get_fcn)(const NMMetaPropertyInfo * property_info, + const NMMetaEnvironment * environment, + gpointer environment_user_data, + NMSetting * setting, + NMMetaAccessorGetType get_type, + NMMetaAccessorGetFlags get_flags, + NMMetaAccessorGetOutFlags *out_flags, + gboolean * out_is_default, + gpointer * out_to_free); + gboolean (*set_fcn)(const NMMetaPropertyInfo *property_info, + const NMMetaEnvironment * environment, + gpointer environment_user_data, + NMSetting * setting, + NMMetaAccessorModifier modifier, + const char * value, + GError ** error); + + const char *const *(*values_fcn)(const NMMetaPropertyInfo *property_info, char ***out_to_free); + + const char *const *(*complete_fcn)(const NMMetaPropertyInfo * property_info, + const NMMetaEnvironment * environment, + gpointer environment_user_data, + const NMMetaOperationContext *operation_context, + const char * text, + gboolean * out_complete_filename, + char *** out_to_free); + + /* Whether set_fcn() supports the '-' modifier. That is, whether the property + * is a list type. */ + bool set_supports_remove : 1; +}; + +struct _NMUtilsEnumValueInfo; + +typedef union { + gint64 i64; + guint64 u64; +} NMMetaSignUnsignInt64; + +typedef struct { + const char * nick; + NMMetaSignUnsignInt64 value; +} NMMetaUtilsIntValueInfo; + +struct _NMMetaPropertyTypData { + union { + struct { + GType (*get_gtype)(void); + int min; + int max; + const struct _NMUtilsEnumValueInfo *value_infos_get; /* nicks for get function */ + const struct _NMUtilsEnumValueInfo *value_infos; /* nicks for set function */ + void (*pre_set_notify)(const NMMetaPropertyInfo *property_info, + const NMMetaEnvironment * environment, + gpointer environment_user_data, + NMSetting * setting, + int value); + } gobject_enum; + struct { + NMMetaSignUnsignInt64 min; + NMMetaSignUnsignInt64 max; + guint base; + const NMMetaUtilsIntValueInfo *value_infos; + } gobject_int; + struct { + const char *(*validate_fcn)(const char *value, char **out_to_free, GError **error); + bool handle_emptyunset : 1; + } gobject_string; + struct { + bool legacy_format : 1; + } gobject_bytes; + struct { + guint32 (*get_num_fcn_u32)(NMSetting *setting); + guint (*get_num_fcn_u)(NMSetting *setting); + void (*clear_all_fcn)(NMSetting *setting); + + /* some multilist properties distinguish between an empty list and + * and unset. If this function pointer is set, certain behaviors come + * into action to handle that. */ + void (*clear_emptyunset_fcn)(NMSetting *setting, + gboolean is_set /* or else set default */); + + gboolean (*add_fcn)(NMSetting *setting, const char *item); + void (*add2_fcn)(NMSetting *setting, const char *item); + const char *(*validate_fcn)(const char *item, GError **error); + const char *(*validate2_fcn)(NMSetting *setting, const char *item, GError **error); + void (*remove_by_idx_fcn_u32)(NMSetting *setting, guint32 idx); + void (*remove_by_idx_fcn_u)(NMSetting *setting, guint idx); + void (*remove_by_idx_fcn_s)(NMSetting *setting, int idx); + gboolean (*remove_by_value_fcn)(NMSetting *setting, const char *item); + bool strsplit_plain : 1; + bool strsplit_with_spaces : 1; + } multilist; + struct { + guint (*get_num_fcn)(NMSetting *setting); + void (*obj_to_str_fcn)(NMMetaAccessorGetType get_type, + NMSetting * setting, + guint idx, + GString * str); + gboolean (*set_fcn)(NMSetting * setting, + gboolean do_add /* or else remove. */, + const char *value, + GError ** error); + void (*clear_all_fcn)(NMSetting *setting); + void (*remove_by_idx_fcn_u)(NMSetting *setting, guint idx); + void (*remove_by_idx_fcn_s)(NMSetting *setting, int idx); + bool delimit_pretty_with_semicolon : 1; + bool strsplit_plain : 1; + } objlist; + struct { + gboolean (*set_fcn)(NMSetting * setting, + const char *option, + const char *value, + GError ** error); + bool no_empty_value : 1; + } optionlist; + struct { + guint32 (*get_fcn)(NMSetting *setting); + } mtu; + struct { + NMSetting8021xSchemeType scheme_type; + } cert_8021x; + struct { + NMMetaPropertyTypeMacMode mode; + } mac; + struct { + guint (*get_fcn)(NMSettingDcb *setting, guint user_priority); + void (*set_fcn)(NMSettingDcb *setting, guint id, guint value); + guint max; + guint other; + bool is_percent : 1; + } dcb; + struct { + gboolean (*get_fcn)(NMSettingDcb *s_dcb, guint priority); + void (*set_fcn)(NMSettingDcb *setting, guint user_priority, gboolean enabled); + bool with_flow_control_flags : 1; + } dcb_bool; + struct { + NMEthtoolID ethtool_id; + } ethtool; + } subtype; + gboolean (*is_default_fcn)(NMSetting *setting); + const char *const * values_static; + const NMMetaPropertyTypDataNested *nested; + NMMetaPropertyTypFlags typ_flags; +}; + +typedef enum { + NM_META_PROPERTY_INF_FLAG_NONE = 0x00, + NM_META_PROPERTY_INF_FLAG_REQD = 0x01, /* Don't ask to ask. */ + NM_META_PROPERTY_INF_FLAG_DONT_ASK = 0x02, /* Don't ask interactively by default */ + NM_META_PROPERTY_INF_FLAG_MULTI = 0x04, /* Ask multiple times, do an append instead of set. */ +} NMMetaPropertyInfFlags; + +enum { + _NM_META_PROPERTY_TYPE_VPN_SERVICE_TYPE = 0, + _NM_META_PROPERTY_TYPE_CONNECTION_TYPE = 3, +}; + +#define nm_meta_property_info_connection_type \ + (nm_meta_setting_infos_editor[NM_META_SETTING_TYPE_CONNECTION] \ + .properties[_NM_META_PROPERTY_TYPE_CONNECTION_TYPE]) +#define nm_meta_property_info_vpn_service_type \ + (nm_meta_setting_infos_editor[NM_META_SETTING_TYPE_VPN] \ + .properties[_NM_META_PROPERTY_TYPE_VPN_SERVICE_TYPE]) + +struct _NMMetaPropertyInfo { + union { + NMObjBaseInst parent; + const NMMetaType *meta_type; + }; + + const NMMetaSettingInfoEditor *setting_info; + + const char *property_name; + + const char *property_alias; + + NMMetaPropertyInfFlags inf_flags; + bool is_secret : 1; + + bool is_cli_option : 1; + bool hide_if_default : 1; + + const char *prompt; + + const char *def_hint; + + const char *describe_doc; + + /* a non-translated but translatable static description (marked with N_()). */ + const char *describe_message; + + const NMMetaPropertyType * property_type; + const NMMetaPropertyTypData *property_typ_data; +}; + +typedef struct _NMMetaSettingValidPartItem { + const NMMetaSettingInfoEditor *setting_info; + bool mandatory; +} NMMetaSettingValidPartItem; + +struct _NMMetaSettingInfoEditor { + union { + NMObjBaseInst parent; + const NMMetaType *meta_type; + }; + const NMMetaSettingInfo * general; + const char * alias; + const char * pretty_name; + const NMMetaPropertyInfo *const *properties; + guint properties_num; + + /* a NMConnection has a main type (connection.type), which is a + * main NMSetting instance. Depending on the type, a connection + * may have a list of other allowed settings. + * + * For example, a connection of type "vlan" may have settings + * of type "connection", "vlan", and "wired". + * + * Some setting types a not a main type (NMSettingProxy). They + * don't have valid_settings but are usually referenced by other + * settings to be valid for them. */ + const NMMetaSettingValidPartItem *const *valid_parts; + + void (*setting_init_fcn)(const NMMetaSettingInfoEditor *setting_info, + NMSetting * setting, + NMMetaAccessorSettingInitType init_type); +}; + +struct _NMMetaType { + NMObjBaseClass parent; + const char * type_name; + const char *(*get_name)(const NMMetaAbstractInfo *abstract_info, gboolean for_header); + const NMMetaAbstractInfo *const *(*get_nested)(const NMMetaAbstractInfo *abstract_info, + guint * out_len, + gpointer * out_to_free); + gconstpointer (*get_fcn)(const NMMetaAbstractInfo * info, + const NMMetaEnvironment * environment, + gpointer environment_user_data, + gpointer target, + gpointer target_data, + NMMetaAccessorGetType get_type, + NMMetaAccessorGetFlags get_flags, + NMMetaAccessorGetOutFlags *out_flags, + gboolean * out_is_default, + gpointer * out_to_free); + const char *const *(*complete_fcn)(const NMMetaAbstractInfo * info, + const NMMetaEnvironment * environment, + gpointer environment_user_data, + const NMMetaOperationContext *operation_context, + const char * text, + gboolean * out_complete_filename, + char *** out_to_free); +}; + +struct _NMMetaAbstractInfo { + union { + NMObjBaseInst parent; + const NMMetaType *meta_type; + }; +}; + +extern const NMMetaType nm_meta_type_setting_info_editor; +extern const NMMetaType nm_meta_type_property_info; + +extern const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[_NM_META_SETTING_TYPE_NUM]; + +extern const NMMetaSettingValidPartItem *const nm_meta_setting_info_valid_parts_default[]; + +const NMMetaSettingValidPartItem *const * +nm_meta_setting_info_valid_parts_for_slave_type(const char * slave_type, + const char **out_slave_name); + +/*****************************************************************************/ + +typedef enum { + NM_META_ENV_WARN_LEVEL_INFO, + NM_META_ENV_WARN_LEVEL_WARN, +} NMMetaEnvWarnLevel; + +/* the settings-meta data is supposed to be independent of an actual client + * implementation. Hence, there is a need for hooks to the meta-data. + * The meta-data handlers may call back to the environment with certain + * actions. */ +struct _NMMetaEnvironment { + void (*warn_fcn)( + const NMMetaEnvironment *environment, + gpointer environment_user_data, + NMMetaEnvWarnLevel warn_level, + const char * + fmt_l10n, /* the untranslated format string, but it is marked for translation using N_(). */ + va_list ap); + + struct _NMDevice *const *(*get_nm_devices)(const NMMetaEnvironment *environment, + gpointer environment_user_data, + guint * out_len); + + struct _NMRemoteConnection *const *(*get_nm_connections)(const NMMetaEnvironment *environment, + gpointer environment_user_data, + guint * out_len); +}; + +/*****************************************************************************/ + +/* NMSettingBond is special in that it has nested properties. + * We will add API to proper handle such types (Bond, VPN, User), + * but for now just expose the type info directly. */ + +extern const NMMetaType nm_meta_type_nested_property_info; + +struct _NMMetaNestedPropertyInfo { + union { + const NMMetaType * meta_type; + NMMetaPropertyInfo base; + }; + const NMMetaPropertyInfo *parent_info; +}; + +struct _NMMetaPropertyTypDataNested { + const NMMetaNestedPropertyInfo *nested; + guint nested_len; +}; + +extern const NMMetaPropertyTypDataNested nm_meta_property_typ_data_bond; + +/*****************************************************************************/ + +gboolean _nm_meta_setting_bond_add_option(NMSetting * setting, + const char *name, + const char *value, + GError ** error); + +/*****************************************************************************/ + +#endif /* __NM_META_SETTING_DESC_H__ */ |