cli: add set_func() to NmcPropertyInfo and use for "connection" setting
This commit is contained in:
@@ -34,6 +34,8 @@
|
|||||||
#define SETTING_FIELD(setting) { setting, N_(setting), 0, NULL, FALSE, FALSE, 0 }
|
#define SETTING_FIELD(setting) { setting, N_(setting), 0, NULL, FALSE, FALSE, 0 }
|
||||||
|
|
||||||
static char *wep_key_type_to_string (NMWepKeyType type);
|
static char *wep_key_type_to_string (NMWepKeyType type);
|
||||||
|
static gboolean validate_int (NMSetting *setting, const char* prop, gint val, GError **error);
|
||||||
|
static gboolean validate_uint (NMSetting *setting, const char* prop, guint val, GError **error);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
@@ -73,6 +75,111 @@ _get_fcn_gobject (const NmcSettingInfo *setting_info,
|
|||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_set_fcn_nmc (const NmcSettingInfo *setting_info,
|
||||||
|
const NmcPropertyInfo *property_info,
|
||||||
|
NMSetting *setting,
|
||||||
|
const char *value,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
return property_info->set_data.set_nmc (setting, property_info->property_name, value, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_set_fcn_gobject_string (const NmcSettingInfo *setting_info,
|
||||||
|
const NmcPropertyInfo *property_info,
|
||||||
|
NMSetting *setting,
|
||||||
|
const char *value,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
g_object_set (setting, property_info->property_name, value, NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_set_fcn_gobject_bool (const NmcSettingInfo *setting_info,
|
||||||
|
const NmcPropertyInfo *property_info,
|
||||||
|
NMSetting *setting,
|
||||||
|
const char *value,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
gboolean val_bool;
|
||||||
|
|
||||||
|
if (!nmc_string_to_bool (value, &val_bool, error))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
g_object_set (setting, property_info->property_name, val_bool, NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_set_fcn_gobject_trilean (const NmcSettingInfo *setting_info,
|
||||||
|
const NmcPropertyInfo *property_info,
|
||||||
|
NMSetting *setting,
|
||||||
|
const char *value,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
long int val_int;
|
||||||
|
|
||||||
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||||
|
|
||||||
|
if (!nmc_string_to_int (value, TRUE, -1, 1, &val_int)) {
|
||||||
|
g_set_error (error, 1, 0, _("'%s' is not a valid value; use -1, 0 or 1"), value);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_set (setting, property_info->property_name, val_int, NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_set_fcn_gobject_int (const NmcSettingInfo *setting_info,
|
||||||
|
const NmcPropertyInfo *property_info,
|
||||||
|
NMSetting *setting,
|
||||||
|
const char *value,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
long int val_int;
|
||||||
|
|
||||||
|
if (!nmc_string_to_int (value, TRUE, G_MININT, G_MAXINT, &val_int)) {
|
||||||
|
g_set_error (error, 1, 0, _("'%s' is not a valid number (or out of range)"), value);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate the number according to the property spec */
|
||||||
|
if (!validate_int (setting, property_info->property_name, (gint) val_int, error))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
g_object_set (setting, property_info->property_name, (gint) val_int, NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_set_fcn_gobject_uint (const NmcSettingInfo *setting_info,
|
||||||
|
const NmcPropertyInfo *property_info,
|
||||||
|
NMSetting *setting,
|
||||||
|
const char *value,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
unsigned long val_int;
|
||||||
|
|
||||||
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||||
|
|
||||||
|
if (!nmc_string_to_uint (value, TRUE, 0, G_MAXUINT, &val_int)) {
|
||||||
|
g_set_error (error, 1, 0, _("'%s' is not a valid number (or out of range)"), value);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validate the number according to the property spec */
|
||||||
|
if (!validate_uint (setting, property_info->property_name, (guint) val_int, error))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
g_object_set (setting, property_info->property_name, (guint) val_int, NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
static const NmcSettingInfo *
|
static const NmcSettingInfo *
|
||||||
_meta_find_setting_info_by_name (const char *setting_name)
|
_meta_find_setting_info_by_name (const char *setting_name)
|
||||||
{
|
{
|
||||||
@@ -1631,22 +1738,6 @@ nmc_property_set_bool (NMSetting *setting, const char *prop, const char *val, GE
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
nmc_property_set_trilean (NMSetting *setting, const char *prop, const char *val, GError **error)
|
|
||||||
{
|
|
||||||
long int val_int;
|
|
||||||
|
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
|
||||||
|
|
||||||
if (!nmc_string_to_int (val, TRUE, -1, 1, &val_int)) {
|
|
||||||
g_set_error (error, 1, 0, _("'%s' is not a valid value; use -1, 0 or 1"), val);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_set (setting, prop, val_int, NULL);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
nmc_property_set_ssid (NMSetting *setting, const char *prop, const char *val, GError **error)
|
nmc_property_set_ssid (NMSetting *setting, const char *prop, const char *val, GError **error)
|
||||||
{
|
{
|
||||||
@@ -2633,7 +2724,11 @@ nmc_property_connection_get_autoconnect_slaves (NMSetting *setting, NmcPropertyG
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
nmc_property_connection_set_type (NMSetting *setting, const char *prop, const char *val, GError **error)
|
_set_fcn_connection_type (const NmcSettingInfo *setting_info,
|
||||||
|
const NmcPropertyInfo *property_info,
|
||||||
|
NMSetting *setting,
|
||||||
|
const char *value,
|
||||||
|
GError **error)
|
||||||
{
|
{
|
||||||
gs_free char *uuid = NULL;
|
gs_free char *uuid = NULL;
|
||||||
|
|
||||||
@@ -2654,7 +2749,7 @@ nmc_property_connection_set_type (NMSetting *setting, const char *prop, const ch
|
|||||||
NM_SETTING_CONNECTION_UUID, uuid,
|
NM_SETTING_CONNECTION_UUID, uuid,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
g_object_set (G_OBJECT (setting), prop, val, NULL);
|
g_object_set (G_OBJECT (setting), property_info->property_name, value, NULL);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2700,15 +2795,19 @@ permissions_valid (const char *perm)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
nmc_property_connection_set_permissions (NMSetting *setting, const char *prop, const char *val, GError **error)
|
_set_fcn_connection_permissions (const NmcSettingInfo *setting_info,
|
||||||
|
const NmcPropertyInfo *property_info,
|
||||||
|
NMSetting *setting,
|
||||||
|
const char *value,
|
||||||
|
GError **error)
|
||||||
{
|
{
|
||||||
char **strv = NULL;
|
char **strv = NULL;
|
||||||
guint i = 0;
|
guint i = 0;
|
||||||
|
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||||
|
|
||||||
strv = nmc_strsplit_set (val, " \t,", 0);
|
strv = nmc_strsplit_set (value, " \t,", 0);
|
||||||
if (!verify_string_list (strv, prop, permissions_valid, error)) {
|
if (!verify_string_list (strv, property_info->property_name, permissions_valid, error)) {
|
||||||
g_strfreev (strv);
|
g_strfreev (strv);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@@ -2754,24 +2853,27 @@ nmc_property_connection_describe_permissions (NMSetting *setting, const char *pr
|
|||||||
"Example: alice bob charlie\n");
|
"Example: alice bob charlie\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 'master' */
|
|
||||||
static gboolean
|
static gboolean
|
||||||
nmc_property_con_set_master (NMSetting *setting, const char *prop, const char *val, GError **error)
|
_set_fcn_connection_master (const NmcSettingInfo *setting_info,
|
||||||
|
const NmcPropertyInfo *property_info,
|
||||||
|
NMSetting *setting,
|
||||||
|
const char *value,
|
||||||
|
GError **error)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||||
|
|
||||||
if (!val)
|
if (!value)
|
||||||
;
|
;
|
||||||
else if (!*val)
|
else if (!*value)
|
||||||
val = NULL;
|
value = NULL;
|
||||||
else if ( !nm_utils_is_valid_iface_name (val, NULL)
|
else if ( !nm_utils_is_valid_iface_name (value, NULL)
|
||||||
&& !nm_utils_is_uuid (val)) {
|
&& !nm_utils_is_uuid (value)) {
|
||||||
g_set_error (error, 1, 0,
|
g_set_error (error, 1, 0,
|
||||||
_("'%s' is not valid master; use ifname or connection UUID"),
|
_("'%s' is not valid master; use ifname or connection UUID"),
|
||||||
val);
|
value);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
g_object_set (setting, prop, val, NULL);
|
g_object_set (setting, property_info->property_name, value, NULL);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2789,22 +2891,22 @@ 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);
|
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)
|
DEFINE_ALLOWED_VAL_FUNC (nmc_property_con_allowed_slave_type, con_valid_slave_types)
|
||||||
|
|
||||||
/* 'secondaries' */
|
|
||||||
static gboolean
|
static gboolean
|
||||||
nmc_property_connection_set_secondaries (NMSetting *setting, const char *prop, const char *val, GError **error)
|
_set_fcn_connection_secondaries (const NmcSettingInfo *setting_info,
|
||||||
|
const NmcPropertyInfo *property_info,
|
||||||
|
NMSetting *setting,
|
||||||
|
const char *value,
|
||||||
|
GError **error)
|
||||||
{
|
{
|
||||||
const GPtrArray *connections;
|
const GPtrArray *connections;
|
||||||
NMConnection *con;
|
NMConnection *con;
|
||||||
char **strv = NULL, **iter;
|
char **strv = NULL, **iter;
|
||||||
guint i = 0;
|
guint i = 0;
|
||||||
|
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
|
||||||
|
|
||||||
connections = nm_client_get_connections (nm_cli.client);
|
connections = nm_client_get_connections (nm_cli.client);
|
||||||
strv = nmc_strsplit_set (val, " \t,", 0);
|
strv = nmc_strsplit_set (value, " \t,", 0);
|
||||||
for (iter = strv; iter && *iter; iter++) {
|
for (iter = strv; iter && *iter; iter++) {
|
||||||
if (**iter == '\0')
|
if (**iter == '\0')
|
||||||
continue;
|
continue;
|
||||||
@@ -2914,13 +3016,16 @@ nmc_property_connection_get_metered (NMSetting *setting, NmcPropertyGetType get_
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
nmc_property_connection_set_metered (NMSetting *setting, const char *prop,
|
_set_fcn_connection_metered (const NmcSettingInfo *setting_info,
|
||||||
const char *val, GError **error)
|
const NmcPropertyInfo *property_info,
|
||||||
|
NMSetting *setting,
|
||||||
|
const char *value,
|
||||||
|
GError **error)
|
||||||
{
|
{
|
||||||
NMMetered metered;
|
NMMetered metered;
|
||||||
NMCTriStateValue ts_val;
|
NMCTriStateValue ts_val;
|
||||||
|
|
||||||
if (!nmc_string_to_tristate (val, &ts_val, error))
|
if (!nmc_string_to_tristate (value, &ts_val, error))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
switch (ts_val) {
|
switch (ts_val) {
|
||||||
@@ -2937,7 +3042,7 @@ nmc_property_connection_set_metered (NMSetting *setting, const char *prop,
|
|||||||
g_assert_not_reached();
|
g_assert_not_reached();
|
||||||
}
|
}
|
||||||
|
|
||||||
g_object_set (setting, prop, metered, NULL);
|
g_object_set (setting, property_info->property_name, metered, NULL);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2972,34 +3077,37 @@ nmc_property_connection_get_lldp (NMSetting *setting, NmcPropertyGetType get_typ
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
nmc_property_connection_set_lldp (NMSetting *setting, const char *prop,
|
_set_fcn_connection_lldp (const NmcSettingInfo *setting_info,
|
||||||
const char *val, GError **error)
|
const NmcPropertyInfo *property_info,
|
||||||
|
NMSetting *setting,
|
||||||
|
const char *value,
|
||||||
|
GError **error)
|
||||||
{
|
{
|
||||||
NMSettingConnectionLldp lldp;
|
NMSettingConnectionLldp lldp;
|
||||||
gboolean ret;
|
gboolean ret;
|
||||||
long int t;
|
long int t;
|
||||||
|
|
||||||
if (nmc_string_to_int_base (val, 0, TRUE,
|
if (nmc_string_to_int_base (value, 0, TRUE,
|
||||||
NM_SETTING_CONNECTION_LLDP_DEFAULT,
|
NM_SETTING_CONNECTION_LLDP_DEFAULT,
|
||||||
NM_SETTING_CONNECTION_LLDP_ENABLE_RX,
|
NM_SETTING_CONNECTION_LLDP_ENABLE_RX,
|
||||||
&t))
|
&t))
|
||||||
lldp = t;
|
lldp = t;
|
||||||
else {
|
else {
|
||||||
ret = nm_utils_enum_from_str (nm_setting_connection_lldp_get_type (), val,
|
ret = nm_utils_enum_from_str (nm_setting_connection_lldp_get_type (), value,
|
||||||
(int *) &lldp, NULL);
|
(int *) &lldp, NULL);
|
||||||
|
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
if (g_ascii_strcasecmp (val, "enable") == 0)
|
if (g_ascii_strcasecmp (value, "enable") == 0)
|
||||||
lldp = NM_SETTING_CONNECTION_LLDP_ENABLE_RX;
|
lldp = NM_SETTING_CONNECTION_LLDP_ENABLE_RX;
|
||||||
else {
|
else {
|
||||||
g_set_error (error, 1, 0, _("invalid option '%s', use one of [%s]"),
|
g_set_error (error, 1, 0, _("invalid option '%s', use one of [%s]"),
|
||||||
val, "default,disable,enable-rx,enable");
|
value, "default,disable,enable-rx,enable");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_object_set (setting, prop, lldp, NULL);
|
g_object_set (setting, property_info->property_name, lldp, NULL);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6798,136 +6906,37 @@ nmc_properties_init (void)
|
|||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
/* Add editable properties for NM_SETTING_CONNECTION_SETTING_NAME */
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, ID),
|
|
||||||
NULL,
|
|
||||||
nmc_property_set_string,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, UUID),
|
|
||||||
NULL,
|
|
||||||
NULL, /* forbid setting/removing UUID */
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, STABLE_ID),
|
|
||||||
NULL,
|
|
||||||
nmc_property_set_string,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, INTERFACE_NAME),
|
|
||||||
NULL,
|
|
||||||
nmc_property_set_ifname,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, TYPE),
|
|
||||||
NULL,
|
|
||||||
nmc_property_connection_set_type,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, AUTOCONNECT),
|
|
||||||
NULL,
|
|
||||||
nmc_property_set_bool,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, AUTOCONNECT_PRIORITY),
|
|
||||||
NULL,
|
|
||||||
nmc_property_set_int,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, AUTOCONNECT_RETRIES),
|
|
||||||
NULL,
|
|
||||||
nmc_property_set_int,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, TIMESTAMP),
|
|
||||||
NULL,
|
|
||||||
NULL, /* read-only */
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, READ_ONLY),
|
|
||||||
NULL,
|
|
||||||
NULL, /* 'read-only' is read-only :-) */
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, PERMISSIONS),
|
nmc_add_prop_funcs (GLUE (CONNECTION, PERMISSIONS),
|
||||||
NULL,
|
NULL,
|
||||||
nmc_property_connection_set_permissions,
|
NULL,
|
||||||
nmc_property_connection_remove_permissions,
|
nmc_property_connection_remove_permissions,
|
||||||
nmc_property_connection_describe_permissions,
|
nmc_property_connection_describe_permissions,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, ZONE),
|
|
||||||
NULL,
|
|
||||||
nmc_property_set_string,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, MASTER),
|
|
||||||
NULL,
|
|
||||||
nmc_property_con_set_master,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, SLAVE_TYPE),
|
nmc_add_prop_funcs (GLUE (CONNECTION, SLAVE_TYPE),
|
||||||
NULL,
|
NULL,
|
||||||
nmc_property_con_set_slave_type,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
nmc_property_con_allowed_slave_type,
|
nmc_property_con_allowed_slave_type,
|
||||||
NULL);
|
NULL);
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, AUTOCONNECT_SLAVES),
|
|
||||||
NULL,
|
|
||||||
nmc_property_set_trilean,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, SECONDARIES),
|
nmc_add_prop_funcs (GLUE (CONNECTION, SECONDARIES),
|
||||||
NULL,
|
NULL,
|
||||||
nmc_property_connection_set_secondaries,
|
NULL,
|
||||||
nmc_property_connection_remove_secondaries,
|
nmc_property_connection_remove_secondaries,
|
||||||
nmc_property_connection_describe_secondaries,
|
nmc_property_connection_describe_secondaries,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, GATEWAY_PING_TIMEOUT),
|
|
||||||
NULL,
|
|
||||||
nmc_property_set_uint,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, METERED),
|
nmc_add_prop_funcs (GLUE (CONNECTION, METERED),
|
||||||
NULL,
|
NULL,
|
||||||
nmc_property_connection_set_metered,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
nmc_property_connection_describe_metered,
|
nmc_property_connection_describe_metered,
|
||||||
nmc_property_connection_allowed_metered,
|
nmc_property_connection_allowed_metered,
|
||||||
NULL);
|
NULL);
|
||||||
nmc_add_prop_funcs (GLUE (CONNECTION, LLDP),
|
nmc_add_prop_funcs (GLUE (CONNECTION, LLDP),
|
||||||
NULL,
|
NULL,
|
||||||
nmc_property_connection_set_lldp,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
nmc_property_connection_allowed_lldp,
|
nmc_property_connection_allowed_lldp,
|
||||||
@@ -8561,6 +8570,8 @@ gboolean
|
|||||||
nmc_setting_set_property (NMSetting *setting, const char *prop, const char *val, GError **error)
|
nmc_setting_set_property (NMSetting *setting, const char *prop, const char *val, GError **error)
|
||||||
{
|
{
|
||||||
const NmcPropertyFuncs *item;
|
const NmcPropertyFuncs *item;
|
||||||
|
const NmcSettingInfo *setting_info;
|
||||||
|
const NmcPropertyInfo *property_info;
|
||||||
|
|
||||||
g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
|
g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||||
@@ -8575,6 +8586,27 @@ nmc_setting_set_property (NMSetting *setting, const char *prop, const char *val,
|
|||||||
return item->set_func (setting, prop, val, error);
|
return item->set_func (setting, prop, val, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 (!val) {
|
||||||
|
/* No value argument sets default value */
|
||||||
|
nmc_property_set_default_value (setting, prop);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
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->set_fcn) {
|
||||||
|
return property_info->set_fcn (setting_info,
|
||||||
|
property_info,
|
||||||
|
setting,
|
||||||
|
val,
|
||||||
|
error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
g_set_error_literal (error, 1, 0, _("the property can't be changed"));
|
g_set_error_literal (error, 1, 0, _("the property can't be changed"));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@@ -8606,6 +8638,8 @@ gboolean
|
|||||||
nmc_setting_reset_property (NMSetting *setting, const char *prop, GError **error)
|
nmc_setting_reset_property (NMSetting *setting, const char *prop, GError **error)
|
||||||
{
|
{
|
||||||
const NmcPropertyFuncs *item;
|
const NmcPropertyFuncs *item;
|
||||||
|
const NmcSettingInfo *setting_info;
|
||||||
|
const NmcPropertyInfo *property_info;
|
||||||
|
|
||||||
g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
|
g_return_val_if_fail (NM_IS_SETTING (setting), FALSE);
|
||||||
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
|
||||||
@@ -8615,6 +8649,19 @@ nmc_setting_reset_property (NMSetting *setting, const char *prop, GError **error
|
|||||||
nmc_property_set_default_value (setting, prop);
|
nmc_property_set_default_value (setting, prop);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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->set_fcn) {
|
||||||
|
nmc_property_set_default_value (setting, prop);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
g_set_error_literal (error, 1, 0, _("the property can't be changed"));
|
g_set_error_literal (error, 1, 0, _("the property can't be changed"));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@@ -9855,6 +9902,7 @@ static const NmcPropertyInfo properties_setting_connection[] = {
|
|||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_ID),
|
.property_name = N_ (NM_SETTING_CONNECTION_ID),
|
||||||
.get_fcn = _get_fcn_gobject,
|
.get_fcn = _get_fcn_gobject,
|
||||||
|
.set_fcn = _set_fcn_gobject_string,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_UUID),
|
.property_name = N_ (NM_SETTING_CONNECTION_UUID),
|
||||||
@@ -9863,27 +9911,34 @@ static const NmcPropertyInfo properties_setting_connection[] = {
|
|||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_STABLE_ID),
|
.property_name = N_ (NM_SETTING_CONNECTION_STABLE_ID),
|
||||||
.get_fcn = _get_fcn_gobject,
|
.get_fcn = _get_fcn_gobject,
|
||||||
|
.set_fcn = _set_fcn_gobject_string,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_INTERFACE_NAME),
|
.property_name = N_ (NM_SETTING_CONNECTION_INTERFACE_NAME),
|
||||||
.get_fcn = _get_fcn_gobject,
|
.get_fcn = _get_fcn_gobject,
|
||||||
|
.set_fcn = _set_fcn_nmc,
|
||||||
|
.set_data = { .set_nmc = nmc_property_set_ifname, },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_TYPE),
|
.property_name = N_ (NM_SETTING_CONNECTION_TYPE),
|
||||||
.get_fcn = _get_fcn_gobject,
|
.get_fcn = _get_fcn_gobject,
|
||||||
|
.set_fcn = _set_fcn_connection_type,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_AUTOCONNECT),
|
.property_name = N_ (NM_SETTING_CONNECTION_AUTOCONNECT),
|
||||||
.get_fcn = _get_fcn_gobject,
|
.get_fcn = _get_fcn_gobject,
|
||||||
|
.set_fcn = _set_fcn_gobject_bool,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY),
|
.property_name = N_ (NM_SETTING_CONNECTION_AUTOCONNECT_PRIORITY),
|
||||||
.get_fcn = _get_fcn_gobject,
|
.get_fcn = _get_fcn_gobject,
|
||||||
|
.set_fcn = _set_fcn_gobject_int,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES),
|
.property_name = N_ (NM_SETTING_CONNECTION_AUTOCONNECT_RETRIES),
|
||||||
.get_fcn = _get_fcn_nmc,
|
.get_fcn = _get_fcn_nmc,
|
||||||
.get_data = { .get_nmc = nmc_property_connection_get_autoconnect_retries, },
|
.get_data = { .get_nmc = nmc_property_connection_get_autoconnect_retries, },
|
||||||
|
.set_fcn = _set_fcn_gobject_int,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_TIMESTAMP),
|
.property_name = N_ (NM_SETTING_CONNECTION_TIMESTAMP),
|
||||||
@@ -9897,41 +9952,51 @@ static const NmcPropertyInfo properties_setting_connection[] = {
|
|||||||
.property_name = N_ (NM_SETTING_CONNECTION_PERMISSIONS),
|
.property_name = N_ (NM_SETTING_CONNECTION_PERMISSIONS),
|
||||||
.get_fcn = _get_fcn_nmc,
|
.get_fcn = _get_fcn_nmc,
|
||||||
.get_data = { .get_nmc = nmc_property_connection_get_permissions, },
|
.get_data = { .get_nmc = nmc_property_connection_get_permissions, },
|
||||||
|
.set_fcn = _set_fcn_connection_permissions,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_ZONE),
|
.property_name = N_ (NM_SETTING_CONNECTION_ZONE),
|
||||||
.get_fcn = _get_fcn_gobject,
|
.get_fcn = _get_fcn_gobject,
|
||||||
|
.set_fcn = _set_fcn_gobject_string,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_MASTER),
|
.property_name = N_ (NM_SETTING_CONNECTION_MASTER),
|
||||||
.get_fcn = _get_fcn_gobject,
|
.get_fcn = _get_fcn_gobject,
|
||||||
|
.set_fcn = _set_fcn_connection_master,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_SLAVE_TYPE),
|
.property_name = N_ (NM_SETTING_CONNECTION_SLAVE_TYPE),
|
||||||
.get_fcn = _get_fcn_gobject,
|
.get_fcn = _get_fcn_gobject,
|
||||||
|
.set_fcn = _set_fcn_nmc,
|
||||||
|
.set_data = { .set_nmc = nmc_property_con_set_slave_type, },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES),
|
.property_name = N_ (NM_SETTING_CONNECTION_AUTOCONNECT_SLAVES),
|
||||||
.get_fcn = _get_fcn_nmc,
|
.get_fcn = _get_fcn_nmc,
|
||||||
.get_data = { .get_nmc = nmc_property_connection_get_autoconnect_slaves, },
|
.get_data = { .get_nmc = nmc_property_connection_get_autoconnect_slaves, },
|
||||||
|
.set_fcn = _set_fcn_gobject_trilean,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_SECONDARIES),
|
.property_name = N_ (NM_SETTING_CONNECTION_SECONDARIES),
|
||||||
.get_fcn = _get_fcn_gobject,
|
.get_fcn = _get_fcn_gobject,
|
||||||
|
.set_fcn = _set_fcn_connection_secondaries,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT),
|
.property_name = N_ (NM_SETTING_CONNECTION_GATEWAY_PING_TIMEOUT),
|
||||||
.get_fcn = _get_fcn_gobject,
|
.get_fcn = _get_fcn_gobject,
|
||||||
|
.set_fcn = _set_fcn_gobject_uint,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_METERED),
|
.property_name = N_ (NM_SETTING_CONNECTION_METERED),
|
||||||
.get_fcn = _get_fcn_nmc,
|
.get_fcn = _get_fcn_nmc,
|
||||||
.get_data = { .get_nmc = nmc_property_connection_get_metered, },
|
.get_data = { .get_nmc = nmc_property_connection_get_metered, },
|
||||||
|
.set_fcn = _set_fcn_connection_metered,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.property_name = N_ (NM_SETTING_CONNECTION_LLDP),
|
.property_name = N_ (NM_SETTING_CONNECTION_LLDP),
|
||||||
.get_fcn = _get_fcn_nmc,
|
.get_fcn = _get_fcn_nmc,
|
||||||
.get_data = { .get_nmc = nmc_property_connection_get_lldp, },
|
.get_data = { .get_nmc = nmc_property_connection_get_lldp, },
|
||||||
|
.set_fcn = _set_fcn_connection_lldp,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -52,6 +52,15 @@ struct _NmcPropertyInfo {
|
|||||||
const char *(*get_direct) (NMSetting *setting);
|
const char *(*get_direct) (NMSetting *setting);
|
||||||
char *(*get_nmc) (NMSetting *setting, NmcPropertyGetType get_type);
|
char *(*get_nmc) (NMSetting *setting, NmcPropertyGetType get_type);
|
||||||
} get_data;
|
} get_data;
|
||||||
|
|
||||||
|
gboolean (*set_fcn) (const NmcSettingInfo *setting_info,
|
||||||
|
const NmcPropertyInfo *property_info,
|
||||||
|
NMSetting *setting,
|
||||||
|
const char *value,
|
||||||
|
GError **error);
|
||||||
|
union {
|
||||||
|
gboolean (*set_nmc) (NMSetting *setting, const char *property_name, const char *value, GError **error);
|
||||||
|
} set_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _NmcSettingInfo {
|
struct _NmcSettingInfo {
|
||||||
|
Reference in New Issue
Block a user