diff options
Diffstat (limited to 'clients/cli/connections.c')
| -rw-r--r-- | clients/cli/connections.c | 225 |
1 files changed, 113 insertions, 112 deletions
diff --git a/clients/cli/connections.c b/clients/cli/connections.c index 3714485a..ee7b8fbb 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -1,9 +1,9 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ +/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (C) 2010 - 2018 Red Hat, Inc. */ -#include "nm-default.h" +#include "libnm/nm-default-client.h" #include "connections.h" @@ -11,7 +11,6 @@ #include <stdlib.h> #include <unistd.h> #include <signal.h> -#include <netinet/ether.h> #include <readline/readline.h> #include <readline/history.h> #include <fcntl.h> @@ -858,30 +857,31 @@ const NmcMetaGenericInfo /*****************************************************************************/ -#define NMC_FIELDS_SETTINGS_NAMES_ALL \ - NM_SETTING_CONNECTION_SETTING_NAME \ - "," NM_SETTING_MATCH_SETTING_NAME "," NM_SETTING_WIRED_SETTING_NAME \ - "," NM_SETTING_802_1X_SETTING_NAME "," NM_SETTING_WIRELESS_SETTING_NAME \ - "," NM_SETTING_WIRELESS_SECURITY_SETTING_NAME "," NM_SETTING_IP4_CONFIG_SETTING_NAME \ - "," NM_SETTING_IP6_CONFIG_SETTING_NAME "," NM_SETTING_SERIAL_SETTING_NAME \ - "," NM_SETTING_WIFI_P2P_SETTING_NAME "," NM_SETTING_PPP_SETTING_NAME \ - "," NM_SETTING_PPPOE_SETTING_NAME "," NM_SETTING_ADSL_SETTING_NAME \ - "," NM_SETTING_GSM_SETTING_NAME "," NM_SETTING_CDMA_SETTING_NAME \ - "," NM_SETTING_BLUETOOTH_SETTING_NAME "," NM_SETTING_OLPC_MESH_SETTING_NAME \ - "," NM_SETTING_VPN_SETTING_NAME "," NM_SETTING_INFINIBAND_SETTING_NAME \ - "," NM_SETTING_BOND_SETTING_NAME "," NM_SETTING_VLAN_SETTING_NAME \ - "," NM_SETTING_BRIDGE_SETTING_NAME "," NM_SETTING_BRIDGE_PORT_SETTING_NAME \ - "," NM_SETTING_TEAM_SETTING_NAME "," NM_SETTING_TEAM_PORT_SETTING_NAME \ - "," NM_SETTING_OVS_BRIDGE_SETTING_NAME "," NM_SETTING_OVS_INTERFACE_SETTING_NAME \ - "," NM_SETTING_OVS_PATCH_SETTING_NAME "," NM_SETTING_OVS_PORT_SETTING_NAME \ - "," NM_SETTING_DCB_SETTING_NAME "," NM_SETTING_TUN_SETTING_NAME \ - "," NM_SETTING_IP_TUNNEL_SETTING_NAME "," NM_SETTING_MACSEC_SETTING_NAME \ - "," NM_SETTING_MACVLAN_SETTING_NAME "," NM_SETTING_VXLAN_SETTING_NAME \ - "," NM_SETTING_VRF_SETTING_NAME "," NM_SETTING_WPAN_SETTING_NAME \ - "," NM_SETTING_6LOWPAN_SETTING_NAME "," NM_SETTING_WIREGUARD_SETTING_NAME \ - "," NM_SETTING_PROXY_SETTING_NAME "," NM_SETTING_TC_CONFIG_SETTING_NAME \ - "," NM_SETTING_SRIOV_SETTING_NAME "," NM_SETTING_ETHTOOL_SETTING_NAME \ - "," NM_SETTING_OVS_DPDK_SETTING_NAME /* NM_SETTING_DUMMY_SETTING_NAME NM_SETTING_WIMAX_SETTING_NAME */ +#define NMC_FIELDS_SETTINGS_NAMES_ALL \ + NM_SETTING_CONNECTION_SETTING_NAME \ + "," NM_SETTING_MATCH_SETTING_NAME "," NM_SETTING_WIRED_SETTING_NAME \ + "," NM_SETTING_VETH_SETTING_NAME "," NM_SETTING_802_1X_SETTING_NAME \ + "," NM_SETTING_WIRELESS_SETTING_NAME "," NM_SETTING_WIRELESS_SECURITY_SETTING_NAME \ + "," NM_SETTING_IP4_CONFIG_SETTING_NAME "," NM_SETTING_IP6_CONFIG_SETTING_NAME \ + "," NM_SETTING_SERIAL_SETTING_NAME "," NM_SETTING_WIFI_P2P_SETTING_NAME \ + "," NM_SETTING_PPP_SETTING_NAME "," NM_SETTING_PPPOE_SETTING_NAME \ + "," NM_SETTING_ADSL_SETTING_NAME "," NM_SETTING_GSM_SETTING_NAME \ + "," NM_SETTING_CDMA_SETTING_NAME "," NM_SETTING_BLUETOOTH_SETTING_NAME \ + "," NM_SETTING_OLPC_MESH_SETTING_NAME "," NM_SETTING_VPN_SETTING_NAME \ + "," NM_SETTING_INFINIBAND_SETTING_NAME "," NM_SETTING_BOND_SETTING_NAME \ + "," NM_SETTING_VLAN_SETTING_NAME "," NM_SETTING_BRIDGE_SETTING_NAME \ + "," NM_SETTING_BRIDGE_PORT_SETTING_NAME "," NM_SETTING_TEAM_SETTING_NAME \ + "," NM_SETTING_TEAM_PORT_SETTING_NAME "," NM_SETTING_OVS_BRIDGE_SETTING_NAME \ + "," NM_SETTING_OVS_INTERFACE_SETTING_NAME "," NM_SETTING_OVS_PATCH_SETTING_NAME \ + "," NM_SETTING_OVS_PORT_SETTING_NAME "," NM_SETTING_DCB_SETTING_NAME \ + "," NM_SETTING_TUN_SETTING_NAME "," NM_SETTING_IP_TUNNEL_SETTING_NAME \ + "," NM_SETTING_MACSEC_SETTING_NAME "," NM_SETTING_MACVLAN_SETTING_NAME \ + "," NM_SETTING_VXLAN_SETTING_NAME "," NM_SETTING_VRF_SETTING_NAME \ + "," NM_SETTING_WPAN_SETTING_NAME "," NM_SETTING_6LOWPAN_SETTING_NAME \ + "," NM_SETTING_WIREGUARD_SETTING_NAME "," NM_SETTING_PROXY_SETTING_NAME \ + "," NM_SETTING_TC_CONFIG_SETTING_NAME "," NM_SETTING_SRIOV_SETTING_NAME \ + "," NM_SETTING_ETHTOOL_SETTING_NAME "," NM_SETTING_OVS_DPDK_SETTING_NAME \ + "," NM_SETTING_HOSTNAME_SETTING_NAME /* NM_SETTING_DUMMY_SETTING_NAME NM_SETTING_WIMAX_SETTING_NAME */ const NmcMetaGenericInfo *const nmc_fields_con_active_details_groups[] = { NMC_META_GENERIC_WITH_NESTED("GENERAL", metagen_con_active_general), /* 0 */ @@ -1102,7 +1102,7 @@ usage_connection_add(void) " mode vepa|bridge|private|passthru|source\n" " [tap yes|no]\n\n" " vxlan: id <VXLAN ID>\n" - " remote <IP of multicast group or remote address>\n" + " [remote <IP of multicast group or remote address>]\n" " [local <source IP>]\n" " [dev <parent device (ifname or connection UUID)>]\n" " [source-port-min <0-65535>]\n" @@ -4957,6 +4957,10 @@ nmc_process_connection_properties(NmCli * nmc, const char * option; const char * value = NULL; const char * tmp; + const NMMetaAbstractInfo * chosen = NULL; + const char * chosen_setting_name = NULL; + const char * chosen_option = NULL; + NMMetaSettingType s; if (!con_settings(connection, &type_settings, &slv_settings, error)) return FALSE; @@ -5020,25 +5024,24 @@ nmc_process_connection_properties(NmCli * nmc, ss = is_setting_valid(connection, type_settings, slv_settings, setting_name); if (!ss) { - if (check_valid_name(setting_name, type_settings, slv_settings, NULL)) { - g_set_error(error, - NMCLI_ERROR, - NMC_RESULT_ERROR_USER_INPUT, - _("Setting '%s' is not present in the connection."), - setting_name); - } else { + if (!check_valid_name(setting_name, type_settings, slv_settings, NULL)) { g_set_error(error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT, _("Error: invalid setting argument '%s'."), setting_name); + return FALSE; } - return FALSE; + continue; } if (!connection_remove_setting(connection, ss, error)) return FALSE; - } else if ((tmp = strchr(option, '.'))) { + + continue; + } + + if ((tmp = strchr(option, '.'))) { gs_free char *option_sett = g_strndup(option, tmp - option); const char * option_prop = &tmp[1]; const char * option_sett_expanded; @@ -5081,58 +5084,35 @@ nmc_process_connection_properties(NmCli * nmc, modifier, error)) return FALSE; - } else { - const NMMetaAbstractInfo *chosen = NULL; - const char * chosen_setting_name = NULL; - const char * chosen_option = NULL; - NMMetaSettingType s; - - /* Let's see if this is an property alias (such as "id", "mode", "type" or "con-name")*/ - for (s = 0; s < _NM_META_SETTING_TYPE_NUM; s++) { - const NMMetaPropertyInfo *const *property_infos; - guint p; - - if (!check_valid_name(nm_meta_setting_infos[s].setting_name, - type_settings, - slv_settings, - NULL)) - continue; - property_infos = nm_meta_setting_infos_editor[s].properties; - if (!property_infos) - continue; - for (p = 0; property_infos[p]; p++) { - const NMMetaPropertyInfo *property_info = property_infos[p]; - - if (_meta_property_needs_bond_hack(property_info)) { - guint i; - - for (i = 0; i < nm_meta_property_typ_data_bond.nested_len; i++) { - const NMMetaNestedPropertyInfo *bi = - &nm_meta_property_typ_data_bond.nested[i]; - - if (!nm_streq0(bi->base.property_alias, option)) - continue; - if (chosen) { - g_set_error(error, - NMCLI_ERROR, - NMC_RESULT_ERROR_USER_INPUT, - _("Error: '%s' is ambiguous (%s.%s or %s.%s)."), - option, - chosen_setting_name, - chosen_option, - nm_meta_setting_infos[s].setting_name, - option); - return FALSE; - } - chosen_setting_name = nm_meta_setting_infos[s].setting_name; - chosen_option = option; - chosen = (const NMMetaAbstractInfo *) bi; - } - } else { - if (!property_info->is_cli_option) - continue; - if (!nm_streq0(property_info->property_alias, option)) + continue; + } + + /* Let's see if this is an property alias (such as "id", "mode", "type" or "con-name")*/ + for (s = 0; s < _NM_META_SETTING_TYPE_NUM; s++) { + const NMMetaPropertyInfo *const *property_infos; + guint p; + + if (!check_valid_name(nm_meta_setting_infos[s].setting_name, + type_settings, + slv_settings, + NULL)) + continue; + + property_infos = nm_meta_setting_infos_editor[s].properties; + if (!property_infos) + continue; + for (p = 0; property_infos[p]; p++) { + const NMMetaPropertyInfo *property_info = property_infos[p]; + + if (_meta_property_needs_bond_hack(property_info)) { + guint i; + + for (i = 0; i < nm_meta_property_typ_data_bond.nested_len; i++) { + const NMMetaNestedPropertyInfo *bi = + &nm_meta_property_typ_data_bond.nested[i]; + + if (!nm_streq0(bi->base.property_alias, option)) continue; if (chosen) { g_set_error(error, @@ -5148,39 +5128,60 @@ nmc_process_connection_properties(NmCli * nmc, } chosen_setting_name = nm_meta_setting_infos[s].setting_name; chosen_option = option; - chosen = (const NMMetaAbstractInfo *) property_info; + chosen = (const NMMetaAbstractInfo *) bi; } + } else { + if (!property_info->is_cli_option) + continue; + if (!nm_streq0(property_info->property_alias, option)) + continue; + if (chosen) { + g_set_error(error, + NMCLI_ERROR, + NMC_RESULT_ERROR_USER_INPUT, + _("Error: '%s' is ambiguous (%s.%s or %s.%s)."), + option, + chosen_setting_name, + chosen_option, + nm_meta_setting_infos[s].setting_name, + option); + return FALSE; + } + chosen_setting_name = nm_meta_setting_infos[s].setting_name; + chosen_option = option; + chosen = (const NMMetaAbstractInfo *) property_info; } } + } - if (!chosen) { - if (*argc == 1 && nmc->complete) { - if (allow_setting_removal && g_str_has_prefix("remove", option)) - g_print("remove\n"); - complete_property_name(nmc, connection, modifier, option, NULL); - } - g_set_error(error, - NMCLI_ERROR, - NMC_RESULT_ERROR_USER_INPUT, - _("Error: invalid <setting>.<property> '%s'."), - option); - return FALSE; + if (!chosen) { + if (*argc == 1 && nmc->complete) { + if (allow_setting_removal && g_str_has_prefix("remove", option)) + g_print("remove\n"); + complete_property_name(nmc, connection, modifier, option, NULL); } + g_set_error(error, + NMCLI_ERROR, + NMC_RESULT_ERROR_USER_INPUT, + _("Error: invalid <setting>.<property> '%s'."), + option); + return FALSE; + } - if (*argc == 1 && nmc->complete) - complete_property_name(nmc, connection, modifier, option, NULL); + if (*argc == 1 && nmc->complete) + complete_property_name(nmc, connection, modifier, option, NULL); - (*argc)--; - (*argv)++; - if (!get_value(&value, argc, argv, option_orig, error)) - return FALSE; + (*argc)--; + (*argv)++; + if (!get_value(&value, argc, argv, option_orig, error)) + return FALSE; - if (!*argc && nmc->complete) - complete_option(nmc, chosen, value ?: "", connection); + if (!*argc && nmc->complete) + complete_option(nmc, chosen, value ?: "", connection); + + if (!set_option(nmc, connection, chosen, value, error)) + return FALSE; - if (!set_option(nmc, connection, chosen, value, error)) - return FALSE; - } } while (*argc); return TRUE; |