cli: add 'remove' command to the interactive editor
remove <setting>[.property] | <property> It entirely removes given setting from edited connection. If a property is given, the command instead resets the property to its default value. https://bugzilla.gnome.org/show_bug.cgi?id=707576
This commit is contained in:
@@ -1740,169 +1740,170 @@ typedef struct NameItem {
|
|||||||
const char *name;
|
const char *name;
|
||||||
const char *alias;
|
const char *alias;
|
||||||
const struct NameItem *settings;
|
const struct NameItem *settings;
|
||||||
|
gboolean mandatory;
|
||||||
} NameItem;
|
} NameItem;
|
||||||
|
|
||||||
static const NameItem nmc_ethernet_settings [] = {
|
static const NameItem nmc_ethernet_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL },
|
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, TRUE },
|
||||||
{ NM_SETTING_802_1X_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_802_1X_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_infiniband_settings [] = {
|
static const NameItem nmc_infiniband_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_INFINIBAND_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_INFINIBAND_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_wifi_settings [] = {
|
static const NameItem nmc_wifi_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_WIRELESS_SETTING_NAME, "wifi", NULL },
|
{ NM_SETTING_WIRELESS_SETTING_NAME, "wifi", NULL, TRUE },
|
||||||
{ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, "wifi-sec", NULL },
|
{ NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, "wifi-sec", NULL, FALSE },
|
||||||
{ NM_SETTING_802_1X_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_802_1X_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_wimax_settings [] = {
|
static const NameItem nmc_wimax_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_WIMAX_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_WIMAX_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_gsm_settings [] = {
|
static const NameItem nmc_gsm_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_GSM_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_GSM_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_SERIAL_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_SERIAL_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_cdma_settings [] = {
|
static const NameItem nmc_cdma_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_CDMA_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CDMA_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_SERIAL_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_SERIAL_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_mobile_settings [] = {
|
static const NameItem nmc_mobile_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_SERIAL_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_SERIAL_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_PPP_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_PPP_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_GSM_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_GSM_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_CDMA_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CDMA_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_bluetooth_settings [] = {
|
static const NameItem nmc_bluetooth_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_BLUETOOTH_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_BLUETOOTH_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_adsl_settings [] = {
|
static const NameItem nmc_adsl_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_ADSL_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_ADSL_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_ppoe_settings [] = {
|
static const NameItem nmc_ppoe_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL },
|
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, FALSE },
|
||||||
{ NM_SETTING_PPPOE_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_PPPOE_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_PPP_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_PPP_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_olpc_mesh_settings [] = {
|
static const NameItem nmc_olpc_mesh_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_OLPC_MESH_SETTING_NAME, "olpc-mesh", NULL },
|
{ NM_SETTING_OLPC_MESH_SETTING_NAME, "olpc-mesh", NULL, TRUE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_vpn_settings [] = {
|
static const NameItem nmc_vpn_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_VPN_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_VPN_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_vlan_settings [] = {
|
static const NameItem nmc_vlan_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL },
|
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, FALSE },
|
||||||
{ NM_SETTING_VLAN_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_VLAN_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_bond_settings [] = {
|
static const NameItem nmc_bond_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_BOND_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_BOND_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL },
|
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, FALSE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_team_settings [] = {
|
static const NameItem nmc_team_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_TEAM_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_TEAM_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL },
|
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, FALSE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_bridge_settings [] = {
|
static const NameItem nmc_bridge_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_BRIDGE_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_BRIDGE_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL },
|
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, FALSE },
|
||||||
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP4_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_IP6_CONFIG_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_bond_slave_settings [] = {
|
static const NameItem nmc_bond_slave_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL },
|
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, TRUE },
|
||||||
{ NM_SETTING_802_1X_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_802_1X_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_team_slave_settings [] = {
|
static const NameItem nmc_team_slave_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL },
|
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, TRUE },
|
||||||
{ NM_SETTING_TEAM_PORT_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_TEAM_PORT_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_802_1X_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_802_1X_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NameItem nmc_bridge_slave_settings [] = {
|
static const NameItem nmc_bridge_slave_settings [] = {
|
||||||
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_CONNECTION_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_BRIDGE_PORT_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_BRIDGE_PORT_SETTING_NAME, NULL, NULL, TRUE },
|
||||||
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL },
|
{ NM_SETTING_WIRED_SETTING_NAME, "ethernet", NULL, TRUE },
|
||||||
{ NM_SETTING_802_1X_SETTING_NAME, NULL, NULL },
|
{ NM_SETTING_802_1X_SETTING_NAME, NULL, NULL, FALSE },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2053,6 +2054,29 @@ get_valid_settings_array (const char *con_type)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
is_setting_mandatory (NMConnection *connection, NMSetting *setting)
|
||||||
|
{
|
||||||
|
NMSettingConnection *s_con;
|
||||||
|
const char *c_type;
|
||||||
|
const NameItem *item;
|
||||||
|
const char *name;
|
||||||
|
|
||||||
|
s_con = nm_connection_get_setting_connection (connection);
|
||||||
|
g_assert (s_con);
|
||||||
|
c_type = nm_setting_connection_get_connection_type (s_con);
|
||||||
|
|
||||||
|
name = nm_setting_get_name (setting);
|
||||||
|
|
||||||
|
item = get_valid_settings_array (c_type);
|
||||||
|
while (item && item->name) {
|
||||||
|
if (!strcmp (name, item->name))
|
||||||
|
return item->mandatory;
|
||||||
|
item++;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@@ -4325,7 +4349,7 @@ gen_nmcli_cmds (char *text, int state, const char **commands)
|
|||||||
static char *
|
static char *
|
||||||
gen_nmcli_cmds_menu (char *text, int state)
|
gen_nmcli_cmds_menu (char *text, int state)
|
||||||
{
|
{
|
||||||
const char *commands[] = { "goto", "set", "describe", "print", "verify",
|
const char *commands[] = { "goto", "set", "remove", "describe", "print", "verify",
|
||||||
"save", "back", "help", "quit", "nmcli",
|
"save", "back", "help", "quit", "nmcli",
|
||||||
NULL };
|
NULL };
|
||||||
return gen_nmcli_cmds (text, state, commands);
|
return gen_nmcli_cmds (text, state, commands);
|
||||||
@@ -4545,6 +4569,7 @@ nmcli_editor_tab_completion (char *text, int start, int end)
|
|||||||
else
|
else
|
||||||
generator_func = gen_property_names;
|
generator_func = gen_property_names;
|
||||||
} else if ( should_complete_cmd (line, "set ")
|
} else if ( should_complete_cmd (line, "set ")
|
||||||
|
|| should_complete_cmd (line, "remove ")
|
||||||
|| should_complete_cmd (line, "describe ")) {
|
|| should_complete_cmd (line, "describe ")) {
|
||||||
if (level == 0 && !strchr (line, '.')) {
|
if (level == 0 && !strchr (line, '.')) {
|
||||||
generator_func = gen_setting_names;
|
generator_func = gen_setting_names;
|
||||||
@@ -4793,6 +4818,7 @@ editor_show_setting (NMSetting *setting, NmCli *nmc)
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
NMC_EDITOR_MAIN_CMD_UNKNOWN = 0,
|
NMC_EDITOR_MAIN_CMD_UNKNOWN = 0,
|
||||||
NMC_EDITOR_MAIN_CMD_GOTO,
|
NMC_EDITOR_MAIN_CMD_GOTO,
|
||||||
|
NMC_EDITOR_MAIN_CMD_REMOVE,
|
||||||
NMC_EDITOR_MAIN_CMD_SET,
|
NMC_EDITOR_MAIN_CMD_SET,
|
||||||
NMC_EDITOR_MAIN_CMD_DESCRIBE,
|
NMC_EDITOR_MAIN_CMD_DESCRIBE,
|
||||||
NMC_EDITOR_MAIN_CMD_PRINT,
|
NMC_EDITOR_MAIN_CMD_PRINT,
|
||||||
@@ -4819,6 +4845,8 @@ parse_editor_main_cmd (const char *cmd, char **cmd_arg)
|
|||||||
|
|
||||||
if (matches (vec[0], "goto") == 0)
|
if (matches (vec[0], "goto") == 0)
|
||||||
editor_cmd = NMC_EDITOR_MAIN_CMD_GOTO;
|
editor_cmd = NMC_EDITOR_MAIN_CMD_GOTO;
|
||||||
|
else if (matches (vec[0], "remove") == 0)
|
||||||
|
editor_cmd = NMC_EDITOR_MAIN_CMD_REMOVE;
|
||||||
else if (matches (vec[0], "set") == 0)
|
else if (matches (vec[0], "set") == 0)
|
||||||
editor_cmd = NMC_EDITOR_MAIN_CMD_SET;
|
editor_cmd = NMC_EDITOR_MAIN_CMD_SET;
|
||||||
else if (matches (vec[0], "describe") == 0)
|
else if (matches (vec[0], "describe") == 0)
|
||||||
@@ -4855,6 +4883,7 @@ editor_main_usage (void)
|
|||||||
*/
|
*/
|
||||||
printf (_("---[ Main menu ]---\n"
|
printf (_("---[ Main menu ]---\n"
|
||||||
"goto [<setting> | <prop>] :: go to a setting or property\n"
|
"goto [<setting> | <prop>] :: go to a setting or property\n"
|
||||||
|
"remove <setting>[.<prop>] | <prop> :: remove setting or reset property value\n"
|
||||||
"set [<setting>.<prop> <value>] :: set property value\n"
|
"set [<setting>.<prop> <value>] :: set property value\n"
|
||||||
"describe [<setting>.<prop>] :: describe property\n"
|
"describe [<setting>.<prop>] :: describe property\n"
|
||||||
"print [all] :: print the connection\n"
|
"print [all] :: print the connection\n"
|
||||||
@@ -4884,6 +4913,13 @@ editor_main_help (const char *command)
|
|||||||
" nmcli connection> goto secondaries\n"
|
" nmcli connection> goto secondaries\n"
|
||||||
" nmcli> goto ipv4.addresses\n"));
|
" nmcli> goto ipv4.addresses\n"));
|
||||||
break;
|
break;
|
||||||
|
case NMC_EDITOR_MAIN_CMD_REMOVE:
|
||||||
|
printf (_("remove <setting>[.<prop>] :: remove setting or reset property value\n\n"
|
||||||
|
"This command removes an entire setting from the connection, or if a property\n"
|
||||||
|
"is given, resets that property to the default value.\n\n"
|
||||||
|
"Examples: nmcli> remove wifi-sec\n"
|
||||||
|
" nmcli> remove eth.mtu\n"));
|
||||||
|
break;
|
||||||
case NMC_EDITOR_MAIN_CMD_SET:
|
case NMC_EDITOR_MAIN_CMD_SET:
|
||||||
printf (_("set [<setting>.<prop> <value>] :: set property value\n\n"
|
printf (_("set [<setting>.<prop> <value>] :: set property value\n\n"
|
||||||
"This command sets property value.\n\n"
|
"This command sets property value.\n\n"
|
||||||
@@ -5142,6 +5178,21 @@ print_setting_description (NMSetting *setting)
|
|||||||
g_strfreev (all_props);
|
g_strfreev (all_props);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
connection_remove_setting (NMConnection *connection, NMSetting *setting)
|
||||||
|
{
|
||||||
|
gboolean mandatory;
|
||||||
|
|
||||||
|
mandatory = is_setting_mandatory (connection, setting);
|
||||||
|
if (!mandatory) {
|
||||||
|
nm_connection_remove_setting (connection, G_OBJECT_TYPE (setting));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
printf (_("Error: setting '%s' is mandatory and cannot be removed.\n"),
|
||||||
|
nm_setting_get_name (setting));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
editor_show_status_line (NMConnection *connection, gboolean dirty)
|
editor_show_status_line (NMConnection *connection, gboolean dirty)
|
||||||
{
|
{
|
||||||
@@ -5720,6 +5771,79 @@ editor_menu_main (NmCli *nmc, NMConnection *connection, const char *connection_t
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NMC_EDITOR_MAIN_CMD_REMOVE:
|
||||||
|
/* Remove setting from connection, or delete value of a property */
|
||||||
|
if (!cmd_arg) {
|
||||||
|
if (menu_ctx.level == 1) {
|
||||||
|
const char *prop_name;
|
||||||
|
|
||||||
|
prop_name = ask_check_property (cmd_arg,
|
||||||
|
(const char **) menu_ctx.valid_props,
|
||||||
|
menu_ctx.valid_props_str);
|
||||||
|
if (!prop_name)
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Delete property value */
|
||||||
|
nmc_property_set_default_value (menu_ctx.curr_setting, prop_name);
|
||||||
|
} else
|
||||||
|
printf (_("Error: no argument given; valid are [%s]\n"), valid_settings_str);
|
||||||
|
} else {
|
||||||
|
NMSetting *ss = NULL;
|
||||||
|
gboolean descr_all;
|
||||||
|
char *user_s;
|
||||||
|
|
||||||
|
/* cmd_arg_s != NULL means argument is "setting.property" */
|
||||||
|
descr_all = !cmd_arg_s && !menu_ctx.curr_setting;
|
||||||
|
user_s = descr_all ? cmd_arg_p : cmd_arg_s ? cmd_arg_s : NULL;
|
||||||
|
if (user_s) {
|
||||||
|
ss = is_setting_valid (connection, valid_settings_arr, user_s);
|
||||||
|
if (!ss) {
|
||||||
|
if (check_valid_name (user_s, valid_settings_arr, NULL))
|
||||||
|
printf (_("Setting '%s' is not present in the connection.\n"), user_s);
|
||||||
|
else
|
||||||
|
printf (_("Error: invalid setting argument '%s'; valid are [%s]\n"),
|
||||||
|
user_s, valid_settings_str);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
ss = menu_ctx.curr_setting;
|
||||||
|
|
||||||
|
if (descr_all) {
|
||||||
|
/* Remove setting from the connection */
|
||||||
|
connection_remove_setting (connection, ss);
|
||||||
|
if (ss == menu_ctx.curr_setting) {
|
||||||
|
/* If we removed the setting we are in, go up */
|
||||||
|
menu_switch_to_level0 (&menu_ctx, BASE_PROMPT, nmc->editor_prompt_color);
|
||||||
|
nmc_completion_setting = NULL; /* for TAB completion */
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
GError *tmp_err = NULL;
|
||||||
|
char *prop_name = is_property_valid (ss, cmd_arg_p, &tmp_err);
|
||||||
|
if (prop_name) {
|
||||||
|
/* Delete property value */
|
||||||
|
nmc_property_set_default_value (ss, prop_name);
|
||||||
|
} else {
|
||||||
|
/* If the string is not a property, try it as a setting */
|
||||||
|
NMSetting *s_tmp;
|
||||||
|
s_tmp = is_setting_valid (connection, valid_settings_arr, cmd_arg_p);
|
||||||
|
if (s_tmp) {
|
||||||
|
/* Remove setting from the connection */
|
||||||
|
connection_remove_setting (connection, s_tmp);
|
||||||
|
if (ss == menu_ctx.curr_setting) {
|
||||||
|
/* If we removed the setting we are in, go up */
|
||||||
|
menu_switch_to_level0 (&menu_ctx, BASE_PROMPT, nmc->editor_prompt_color);
|
||||||
|
nmc_completion_setting = NULL; /* for TAB completion */
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
printf (_("Error: %s properties, nor it is a setting name.\n"),
|
||||||
|
tmp_err->message);
|
||||||
|
g_clear_error (&tmp_err);
|
||||||
|
}
|
||||||
|
g_free (prop_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case NMC_EDITOR_MAIN_CMD_DESCRIBE:
|
case NMC_EDITOR_MAIN_CMD_DESCRIBE:
|
||||||
/* Print property description */
|
/* Print property description */
|
||||||
if (!cmd_arg) {
|
if (!cmd_arg) {
|
||||||
|
Reference in New Issue
Block a user