summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-03-25 13:20:11 +0100
committerThomas Haller <thaller@redhat.com>2017-03-30 13:09:55 +0200
commitcb66cf96d741a093abc7fa4e97f49a7651949282 (patch)
tree2df9da3a5c6ef6d64211e0861a12cae5f5a26da2
parent10119aa3a370aa812b9f01a7cc457178a7374f3a (diff)
downloadNetworkManager-cb66cf96d741a093abc7fa4e97f49a7651949282.tar.gz
cli: add values_func() to NmcPropertyInfo and use for "connection" setting
-rw-r--r--clients/cli/common.c2
-rw-r--r--clients/cli/common.h2
-rw-r--r--clients/cli/connections.c13
-rw-r--r--clients/cli/settings.c62
-rw-r--r--clients/cli/settings.h4
-rw-r--r--clients/cli/utils.c2
-rw-r--r--clients/cli/utils.h2
7 files changed, 38 insertions, 49 deletions
diff --git a/clients/cli/common.c b/clients/cli/common.c
index 3e28eee7a9..e3f00482e2 100644
--- a/clients/cli/common.c
+++ b/clients/cli/common.c
@@ -1500,7 +1500,7 @@ nmc_readline_echo (gboolean echo_on, const char *prompt_fmt, ...)
* See e.g. http://cnswww.cns.cwru.edu/php/chet/readline/readline.html#SEC49
*/
char *
-nmc_rl_gen_func_basic (const char *text, int state, const char **words)
+nmc_rl_gen_func_basic (const char *text, int state, const char *const*words)
{
static int list_idx, len;
const char *name;
diff --git a/clients/cli/common.h b/clients/cli/common.h
index 3a598f631c..d755879a53 100644
--- a/clients/cli/common.h
+++ b/clients/cli/common.h
@@ -65,7 +65,7 @@ char *nmc_unique_connection_name (const GPtrArray *connections,
void nmc_cleanup_readline (void);
char *nmc_readline (const char *prompt_fmt, ...) G_GNUC_PRINTF (1, 2);
char *nmc_readline_echo (gboolean echo_on, const char *prompt_fmt, ...) G_GNUC_PRINTF (2, 3);
-char *nmc_rl_gen_func_basic (const char *text, int state, const char **words);
+char *nmc_rl_gen_func_basic (const char *text, int state, const char *const*words);
char *nmc_rl_gen_func_ifnames (const char *text, int state);
gboolean nmc_get_in_readline (void);
void nmc_set_in_readline (gboolean in_readline);
diff --git a/clients/cli/connections.c b/clients/cli/connections.c
index 95c8d8435d..d02768fea5 100644
--- a/clients/cli/connections.c
+++ b/clients/cli/connections.c
@@ -5705,12 +5705,12 @@ should_complete_vpn_uuids (const char *prompt, const char *line)
return _get_and_check_property (prompt, line, uuid_properties, NULL, NULL);
}
-static const char **
+static const char *const*
get_allowed_property_values (void)
{
NMSetting *setting;
char *property;
- const char **avals = NULL;
+ const char *const*avals = NULL;
get_setting_and_property (rl_prompt, rl_line_buffer, &setting, &property);
if (setting && property)
@@ -5781,7 +5781,7 @@ static char *
gen_property_values (const char *text, int state)
{
char *ret = NULL;
- const char **avals;
+ const char *const*avals;
avals = get_allowed_property_values ();
if (avals)
@@ -6662,7 +6662,8 @@ property_edit_submenu (NmCli *nmc,
* single values: : both SET and ADD sets the new value
*/
if (!cmd_property_arg) {
- const char **avals = nmc_setting_get_property_allowed_values (curr_setting, prop_name);
+ const char *const*avals = nmc_setting_get_property_allowed_values (curr_setting, prop_name);
+
if (avals) {
char *avals_str = nmc_util_strv_for_display (avals, FALSE);
g_print (_("Allowed values for '%s' property: %s\n"),
@@ -7074,7 +7075,7 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
if (menu_ctx.level == 1) {
const char *prop_name;
char *prop_val_user = NULL;
- const char **avals;
+ const char *const*avals;
GError *tmp_err = NULL;
prop_name = ask_check_property (cmd_arg,
@@ -7141,7 +7142,7 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
/* Ask for value */
if (!cmd_arg_v) {
- const char **avals = nmc_setting_get_property_allowed_values (ss, prop_name);
+ const char *const*avals = nmc_setting_get_property_allowed_values (ss, prop_name);
if (avals) {
char *avals_str = nmc_util_strv_for_display (avals, FALSE);
g_print (_("Allowed values for '%s' property: %s\n"),
diff --git a/clients/cli/settings.c b/clients/cli/settings.c
index d8bdc19917..4ac791b394 100644
--- a/clients/cli/settings.c
+++ b/clients/cli/settings.c
@@ -1456,14 +1456,14 @@ vpn_data_item (const char *key, const char *value, gpointer user_data)
}
#define DEFINE_ALLOWED_VAL_FUNC(def_func, valid_values) \
- static const char ** \
+ static const char *const* \
def_func (NMSetting *setting, const char *prop) \
{ \
return valid_values; \
}
#define DEFINE_ALLOWED_FOR_ENUMS(def_func, get_type_func, min, max) \
- static const char ** \
+ static const char *const* \
def_func (NMSetting *setting, const char *prop) \
{ \
static const char **words = NULL; \
@@ -2654,7 +2654,7 @@ nmc_property_bond_describe_options (NMSetting *setting, const char *prop)
return desc;
}
-static const char **
+static const char *const*
nmc_property_bond_allowed_options (NMSetting *setting, const char *prop)
{
return nm_setting_bond_get_valid_options (NM_SETTING_BOND (setting));
@@ -2895,8 +2895,6 @@ nmc_property_con_set_slave_type (NMSetting *setting, const char *prop, const cha
return check_and_set_string (setting, prop, val, con_valid_slave_types, error);
}
-DEFINE_ALLOWED_VAL_FUNC (nmc_property_con_allowed_slave_type, con_valid_slave_types)
-
static gboolean
_set_fcn_connection_secondaries (const NmcSettingInfo *setting_info,
const NmcPropertyInfo *property_info,
@@ -3039,9 +3037,6 @@ _set_fcn_connection_metered (const NmcSettingInfo *setting_info,
return TRUE;
}
-static const char *metered_valid_values[] = { "yes", "no", "unknown", NULL };
-DEFINE_ALLOWED_VAL_FUNC (nmc_property_connection_allowed_metered, metered_valid_values)
-
static char *
nmc_property_connection_get_lldp (NMSetting *setting, NmcPropertyGetType get_type)
{
@@ -3094,10 +3089,6 @@ _set_fcn_connection_lldp (const NmcSettingInfo *setting_info,
return TRUE;
}
-static const char *lldp_valid_values[] = { "default", "disable", "enable-rx", NULL };
-DEFINE_ALLOWED_VAL_FUNC (nmc_property_connection_allowed_lldp, lldp_valid_values)
-
-
/* --- NM_SETTING_DCB_SETTING_NAME property functions --- */
static char *
dcb_flags_to_string (NMSettingDcbFlags flags)
@@ -5384,7 +5375,7 @@ DEFINE_REMOVER_OPTION (nmc_property_wired_remove_option_s390_options,
NM_SETTING_WIRED,
nm_setting_wired_remove_s390_option)
-static const char **
+static const char *const*
nmc_property_wired_allowed_s390_options (NMSetting *setting, const char *prop)
{
return nm_setting_wired_get_valid_s390_options (NM_SETTING_WIRED (setting));
@@ -5974,7 +5965,7 @@ typedef char * (*NmcPropertyGetFunc) (NMSetting *, NmcPropertyGetTyp
typedef gboolean (*NmcPropertySetFunc) (NMSetting *, const char *, const char *, GError **);
typedef gboolean (*NmcPropertyRemoveFunc) (NMSetting *, const char *, const char *, guint32, GError **);
typedef const char * (*NmcPropertyDescribeFunc) (NMSetting *, const char *);
-typedef const char ** (*NmcPropertyValuesFunc) (NMSetting *, const char *);
+typedef const char *const* (*NmcPropertyValuesFunc) (NMSetting *, const char *);
typedef struct {
/* The order of the fields is important as they correspond
@@ -6889,28 +6880,6 @@ nmc_properties_init (void)
NULL,
NULL);
- nmc_add_prop_funcs (GLUE (CONNECTION, SLAVE_TYPE),
- NULL,
- NULL,
- NULL,
- NULL,
- nmc_property_con_allowed_slave_type,
- NULL);
- nmc_add_prop_funcs (GLUE (CONNECTION, METERED),
- NULL,
- NULL,
- NULL,
- NULL,
- nmc_property_connection_allowed_metered,
- NULL);
- nmc_add_prop_funcs (GLUE (CONNECTION, LLDP),
- NULL,
- NULL,
- NULL,
- NULL,
- nmc_property_connection_allowed_lldp,
- NULL);
-
/* Add editable properties for NM_SETTING_DCB_SETTING_NAME */
nmc_add_prop_funcs (GLUE (DCB, APP_FCOE_FLAGS),
nmc_property_dcb_get_app_fcoe_flags,
@@ -8715,11 +8684,13 @@ nmc_setting_get_valid_properties (NMSetting *setting)
/*
* Return allowed values for 'prop' as a string.
*/
-const char **
+const char *const*
nmc_setting_get_property_allowed_values (NMSetting *setting, const char *prop)
{
const NmcPropertyFuncs *item;
+ const NmcSettingInfo *setting_info;
+ const NmcPropertyInfo *property_info;
g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
@@ -8727,7 +8698,17 @@ nmc_setting_get_property_allowed_values (NMSetting *setting, const char *prop)
if (item && item->values_func)
return item->values_func (setting, prop);
- return NULL;
+ if ((property_info = _meta_find_property_info_by_setting (setting, prop, &setting_info))) {
+ nm_assert (property_info == _meta_find_property_info_by_name (nm_setting_get_name (setting), prop, NULL));
+
+ if (property_info->is_name) {
+ /* NmcPropertyFuncs would not register the "name" property.
+ * For the moment, skip it from get_property_val(). */
+ } else if (property_info->values_static)
+ return property_info->values_static;
+ }
+
+return NULL;
}
#include "settings-docs.c"
@@ -9893,6 +9874,8 @@ setting_proxy_details (const NmcSettingInfo *setting_info, NMSetting *setting, N
/*****************************************************************************/
+#define VALUES_STATIC(...) (((const char *[]) { __VA_ARGS__, NULL }))
+
static const NmcPropertyInfo properties_setting_connection[] = {
{
.property_name = N_ ("name"),
@@ -9977,6 +9960,7 @@ static const NmcPropertyInfo properties_setting_connection[] = {
.get_fcn = _get_fcn_gobject,
.set_fcn = _set_fcn_nmc,
.set_data = { .set_nmc = nmc_property_con_set_slave_type, },
+ .values_static = con_valid_slave_types,
},
{
.property_name = N_ (NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES),
@@ -10014,12 +9998,14 @@ static const NmcPropertyInfo properties_setting_connection[] = {
"'true','yes','on' to set the connection as metered\n"
"'false','no','off' to set the connection as not metered\n"
"'unknown' to let NetworkManager choose a value using some heuristics\n"),
+ .values_static = VALUES_STATIC ("yes", "no", "unknown"),
},
{
.property_name = N_ (NM_SETTING_CONNECTION_LLDP),
.get_fcn = _get_fcn_nmc,
.get_data = { .get_nmc = nmc_property_connection_get_lldp, },
.set_fcn = _set_fcn_connection_lldp,
+ .values_static = VALUES_STATIC ("default", "disable", "enable-rx"),
},
};
diff --git a/clients/cli/settings.h b/clients/cli/settings.h
index 1ab46aaf92..2cf53936ee 100644
--- a/clients/cli/settings.h
+++ b/clients/cli/settings.h
@@ -73,6 +73,8 @@ struct _NmcPropertyInfo {
} remove_data;
const char *describe_message;
+
+ const char *const*values_static;
};
struct _NmcSettingInfo {
@@ -104,7 +106,7 @@ void nmc_setting_connection_connect_handlers (NMSettingConnection *setting, NMCo
char **nmc_setting_get_valid_properties (NMSetting *setting);
char *nmc_setting_get_property_desc (NMSetting *setting, const char *prop);
-const char **nmc_setting_get_property_allowed_values (NMSetting *setting, const char *prop);
+const char *const*nmc_setting_get_property_allowed_values (NMSetting *setting, const char *prop);
char *nmc_setting_get_property (NMSetting *setting,
const char *prop,
GError **error);
diff --git a/clients/cli/utils.c b/clients/cli/utils.c
index 0bdeac87ee..4252cd2cb4 100644
--- a/clients/cli/utils.c
+++ b/clients/cli/utils.c
@@ -677,7 +677,7 @@ finish:
* Returns: a newly allocated string. Caller must free it with g_free().
*/
char *
-nmc_util_strv_for_display (const char **strv, gboolean brackets)
+nmc_util_strv_for_display (const char *const*strv, gboolean brackets)
{
GString *result;
guint i = 0;
diff --git a/clients/cli/utils.h b/clients/cli/utils.h
index d889962df7..d1dac09929 100644
--- a/clients/cli/utils.h
+++ b/clients/cli/utils.h
@@ -81,7 +81,7 @@ char *nmc_get_user_input (const char *ask_str);
int nmc_string_to_arg_array (const char *line, const char *delim, gboolean unquote,
char ***argv, int *argc);
const char *nmc_string_is_valid (const char *input, const char **allowed, GError **error);
-char * nmc_util_strv_for_display (const char **strv, gboolean brackets);
+char * nmc_util_strv_for_display (const char *const*strv, gboolean brackets);
char **nmc_strsplit_set (const char *str, const char *delimiter, int max_tokens);
int nmc_string_screen_width (const char *start, const char *end);
void set_val_str (NmcOutputField fields_array[], guint32 index, char *value);